ChatGLM是清华系的第一个大语言模型,主要特点与其中文名称一样,是一个’通用‘语言模型,能够处理文本生成、语言理解以及序列到序列等任务。
本文会描述关键技术与笔者感兴趣的东西,所以欢迎各位补充。
一、GLM 创立动机
GLM之间的3大主流模型架构:
1. 自回归模型(AutoRegressive),是一类生成式+单向的语言模型,它将序列数据的生成/预测建模为一个逐步预测每个元素的条件概率的过程。在每个时间步,模型根据之前生成的元素预测当前元素的概率分布(单向推理和预测)。
典型的自回归模型是 OpenAI的GPT系列,擅长‘无条件的生成式任务’。
2. 自编码模型(AutoEncoding),是一类双向的语言模型,可以用于学习输入数据的特征表示(有限长度的张量 or 矩阵,包含丰富信息)。一般由一个编码器和一个解码器组成,通过编码器将输入数据转换为一个固定大小的向量表示,然后通过解码器从这个编码中重建原始输入数据。自编码模型的目标是尽可能减少输入数据与重建数据之间的差异,从而学习到输入数据的有效特征表示。
典型的自回归模型是BERT系列,但需要注意的是,BERT主体仍然是使用了双向注意力机制的Transformer编码器,在某些应用场景下可以结合解码器使用。擅长‘自然语言理解类的任务’。
3. 编码器-解码器模型(encoder-decoder),是一类用于序列到序列的语言模型,包含完整的编码器和解码器。使用该类模型实现的任务可以在不同长度的输入和输出序列之间进行转换,例如机器翻译和文本摘要。
典型的模型是T5,采用双向注意力机制,通常用于‘条件生成任务’。
上述3类模型各有侧重,那么构建一个通用的模型就成了论文的主要动力。
二、预训练方式/目标 Autoregressive Blank Infilling
想要实现一个通用的大语言模型,必然需要设计一个能够支持这些功能的预训练任务,这就是Autoregressive Blank Infilling,自回归空白填充。下文中统一记做ABI。
2.1 具体步骤
1. 给定输入 X = [x1, x2, x3, x3, x5, x6],然后根据策略采样 m 个 片段。
2. 将选择掩码的片段 [x3], [x5, x6] 进行MASK,得到 Part A,表示损坏后的文本
3. 将选择掩码的片段抽取出,并且随机排序 / shuffle,得到 Part B,表示被掩盖、需要填充的文本
4. 将 PartA 与 PartB 拼接成一个sequence,Part A部分采用双向注意力,PartB部分采样自回归预测。为了能够提示模型自回归生成,输入端在每个掩码部分的头部填充标签 [start];输出端标签填充 [end]。
2.2 步骤中的具体细节补充
1. 采样方式:需要掩码的片段,采样方式遵循泊松分布,重复采样,直到原始tokens中有15%被覆盖。
2. 掩码片段shuffle的作用:捕捉不同片段之间的上下文依赖关系
3. 在Part A中,字符之间能够相互注意,但是不能注意到Part B中的字符
4. 在Part B中,字符能够注意到Part A中的字符,也能够注意到在Part B中并且在当前字符之前的字符,但是不能注意到Part B中之后的字符
三、预训练目标
基于ABI,设置了三种预训练目标,一种针对自然语言理解任务,两种针对文本生成任务。
针对自然语言理解任务:
1. token level object:从一个均值为3的泊松分布中采样片段的长度,直到原始文本中15%的字符被掩盖,最后在文本中随机摆放填空片段的位置。
针对文本生成任务(两种):
2. document level object:主要针对无条件的长文本生成任务,采样一个且仅有一个文本片段,片段长度服从原始文本长度50%到100%的均匀分布。
3. sentence level object:主要针对有条件文本生成任务,常见输出位句子或者段落。论文限制被采样、mask的片段必须是完整的句子,采样多个句子直到覆盖原始文本的15%字符。
注:多次出现的15%,也出现在Bert和T5中,实际上这是一个实验后的结果,15%的掩码比例效果好
多种任务交替进行训练,实现自编码和自回归的统一。
四、二维位置编码
第一个位置ID表示在整个损坏后的文本中的位置,对于被掩盖的段落,对应的ID是相应 [MASK] 标记的位置。
第二个位置ID表示字符在被掩码片段中的位置(相对位置)。
最后,通过可学习的嵌入表将两个位置加到输入token向量上。
补充:在BERT和Transformer中使用的都是‘正弦余弦位置编码’;而像RoFormer、LLama和后续的GLM使用的是‘旋转位置编码’。
五、特色与思考
1. 相对于T5,T5总是按照固定的顺序(从左到右)来预测,而GLM会随机打乱片段的顺序来完整捕捉片段之间的依赖关系。
2. 大语言模型数据、数据质量和模型参数是主要影响因此,在GLM中就训练了不同参数大小的模型,并做了相关实验。
附上两张从别人博客抄来的图,博客链接在最后。
资料链接: