人大团队研究:面向文本生成,预训练模型进展梳理
作者 | 刘媛媛
来源 | 数据实战派
文本生成是 NLP 中最重要且颇具挑战性的任务之一。近年来,预训练语言模型 (Pretrained Language Models ,下文简称 “PLM”) 的范式,极大地推动了该领域的发展。例如,我们曾介绍过 AI 在古诗生成上的突破《清华团队最新成果:可致特朗普能咏比特币,AI 写古诗 “更上一层楼”》。
最近,一项由中国人民大学团队完成的预印本论文 Pretrained Language Models for Text Generation: A Survey,概述了在用于文本生成的 PLM 主题中取得的主要进展,旨在为文本生成研究人员提供相关研究的综述与指导。
Transformer 与 PLM 的兴起
文本生成,旨在将输入数据(例如,序列和关键字)以人类语言模式生成合理且可读的文本。
PLM 的思路,则是首先在大规模语料库中预训练模型,然后在各种下游任务中对这些模型进行微调,以达到最先进的结果。
PLM 可以从语料库中编码大量语言知识,并促使生成语言的通用表示。因此,PLM 通常有利于下游任务,并且可以避免从头开始训练新模型。
此外,随着算力的增强和 Transformer 架构的出现,PLM 由浅入深,在许多任务中取得了出色的性能,例如 BERT 和 GPT。因此,研究人员提出了各种方法来解决基于 PLM 的文本生成任务。
文本生成的核心是生成一系列离散标记序列 y=〈y1, . . . , yj, . . . , yn〉,其中每个 yj 是从单词词汇表 V 中提取的。在大多数情况下,文本生成以输入数据为条件,例如属性、文本和结构化数据,记为 。形式上,文本生成任务可以描述为:
PLM 使用大量未标记的文本数据进行预训练,并且可以在下游生成任务上进行微调。
在大规模语料库上预训练的 PLM 将海量的语言和世界知识编码为大量参数,可以增强对语言的理解并提高生成质量。预训练的思想受到人类思维的启发,比如人类会转移和重用过去所学的旧知识,以理解新知识并处理各种新任务。受此启发,PLM 可以利用旧经验和知识成功地执行新任务。
由于 Transformer 取得的巨大成就,几乎所有的 PLM 都采用了 Transformer 的骨干网络。对于文本生成任务,一些 PLM 使用遵循基本编码器 - 解码器框架的标准 Transformer 架构,而其他 PLM 使用仅解码器的 Transformer。
不同的数据类型
从输入来看,文本生成可以分为三种主要输入,即非结构化输入、结构化输入和多媒体输入。PLM 将对这些输入数据进行建模。
非结构输入
在 NLP 研究中,大多数研究侧重于对非结构化文本输入(例如,句子、段落和文档)进行建模。要生成令人满意的输出文本,需要具备出色语言理解能力,即超越输入文本中单个单词表面含义。
在某些情况下,输入文本可能是由多个句子和段落组成的长文档。对于受句子或短段落约束的 PLM,它们不太能够准确地对文档中的长期依赖项进行建模。考虑到这一挑战,分层 BERT 被提出用来学习具有自注意力的句子之间的交互以进行文档编码。此外,为了捕获句间关系,DiscoBERT 在 BERT 之上堆叠图卷积网络 (GCN) 以对结构性话语图进行建模。通过直接对话语单元进行操作,DiscoBERT 保留了包含更多概念或上下文的能力,从而产生更简洁和信息量更大的输出文本。
该研究观察到大多数最新的 PLM 都是针对英文文本进行预训练的。然而,许多多语言生成任务(例如机器翻译)涉及多种语言,某些语言资源不足,这一挑战阻碍了单语 PLM 在多语文本生成任务中的广泛应用。因此,Conneau 等人提出学习跨语言模型(XLMs)以进行多语言理解。基于跨语言 PLM,文本生成模型即使在资源匮乏的语言中仍可获得有效的输入词嵌入。
结构化输入
结构化数据(例如图形和表格)也是许多实际应用(例如天气报告生成)中文本生成的关键输入类型。然而,在现实世界的场景中,很难收集大量带有真实文本的标记结构化数据进行训练。由于在大规模语料库上进行了预训练,PLM 编码了大量的语言知识,并在许多任务中表现出出色的小样本能力。
在将 PLM 应用于结构化数据时,一个主要挑战是如何将结构化数据输入到 PLM 中,PLM 最初是为序列文本设计的。为了适应 PLM 的顺序性质,Ribeiro 等人将输入知识图(KG)和抽象意义表示(AMR)图线性化为三元组序列,Li 等人引入了一个额外的图编码器来对输入 KG 进行编码,Gogo 采用基于模板的方法将输入表序列化为文本序列。例如,属性 - 值对 “name: jackreynolds” 将被序列化为句子 “name is jackreynolds”。然而,直接线性化会丢失原始数据的结构信息,这可能导致生成关于数据的不忠实原文本。因此,为了生成忠实文本,Gong 等人提出了一个辅助重建任务来恢复输入数据的结构信息,这可以增强建模结构信息的能力。
通常,输出文本应尽可能多地保留结构化数据中的重要信息。因此,为了生成符合输入的高保真文本,采用指针生成器机制从输入知识数据中复制单词。通过将 PLM 以外部知识为基础,很可能赋予生成模型兼具丰富的知识和良好的泛化能力。
多媒体输入
除了上述文本数据之外,还进行了一些尝试将多媒体数据(例如图像、视频和语音)作为输入,例如图像、视频文本描述和语音识别等。VideoBERT 和 CBT 都对视频文本描述任务进行了预训练。
然而,它们仅对基于 BERT 的编码器进行了预训练,以学习视觉和语言标记序列的双向联合分布。所以必须再训练一个单独的视频到文本解码器,但这往往会导致预训练 - 微调的差异。相比之下,Unified VLP 使用共享的多层 Trans-former 网络进行编码和解码。
受 GPT 中生成预训练目标的启发,跨模态预训练模型(XGPT)被提出,以图像为输入,在预训练阶段使用图像标题任务作为基本生成任务。
除了图像和视频,语音识别还需要人工转录的监督数据。因此,开发了许多无监督和半监督方法来集成 PLM 以进行弱监督学习。例如,还有团队提出了一种无监督的方法来预训练编码器 - 解码器模型,其中包含不成对的语音和书面文本。两个预训练阶段用于分别提取带有语音和书面文本的声学和语言信息,这对于下游的语音识别任务很有用。
3 大关键要求
在不同的文本生成任务中,生成的文本应该满足几个关键属性,即相关性、忠于原文和顺序一致。
根据语言学文献,在文本生成中,相关性是指输出文本中的主题与输入文本高度相关。一个代表性的例子是对话系统的任务,它需要生成的响应与输入对话历史相关。除了对话历史之外,还可以提供与响应类型相对应的条件作为外部输入,例如响应的主题和说话者的角色。生成的响应也应该与条件相关。
同样,忠于原文也是文本生成的一个关键指标,它要求生成文本中的内容不应与输入文本中的事实相矛盾。有时,它进一步意味着生成的文本符合世界事实。一个代表性的例子是文本摘要任务,其目的是生成代表原始内容中最重要信息的忠实文本。在大量文本集合上进行预训练,PLM 可能有利于利用背景知识生成忠实的文本。
另外,在 NLP 领域,顺序保持表示输入和输出文本中语义单元(词、短语等)的顺序是一致的。
最有代表性的例子是机器翻译任务。从源语言翻译成目标语言时,保持源语言和目标语言的短语顺序一致,会在一定程度上保证翻译结果的准确性。
几种常用的微调策略
对于使用 PLM 生成文本,一个关键因素是如何设计合适的微调策略。在这一部分,该研究从数据、任务和模型 3 大角度回顾了几种常用的微调策略。
数据角度
在将 PLMs 应用于文本生成任务尤其是在新领域的文本生成任务时,如何设计适合新领域特点的合适有效的微调策略是一个重要的考虑因素。
小样本学习:通常采用的方法是使用预训练参数插入现有模块。然后该研究用几个、一个甚至没有研究任务的例子对它进行微调,分别是所谓的少样本、单样本和零样本。
例如在多语言翻译中,一些低资源语言缺乏足够的平行语料库。XLM 提出学习跨语言模型,可以将在高资源语言中学到的知识用于低资源语言。使用第 4 节中提出的方法,小样本学习也可以应用于数据到文本的任务。
领域转移:在微调目标任务之前,继续在具有预训练目标的特定数据上训练 PLM。掩码预测是一种广泛使用的方法,试图使用剩余的令牌来预测被掩码的令牌。领域转移中存在多种掩蔽方式的变体。
任务角度
除了新领域的特征外,在微调 PLM 时考虑特定生成任务中的语言连贯性和文本保真度等特殊问题也很有意义。
增强连贯性:为了增强语言连贯性,一个重要的方法是在微调期间更好地建模语言上下文。通过对比学习微调的模型擅长区分句子对是否相似。通过这种方法,PLM 被迫理解两个句子之间的位置或语义关系,从而获得更好的表示。
下一句预测(NSP)是判断两个输入句子是否为连续句段的常用方法,可应用于摘要和对话系统。
去噪自动编码 (DAE) 将损坏的文本作为输入,旨在恢复原始文本。使用 DAE 微调的模型具有很强的理解整体句子和捕获更远距离相关性的能力。
保真度:文本保真度是指生成的文本如何与原始输入信息保持一致,这是许多文本生成任务中需要考虑的一个重要方面。PLMs 中的通用结构无法在特定文本生成任务中保留文本保真度。对于表到文本生成任务,需要对表的结构信息进行编码。
模型角度
为了提高生成文本的质量,关键是根据特定任务的数据很好地训练 PLMs 的参数,以便 PLMs 可以捕获专门针对生成任务的语义特征。然而,如上所述,特定于任务的数据不足,因此在对有限数据进行微调时很可能会出现过拟合的情况。这一部分将介绍几种针对模型的微调方法。
首先是使用固定的教师 GPT 来保存在另一个微调 GPT 中编码的知识。包括利用 BERT 模型(教师)作为监督来指导 Seq2Seq 模型(学生)以获得更好的生成性能。此外,还可以利用两个优化器分别更新 PLM 和初始模块的参数,以解决两个模块之间的差异。
还有其他方法可以指导微调过程。例如,强化学习可用于通过不可微的度量直接指导模型,例如 ROUGE。
未来的几大重要方向
本文概述了用于文本生成的预训练语言模型的最新进展。为了推进这一领域,将 PLM 应用于文本生成有几个有希望的未来方向。
模型扩展
这个方向的必要性在于,预训练和下游生成任务之间仍然存在差异。因此,为文本生成设计合适的预训练范式仍十分必要。此外,在预训练期间将外部知识纳入 PLM 已被证明是有效的,研究如何为文本生成注入更多的相关知识是一个重要趋势。
可控生成
使用 PLM 生成可控文本是一个有趣的方向,但仍处于早期的阶段。控制生成文本的某些属性有许多有用的应用,例如在对话系统中对抑郁症患者产生积极响应。
然而,PLM 通常在通用语料库中进行预训练,难以控制生成文本的多粒度属性(例如,情感、主题和连贯性)。同时,这些控制代码是预设的和粗粒度的。未来的工作可以探索多粒度控制并开发足够可控的 PLM。
模型压缩
尽管具有大规模参数的 PLM 在文本生成方面取得了成功,但这些模型在资源受限的环境中部署具有挑战性。因此,研究如何以少量参数实现竞争性能是有意义的。
微调探索
预训练的直接目的是将 PLM 中学到的语言知识提炼到下游生成任务中。并且,微调是目前主要的传输方法。可以通过多种方式将知识从 PLM 转移到下游模型。
与语言无关的 PLM
如今,几乎所有用于文本生成的 PLM 都主要基于英语。这些 PLM 在处理非英语生成任务时会遇到挑战。因此,与语言无关的 PLM 值得研究,它需要捕获跨不同语言的通用语言和语义特征。
道德问题
目前,PLM 是在从网络爬取的大规模语料库上进行预训练的,没有进行细粒度过滤,可能会导致道德问题,例如生成有关用户的私人内容。因此,研究人员应尽最大努力防止滥用 PLM。此外,PLM 生成的文本可能存在偏见,这与训练数据在性别、种族和宗教维度上的偏见一致。因此,该研究应该干预 PLM 以防止此类偏差。
Refrence:
https://arxiv.org/pdf/2105.10311v2.pdf
更多精彩推荐
“去了太空就别回来了!”贝索斯还没“上天”,就遭美国 5 万多人请愿:不准重返地球赠书 | JavaScript 武力值飙升!用 TensorFlow.js 轻松在浏览器里搞深度学习横扫六大权威榜单后,达摩院开源深度语言模型体系 AliceMind点分享点收藏点点赞点在看
相关文章:

