NLP中的预训练语言模型(一)—— ERNIE们和BERT-wwm
随着bert在NLP各种任务上取得骄人的战绩,预训练模型在这不到一年的时间内得到了很大的发展,本系列的文章主要是简单回顾下在bert之后有哪些比较有名的预训练模型,这一期先介绍几个国内开源的预训练模型。
一,ERNIE(清华大学&华为诺亚)
论文:ERNIE: Enhanced Language Representation with Informative Entities
GitHub:https://github.com/thunlp/ERNIE
清华大学和华为诺亚方舟实验室联合提出的引入知识图谱来增强预训练模型的语义表达能力,其实预训练时就是在原来bert的基础上增加了一个实体对齐的任务。我们来看看这个新的任务是怎么做的,首先来看看整个预训练模型的架构

这里有两个encoder,T-encoder和K-encoder,其实这里的K-encoder只有在预训练的时候有作用,在之后的fine-tuning阶段只要使用T-encoder就可以了,所以这里的重要就是引入了实体对齐这个任务而已。
如上图中右边所示,给定一条序列由$w_1, w_2, ...w_n$组成,与及这条序列对齐的实体$e_1, e_2, ...e_m$,这些实体来自于知识图谱。因为一个实体会涉及到多个词,以上面图中为例$e_1 = Bob Dylan$,而在序列中与之对应的实体由两个token组成,即$w_1=bob, w_2=dylan$。因此对齐时我们将知识图谱中的实体和序列中实体的首个词对应,即在位置上将$e_1$对应到$w_1$上。
T-encoder的作用是对序列进行编码,结构和bert-base类似,但是层数是6层。K-encoder是对知识图谱实体和序列做聚合,知识图谱中的实体通过TransE做嵌入,具体表达式如下:

先对序列和实体编码,然后做聚合,聚合完之后更新$w$ 和$e$的状态

对于非实体的token的处理,直接对序列中的token更新即可:

了解了怎么将知识图谱中的实体引入到任务中,再来看看具体的任务是怎么构建的,本文提出了随机mask tokens-entity中的entity,然后去预测该位置对应的entity,本质上和MLM(mask language model)任务一致,都属于去噪自编码。具体mask的细节:
1)5%的tokens-entity对采用随机用其他的entity来替换,这主要是引入噪声,因为在实际的任务中也存在这种情况。
2)15%的tokens-entity对采用随机maskentity,然后来预测这个entity。
3)80%保持正常。
这篇论文主要的工作就是增加了这个任务,另外也提出了在实体类型和关系抽取两个任务上新的预训练方式,具体如下图:

就是引入了一些特殊的token来表明另外一些特殊token的身份。因为引入了实体对齐任务,因此该模型在一些和知识图谱相关的下游任务上要优于bert。
二,ERNIE(百度)
论文:ERNIE: Enhanced Representation through Knowledge Integration
GitHub:https://github.com/PaddlePaddle/ERNIE
百度提出的这个模型名称和上面一致,而且也号称引入了知识信息,但是做法完全不一样,这里主要的改变是针对bert中的MLM任务做了一些改进。具体的如下图所示


在bert中只是mask了单个token,但是在语言中,很多时候都是以短语或者实体存在的,如果不考虑短语或者实体中词之间的相关性,而将所有的词独立开来,不能很好的表达句法,语义等信息,因此本文引入了三种mask的方式,分别对token,entity,phrase进行mask。除此之外,本论文中还引入了对话语料,丰富语料的来源,并针对对话语料,给出了一个和NSP相似的任务。具体如下图:

这里构建了一个DLM的任务,其实做法和NSP类似,随机生成一些假的多轮QR对,然后让模型去预测当前的多轮对话是真实的还是假的。
作者测试了在很多任务上较bert都有1-2%的提升,并且作者做了实验表明DLM任务在NLI任务上有提升。
三,ERNIE 2.0(百度)
论文:ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FORLANGUAGE UNDERSTANDING
GitHub:https://github.com/PaddlePaddle/ERNIE
这是百度在之前的模型上做了新的改进,这篇论文主要是走多任务的思想,引入了多大7个任务来预训练模型,并且采用的是逐次增加任务的方式来预训练,具体的任务如下面图中所示:

因为在这里不同的任务输入不同,因此作者引入了Task Embedding,来区别不同的任务,训练的方法是先训练任务1,保存模型,然后加载刚保存的模型,再同时训练任务1和任务2,依次类推,到最后同时训练7个任务。个人猜测这样的做法可能是因为直接同时训练7个模型的效果并不好,但现在这种训练方式,一开始在任务1上已经预训练过,相当于已经有了一个很好的初始化参数,然后再去训练任务1和任务2能保证模型更好的收敛。
在效果上较ERNIE1.0版本基本上全面提升,并且在阅读理解的任务上有很大的提升。
四,BERT-wwm
论文:Pre-Training with Whole Word Maskingfor Chinese BERT
GitHub:https://github.com/ymcui/Chinese-BERT-wwm
BERT-wwm是哈工大开源出来的,在原始bert-base的基础上引入whole word mask,其实就是分词后的词进行mask,如下图所示:

