写在前面

大家好,我是刘聪NLP。

前几天在做生成任务的时候,在Github里搜索「中文BRAT模型」,一下搜到了复旦大学邱锡鹏老师组的「CPT」(Chinese Pre-trained Unbalanced Transformer)论文,并且在该论文中开源了中文的BART模型(感恩)。

个人在自己的对话生成任务上进行了简单的实验,发现CPT模型在某些任务上,不仅效果好,生成推理速度也很快,所以在此分享给大家。

paper:https://arxiv.org/pdf/2109.05729.pdf
github:https://github.com/fastnlp/CPT

介绍

自2018年BERT模型横空出世,预训练语言模型基本上已经成为了自然语言处理领域的标配,而目前的很多预训练语言模型不能很好地兼顾在NLU任务和NLG任务。如下表所示,以Transformer-Encoder结构为主的预训练语言模型,BERT、RoBERTa、ZEN、NEZHA、ERNIE-1.0/2.0等模型在NLU任务上表现更突出;以Transformer-Decoder结构为主的预训练语言模型GPT、CPM等模型在无条件NLG任务上表现更突出;以Transformer-Encoder-Decoder结构为主的预训练语言模型CPM-2、BART、T5等模型在有条件NLG任务上表现更突出。

有人会说:有一些其他的统一模型可以兼顾NLU任务和NLG任务。不要急,后面会进行对比介绍。

而在该篇论文中,提出了一种新的中文预训练非平衡变压器CPT,它同时适用于NLU和NLG任务。

模型结构

CPT的架构非常简单,它将完整Transformer的Encoder-Decoder结构进行改变,如下图所示,

主要由三个部分组成:

  • 共享编码器(S-Enc):其结构为深层Transformer-Encoder,目的是获取用于语言理解和生成的通用语义表示。

  • 理解解码器(U-Dec):其结构为浅层Transformer-Encoder,专为NLU任务设计,U-Dec的输入是S-Enc的输出,并通过MLM(masked language modeling)任务进行预训练。

  • 生成解码器(G-Dec):其结构为浅层Transformer-Decoder,为NLG任务设计,适合处理条件生成任务,并通过DAE(denoising auto-encoding)任务进行预训练。

通过多任务的联合预训练,CPT模型能够分别提高语言理解能力和生成能力。由于采用较深的共享编码器(S-Enc)和两个较浅的解码器(U-Dec、G-Dec),在ULN任务上计算成本不变,但在生成任务上,「浅层解码器可以更快地推理生成」

简单地,可以理解为,将BERT模型和BART模型放到了一起,共有前六层参数,后六层参数,分别用各自模型的。当然CPT模型编码器和解码器层数不平衡,并且这种不平衡操作已经在机器翻译和纠错任务上得到验证(可见原文参考文献)。

与其他统一模型的区别

  • 「与Unilm模型的区别」 UniLM模型使用一组不同的attention mask机制进行预训练,这使得该模型可用于生成和分类任务。不同之处在于,UniLM模型的所有参数都在生成和判别任务上是共享的,而CPT使用两个独立的解码器,CPT可以利用很好地利用DAE预训练任务,训练更好地解码器,用于生成任务。

  • 「与GLM模型的区别」 GLM模型与UniLM模型相似,使用了不同的attention mask机制和修改掩码内容的位置信息进行预训练。

  • 「与PALM模型的区别」 PALM是一个专注于条件生成的预训练模型。为了迫使编码器理解给定上下文的含义,MLM被添加到预训练的编码器中。相比之下,CPT有一个单独的解码器可以避免DAE带来的负面影响。可以在NLU任务上也具有良好的性能。

  • 「与ERNIE3.0模型的区别」 ERNIE3.0模型虽然使用了通用编码器和几种针对特定任务的解码器,但采用了Transformer-XL结构为骨干,并生成部分的预训练任务为左至右单向语言模型任务,而CPT采用编码器-解码器架构,更适合Seq2Seq任务。

预训练

共使用MLM和DAE两种任务进行模型预训练,如下:

  • MLM任务:采用MLM任务预训练S-Enc和U-Dec的参数。给定一个句子,采用全词掩码的技术,用[MASK]标记掩盖掉句子中原有15%的词语,并按照原始BERT的设置,仅有80%用特殊的[MASK]标记替换,有10%用字典中随机标记替换,有10%保持不变。

  • DAE任务:采用破坏原始文本再重构原始文本的方式,预训练S-Enc和U-Dec的参数。通过两种方法来破坏原始文本,如下:(1)Token Infilling:将选定的全词使用一个[Mask]标记替换;(2)Sentence Permutation:按标点切分文本后,将句子顺序随机打乱。