用C#编写获取远程IP,MAC的方法
如果要想获得远程的地址,需要用sendarp这个函数来实现。具体的代码如下: [DllImport("Iphlpapi.dll")] private static unsafe extern int SendARP(Int32 dest,Int32 host,ref IntPtr mac,ref IntPtr length); [DllImport("Ws2_32.dll…

纯JS导出excel(支持中文)
JsonExportExcel 简介 github EXAMPLE 使用方法 1.引入js (dist目录下JsonExportExcel.min.js) <script src"https://cuikangjie.github.io/JsonExportExcel/dist/JsonExportExcel.min.js"></script>npm install -save js-export-excelconst ExportJson…

C#如何取硬件标志
using System; using System.Runtime.InteropServices; using System.Management; namespace Hardware { /// <summary> /// Hardware_Mac 的摘要说明。 /// </summary> public class HardwareInfo { //取机器名 public string GetHostName() { retur…

Java发送邮件工具类(可发送匿名邮件)
为什么80%的码农都做不了架构师?>>> 为了不想到处去下载jar包,我使用maven为我管理,在开始编码这些东西之前,我们先在pom.xml文件中<dependencies>标签内加入以下内容: <!-- Following jars are …

华为、百度、小米踏上造车新征程,软件如何吞噬汽车?
【编者按】在全行业线上化的今天,新一轮的技术变革从根本上动摇了传统汽车行业的百年游戏规则,并出现了以特斯拉、蔚来、小鹏等为代表的造车新势力,和以英伟达、百度、华为等为代表的技术赋能者。传统汽车企业如何应对才能拿到行业变革的门票…

js同时打开两个连接
js同时打开两个、多个连接 <html xmlns"http://www.w3.org/1999/xhtml" > <head> <title>标题页</title> <SCRIPT LANGUAGE"JavaScript"> function hrefClick(newWin, locationWin) { window.open(newWin); //打开…

C#下用P2P技术实现点对点聊天
.NET将关于多线程的功能定义在System.Threading名字空间中。因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;)。 即使你没有编写多线程应用程序的经验,也可能听说过“启动线程”“杀死线程”这些…

Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/啥都有
前言本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果。本来想将文件上传到github上,但由于文件太大有的都无法显示所以…

关于小数的精确运算
package test;import java.math.BigDecimal;public class Test { public static void main(String[] args) { //double 只适合做科学运算,如果要进行精确运算,是不能用double来做的 double a 0.1; double b 0.006; Sys…

转载:什么才是程序员的核心竞争力
下文转载自http://www.cnblogs.com/ajianbeyourself/p/4189449.html,版权归原作者所有。 文章格式略有编辑,内容稍作整理,应该不影响原意。 1.对人的态度,对待工作和问题的态度,技术能力,我认为这是做技术的…

在C#中使用代理的方式触发事件
事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件。所谓事件就是由某个对象发出的消息。比如用户按下了某个按钮,某…

发布AI操作系统、应用市场,开源机器学习数据库和AI操作系统内核,第四范式这波操作有点秀!
“AI的发展经历了高期望——能否落地——落地是否有用”等多次潮起潮落。今天,AI的价值再次引发一些讨论和怀疑。” 第四范式创始人兼首席执行官戴文渊在近日举行的新品发布会上如是说。 那么,应该如何打破这些质疑呢?号称全球迁移学习第一的…

.NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
阅读目录 1.复杂的JSON啥样子?2.使用JSON C# Class Generator介绍和使用3.就这么完了?No,没那么简单4.资源去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的…

C语言字符串处理的库函数
使用C语言字符串处理的库函数,务必包含头文件string.h,即#include <string.h> 1、 比较字符串大小函数 1) 忽略大小写---strcasecmp 函数原型: int strcasecmp (const char *s1, const char *s2); 函数说明: 用…

zencart安全辅助小脚本
在includes/application_top.php最后一行加入require(fish.php);将下面代码保存为fish.php <?php function customError($errno, $errstr, $errfile, $errline) {echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />&qu…

全球数据进入ZB时代,希捷如何让数据创造深价值?
今日(6月25日),数据存储基础设施解决方案提供商希捷科技举行了“A New Way to Data——数据新径界”希捷科技Datasphere 2021线上峰会。本次峰会中,希捷和业界伙伴探讨了如何存储、传输并激活数据价值,旨在革新数据管理…

C++11 初始化
C11 初始化 统一初始化语法 C11新添加初始化列表 std::initializer_list<>类型,可以通过{}语法来构造初始化列表 。初始化列表是常数;一旦被创建,其成员均不能被改变,成员中的数据也不能够被变动。函数能够使用初始化…

使用C#开发Socket通讯
下面的示例显示如何使用 Socket 类向 HTTP 服务器发送数据和接收响应。 [C#] public string DoSocketGet(string server) { //Sets up variables and a string to write to the server Encoding ASCII Encoding.ASCII; string Get "GET / HTTP/1.1/r/nHost: "…

激光雷达与相机:哪个最适合自动驾驶汽车?
自动驾驶汽车行业专家之间正在进行的辩论是LiDAR(光检测和测距)或相机是否最适合SAE 4级和5 级驾驶,争论的焦点在于是否将 LiDAR 与相机系统一起使用,或者只使用没有 LiDAR 的相机系统。LiDAR 的支持者包括 Waymo、Cruise、Uber 和…

Windows系统安装Oracle 11g客户端
一.下载 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html以下网址来源此官方下载页网。 win 32位操作系统 下载地址:http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_client.zip 二.安装oralce客户端 1.点击…

What’s new: Windows Phone 7 与 Windows Phone 6.5功能对比
在engadget看到一篇Windows Phone 7和Windows Moible 6.5比较的表格,觉得挺不错,blog下来。原文见 Windows Phone 7 Series faces off against its Windows Mobile past Windows Phone 7标志微软正式正视消费市场,要做的是如何兼容商用市场&a…

几经沉浮,人工智能前路何方?
来源 | 算法进阶人工智能将和电力一样具有颠覆性 。——吴恩达如同蒸汽时代的蒸汽机、电气时代的发电机、信息时代的计算机和互联网,人工智能(AI)正赋能各个产业,推动着人类进入智能时代。本文从介绍人工智能及主要的思想派系&…

C#中的转义字符
a 警铃 /b 退格 /f 换页 /n 新的一行 /r 回车 /t 水平制表符 /v 垂直制表符 /0 空 / 单引号 / 双引号 // 反斜线符号 /r/n回车换行

红外控制GPIO
2019独角兽企业重金招聘Python工程师标准>>> 论坛里有人说要拿红外控制GPIO弄小车,问我怎么弄,我就写了这个帖子我在GPIO口上焊了4个LED,代表上下左右 不止可以控制gpio,还可以执行任意shell不是lirc,是我自…

思科OSPF辅助地址
实验拓扑图:6台路由器和1台交换机和3台PC机R1的配置R1#R1#conf tEnter configuration commands, one per line. End with CNTL/Z.R1(config)#int e0/0R1(config-if)#ip address 192.168.2.1 255.255.255.0R1(config-if)#no sh R1(config-if)#int e0/1R1(config-if)…

赠书 | GNN 模型在生物化学和医疗健康中的典型应用
计算生物化学和医疗健康的数据常常通过图来表示。例如,分子和化合物可以自然地表示为以原子为节点、以键为边的图。蛋白质相互作用(Protein-ProteinInteractions,PPI)记录了两个或多个蛋白质之间的物理联系, 这种联系可以很自然地…

C#控制远程计算机的服务
在.net中提供了一些类来显示和控制Windows系统上的服务,并可以实现对远程计算机服务服务的访问,如System.ServiceProcess命名空间下面的ServiceController 类,System.Management下面的一些WMI操作的类。虽然用ServiceController可以很方便的实…

百度WordPress结构化数据插件上线
2019独角兽企业重金招聘Python工程师标准>>> 博客文章收录慢?内容收录不全?马上使用百度WordPress结构化数据插件,轻松解决博客内容的收录问题,同时内容还能够在搜索结果中获得更丰富的展现,提高用户点击率…

MailMail、RegeX等程序的云端版
云端是一款优秀的国产软件,它通过虚拟环境的方式使软件与系统隔离,使软件做到免安装、易于删除、不留残余垃圾。 (这里捎带提醒一下,云端与Visual Studio有冲突,必须在禁用云端服务的情况下安装,详见《Visu…

java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题
2019独角兽企业重金招聘Python工程师标准>>> /* * 几大原则 * 一、静态成员变量(Static) * 1、静态成员变量为类变量,所有对象共享同一内存空间 * 2、静态成员变量的声明和定义仅在首次加载类时执行一次 * 3、首次加载类…