博客得主要目的是记录自己的学习收获,排版、行文都会比较随意,内容也主要以自己能理解的方式描述,还希望各位看客见谅。
本文为中国人民大学发表在IJCAI2021上的预训练语言模型文本生成综述论文。我目前的想法是重点关注文章的结构,再具体补充其中的内容。
论文链接:https://arxiv.org/abs/2105.10311
目录
前言
编辑
引言
一、INTRODUCTION
二、PRELIMINARY
2.1 文本生成
2.2 预训练模型
2.3 基于预训练的文本生成方法
三、ENCODING INPUT REPRESENTATIONS
3.1 非结构化输入
3.1.1 段落级表示学习
3.1.2 文章级表示学习
3.1.3 多语言表示学习
3.2 结构化输入
3.3 多模态输入
四、DESIGNING PLMS FOR TEXT GENERATION
4.1 标准结构
4.1.1 Masked Language Models
4.1.2 Causal Language Models
4.1.3 Prefix Language Models
4.1.4 Encoder-Decoder Language Models
4.2 结构改进方法
4.2.1 扩展输入embedding
4.2.2 改进注意力机制
五、 OPTIMIZING PLMS FOR TEXT GENERATION
p1:文本生成的简单介绍——文本生成的目标是生成通顺可读的自然语言。文本生成技巧可以广泛应用于对话系统、机器翻译和摘要生成任务中。
p2-p4:文本生成的研究历史
- p2:基于统计的方法——>面临 data sparsity的问题,需要smoothing
- p3:基于深度学习的方法——>从seq2seq到attention和copy机制——>面临数据不够多,容易过拟合的问题
- p4:基于PLM的方法——>好,所以我们关注
p5:本文与其他文本生成综述论文的区别——大部分综述是以任务的视角去描述文本综述的,如对话生成,摘要生成等。本文将更多从文本生成本身这个角度阐述。
p6:文章结构阐述
介绍了文本生成的定义。,通过输入x的不同对文本生成进行分类。
本文认为,如果希望利用预训练语言模型实现文本生成,需要重点考虑三个问题,这三个问题分别从输入数据,模型结构和优化方法的角度进行阐述。这三个问题分别是:
- How to encode the input into a representation preserving the input semantics that can be fused into the PLM ?
- How to design an effective PLM M to serve as the generation function and adapt to various text generation tasks?
- How to optimize the text generation function (i.e., PLMs) given the reference text and ensure that the generated text satisfies special text properties ?
通过三种不同的输入:非结构化输入、结构化输入和多模态输入描述预训练模型输入数据的问题
目的是同时学习到低级别的word meaning和高级别的topic sematics。主要通过hierarchy-based或者graph-based方法学习段落表示。
- hierarchy-based:对于一个包含多语句的段落输入,如多轮对话,直接的进行拼接难以捕捉语句之间的语义联系。因此,使用hierarchical编码器学习输入段落。
- graph-based:一个长段一般会包含一些冗余的、重复的信息。如果能把关键的语义信息提取出来,去除冗余信息可以很好地捕捉段落语义。相比于序列,图可以更好地表示这层关系。
输入是包含多个段的文章。
- 对句子间的关系进行建模。
- 保留重点语义信息,去冗余信息。
- 提高表示学习的效率
分为Cross-lingual(两种语言)和Multi-lingual(多语言)注:不知道为什么写这一段,不应该放在3.3吗。
结构化输入是我比较关注的。结构化输入目前面临以下三个挑战。注:这三个点基本跟TableGPT里总结的是一样的,在我看来主要就是两点:一是plm是序列输入训练的,所以有语义鸿沟;二是需要保留结构信息。
- There exists a semantic gap between structured data and PLMs, since PLMs are typically pre-trained on natural language texts;
- It is non-trivial to encode the structural information in the input data;
- It requires to maintain fidelity of the generated text with respect to the input.
之后文章根据各点都撰写了解决方式,有重复,我这里总结为以下几点:
- 把结构化输入转化为序列化输入:通过模板的方式或者直接添加结构信息。
- 对齐结构化输入和序列化输入的表示:例如最小化结构化输入gnn和plm encoder的语义距离。
- 增加结构化encoder模块
- 使用copy机制
本人的研究方向不涉及这个,不总结了...
现有的机构包含单独使用transformer的编码器或者解码器,或者使用基于transformer的编码器-解码器结构,文章将这种标准结构分为四个变体:masked LMs, causal LMs, prefix LMs和seperate encoder-decoder结构。
类似transformer的编码器,如BERT。然而,这类模型由于与训练任务和文本生成之间的差异性,一般不适用于文本生成任务。一般作为文本生成的编码器存在。
类似transformer的解码器,如GPT系列。这类模型的缺点在于忽视了输入端的双向信息,而且不适用于seq2seq式的生成任务。
输入双向,自回归式输出的单个Transformer。UniLM是第一个PrefixLM模型。然而与encoder-decoder相比,还是encoder-decoder的效果好一些。
标准的transformer架构
有些工作是通过改进transoformer的结构去提高文本生成效果的。这种改进主要可以分为两类:
文章主要标注了两种方法,一种是对position embedding进行改进,比如从绝对位置编码到相对位置编码,甚至表示句子和句子间的位置编码。第二种是增加辅助embedding,例如在多模态下增加语音embedding等。
1、为了适应长文本输入和降低复杂度没引入sparse attention。2、由于使用多个编码器,对cross attention进行改进。
主要分为三种方式介绍优化方法:fine-tuning, prompt-tuning, 和 property-tuning
最正常的微调方法。主要问题是在小数据集上容易过拟合。
采用一个足够大的中间数据集帮助微调。主要分为:
- 1、不同领域的相同任务数据集。
- 2、相同领域的不同任务数据集。
这种多任务微调方式可以增强PLM的鲁棒性和对大量有标签数据的依赖。主要分为:
- Pure Multi-Task Fine-Tuning:采用与主文本生成任务相同,但是领域不同的方法(主要是数据集)。
- Hybrid Multi-Task Fine-Tuning:采用与主文本生成任务不同的方法
上述方法耗时,因此介绍这类微调方法
- Adapter-based:在每一层添加two feed-forward layers 和 a non-linear layer作为adapter,然后只微调adapter。
- Freezing-based:只微调PLM的部分参数
- Distillation-based:把PLM中的知识蒸馏到小模型中,然后训练小模型。
这部分介绍的就是最近比较火的提示学习在文本生成方向上的应用。简而言之,提示学习就是将文本生成下游任务形式化为和预训练任务相似的language model任务。
对于不同的文本生成任务,在微调PLM的时候我们需要考虑不同的属性(property)。这一小章主要针对三个在文本生成中的重要属性。
输出文本中传达的主题语义应该与与输入文本高度相关。
指生成的内容应符合输入文本的语义,生成的文本符合事实。
输入和输出文本中语义单元(单词、短语等)的顺序是一致的。对于摘要生成和机器翻译等任务很重要。
总结如下表所示:
包含BLEU,ROUGE,METEOR,ChrF++(用于机器翻译)
包含Distinct
包含BERTScore
包含PPL(感觉就是直接通过loss计算的)
Benchmark有GLUE
这里就不详细写了,主要分为机器翻译,摘要生成,对话系统和其他。也可以看出对于文本生成来说,机器翻译和摘要生成是最火的应用方向。
除了对上述内容的总结外,文章提到了一些他们发现的问题和方向。
- 1、可控的生成
- 2、探索更多的优化方法
- 3、其他语言的PLM
- 4、生成文本的伦理道德问题