微调

由于CPT模型有两个解码器,因此在不同任务上,存在多种微调的形式,详细如下。

文本分类任务

在文本分类任务上,共有5种微调方式,如下图所示,

  • :与BERT模型模式一致。将U-Dec模块的[CLS]向量接入全连接层,进行分类。

  • :与BART模型模式一致。将相同的文本输入S-Enc和G-Dec模块中,将G-Dec模块的最终输出[SEP]向量接入全连接层,进行分类。

  • :将相同的文本输入S-Enc和G-Dec模块中,将U-Dec模块的[CLS]向量与G-Dec模块的最终输出[SEP]向量进行拼接,再接入全连接层,进行分类。

  • :与BERT-Prompt方式一致,构造手工输入模板,将[Mask]标签预测到分类标签字符上,最终获取分类类别。

  • :将文本输入到S-Enc块中,用G-Dec模块进行分类标签字符预测,最终获取分类类别。

下表为五种方法,在CLUE不同数据集上的结果,可以发现,不同数据集上,微调方式的效果,略有不同,但是整体上,针对于base模型,方式更好;针对于large模型,方式更好。(下面在测试集上,均取上述策略作为微调策略)

在CLUE上5种分类数据集上测试集结果,如下表所示,可以看出,大部分好于BERT以及RoBERT模型。

序列标注任务

与文本分类任务相似,包含三种微调策略,、和,下图仅展示了和

  • :与BERT模型模式一致。将U-Dec模块的每个字符向量进行分类,得到序列标签。

  • :与BART模型模式一致。将相同的文本输入S-Enc和G-Dec模块中,将G-Dec模块的每个字符向量进行分类,得到序列标签。

  • :将相同的文本输入S-Enc和G-Dec模块中,将U-Dec模块的每个字符向量与G-Dec模块的每个字符向量进行拼接,再进行分类,得到序列标签。 从下表中可以看出,在中文分词和命名实体识别任务上,CPT模型均取得了较好的效果。

阅读理解任务

与序列标注任务相似,包含三种微调策略,从下表中可以看出,在CMRC2018数据集和DRCS数据集上,CPT-large模型均取得了较好的效果。

条件生成任务

与其他生成模型一致,如下图所示,将条件文本输入到S-Enc编码器中,然后通过起始字符通过G-Dec解码器进行逐字生成。

从下表中可以看出,CPT模型在条件生成任务上,也取得了不错的效果。 并且由于CPT模型仅采用了浅层解码器,因此推理生成速度较同量级的BART模型,快很多;base模型可以到达1.4-1.5倍速度,large模型可以达到1.7倍速度。

总结

首先CPT模型作为论文副产物,开源了一个质量较高的中文BART模型(感恩);其次CPT模型使用简单地方式,结合两个不同的解码器,将预训练语言模型有机的结合在了一起;最后采用非平衡的编码、解码层数,加快了生成模型的推理速度。

喜欢的的同学们,记得点赞,关注,转载请说明出处哟!!!

整理不易,请多多点赞,关注,有问题的朋友也欢迎加我微信「logCong」、公众号「NLP工作站」、知乎「刘聪NLP」私聊,交个朋友吧,一起学习,一起进步。

我们的口号是“生命不止,学习不停”。

