【NLP】介绍几个语言生成的预训练模型

作者 | Chilia            

哥伦比亚大学 nlp搜索推荐        

整理 | NewBeeNLP

大家好,这里是NewBeeNLP。本篇介绍四个为语言生成设计的预训练模型 -- BART,MASS,PEGASUS,UniLM。其中前三种方法都使用了Transformer Encoder-Decoder结构,UniLM只使用了Transformer Encoder结构。本篇只介绍基本思想和预训练任务,具体的实验结果和分析请自行查看原论文。

1.BART

  • BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

  • https://aclanthology.org/2020.acl-main.703.pdf

BERT等预训练语言模型主要应用于文本理解(NLU), 而在文本生成任务(NLG)中表现不佳 -- 这主要是由预训练阶段和下游任务阶段的差异造成的。因此,BART提出了一种 符合生成任务的预训练方法。

BART的全称是Bidirectional and Auto-Regressive Transformers,顾名思义,就是兼具上下文语境信息(双向)和自回归(单向)特性的Transformer。BART其实并不是一个新的模型,因为它使用的结构还是传统的Seq2seq Transformer;它是一种针对生成任务而设计的预训练方法。

1.1 BART和GPT、BERT的区别与联系

BART预训练任务和GPT、BERT的对比如下图:

fd0a0ac0a7c20c79e3864ebd8190665c.png

  • BERT: 只有Transformer Encoder部分,随机MASK掉一些token,然后利用上下文还原。

  • GPT:只有Transformer Decoder部分,采用自回归的方法训练,每个位置只能关注到其左边的token。

  • BART:使用了完整的Transformer(Encoder+Decoder)。其encoder端的输入是加了噪音的序列,decoder端的输入是right-shifted的序列,decoder端的目标是原序列。模型设计的目的很明确,就是在利用encoder端的双向建模能力的同时,保留自回归的特性,以适用于生成任务。

1.2 BART使用的noise

相对于BERT中单一的noise类型 (只有简单地用[MASK] token进行替换这一种noise),BART在encoder端尝试了 多种更加灵活的noise (甚至可以改变序列的长度)然后decoder端试图恢复这些noise。这样做是因为:BERT的这种简单替换导致的是encoder端的输入携带了有关序列结构的一些信息(比如序列的长度等信息),而这些信息在文本生成任务中一般是不会提供给模型的。相比而言,BART采用更加多样的noise, 意图是破坏掉这些有关序列结构的信息 ,防止模型去依赖这样的信息。

2a85b9619c14e51a0f72c64bdbaf4e68.png

BART采用的noise

BART采用的一些noise包括:

  • Token Masking : BERT的方法--随机将token替换成[MASK] -> 训练模型推断单个token的能力

  • Token Deletion : 随机删去token -> 训练模型推断单个token_及其位置_的能力

  • Text Infilling : 随机将一段连续的token(称作span)替换成[MASK],span的长度服从 \lambda=3 的泊松分布。注意span长度为0就相当于插入一个[MASK]。这个方法带来了更多的 灵活性 !->训练模型推断一个span对应多少token的能力

  • Sentence Permutation : 将一个document的句子打乱。->类似BERT中的 NSP 目标,训练模型推断不同句子之间关系的能力

  • Document Rotation : 从document序列中随机选择一个token,然后使得该token作为document的开头。->训练模型找到document开头的能力

这些noise变换方式还可以组合,带来了更多的灵活性。

1.3 BART在下游任务的应用

① Sequence Classification

将该序列同时输入给encoder端和decoder端,然后取decoder最后一个token对应的final hidden state表征。注意我们需要在decoder端序列末尾增加一个[EOS],让它能够关注到整个句子。

ab8c15e28df5c3430b60adeb97f6a19d.png

② Token Classification

将该序列同时输入给encoder端和decoder端,使用decoder的final hidden states作为每个token的表征

③ Sequence Generation

由于BART本身就是在sequence-to-sequence的基础上构建并且预训练的,它天然比较适合做序列生成的任务,比如生成式问答、文本摘要、机器对话等。encoder就是输入的序列,decoder用自回归的方法生成输出序列

④ Machine Translation

