A Survey of Pretrained Language Models Based Text Generation
https://arxiv.org/abs/2201.05273
目录
2.1.4 Encoder-decoder Language Model
人大的一篇综述,把文本生成的方法分成了三类:输入编码、模型设计、优化方法。这同时也从数据、模型、优化层面给出了一些比较实用的建议。
一、对输入的编码表示
本文主要从输入形态进行了划分。
1.1 非结构化输入
1.1.1 段落级别
- Hierarchy-based:先对句子进行编码,再用一个编码器进行对句子表示进行聚合
- Graph-based:相比于上面的序列化层次编码,图学习的方法可以更好地对不相邻的句子进行聚合
1.1.2 文档级别
- 同样使用层次化的方法
- 抽取关键信息:层次化方法自下而上,难免引入噪声,而更重要的是抓住整个文档的主题信息,可以用topic model或者设置更高级别的目标去做
- 提升效率:当文本过长时,可以使用局部注意力、稀疏注意力去提升效率,编码更长的内容
1.1.3 多语言
- Cross-lingual:跨语言的思想是在整个语料上生成subword,并用一套embedding和encoder去编码多种语言,可以参考XLM
- Multi-lingual:多语言的思想是多套embedding共用一个encoder,可以参考mBART、mT5
1.2 结构化输入
结构化输入在知识图谱的应用场景下很常见,编码器主要面临着三个问题。
预训练是用非结构化文本,而当前输入的是结构化文本,如何消除这个Gap?
- 预处理:把结构化数据拼成序列输入,比如「胡歌-职业-演员」变成「胡歌的职业是演员」
- 通过图学习或其他编码器,把输入变成embedding在喂给预训练模型,比如清华ERNIE
上述方法消除了Gap,但也丧失了结构带来的重要信息,如何保持这些特征呢?
- 通过加入新的目标,比如表格化的输入,让模型去预测每个数据的字段名,强迫模型编码进这些信息
- 直接把结构化信息加到输入里,比如上面的三元组例子,可以变成「<\S>胡歌</S><\P>职业</P><\O>演员</O>」
- 利用可以编码结构信息的encoder,比如图神经网络
一些场景下(比如报表生成),如何保持输出数据与输入的一致性?
- 加入额外的训练目标,去检测输入输出的一致性
- 使用Copy机制:pointer-generator是比较经典的方法
- 在输入侧加入更多限制,让模型学习到这些强pattern