文本生成系列之encoder-decoder

向量数据库微服务MySQL

提纲

  1. 简介

  2. RNN Encoder-Decoder

  3. 预训练语言模型 Encoder-Decoder

    3.1 MASS

    3.2 ProphetNet

    3.3 T5

    3.4 Bart

  4. 总结

参考文献

**1.

简介**

文本生成是自然语言处理领域一种常见的任务,它实现了从源文本到目标文本之间的转换。应用于包括机器翻译(Machine Translation),文本简化(Text Simplification),文本摘要(Document Summarization)等更具体的场景,在不同具体的场景可能有所差异,但是底层的技术基本共通。对于机器翻译任务而言,它的源文本是一种语言的文本,而目标文本是另一种语言的文本,对于文本摘要任务而言,则是将文档内容转换为更加言简意赅的摘要。




文本生成的模型结构有多种形式,  **本文主要介绍其中的encoder-decoder这种架构的,通过一个encoder对源文本进行编码,然后再通过一个decoder按顺序进行预测输出。**

2 RNN Encoder-Decoder

RNN Encoder-Decoder是用RNN循环神经网络来分别充当encoder跟decoder的seq2seq模型。具体的执行过程见下图

picture.image

图1: RNN Encoder-Decoder原理图

在实际应用中发现用LSTM或者GRU来替代RNN作为encoder或者decoder效果会更好,也可以使用attention机制来动态更新每个时刻的源文本表征。

但是这种方法有几个非常明显的问题,

a)    OOV问题,输出文本是通过分类器从预先定义好的词表中选取概率值最大的词实现的,所以很容易遇到OOV问题。特别是在源文本跟目标文本之间存在大量重复的情形,如果词表中不包含源文本涉及的词,特别是实体或者新词,那么预测的目标文本就会跟实际情况偏差很大。




b)   数据效率,为了使模型在文本生成任务上有较好的表现,传统的seq2seq模型需要对训练数据跟训练时间都要很高的要求。




c)    推理时间,seq2seq模型在解码时基于自回归的方式,虽然跟人类的语言习惯相符,但是大大增加了模型推理时间,不支持并行化。




d)   不可控,传统的seq2seq的词表非常庞大,对生成的内容缺乏可控性跟可解释性,容易生成重复的内容或者奇怪的内容。

3. 预训练语言模型 Encoder-Decoder

seq2seq的学习方法随着深度学习的火热受到越来越多人的追捧,但是很多任务下并没有足够标注好的source文本跟target文本的pair对,  **为此如何能在大量非标注数据上进行预训练,然后在少量标注好的数据上进行微调的方法被应用于此。这就是将预训练语言模型 Encoder-Decoder了。**

3.1 MASS

MASS是一种新的预训练的seq2seq的方法,包括encoder跟decoder两个部分,其中  **encoder的输入是句子是被随机屏蔽了一个长度为k的连续片段,而decoder就负责预测出这个被屏蔽了的连续片段** 。预训练的目标就是利用MASS去预测被MASK掉的连续片段的token使得预测结果的最大似然函数尽可能大。

picture.image

图2: MASS目标函数

picture.image

图3: MASS模型结构

  **从模型结构上看,MASS就像是BERT(左边)+GPT(右边),通过去预测被屏蔽掉的连续片段,但是decoder不直接接受没有被屏蔽掉的token作为输入(decoder会MASK这些token),而是接受encoder的编码结果,能迫使encoder更好的理解被屏蔽掉的连续片段的语义,同时要求decoder更多的依赖于encoder输出的表征而不是目标文本之前的token,迫使decoder从encoder输出表征中抽取合适的内容,从而能更好的联合训练encoder跟decoder。当被屏蔽掉的连续片段的长度为1时,MASS就退化为Bert,当被屏蔽掉的连续片段的长度等于句子长度时,MASS就退化为GPT。**

picture.image

图4: MASS的两种极端情形BERT跟GPT

跟前面的RNN Encoder-Decoder比起来,MASS有几个明显不同,




a). 使用了transformer作为encoder跟decoder。




b). 使用了MLM的训练方式。




c). 使用了Attention机制替代原本固定的文本表征。




比起分开训练encoder跟decoder的语言模型然后拼接在一起的方式,MASS这种联合训练的方式能够平衡encoder跟decoder之间的关系,让encoder能更好的理解被屏蔽掉的连续片段的语义,同时让decoder更好的从encoder的输出表征中抽取合适的内容。