BART能够提升其他语言 翻译到英语 的效果。具体的做法是将BART encoder端的embedding层替换成随机初始化的encoder, 新的encoder也可以用不同的vocabulary 。通过这个新加的encoder,我们可以将新的语言映射到BART能解码到English(假设BART是在English的语料上进行的预训练)的空间。具体的finetune过程分两阶段:

  1. 第一步冻结大部分参数,只更新新加的encoder + BART positional embedding + BART的encoder第一层的self-attention 输入映射矩阵。

  2. 第二步更新全部参数,但是只训练很少的几轮。

90221bdcf1071f8dd641322c2fc55b29.png

2. MASS

  • Masked Sequence to sequence pre-training for Language Generation

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

和BART类似,MASS也是使用完整的Transformer结构,并且对encoder输入进行一些破坏,让decoder试图还原之。MASS的提出早于BART,因此它提出的noise方法也没有BART那么丰富。具体做法就是mask掉句子的一部分,再用decoder去预测之,如下图所示:

d34cace9be0ecf1f9382f2ab04d457e6.png

和BART不同的是,这里的decoder只输入应该被预测的token,这是为了可以让decoder依赖于encoder的编码,让两者更好地共同训练。

BERT的MLM预训练任务和GPT的自回归生成任务,分别是MASS k = 1 和 k = m 的特例:

39f10a4f42d84a9414540c969985c002.png

3. Pegasus

  • PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization

  • https://arxiv.org/abs/1912.08777

PEGASUS是专门针对 生成式摘要 设计的预训练模型。基本思想就是将输入文档的重要句子remove/mask,然后通过其他句子预测它们。其实验效果刷新了12项summarization任务;在low-resource摘要方面展现惊人性能,仅用了1000个example就超过了6个数据集上的最新结果。

3.1 Gap Sentences Generation (GSG)

我们知道,预训练目标与下游任务越接近,下游任务就会表现越好。那么,为了更好的完成文本摘要,可以mask掉文本中重要的一些句子,然后 拼接 这些gap-sentences形成伪摘要。相应位置的Gap-sentences用[MASK1]来替换。Gap sentences ratio(GSR)表示选中的gap sentences占总文档的比例。选择Gap Sentence的方法有:

  • Random: 随机选m个句子

  • Lead: 选前m个句子

  • Principal: 选最重要的m个句子。如何衡量句子的重要性呢?文中又提出了四种方法:

    • ① 独立选择(Ind.)/连续选择(Seq.): 句子重要性可根据一个句子与其它句子集的ROUGE1-F1来计算,其公式为 , 独立选择就是选择得分最高的m个句子;连续选择则是贪婪地最大化选中句子集S\cup\{x_{i}\}与其余句子集 的ROUGE1-F1值,具体算法如下:

24586574629493f4b3a043910928cd7f.jpeg
  • ② 计算ROUGE1-F1的方式也可分为两种 -- Uniq 和 Orig。Uniq把n-gram当成集合处理(去重);Orig则允许重复n-gram出现。

因此,Ind/Seq 和 Uniq/Orig两两组合可得到四种方式。最后的实验结果表明,选择了文档30%的句子作为Gap sentences,用Ind-Orig选重要句子效果最好。

3.2 预训练任务

本文MASK的方式有两种:

① MLM:选择输入文本的15%的tokens, 其中80%的被替换为[MASK2]、10%的被随机的token替换、10%未发生变化。在encoder部分恢复这些token。

② GSG:以[MASK1]去mask选中的重要句子,在decoder部分恢复这些句子。

最终实验表明,仅采用MLM效果最差,预训练在100-200K steps时,GSG+MLM的效果在提升,但之后包含MLM效果在下降。因而最后PEGASUS-LARGE仅采用GSG,PEGASUS-BASE采用GSG+MLM。

2b7302e9a928f7630cdc14fa468c1cfe.png

4. UniLM

  • Unified Language Model Pre-training for Natural Language Understanding and Generation

  • https://arxiv.org/abs/1905.03197

UniLM是一种简洁的预训练方法,其模型的框架与BERT一致,是由一个多层Transformer Encoder网络构成;但训练方式不同,它是通过联合训练三种不同目标函数得到 -- 通过控制mask来控制预测单词的 可见上下文词语数量 ,在同一个模型中同时实现了bidirectional, unidirectional和seq2seq prediction 三种任务,因此可以同时用于语言生成和语言理解。

