您现在的位置是:首页 >技术教程 >GLM论文精读-自回归填空的通用语言模型网站首页技术教程
GLM论文精读-自回归填空的通用语言模型
GLM作为ChatGLM的前期基础论文,值得精读。本文是对GLM论文的精读笔记,希望对大家有帮助。GLM主要思想概述,利用自回归填空的思想,基于transformer的编码器实现了同时在NLU和有无条件生成任务上较好的表现。
基本信息
原文:GLM: General Language Model Pretraining with Autoregressive Blank Infilling ,ACL2022,
论文地址:https://aclanthology.org/2022.acl-long.26.pdf
代码:GitHub - THUDM/GLM: GLM (General Language Model)
目录
背景
时下主流预训练框架分为3种
-
autoencoding自编码模型
-
通过去噪目标学习双向上下文编码器,例如掩码语言模型 (MLM) 。 擅长自然语言理解NLU任务,常用于生成句子的上下文表示,但是不能直接用于文本生成。如情感分类、抽取式问答
-
代表模型如Bert、RoBERTa、ALBERT
-
-
autoregressive自回归模型
-
学习从左到右的语言模型,常用于无条件生成任务(unconditional generation),如语言建模,具体形如给定一段context,让生成其下文
-
代表模型如:GPT、GPT-2、GPT-3
-
-
encoder-decoder模型
-
常用于条件生成任务(conditional generation),比如生成摘要、生成式问答、机器翻译
-
代表模型MASS、BART、PALM
-
自然语言任务三类
-
自然语言理解NLU,包括情感分类、抽取式问答、自然语言推理等
-
无条件生成,如语言建模
-
条件生成(seq2seq),如摘要、生成式问答、机器翻译
Bert、GPT、T5的区别对比
-
BERT的注意力是双向的,可以同时感知上文和下文,因此在自然语言理解任务上表现很好,但是不适合生成任务。训练目标上,BERT的训练目标是对文本进行随机掩码,然后预测被掩码的词。
-
GPT的注意力是单向的,所以无法利用到下文的信息。训练目标上,GPT的训练目标是从左到右的文本生成。
-
T5的编码器中的注意力是双向,解码器中的注意力是单向的,因此可同时应用于自然语言理解任务和生成任务。但T5为了达到和RoBERTa和DeBERTa相似的性能,往往需要更多的参数量。训练目标上,T5则是接受一段文本,从左到右的生成另一段文本。
GLM要做的事情就是用一个模型来同时完成这三种自然处理任务并且具备较好的表现。
GLM架构
主要思路:
利用自回归填空的思想,基于transformer的编码器实现了同时在NLU和有无条件生成任务上较好的表现。处理思路包括:对于输入文本中随机地空白/删除连续的标记跨度,并按照自回归预训练的思想来训练模型来依次重建这些跨度;不同于T5的空白填充,提出了两项改进,包括跨度打乱和2D位置编码(span shuffling and 2D positional encoding),具体为:不同的跨度的顺序是打乱的;2D位置编码包括了token在原始句子中的位置和token在跨度中的位置。
【注】此处虽然论文中有写"single Transformer" ,但经过多方确认用的是Transformer的编码器而不是整个Transformer,详细参考了作者在B站的视频中5min左右的讲解。(论文中3.4 Ablation Study的最后一段也有提及“(1) GLM consists of a single encoder”) .
模型具体处理
自回归空格填充任务
-
文本原始输入: x1, x2,x3,x4,x5,x6
-
随机筛选部分跨度的token 进行mask,原句子中的位置用mask表示
-
筛选跨度长度的方式是使用lambda为3的泊松分布进行抽样
-
PartA 部分:x1,x2,M,x4,M ,其中M表示mask的跨度
-
-
对挑选出的跨度token进行随机排序,跨度的起始位置加入tokens
-
PartB 部分: S,x5,x6,S,x3
-
-
拼接PartA 和PartB作为输入
-
x1,x2,M,x4,M,S,x5,x6,S,x3
-
-
字符的2D位置编码
-
位置1: 表示token在原始句子中的位置
-
位置2:表示token在跨度中的位置,0表示不在跨度中,不同的跨度spans中的token会重新计数
-
模型基本单元
-
self-attention mask
-
PartA部分内的各token可以互相注意到
-
PartB部分内的tokens可以注意到PartA和PartB中已经生成的token
-
single Transformer ,用的是Transformer的编码器。
-
重新调整了LN和残差连接的顺序
-
对于token的预测输出用的是单个的线性层
-
将激活函数由ReLU调整为了GeLUs
-
-
-
自回归的方式生成预测PartB部分的跨度的token
-
x5,x6E,x3,E
-
token E表示跨度结束
-
预训练目标的数学逻辑
-
自回归填空Pretaining objective
-
Probability of generating the span Si
三类预训练目标
针对三类下游任务设计了三种基于自回归填空的预训练目标,交替进行
-
token-level objective
-
从一个均值为3的泊松分布中采样片段的长度,直到原始文本中15%的字符被掩盖,然后在文本中随机排布填空片段的位置。这一目标针对的是自然语言理解任务
-
-
sentence-level objective 句子级
-
从文档中随机掩码若干文本片段,每个文本片段必须为完整的句子,被掩码的词数量为整个文档长度的15%。这一目标是能针对seq2seq任务,其预测往往是完整的整个句子或者段落。
-
-
document-level objective文档级
-
采样一个长度从原始文本长度的50%到100%的均匀分布中采样的片段。这预训练目标针对的是无条件的长文本生成
-
三类预训练目标的区别只是跨度(片段)的数量和长度的区别。【注:此处关于预训练目标的类型在GLM解析这边高赞的解析中只讲了后两者,这就容易引起误解,GLM实际是三个预训练目标,而少了一个token level,求证为参考B站一作讲解】
三类预训练目标和掩码语言的对比联系
-
自回归填充有些类似掩码语言模型,首先采样输入文本中部分片段,将其替换为[MASK]标记,然后预测[MASK]所对应的文本片段。与掩码语言模型不同的是,预测的过程是采用自回归的方式。
-
当被掩码的片段(跨度span)长度为1的时候,空格填充任务等价于掩码语言建模;
-
当将文本1和文本2拼接在一起,然后将文本2整体掩码掉,空格填充任务就等价于条件语言生成任务。
-
当全部的文本都被掩码时,空格填充任务就等价于无条件语言生成任务。
微调
-
将所有任务都变成GLM填补空白的生成任务
-
分类任务
-
给定一个标注样本(x,y),我们将输入文本x通过模板转化为有一个[MASK]字符填空问题c(x)。标签y也映射到了填空问题的答案v(y) 。模型预测不同答案的概率对应了预测不同类别的概率
-
-
文本生成任务
-
针对文本生成任务,直接将GLM作为一个自回归模型的应用。比如: 给定的上下文构成输入的部分的A,在结尾附上一个[MASK]字符,模型用自回归的方式去生成B部分的文本
-
-
GLM与相关模型的对比
T5和GLM
-
T5提出了一个相似的文本填空目标来预训练一个编码器-解码器 Transformer模型。GLM使用了一个单一的编码器Transformer模型来同时学习单向和双向的注意力机制。(注意GLM只是编码器)
-
T5对编码器和解码器使用了独立的位置编码,并且依赖多个sentinel token来区别不同的填空片段,而GLM使用二维位置编码来表示填空中的位置信息。
-
当有多个填空片段时,T5总是按照固定的从左到右的顺序来预测,而GLM会随机打乱片段的顺序来完整捕捉片段之间的依赖关系。
GLM的总结
-
GLM是一个针对自然语言理解和生成的通用的预训练框架。
-
GLM将针对不同类型下游任务的预训练目标统一为了自回归填空,结合了混合的注意力机制和新的二维位置编码。自然语言理解任务被表达为了条件生成任务,因此可以用自回归模型来解决。
-
实验中,表明GLM在自然语言理解任务上超过了已有的方法,并且可以有效的在不同类型的任务中共享预训练的参数。
参考与致谢
大语言模型ChatGPT的时代已经来临,作为一个多年前的NLPer,真的被LLM的效果和进展惊艳到了,国内LLM截止当前2023/05做的最好的就是清华的ChatGLM了,而且ChatGLM-6B可以在自己的单卡上就进行部署,也进行了部分开源,原生支持中文,给了大家更多的可能性和想象空间。本文作为LLM笔记的第一篇,论文读了好几遍,前期读的时候很难受也有很多疑问,后面反复的查和问与对比,现在感觉有那么点理解了,后续会努力更新这个系列,真正踏实的读论文看代码。
读论文时参考了大量前辈大佬们的解析,对我理解该文帮助很大,向大佬们致敬!同时感谢七月在线的July和阳哥以及学友的讨论!
https://aclanthology.org/2022.acl-long.26.pdf
GitHub - THUDM/GLM: GLM (General Language Model)
自然语言大模型 :GLM 通用语言模型的训练与微调_哔哩哔哩_bilibili ACL'22 | GLM: 基于空格填充的通用语言模型 - 知乎
GLM General Language Model Pretraining with Autoregressive Blank Infilling (ACL_哔哩哔哩_bilibili
听听经典老歌 BART_哔哩哔哩_bilibili经典默剧音乐 GLM ACL2022_哔哩哔哩_bilibili
https://zhuanlan.zhihu.com/p/560559133
GLM: General Language Model Pretraining with Autoregressive Blank Infilling-腾讯云开发者社区-腾讯云听听经典老歌 BART_哔哩哔哩_bilibili
【OpenLLM 004】GLM-可能是当前开源ChatGPT复现中中文效果最好的基础模型!支持中英双语! - 知乎
https://blog.csdn.net/weixin_43199832/article/details/125803555