三、使用chatglm-6B进行训练和微调(一)
ChatGLM-6B 是一个开放的双语(中英)语言模型,拥有 62 亿个参数。它基于通用语言模型 (GLM) 架构针对中文对话进行了优化。GLM 是一个预训练框架,旨在结合自动编码器模型(如 BERT)和自回归模型(如 GPT)的优势。GLM 框架会从输入文本中随机删除连续的标记跨度(自动编码方法),并训练模型按顺序重建跨度(自回归预训练方法)。ChatGLM-6B 是在 1 万亿个 token 上进行训练的,内容包括中文和英文。训练数据中英文与中文的确切比例可能因模型的具体版本而异。尽管如此,ChatGLM 的作者表示,它专门针对中文问答和对话进行了优化。由于参数数量相对较少,您可以在消费级显卡上本地试用。但是,为了在生产中实现更好的延迟和吞吐量,我们建议在性能更高的显卡上部署此模型。
查找论文GLM 架构,包括如何对采样的文本跨度进行打乱和屏蔽,有关这方面的更多信息。
下图(从高层次)展示了如何基于自回归预训练来训练 ChatGLM。下图更详细地展示了 GLM 架构,包括如何对采样的文本跨度进行打乱和屏蔽。
这篇文章提出了一种基于自回归空白填充的预训练框架,名为 GLM(通用语言模型)。按照自动编码的思想,从输入文本中随机删除连续的标记跨度,并按照自回归预训练的思想训练模型以顺序重建跨度。相比于使用空白填充进行文本到文本的预训练,作者提出了两项改进,即跨度改组和2D位置编码。
图 2 说明了 GLM 的实现。GLM 使用单个 Transformer,并对架构进行了几项修改:(1) 重新排列了层规范化和残差连接的顺序,这对于大规模语言模型避免数值错误至关重要;(2) 我们使用单个线性层进行输出标记预测;(3) 用 GeLU 替换ReLU。
2D Positional Encoding
自回归空白填充任务的挑战之一是如何对位置信息进行编码。Transformer 依靠位置编码来注入 token 的绝对位置和相对位置。我们提出 2D 位置编码来应对这一挑战。具体来说,每个 token 都用两个位置 id 进行编码。第一个位置 id 表示损坏文本 xcorrupt 中的位置。对于掩码跨度,它是相应 [MASK] token 的位置。第二个位置 id 表示跨度内位置。对于 A 部分中的 token,它们的第二个位置 id 为 0。对于 B 部分中的 token,它们的范围从 1 到跨度的长度。两个位置 id 通过可学习的嵌入表投影到两个向量中,这两个向量都添加到输入 token 嵌入中。我们的编码方法确保模型在重建它们时不知道掩码跨度的长度。设计适合下游任务,因为通常生成的文本的长度是事先未知的。