模型的三种预训练目标如下图所示:

cc9a6b97720804e7d026c0e1685400df.png

seq2seq task在pretrain过程中,mask token可以出现在第一个文本序列中、也可以出现在第二个文本序列中;但是到了fine-tuning阶段时,mask token仅出现在第二个文本序列中。

  • Bidirectional LM: 跟Bert模型一致。同时,与bert模型一样,也进行NSP任务的预测。

  • Left-to-Right LM: 有从右到左和从左到右两者,类似GPT。

  • Seq2seq LM :如果[Mask]出现在第一段文本中,仅可以使用第一段文本中所有的token进行预测;如果预测[Mask]出现在第二段文本中时,可以采用第一段文本中所有的token,和第二段文本中左侧所有token预测。这种方法虽然不是seq2seq,但是通过mask可以做到seq2seq同样的效果。

综上,就是对于不同的语言模型,我们可以仅改变self-attention mask,就可以完成multi-task联合训练。

在预训练时的一个batch中,使用1/3的数据进行bidirectional task,1/3的数据进行seq2seq task,1/6的数据进行left-to-right unidirectional task,1/6的数据进行right-to-left unidirectional task。

模型结构与BERT-large模型一致(layer = 24, hidden_size = 1024, head = 16),约有340M参数,并由训练好的BERT-large模型进行初始化。MASK的概率为15%,在被掩掉的token中,有80%使用[MASK]替换,10%使用字典中随机词进行替换,10%保持越来token不变(这与BERT一致)。此外,在80%的情况下,每次随机掩掉一个token,在剩余的20%情况下,掩掉一个二元token组或三元token组。

本文参考资料

[1]

潘小小:【论文精读】生成式预训练之BART: https://zhuanlan.zhihu.com/p/173858031

[2]

李rumor:BERT生成式之MASS解读: https://zhuanlan.zhihu.com/p/67687640

[3]

Espersu:PEGASUS模型:一个专为摘要提取定制的模型: https://zhuanlan.zhihu.com/p/214195504

[4]

刘聪NLP:UniLM论文阅读笔记: https://zhuanlan.zhihu.com/p/113380840

 

eec975716b0d6bef085694d0a3fb8e1c.jpeg

 
 
 
 
往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10021.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ChatGPT+Xmind一键生成思维导图,简直泰裤辣

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

【使用心得】最新版ChatGPT查资料

最新版ChatGPT是一款非常实用的软件,它提供了广泛的辅助工具,可帮助我在各个领域提升工作效率。使用体验更加流畅,界面也相对更加美观。 首先,最新版ChatGPT加强了语言翻译功能,并进一步完善了交互方式,使…

ChatGPT4和低代码来临,程序员面临下岗?

一个网友吐槽道: “ 建站出来了,你们说程序员会失业。 低代码出来了,你们说程序员会失业。 Copilot出来了,你们说程序员会失业。 Chatgpt出来了,你们说程序员会失业 虽然这只是网友的吐槽,但却引起了小编…

ChatGPT时代的得意忘言

David S. Soriano, CC BY-SA 4.0 via Wikimedia Commons 导读: 以ChatGPT为代表的新的人工智能语言模型,具有划时代的意义。一个值得思考的问题是,人工智能具备的测算能力,无法完全等同于人类的判断力。 在《测算与判断&#xff1…

ChatGPT提示词工程进阶教学

ChatGPT提示词工程 1 两种大型语言模型LLM1.1 基础大模型(base LLM)1.2 指令调优大模型(Instruction Tuned LLM) 2 如何更清晰、具体地书写提示词2.1 在提示词中使用“定界符”2.2 向模型请求结构化的输出2.3 要求模型检查任务条件是否满足2.4 输入多范例…

【花雕学AI】ChatGPT的四大语言处理神器:文本生成、问答、创意生成和内容优化的技巧和实例

引言:ChatGPT是一个人工智能聊天机器人,它可以理解和交流多种语言,例如中文、英文、日文、西班牙语、法语、德语等。它是由OpenAI开发的,基于GPT-3.5和GPT-4这两个大型语言模型。它不仅可以与用户进行对话,还可以根据用…

