作者 | 刘大一恒、齐炜祯、晏宇、宫叶云、段楠、周明

来源 | 微软研究院AI头条(ID:MSRAsia)

编者按:微软亚洲研究院提出新的预训练模型 ProphetNet,提出了一种新的自监督学习目标——同时预测多个未来字符,在序列到序列的多个自然语言生成任务都取得了优异性能。

大规模预训练语言模型在自然语言理解(NLU)和自然语言生成(NLG)中都取得了突破性成果。这些模型通常使用特殊的自监督学习目标先在大规模无标记语料中进行预训练,然后在下游任务上微调。

传统自回归语言模型通过估计文本语料概率分布被广泛用于文本建模,序列到序列的建模(seq2seq),以及预训练语言模型中(如 GPT 等)。这类模型通常使用 teacher-forcing 的方法训练,即每一时刻通过给定之前时刻的所有字符以预测下一个时刻的字符。然而,这种方式可能会让模型偏向于依赖最近的字符,而非通过捕捉长依赖(long-term dependency)的信息去预测下一个字符。有如以下原因:(1)局部的关系,如两元字符的组合,往往比长依赖更强烈;(2)Teacher-forcing 每一时刻只考虑对下一个字符的预测,并未显式地让模型学习对其他未来字符的建模和规划。最终可能导致模型对局部字符组合的学习过拟合,而对全局的一致性和长依赖欠拟合。尤其是当模型通过贪心解码(greedy decoding)的方式生成序列时,序列往往倾向于维持局部的一致性而忽略有意义的全局结构。

ProphetNet(先知网络)

针对上述问题,我们提出了一个新的 seq2seq 预训练模型, 我们称之为 ProphetNet(先知网络)。该模型带有一个新颖的自监督学习目标函数,即预测未来的N元组(Predicting Future N-gram)。与传统 seq2seq 的 Teacher-forcing 每一时刻只预测下一个字符不同,ProphetNet 每一时刻将学习去同时预测未来的 N 个字符。如图1所示:

图1:左边是传统的语言模型,每一时刻预测下一时刻的字符。右边是 Bigram 形式下的 ProphetNet,每一时刻同时预测未来的两个字符。

预测未来 N 元组这一自监督学习目标在训练过程中显式地鼓励模型在预测下一个字符时考虑未来更远的字符,做到对未来字符的规划,以防止模型对强局部相关(strong local correlation)过拟合。

ProphetNet 基于 Transformer 的 seq2seq 架构,其设计有两个目标:1.模型能够以高效的方式在训练过程中完成每时刻同时预测未来的 N 个字符;2.模型可以灵活地转换为传统的 seq2seq 架构(每时刻只预测一下个字符),以在推理或微调阶段兼容现有的方法和任务。为此,我们受 XLNet 中 Two-stream self attention 的启发,提出了用于模型 decoder 端的 N-stream self-attention 机制。图2展示了 bigram 形式下的 N-stream self-attention 样例。

除了原始的 multi-head self-attention 之外(我们称为 main stream self-attention,如图2a),N-stream self-attention 包含了额外的 N 个 predicting stream self-attention(如图2b和图2c),用于分别预测第 n 个未来时刻的字符(如图2d)所示。每一个 predicting stream 与 main stream 共享参数,我们可以随时关闭 predicting stream 以让模型转换回传统 seq2seq 的模式。

图2:(a) 为main stream self-attention;(b) 为1-st predicting stream self-attention;(c) 为2-nd predicting stream self-attention;(d) 展示了n-stream self-attention的输入输出及流程。

由于难以获取到大量带标记的序列对数据,我们用去噪的自编码任务通过大量无标记文本预训练 ProphetNet。去噪的自编码任务旨在输入被噪音函数破坏后的序列,让模型学习去复原原始序列。该任务被广泛应于 seq2seq 模型的预训练中,如 MASS、BART、T5 等。本文中使用 MASS 的预训练方式,通过引入提出的 predicting n-stream 自监督学习目标函数预训练 ProphetNet。我们以 bigram 形式的 ProphetNet 为例,整个流程如图3所示:

图3:二元形式下的 Prophet 整体框架图

实验结果

我们使用两个规模的语料数据训练 ProphetNet。ProphetNet 包含12层的 encoder 和12层的 decoder,隐层大小为1024。先在 BERT 所使用的 BookCorpus+Wikipedia(16GB)的数据上预训练模型,将模型在 Text summarization 和 Question generation 两个 NLG 任务上的三个数据集微调并评估模型性能。与使用同等规模数据(16GB)的预训练模型相比,ProphetNet 在CNN/DailyMail、Gigaword 和 SQuAD 1.1 question generation 数据集上都取得了最高的性能,如表1-3所示。

表1:CNN/DailyMail 测试集结果

表2:Gigaword 测试集结果

表3:SQuAD 1.1 测试集结果(上半部分)SQuAD 1.1 交换验证测试集结果(下半部分)

除了使用 16GB 的语料训练模型,我们也进行了更大规模的预训练实验。该实验中,我们使用了 160GB 的语料(该语料被 BART、RoBETRa 等模型预训练中所使用)预训练 ProphetNet。我们展示了预训练14个 epoch 后的 ProphetNet 在 CNN/DailyMail 和 Gigaword 两个任务上微调和测试的结果。如表4所示。需要注意的是,在相同大小的训练数据下,我们模型的预训练 epoch 仅约为 BART 的三分之一。我们模型的训练数据使用量仅约为 T5 和 PEGASUSLARGE(C4)的五分之一,约为 PEGASUSLARGE(HugeNews) 的二十分之一。尽管如此,我们的模型仍然在 CNN/DailyMail 上取得了最高的 ROUGE-1 和 ROUGE-L F1 scores。并在 Gigaword 上实现了新的 state-of-the-art 性能。

表4:模型经大规模语料预训练后在 CNN/DailyMail 和 Gigaword 测试集的结果

为了进一步探索 ProphetNet 的性能,我们在不预训练的情况下比较了 ProphetNet 和 Transformer 在 CNN/DailyMail 上的性能。实验结果如表5所示,ProphetNet 在该任务上超越了同等参数量的 Transformer。

表5:模型不经过预训练在 CNN/DailyMail 验证集结果

总结

本文介绍了微软亚洲研究院在序列到序列模型预训练的一个工作:ProphetNet,该模型提出了一种新的自监督学习目标,在同一时刻同时预测多个未来字符。并通过提出的 N-stream self-attention 机制高效地实现了模型在该目标下的训练。实验表明,该模型在序列到序列的多个自然语言生成任务都取得了不错的性能。我们将在之后尝试使用更大规模的模型架构和语料进行预训练,并进一步深入地探索该机制。

论文链接:https://arxiv.org/pdf/2001.04063.pdf

【end】

原力计划

《原力计划【第二季】- 学习力挑战》正式开始!即日起至 3月21日,千万流量支持原创作者!更有专属【勋章】等你来挑战

推荐阅读

  • Python数据清理终极指南(2020版)

  • 口罩检测识别率惊人,这个Python项目开源了

  • 谈论新型冠状病毒、比特币、苹果公司……沃伦•巴菲特受访中的 18 个金句,值得一看!

  • 天猫超市回应大数据杀熟;华为Mate Xs被热炒至6万元;Elasticsearch7.6.1发布

  • 一张图对比阿里、腾讯复工的区别

  • 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码

  • 你点的每个“在看”,我都认真当成了AI

预训练模型ProphetNet:根据未来文本信息进行自然语言生成相关推荐

  1. 使用google的bert结合哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer

    使用bert的哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer 前提 简要介绍 开始 导入必要的包和环境 准备并读取数据 导入模型的tokenizer 对数据进行t ...

  2. 将预训练模型应用于长文本阅读理解

    摘要: 基于transformers预训练模型(如BERT.RoBERTa)的表现突出,预训练模型基本作为模型的baseline,但是由于self-attention的矩阵计算时间复杂度为,导致输入长 ...

  3. Paddle加载NLP的各类预训练模型方法总结(以文本分类任务为例,包含完整代码)

    一.Introduction 最近宅在家,有空只能搞搞NLP的比赛.由于缺乏GPU的加持,只好白嫖百度的AI Studio(毕竟人家提供免费的Tesla V100).在此不得不赞扬一下优秀的国产深度学 ...

  4. 基于预训练模型Bart的英文文本摘要summary生成

    环境 python==3.7 transformers==4.9.2 rouge-score==0.0.4 数据准备 将数据放在一个txt中,每行为一条,文章正文跟label的摘要用\t分割 构建数据 ...

  5. 论文浅尝 | 如何利用外部知识提高预训练模型在阅读理解任务中的性能

    论文笔记整理:吴桐桐,东南大学博士生,研究方向为自然语言处理. 链接:https://www.aclweb.org/anthology/P19-1226/ 近年来,机器阅读理解已经逐渐发展为自然语言理 ...

  6. ACL 2021 | ChineseBERT:香侬科技提出融合字形与拼音信息的中文预训练模型

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:PaperWeekly 中文预训练模型 自 BERT 以来, ...

  7. 【ACL2021】ChineseBERT:香侬科技提出融合字形与拼音信息的中文预训练模型

    点击下面卡片,关注我呀,每天给你送来AI技术干货! 来自:PaperWeekly 中文预训练模型 自 BERT 以来,大规模预训练模型已成为自然语言处理研究的一大重点,无论是训练更大的模型,如 BER ...

  8. 6个你应该用用看的用于文本分类的最新开源预训练模型 忆臻

    作者:PURVA HUILGOL 编译:ronghuaiyang (AI公园) 原文链接: 6个你应该用用看的用于文本分类的最新开源预训练模型​mp.weixin.qq.com 导读 文本分类是NLP ...

  9. 6个用于文本分类的最新开源预训练模型(NLP必备)

    作者:PURVA HUILGOL  编译:ronghuaiyang 导读 文本分类是NLP的基础任务之一,今天给大家介绍6个最新的预训练模型,做NLP的同学一定要用用看. 介绍 我们正站在语言和机器的 ...

最新文章

  1. fast软件_自媒体者遇见喜欢好听的视频背景音乐,用一款软件就可以把它提取...
  2. 【Python】0/1背包、动态规划
  3. APP中的悬浮球设计总结
  4. 华为最新开源框架mindspore学习
  5. C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践
  6. [android] 与PHP的session进行交互demo
  7. homebrew卡在:Updating Homebrew处
  8. android 自定义权限弹窗_Android-开源通用弹窗的封装CommonPopupWindow(总得向别人学点什么)...
  9. mobi格式电子书_这几种电子书格式的关系与区别,资深Kindler有必要了解了解 !...
  10. 免费复制百度文库的方法
  11. 软件设计师教程第5版和第4版内容对比
  12. python表白程序-python告白程序
  13. iometer - 性能压力测试工具
  14. 程序员必备网络基础知识清单,简单易懂
  15. 【Python 数据科学】分组group by基础
  16. 一个通过SOAP web service驱动ssh/telnet执行命令的小平台
  17. 亚马逊黑五哑火,中国跨境电商高歌猛进!
  18. WMI权限问题:Access is denied, please check whether the [domain-username-password] ..
  19. 前端开发:JS中关于正则表达式的使用汇总
  20. SPI flash远程加载FPGA 应用

热门文章

  1. html标签的显示模式(块级标签,行内标签,行内块标签)(转)
  2. [Linux] ubuntu 格式化u盘
  3. 逆变器的技术创新 让光伏电站更具发展前景
  4. l5如何通过路由走api版本回退查找设置
  5. linux中登录类型及配置文件
  6. 基于HTML5的电信网管3D机房监控应用
  7. 安装、设置与启动MySql5.1.30绿色版的方法
  8. Wpf消息循环之消息传递
  9. Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
  10. php查询mysql放到数组中_php查询mysql数据库并将结果保存到数组的方法