CPT模型:一种中文兼顾NLU和NLG的非平衡预训练语言模型相关推荐

  1. 《预训练周刊》第7期:傅立叶图像变换器解析、阿里达摩院发布最大中文预训练语言模型PLUG

    No.07 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 ‍‍‍超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第7期 ...

  2. 270亿参数、刷榜CLUE,阿里达摩院发布最大中文预训练语言模型PLUG(开放测试)...

    转自:机器之心 经历「大炼模型」后,人工智能领域正进入「炼大模型」时代.自去年 OpenAI 发布英文领域超大规模预训练语言模型 GPT-3 后,中文领域同类模型的训练进程备受关注.今日,阿里达摩院发 ...

  3. 270亿参数、刷榜CLUE,阿里达摩院发布最大中文预训练语言模型PLUG

    作者|机器之心编辑部 来源|机器之心 经历「大炼模型」后,人工智能领域正进入「炼大模型」时代.自去年 OpenAI 发布英文领域超大规模预训练语言模型 GPT-3 后,中文领域同类模型的训练进程备受关 ...

  4. TiBERT:藏语预训练语言模型——中文翻译

    TiBERT--藏语预训练语言模型 摘要 ​ 预训练语言模型在大规模无标签文本上进行训练,可以在许多不同的下游任务中获得最先进的结果.然而,目前的预训练语言模型主要集中在汉语和英语领域.对于藏语这样的 ...

  5. NLP之PLUG:阿里达摩院发布最大中文预训练语言模型PLUG的简介、架构组成、模型训练、使用方法之详细攻略

    NLP之PLUG:阿里达摩院发布最大中文预训练语言模型PLUG的简介.架构组成.模型训练.使用方法之详细攻略 目录 PLUG的简介 PLUG的得分 PLUG的特点 PLUG的架构组成 PLUG的模型训 ...

  6. 首个金融领域的开源中文预训练语言模型FinBERT了解下

    背景及下载地址 为了促进自然语言处理技术在金融科技领域的应用和发展,熵简科技 AI Lab 近期开源了基于 BERT 架构的金融领域预训练语言模型 FinBERT 1.0.据我们所知,这是国内首个在金 ...

  7. 开源开放 | 熵简科技 AI Lab 开源金融领域中文预训练语言模型 FinBERT

    1 背景及下载地址 为了促进自然语言处理技术在金融科技领域的应用和发展,熵简科技 AI Lab 近期开源了基于 BERT 架构的金融领域预训练语言模型 FinBERT 1.0.相对于Google发布的 ...

  8. 是时候“抛弃”谷歌 BERT 模型了!新型预训练语言模型问世

    作者 | XLNet Team 译者 | 孙薇 责编 | Jane 出品 | AI科技大本营(ID: rgznai100) 近日,XLNet 团队发布了新型预训练语言模型 XLNet,这个新模型在各项 ...

  9. 看MindSpore加持下,如何「炼出」首个千亿参数中文预训练语言模型?

    摘要:千亿参数量的中文大规模预训练语言模型时代到来. 本文分享自华为云社区< MindSpore开源框架加持,如何「炼出」首个千亿参数.TB级内存的中文预训练语言模型?>,原文作者:che ...

最新文章

  1. NS3_Tutorial 中文版: 第一章 简介 第二章 资源
  2. java 音乐api接口_关于网易云音乐爬虫的api接口?
  3. VS2015占内存大吗?_手机是6GB运行内存,何为后台却显示3G内存?
  4. 【SpringMVC】从Fastjson迁移到Jackson,以及对技术选型的反思
  5. linux 文件系统 代码,Linux文件系统介绍
  6. clistctrl 单机空白处 会取消选中_官方默许BUG:无法选中也能被控制?这些秘密很多玩家到现在都没发现!...
  7. 【HDU - 2072 】单词数(字符串读入技巧,sstream大法,水题,字符串读入格式)
  8. Linux下使用Speedtest测试网速
  9. os.path vs pathlib
  10. 什么是SQL Server数据字典?为什么要创建一个?
  11. 个性化推荐中的数据稀疏性
  12. 古人从瀑布中看到彩虹,怎么想的?
  13. C语言全局变量,局部变量,静态局部变量的区分
  14. Bugku之网站被黑
  15. 解决电脑能连接WIFI但是无法正常上网问题
  16. 【shell】scp 同时向多个主机拷贝数据
  17. 腾讯云存储产品全线升级,满足更多高性能存储场景
  18. matlab 变分不等式,求解变分不等式的matlab程序
  19. 汉语属于哪个语系_汉语语族的所属语系
  20. 一个快速测试PlayCanvas Demo 的工程(内附源码)

热门文章

  1. 独特的电子邮箱地址-LeetCode练习(Java实现)
  2. 达内 Java 全套教程 NPM、PYPI、DockerHub 备
  3. c调用c++:opencv c版本打开相机方法
  4. 13. 利用 条件运算符 的嵌套来完成此题: 学习成绩>=90分的同学A表示, 60-89分之间的用B表示, 60分以下的用C表示
  5. 部署-用Yum安装PHP7.4(CentOS 7.8)
  6. 「CSA49」Bunny on Number Line
  7. sanity测试_Sanity.io入门-您可以自定义的无头CMS
  8. 蓝懿学习之tableView
  9. POJ 1830 开关问题 高斯消元
  10. java版地图源码_TreeMap就这么简单【源码剖析】