chatgpt赋能python:Python文本清洗:从混乱到整洁

Python 文本清洗:从混乱到整洁 如果你曾经在处理文本数据时花费了大量时间将信息从混乱的文本中取出来,那么你应该考虑使用 Python 进行文本清洗。Python 是一种易于学习和使用的编程语言,可用于自动化文本清洗流程,实现高效准确…

难逃 AI 的法眼:ChatGPT 文本检测器(ERNIE 文本分类)

★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>> 参考项目地址:https://github.com/Hello-SimpleAI/chatgpt-comparison-detection 本项目 Demo 地址:https://aistudio.baidu.com/aistudio/projectdetail…

chatgpt赋能python:Python对文本进行分词

Python对文本进行分词 在自然语言处理(NLP)领域中,对文本进行分词是一个重要的预处理步骤。分词的目的是将一段文本切割成由词语组成的序列,为后续的处理提供基础。 Python在NLP任务中是广泛使用的编程语言之一,有许…

chatgpt赋能python:Python中文文本预处理

Python中文文本预处理 Python作为一门广泛应用于数据分析、机器学习和人工智能的编程语言,在处理中文文本方面也有不可忽视的优势。但是由于中文特殊性,中文文本预处理也有独特的需求。本文将介绍在Python中进行中文文本预处理的常见操作。 分词 分词…

DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective. www.deepspeed.ai/ DeepSpeed Integration DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

使用EasyExcel导入导出Excel

在管理一个系统时,总会有许多的数据,为了方便浏览查看数据,系统总会提供「导出Excel」的功能;有导出就有导入,在要向数据库中插入大量的数据时,我们向程序提供准备好的 Excel,然后程序读取表格内…

EasyExcel导入导出,处理数据

1.导出模块,导出中有中文文件名称,设置格式 /*** 以流方式响应回给客户端,返回值类型设置成void** param response 输出excel表格,让用户下载*/PostMapping("/exportExcel")public void exportExcel(ZqRewardProjectContract zqRew…

QT常用表格导出为Excel以及Excel导入表格

表格导出为Excel 注意:演示所用到的软件为Qt5.14.2,编译器为MinGW 64-bit,电脑必须装有office所用的类为 QAxObject,QAxObject可以实例化为一个空对象,使用它应该封装的COM对象的名称,或者使用一个指向表示…

获取微信的聊天记录导出为Excel

获取微信的聊天记录导出为Excel ios端 1.工具2.步骤 1.工具 iTunes楼月免费iTunes备份管理器DB Browser for SQLitepython 2.步骤 通过iTunes备份ipone中的数据到电脑上, 打开楼月免费iTunes备份管理器选择备份的记录 导出 微信个人信息中的DB文件夹 使用 DB Br…

Excel表格的导入导出——EasyExcel

参考视频 csdn参考地址 一、导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version> </dependency>二、实体类 方式一&#xff1a;Excel Property&#xff08;&…

Easyexcel导入导出多个sheet

EasyExcel对于导入导出的操作十分简洁&#xff0c;记录一下多个sheet且内容不一致的导入导出。 引入 easyExcel依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.1</version></d…

EasyExcel实现Excel文件多sheet导入导出

一、概述 最近公司需要做一个需求&#xff0c;通过excel上传病例信息&#xff0c;并将病例信息进行归档和整理&#xff1b;该需求可以简化为excel模板下载和excel上传并解析归档。既然知道需求了&#xff0c;找excel的操作工具jar包吧&#xff0c;发现以前常用的poi需要写的代…

导入导出excel表格EasyExcel操作

一、添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.3</version> </dependency>二、创建实体类 /*** 创建User类,用于构建向Excel表格中写数据的类型;* ExcelPropert…

EasyExcel的导入导出使用

1、说明 EasyExcel是阿里出的一款基于Java的、快速、简洁、解决大文件内存溢出的处理Excel的开源工具&#xff0c;本文主要是使用这个工具对Excel导入导出进行讲解。 官网&#xff1a; https://easyexcel.opensource.alibaba.com/github&#xff1a; https://github.com/alib…