3.2 ProphetNet

ProphetNet主要的改进点针对传统的seq2seq模型每次都只预测一个token,ProphetNet通过合适的改造实现了每次同时预测n个token。以往的预测方式会导致预测结果过多的依赖于上一个未知的token而忽略了更加长期的依赖,主要有以下两个理由




a). 局部的联系例如2-gram强于长期依赖性。




b). teacher forcing, 模型训练目标使得模型聚焦于下一个token,而忽略了更长期的token规划跟建模。




  **这种情况下使得模型在局部token建模时陷入过拟合,但是对于全局连贯性跟长期依赖性却是欠拟合。针对这种情况除了传统的额语言模型的任务外,ProphetNet将下一个token的预测调整为接下来n个token的预测(future n-gram prediction),这个任务可以充当额外的指导迫使模型可以同时考虑接下来多个token并且避免陷入局部联系的过拟合中。**









ProphetNet的encoder是由12个transformer的encoder堆叠形成的,它的decoder也是由12个transformer的decoder堆叠形成的。在这基础上,为了能同时预测接下来的多个token,在decoder部分,ProphetNet借鉴了Xlnet的双流注意力机制,将内容跟位置区分开来,除了一个必备的主流注意力机制外(传统的transformer的attention),future n-gram prediction每个n都会有一个对应的注意力机制。第i个分流注意力机制对应着第i个token的预测,它的query是第i个分流注意力机制上一层的隐状态,key跟value是主力注意力机制里在当前位置之前的token的上一层的隐状态加上第i个分流注意力机制的上一层的隐状态。不同分流注意力机制的token初始化,绝对位置编码跟相对位置计算方式都不相同,从而保证不同分流注意力机制能预测不同位置的token。

picture.image

图5: ProphetNet的多流注意力机制

  **ProphetNet虽然在预训练时使用了多个分流的注意力机制来实现同时预测多个token,但是在推理时可以通过关闭多个分流的注意力机制实现跟传统的seq2seq那样每次只预测一个token。**

3.3 T5

T5相信大家多多少少都曾听过它的名字,它在模型结构上并没有多少创新,更多是是给整个NLP预训练模型领域提供一个通用的框架,把所有NLP的任务都转化成文本到文本的格式中去。无论是分类模型,还是回归等等各种任务,统统转化为文本生成任务。

picture.image

图6: T5的架构

  **T5主要把BERT之后的很多发展都融合到一起,包括encoder-decoder,span等。通过各种组合,调试出一种最优的方案。**

3.4 Bart

Bart同样是一种encoder-decoder的结构,  **模型的encoder输入是被损坏的句子,而模型decoder的输出是去重建被损坏前的句子。不同于MASS的decoder只预测被MASK掉的token,Bart的decoder会重建完整的原文本。**

picture.image

图7: Bart的结构

从图上可以很明显看出Bart其实就是通过自重建的方式将BERT跟GPT结合起来,但是不同于BERT的地方在于:



a). Bart的decoder部分每一层的attention在计算时会额外加入encoder最后一层的状态。



b). Bert在预测token前有一层全连接层,但是Bart则没有。




除了模型结构外,论文作者尝试了多种损坏文本的方式,包括Token Masking(随机选取token进行Mask), Token Deletion(随机删除token),Sentence Permutation(随机调整句子之间的顺序),Document Rotation(随机以某个token翻转顺序),Text Infilling(随机将一个片段替换为Mask),  **最后发现使用Sentence Permutation跟Text Infilling效果最好。**

picture.image

图8: 不同的文本构建方式

4. 总结

可以看到,在文本生成任务中,encoder-decoder的模型结构依旧表现不俗,特别是将预训练语言模型跟encoder-decoder结合一起,站在巨人的肩膀上,依旧占据了非常重要的地位。Bert跟GPT的强大早已被人熟知,所以可以看到很多encoder-decoder的模型其实都是在Bert和GPT的基础上进行调整得到的。

参考文献

  1. (MASS, 2019) Masked Sequence to Sequence Pre-training for Language Generation

https://arxiv.org/pdf/1905.02450.pdf

  1. (ProphetNet, 2020) ProphetNet: Predicting Future N-gram for Sequence-to-Sequence Pre-training

https://arxiv.org/abs/2001.04063

(T5, 2019) Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

https://arxiv.org/pdf/1910.10683.pdf

  1. (Bart, 2019) BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

https://arxiv.org/abs/1910.13461

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论