今天推荐一篇人大出品的37页文本生成综述:

A Survey of Pretrained Language Models Based Text Generation
https://arxiv.org/abs/2201.05273

虽然综述读起来累些,但多读综述有利于知识体系的梳理。而且NLP领域的综述读多了会发现,很多优化方法都是想通的,也能提供一些新的思路。

这篇文章从把文本生成的方法分成了三类:输入编码、模型设计、优化方法。同时也从数据、模型、优化层面给出了下面我们就顺着文章的思路,梳理一下最近几年文本生成领域的进展。

如何编码输入

这部分其实跟NLU任务都是一样的,想要做好预测,首先要对输入进行充分理解。本文主要从输入形态进行了划分。

非结构化文本

Paragraph-level

  1. Hierarchy-based:先对句子进行编码,再用一个编码器进行对句子表示进行聚合

  2. Graph-based:相比于上面的序列化层次编码,图学习的方法可以更好地对不相邻的句子进行聚合

Document-level

  1. 同样使用层次化的方法

  2. 抽取关键信息:层次化方法自下而上,难免引入噪声,而更重要的是抓住整个文档的主题信息,可以用topic model或者设置更高级别的目标去做

  3. 提升效率:当文本过长时,可以使用局部注意力、稀疏注意力去提升效率,编码更长的内容

多语言

  1. Cross-lingual:跨语言的思想是在整个语料上生成subword,并用一套embedding和encoder去编码多种语言,可以参考XLM

  2. Multi-lingual:多语言的思想是多套embedding共用一个encoder,可以参考mBART、mT5

结构化输入

结构化输入在知识图谱的应用场景下很常见,编码器主要面临着三个问题。

预训练是用非结构化文本,而当前输入的是结构化文本,如何消除这个Gap?

  1. 预处理:把结构化数据拼成序列输入,比如「胡歌-职业-演员」变成「胡歌的职业是演员」

  2. 通过图学习或其他编码器,把输入变成embedding在喂给预训练模型,比如清华ERNIE

上述方法消除了Gap,但也丧失了结构带来的重要信息,如何保持这些特征呢?

  1. 通过加入新的目标,比如表格化的输入,让模型去预测每个数据的字段名,强迫模型编码进这些信息

  2. 直接把结构化信息加到输入里,比如上面的三元组例子,可以变成「<\S>胡歌</S><\P>职业</P><\O>演员</O>」

  3. 利用可以编码结构信息的encoder,比如图神经网络

一些场景下(比如报表生成),如何保持输出数据与输入的一致性?

  1. 加入额外的训练目标,去检测输入输出的一致性

  2. 使用Copy机制:pointer-generator是比较经典的方法

  3. 在输入侧加入更多限制,让模型学习到这些强pattern

多模态输入

多模态输入可玩的就多了,在这方面也有不少的研究,这里的难点主要是通过各种任务,让文本和多模态输入对齐。或者在无监督的情况下,让多模态的表示和文本表示在同一个空间。

如何设计预训练模型

经典结构

Masked Language Model

MLM模型和生成任务的预训练目标不一致,所以很少被用在生成任务上,当然也有研究[1]把BERT、RoBERTa、GPT2三个模型混合起来去做生成,用BERT初始化encoder和decoder,效果竟然还不错。

在MLM任务的启发下,整个19年里生成模型也曾出不穷,变化不同的结构去做类似MLM的自监督任务。

Causal Language Model

单向语言模型就不用多说了,GPT系列是经典中的经典,当然还有CTRL等条件生成模型也不错。但由于这类模型本身从左到右的限制,在文本摘要、翻译这种需要双向信息的任务上表现欠佳。

Prefix Language Model