因为是在bert-base的基础上训练的,因此无缝对接现在的bert的使用方法,直接替换预训练模型即可,都不需要更改任何文件。而且在很多中文任务上较bert都有一些提升,因此推荐使用。
NLP中的预训练语言模型(一)—— ERNIE们和BERT-wwm的更多相关文章
- NLP中的预训练语言模型(四)—— 小型化bert(DistillBert, ALBERT, TINYBERT)
bert之类的预训练模型在NLP各项任务上取得的效果是显著的,但是因为bert的模型参数多,推断速度慢等原因,导致bert在工业界上的应用很难普及,针对预训练模型做模型压缩是促进其在工业界应用的关键, ...
- NLP中的预训练语言模型(五)—— ELECTRA
这是一篇还在双盲审的论文,不过看了之后感觉作者真的是很有创新能力,ELECTRA可以看作是开辟了一条新的预训练的道路,模型不但提高了计算效率,加快模型的收敛速度,而且在参数很小也表现的非常好. 论文: ...
- NLP中的预训练语言模型(三)—— XL-Net和Transformer-XL
本篇带来XL-Net和它的基础结构Transformer-XL.在讲解XL-Net之前需要先了解Transformer-XL,Transformer-XL不属于预训练模型范畴,而是Transforme ...
- NLP中的预训练语言模型(二)—— Facebook的SpanBERT和RoBERTa
本篇带来Facebook的提出的两个预训练模型——SpanBERT和RoBERTa. 一,SpanBERT 论文:SpanBERT: Improving Pre-training by Represe ...
- 学习AI之NLP后对预训练语言模型——心得体会总结
一.学习NLP背景介绍: 从2019年4月份开始跟着华为云ModelArts实战营同学们一起进行了6期关于图像深度学习的学习,初步了解了关于图像标注.图像分类.物体检测,图像都目标物体检测等 ...
- 预训练语言模型整理(ELMo/GPT/BERT...)
目录 简介 预训练任务简介 自回归语言模型 自编码语言模型 预训练模型的简介与对比 ELMo 细节 ELMo的下游使用 GPT/GPT2 GPT 细节 微调 GPT2 优缺点 BERT BERT的预训 ...
- 预训练语言模型的前世今生 - 从Word Embedding到BERT
预训练语言模型的前世今生 - 从Word Embedding到BERT 本篇文章共 24619 个词,一个字一个字手码的不容易,转载请标明出处:预训练语言模型的前世今生 - 从Word Embeddi ...
- 知识增强的预训练语言模型系列之ERNIE:如何为预训练语言模型注入知识
NLP论文解读 |杨健 论文标题: ERNIE:Enhanced Language Representation with Informative Entities 收录会议:ACL 论文链接: ht ...
- PyTorch在NLP任务中使用预训练词向量
在使用pytorch或tensorflow等神经网络框架进行nlp任务的处理时,可以通过对应的Embedding层做词向量的处理,更多的时候,使用预训练好的词向量会带来更优的性能.下面分别介绍使用ge ...
随机推荐
- vue-loader和单页组件介绍
一.Vue Loader介绍 Vue Loader 是一个 webpack 的loader,它允许你以一种名为 单文件组件(SFCs)的格式撰写 Vue 组件.官方文档地址如下所示: Vue Load ...
- Codeforces Round 584 题解
-- A,B 先秒切,C 是个毒瘤细节题,浪费了很多时间后终于过了. D 本来是个 sb 题,然而还是想了很久,不过幸好没什么大事. E1,看了一会就会了,然而被细节坑死,好久才过. 感觉 E2 很可 ...
- Linux性能优化实战学习笔记:第四十四讲
一.上节回顾 上一节,我们学了网络性能优化的几个思路,我先带你简单复习一下. 在优化网络的性能时,你可以结合 Linux 系统的网络协议栈和网络收发流程,然后从应用程序.套接字.传输层.网络层再到链路 ...
- DP问题(2) : hdu 1421
题目转自hdu 1421,题目传送门 题目大意: 给你n个物品,你要搬走2*k个(也就是搬k次) 每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量) 要求所有 ...
- [LeetCode] 20. Valid Parentheses 验证括号
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- DVWA XSS (DOM) 通关教程
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...
- 可以在shell脚本中使用哪些类型的变量?
在shell脚本,我们可以使用两种类型的变量: 系统定义变量 用户定义变量 系统变量是由系统系统自己创建的.这些变量通常由大写字母组成,可以通过“set”命令查看. 用户变量由系统用户来生成和定义,变 ...
- oracle--10GRAC集群搭建问题OUI-25031
一,问题描述 安装RAC的过程中在结束 的阶段出现的错误 02,解决方式 这个可能在root.sh 执行的时候报错 由于版本问题: 修改vim /etc/redhat-release 把6.9改为4. ...
- [报名中] 腾讯技术专家为你揭秘"音视频及融合通信技术"
| 导语 6月29日,北京东直门亚朵S酒店,云+社区邀您参加<音视频及融合通信技术>沙龙活动,深度探讨音视频及融合通信技术的发展及实践,领略前沿,共创价值. 数字多媒体技术的不断发展对音视 ...
- SpringBoot整合junit
SpringBoot整合junit 主要分为4步 添加依赖 创建测试类 在测试类上添加注解 在测试类注入测试对象 1:导入依赖包 <dependency> <groupId>o ...