这类模型十分优雅,兼具双向编码和单向解码,比如UniLM系列、GLM。不过研究显示[](https://arxiv.org/abs/1910.10683 “Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer”),比起经典的encoder-decoder结构还是稍稍逊色。

Encoder-Decoder Language Model

这类模型各个都比较能打,比如MASS、ProphNet、BART,不过我用下来还是觉得T5比较强。

结构扩展

生成式预训练模型的结构基本局限于上述四种,但他们本身还存在一些问题,文中列举了两类,跟NLU任务的优化点差不多:

  1. 附加Embedding:位置编码一直都是Transformer的一个小弱项,针对这个问题,T5、UniLMv2都加入了相对位置编码。另外在诗歌生成任务中,还可以升华成层次位置编码[2],去指示句子内或者句子间的位置。还可以参考segment编码,在对话场景去区分不同说话人,或者多语言场景区分不同语言

  2. 注意力机制:在encoder-decoder结构中,存在着用来连接它们的cross-attention,这个模块也能进行优化,可以加入图神经网络、门控机制等

如何优化生成模型

Fine-tuning

精调最主要的问题就是监督数据太少了,作者提供了一些通用trick迅速帮忙提升效果,对NLG和NLU都很有用

  1. Intermediate Fine-tuning:利用一个中间任务,先对预训练模型进行精调。这个方法又分为两种,第一种是Domain adaption,先在与目标相同的领域上进行精调,最简单的就是直接MLM,如果有标注数据更好。但如果任务简单(比如二分类)就要小心了,别太过拟合,可能会降低表示的质量。第二种是Task adaption,在与目标相同的任务上进行精调,这个方法我一直用,在文本匹配上百发百中

  2. Multi-task Fine-tuning:也是GLUE刷榜的场景技巧,防止过拟合十分有效,任务目标可以和最终的相同也可以不同,也可以当做一个intermediate任务,不过效果不是一直都好,需要耐心调教

  3. Parameter-Efficient Fine-tuning:在当今的大模型时代下,别说预训练了,可能精调都调不起。尤其是生成任务需要更强的预训练模型。所以作者就提供了这种优化思路,第一种是在结构里增加一些adapter,比如在Transformer里增加一个FFN,映射到很低的维度再映射回去,精调时只更新adapter的参数。第二种是freeze掉部分子网络,比如有研究发现cross-attention很重要,那就只更新这部分参数。第三种是蒸馏。

Prompt-tuning

Prompt是今年最热的NLP方向了,最初是GPT2发起的,在输入中加入对任务的描述,比如「把下面的句子翻译成英文:XX」,这样一个生成模型就可以同时做过个任务。不过最初这种形式很依赖人工设计的prompt,所以之后的研究者也提出了AutoPrompt等自动发现模版的方法。

再演变到后来就是参数化的Continuous Prompt,利用这些模版初始化一些token,然后直接精调这些token的embedding。参数化模版的优点是:

  1. 解除了手工自然语言模版的限制

  2. 让模版变得可以调节优化,不受预训练模型embedding的限制

这类研究可以参考Prompt-tuning、P-tuning等。

Property-Tuning

文本生成由于其任务的天性,使得文本可控变得十分重要。Property-tuning的目的就是限制生成结果的一些性质:

  1. Relevance:一方面可以通过增加其他目标函数去提升相关性,另一方法也可以从训练入手,比如有的方法会通过TF-IDF选择mask哪些词,强迫模型生成更相关的结果

  2. Faithfulness:在文本摘要任务中比较重要,避免生成结果与输入相差太大,可以加入主题模型等loss进行约束

  3. Order:在翻译、复述中比较重要,可以设计特殊的任务,让模型学习如何对齐输入与输出

其他挑战

除了上述的优化方法外,作者还从数据、模型、优化三个层面列出了文本生成的一些其他挑战,解决方案很多上面都提到了:

评价指标

  1. N-Gram Overlap:BLEU、ROUGE、METEOR、ChrF++

  2. Divesity:Distinct

  3. Semantic Similarity:BERTScore

总结

本文主要分享了预训练时代下的文本生成方法,当然还有一些方向没有涉及,比如跟decoder更相关的解码策略、非自回归生成等。整体读下来体系还是挺清晰的,也推荐同学们没事儿多读读综述,即使是已经熟悉的领域,也还可能有一些模型、方法不太熟悉,知识体系完善后对平时的思路会有很多帮助。

参考资料

[1]

Leveraging Pre-trained Checkpoints for Sequence Generation Tasks: https://aclanthology.org/2020.tacl-1.18.pdf

[2]

Rigid Formats Controlled Text Generation: https://aclanthology.org/2020.acl-main.68.pdf


往期精彩回顾适合初学者入门人工智能的路线及资料下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载本站qq群955171419,加入微信群请扫码:

【NLP】预训练时代下的文本生成|模型技巧相关推荐

  1. 【NLP从零入门】预训练时代下,深度学习模型的文本分类算法(超多干货,小白友好,内附实践代码和文本分类常见中文数据集)

    如今NLP可以说是预训练模型的时代,希望借此抛砖引玉,能多多交流探讨当前预训练模型在文本分类上的应用. 1. 任务介绍与实际应用 文本分类任务是自然语言处理(NLP)中最常见.最基础的任务之一,顾名思 ...

  2. 今晚直播 | 微软亚洲研究院徐毅恒:预训练时代下的文档智能

    「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...

  3. 应用在生物医学领域中的NLP预训练语言模型(PubMedBERT)

    文章目录 1. 背景 2. 在生物医学和专业领域建立神经语言模型的新范式 3. 创建一个全面的基准和排行榜,以加快生物医学NLP的进度 4. PubMedBert:优于之前所有的语言模型,并获得最新生 ...

  4. EMNLP2021 “Transformer+预训练”再下一城,港科大开源高效的多模态摘要总结网络...

    关注公众号,发现CV技术之美 ▊ 写在前面 多模态摘要总结(Multimodal abstractive summarization,MAS)模型总结了视频(视觉模态)及其相应的文本(文本模态)的知识 ...

  5. 天池零基础入门NLP竞赛实战:Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类

    Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类 因为天池这个比赛的数据集是脱敏的,无法利用其它已经预训练好的模型,所以需要针对这个数据集自己从头预训练一个模型. 我们利用H ...

  6. 预训练时代微调新范式,高性能加速2800%,NLPer赶紧看过来!

    导读 PaddleNLP 是兼具科研学习和产业实践能力的 Python NLP 工具包,提供中文领域丰富的预训练模型和部署工具,被高校.企业开发者广泛应用.近日,PaddleNLP v2.1正式发布, ...

  7. AI圈真魔幻!谷歌最新研究表明卷积在NLP预训练上竟优于Transformer?LeCun暧昧表态...

    作者 | 陈大鑫.琰琰 转自:AI科技评论 AI 圈太是太魔幻了! 众所周知,近一年来Transformer火的很,把Transformer用在视觉领域真是屡试不爽,先是分类后是检测,等等等等,每次都 ...

  8. 性能堪比GPT-3,但参数量仅为0.1%,LMU团队推出NLP最强文本生成模型

    2020-09-24 04:21:08 作者 | 贝爽 编辑 | 陈彩娴 模型越大,性能越佳?不一定. 在NLP领域,谈到超大模型必然想到预训练语言模型GPT-3,自今年3月份对外开放以来,其因超大模 ...

  9. NLP预训练家族 | 自成一派的GPT!

    作者 | 周俊贤 整理 | NewBeeNLP 之前我们梳理了NLP预训练家族系列文章,今天继续来看看另外一个分支,GPT系列! GPT2论文全称及链接:<Language Models are ...

最新文章

  1. 使用YOLOv5模型进行目标检测!
  2. Altium Designer 使用小结
  3. 牛!发出中国第一封电子邮件,注册登记域名 CN,中国互联网之父传奇
  4. ICD-10/11 查询疾病编码方法
  5. CUDA组件 -- nvidia driver驱动与toolkit
  6. 别再说互联网寒冬了,为何不从自己身上找找原因呢
  7. Elasticsearch文档内部的父子关系
  8. php 微信朋友圈 更新时间,微信朋友圈可见天数怎么设置
  9. MySQL知识点整理汇总
  10. 设计模式 : 访问者模式
  11. 《在路上 …》 金山卫士开源 , 人生很多感慨
  12. SpringBoot开源项目案例
  13. 人脸识别 ArcFace 实现
  14. XP系统硬盘安装Ubuntu14.04-超详细
  15. 2023中国矿业大学计算机考研信息汇总
  16. 项目管理工具dhtmlxGantt甘特图入门教程(五):甘特图实例特点
  17. PS流(ISO13818和GB28181)分析
  18. nolo手柄配对不上_NOLO手柄助手下载
  19. 【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测
  20. Web前端期末大作业-化妆品商城网页设计(HTML+CSS+JS)

热门文章

  1. 20155313 2016-2017-2 《Java程序设计》第二周学习总结
  2. Python快速入门(1)
  3. 基于jQuery带图标的多级下拉菜单
  4. 在浏览器的背后(二) —— HTML语言的语法解析
  5. JavaScript学习笔记(七)——厚积薄发之小成果
  6. Javascript学习笔记12——Ajax入门
  7. Java多线程-线程的同步与锁
  8. 使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
  9. 【洛谷】P2179 [NOI2012]骑行川藏
  10. python字符串,列表,字典的常用方法