去年NLP领域最火的莫过于BERT了,得益于数据规模和计算力的提升,BERT在大会规模语料上预训练(Masked Language Model + Next Sentence Prediction)之后可以很好地从训练语料中捕获丰富的语义信息,对各项任务疯狂屠榜。

我们在对BERT进行微调之后可以很好地适用到自己的任务上,具体可以参考之前一篇BERT简单应用:BERT模型实战之多文本分类(附源码)。

如果想深入了解BERT的运行机制,就需要去仔细地研读一下BERT的源码啦,其实也不是很难理解:BERT源码分析PART I。

在了解了BERT的发展史【NLP大杀器BERT模型解读】之后,今天这篇文章我们来看看在BERT提出大半年之后,又有哪些基于BERT的有趣的研究。

  • ERNIE from Baidu
  • ERNIE from THU

1、ERNIE: Enhanced Representation through Knowledge Integration(Baidu/2019)

百度提出的ERNIE模型主要是针对BERT在中文NLP任务中表现不够好提出的改进。我们知道,对于中文,bert使用的基于字的处理,在mask时掩盖的也仅仅是一个单字,举个栗子:

我在上海交通大学玩泥巴-------> 我 在 上 【mask】 交 通 【mask】学 玩 【mask】 巴。

作者们认为通过这种方式学习到的模型能很简单地推测出字搭配,但是并不会学习到短语或者实体的语义信息, 比如上述中的【上海交通大学】。于是文章提出一种知识集成的BERT模型,别称ERNIE。ERNIE模型在BERT的基础上,加入了海量语料中的实体、短语等先验语义知识,建模真实世界的语义关系。

在具体模型的构建上,也是使用的Transformer作为特征抽取器。这里如果对于特征抽取不是很熟悉的同学,强烈推荐张俊林老师的"放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较"。

那么怎么样才能使得模型学习到文本中蕴含的潜在知识呢?不是直接将知识向量直接丢进模型,而是在训练时将短语、实体等先验知识进行mask,强迫模型对其进行建模,学习它们的语义表示。

具体来说, ERNIE采用三种masking策略:

  • Basic-Level Masking: 跟bert一样对单字进行mask,很难学习到高层次的语义信息;
  • Phrase-Level Masking: 输入仍然是单字级别的,mask连续短语;
  • Entity-Level Masking: 首先进行实体识别,然后将识别出的实体进行mask。

经过上述mask训练后,短语信息就会融入到word embedding中了

此外,为了更好地建模真实世界的语义关系,ERNIE预训练的语料引入了多源数据知识,包括了中文维基百科,百度百科,百度新闻和百度贴吧(可用于对话训练)。

关于论文后面的试验就不再赘述。

reference:
  • 如何评价百度新发布的NLP预训练模型ERNIE?
  • 中文任务全面超越 BERT:百度正式发布NLP预训练模型ERNIE
  • 官方源码

2、ERNIE: Enhanced Language Representation with Informative Entities(THU/ACL2019)

本文的工作也是属于对BERT锦上添花,将知识图谱的一些结构化信息融入到BERT中,使其更好地对真实世界进行语义建模。也就是说,原始的bert模型只是机械化地去学习语言相关的“合理性”,而并学习不到语言之间的语义联系,打个比喻,就比如掉包xia只会掉包,而不懂每个包里面具体是什么含义。于是,作者们的工作就是如何将这些额外的知识告诉bert模型,而让它更好地适用于NLP任务。

但是要将外部知识融入到模型中,又存在两个问题:

为此,作者们提出了ERNIE模型,同时在大规模语料库和知识图谱上预训练语言模型:

  1. 抽取+编码知识信息: 识别文本中的实体,并将这些实体与知识图谱中已存在的实体进行实体对齐,具体做法是采用知识嵌入算法(如TransE),并将得到的entity embedding作为ERNIE模型的输入。基于文本和知识图谱的对齐,ERNIE 将知识模块的实体表征整合到语义模块的隐藏层中。
  2. 语言模型训练: 在训练语言模型时,除了采用bert的MLM和NSP,另外随机mask掉了一些实体并要求模型从知识图谱中找出正确的实体进行对齐(这一点跟baidu的entity-masking有点像)。

okay,接下来看看模型到底长啥样?

如上图,整个模型主要由两个子模块组成:

knowledgeable encoder

这里T-encooder跟bert一样就不再赘述,主要是将文本输入的三个embedding加和后送入双向Transformer提取词法和句法信息:{w1,…,wn}=T−Encoder ({w1,…,wn})\left\{\boldsymbol{w}_{1}, \ldots, \boldsymbol{w}_{n}\right\}=\mathrm{T}-\text { Encoder }\left(\left\{w_{1}, \ldots, w_{n}\right\}\right){w1,,wn}=TEncoder({w1,,wn})

K-encoder中的模型称为aggregator,输入分为两部分:

  • 一部分是底层T-encoder的输出{w1,…,wn}\left\{\boldsymbol{w}_{1}, \ldots, \boldsymbol{w}_{n}\right\}{w1,,wn}
  • 一部分是利用TransE算法得到的文本中entity embedding,{e1,…,em}\left\{e_{1}, \dots, e_{m}\right\}{e1,,em}
  • 注意以上为第一层aggregator的输入,后续第K层的输入为第K-1层aggregator的输出

接着利用multi-head self-attention对文本和实体分别处理:{w~1(i),…,w~n(i)}=MH−ATT⁡({w1(i−1),…,wn(i−1)}){e~1(i),…,e~m(i)}=MH−ATT⁡({e1(i−1),…,em(i−1)})\begin{aligned}\left\{\tilde{\boldsymbol{w}}_{1}^{(i)}, \ldots, \tilde{\boldsymbol{w}}_{n}^{(i)}\right\} &=\mathrm{MH}-\operatorname{ATT}\left(\left\{\boldsymbol{w}_{1}^{(i-1)}, \ldots, \boldsymbol{w}_{n}^{(i-1)}\right\}\right) \\\left\{\tilde{\boldsymbol{e}}_{1}^{(i)}, \ldots, \tilde{\boldsymbol{e}}_{m}^{(i)}\right\} &=\mathrm{MH}-\operatorname{ATT}\left(\left\{\boldsymbol{e}_{1}^{(i-1)}, \ldots, \boldsymbol{e}_{m}^{(i-1)}\right\}\right) \end{aligned}{w~1(i),,w~n(i)}{e~1(i),,e~m(i)}=MHATT({w1(i1),,wn(i1)})=MHATT({e1(i1),,em(i1)})
然后就是将实体信息和文本信息进行融合,实体对齐函数为ek=f(wj)e_{k}=f\left(w_{j}\right)ek=f(wj):

  • 对于有对应实体的输入:
    hj=σ(W~t(i)w~j(i)+W~e(i)e~k(i)+b~(i))wj(i)=σ(Wt(i)hj+bt(i))ek(i)=σ(We(i)hj+be(i))\begin{aligned} \boldsymbol{h}_{j} &=\sigma\left(\tilde{\boldsymbol{W}}_{t}^{(i)} \tilde{\boldsymbol{w}}_{j}^{(i)}+\tilde{\boldsymbol{W}}_{e}^{(i)} \tilde{\boldsymbol{e}}_{k}^{(i)}+\tilde{\boldsymbol{b}}^{(i)}\right) \\ \boldsymbol{w}_{j}^{(i)} &=\sigma\left(\boldsymbol{W}_{t}^{(i)} \boldsymbol{h}_{j}+\boldsymbol{b}_{t}^{(i)}\right) \\ \boldsymbol{e}_{k}^{(i)} &=\sigma\left(\boldsymbol{W}_{e}^{(i)} \boldsymbol{h}_{j}+\boldsymbol{b}_{e}^{(i)}\right) \end{aligned}hjwj(i)ek(i)=σ(W~t(i)w~j(i)+W~e(i)e~k(i)+b~(i))=σ(Wt(i)hj+bt(i))=σ(We(i)hj+be(i))
  • 对于没有对应实体的输入词:
    hj=σ(Wt(i)w~j(i)+b~(i))wj(i)=σ(Wt(i)hj+bt(i))\begin{aligned} \boldsymbol{h}_{j} &=\sigma\left(\boldsymbol{\boldsymbol { W }}_{t}^{(i)} \tilde{\boldsymbol{w}}_{j}^{(i)}+\tilde{\boldsymbol{b}}^{(i)}\right) \\ \boldsymbol{w}_{j}^{(i)} &=\sigma\left(\boldsymbol{W}_{t}^{(i)} \boldsymbol{h}_{j}+\boldsymbol{b}_{t}^{(i)}\right) \end{aligned}hjwj(i)=σ(Wt(i)w~j(i)+b~(i))=σ(Wt(i)hj+bt(i))

上述过程就是一个aggregator的操作,整个K-encoder会叠加M个这样的block:{w1(i),…,wn(i)},{e1(i),…,em(i)}=Aggregator ({w1(i−1),…,wn(i−1)},{e1(i−1),…,em(i−1)})\left\{\boldsymbol{w}_{1}^{(i)}, \ldots, \boldsymbol{w}_{n}^{(i)}\right\},\left\{e_{1}^{(i)}, \ldots, \boldsymbol{e}_{m}^{(i)}\right\}=\text { Aggregator }(\left\{\boldsymbol{w}_{1}^{(i-1)}, \ldots, \boldsymbol{w}_{n}^{(i-1)}\right\},\left\{e_{1}^{(i-1)}, \ldots, e_{m}^{(i-1)}\right\} ){w1(i),,wn(i)},{e1(i),,em(i)}=Aggregator({w1(i1),,wn(i1)},{e1(i1),,em(i1)})
最终的输出为最顶层的Aggregator的token embedding和entity embedding。

改进的预训练

除了跟bert一样的MLM和NSP预训练任务,本文还提出了另外一种适用于信息融合的预训练方式,denoising entity auto-encoder (dEA). 跟baidu的还是有点不一样,这里是有对齐后的entity sequence输入的,而百度的是直接去学习entity embedding。dEA 的目的就是要求模型能够根据给定的实体序列和文本序列来预测对应的实体:p(ej∣wi)=exp⁡(1inear (wio)⋅ej)∑k=1mexp⁡(1i near (wio)⋅ek)p\left(e_{j} | w_{i}\right)=\frac{\exp \left(1 \text { inear }\left(\boldsymbol{w}_{i}^{o}\right) \cdot \boldsymbol{e}_{j}\right)}{\sum_{k=1}^{m} \exp \left(1 \text { i near }\left(\boldsymbol{w}_{i}^{o}\right) \cdot \boldsymbol{e}_{k}\right)}p(ejwi)=k=1mexp(1i near(wio)ek)exp(1inear(wio)ej)

微调

为了使得模型可以更广泛地适用于不同的NLP任务,作者也学习BERT设计了不同的特殊的token:

  • 【CLS】:该token含有句子信息的表示,可适用于一般任务
  • 【HD】和【TL】:该token表示关系分类任务中的头实体和尾实体(类似于传统关系分类模型中的位置向量),然后使用【CLS】来做分类;
  • 【ENT】:该token表示实体类型,用于entity typing等任务。

    试验部分也略过了哈~感觉有些部分还不是很清晰,需要看看源码…
reference
  • ACL 2019将会有哪些值得关注的论文?
  • ACL 2019 | 基于知识增强的语言表示模型,多项NLP任务表现超越BERT
  • ACL 2019 | 清华等提出ERNIE:知识图谱结合BERT才是「有文化」的语言模型
  • 官方源码

小结

芝麻街恐成最大赢家:

Bert and Ernie live together in an apartment located in the basement of 123 Sesame Street. Despite sleeping in separate beds, they share the same bedroom, which has led to some speculation that they are a representation of gay lovers.”

抛弃模型重名的巧合,这两个工作都是将外部知识融入到基础BERT模型中,不同的是baidu将知识图谱在第一阶段直接编码进了预训练模型,而THU的模型则是选择在第二阶段将知识图谱的信息融入到预训练好的模型中去,可以更好地利用知识图谱中的实体及其内在关系等信息;



以上~
2019.06.03

站在BERT肩膀上的NLP新秀们(PART I)相关推荐

  1. 站在BERT肩膀上的NLP新秀们:XLMs、MASS和UNILM

    作者丨高开远 学校丨上海交通大学硕士生 研究方向丨自然语言处理 写在前面 在前一篇站在 BERT 肩膀上的 NLP 新秀们(PART I)[1]介绍了两个都叫 ERNIE 的模型,思路也挺相似的,都是 ...

  2. 站在BERT肩膀上的NLP新秀们(PART II)

    写在前面 在前一篇站在BERT肩膀上的NLP新秀们(PART I)介绍了两个都叫ERNIE的模型,非常有趣思路也挺相似的,都是给bert模型增加外部知识信息,使其能更好地"感知"真 ...

  3. 站在BERT肩膀上的NLP新秀们(PART III)

    最近看到了很多大佬关于BERT的思考,总结得非常棒,这里直接贴上传送门: NLP的bert和后bert时代的挑战 后Bert时代NLP相关进展 Bert时代的创新:Bert应用模式比较及其它 Bert ...

  4. 腾讯:站在“山寨”肩膀上的巨人

    最近几年"山寨"的话题一直没断过,山寨肯德基.山寨耐克.山寨手机等,而腾讯也当仁不让成了"山寨大王".顾名思义"山寨"一直被冠以假的成分,尤 ...

  5. 站在CNN肩膀上的巨大腾飞,Swin Transformer:实现对各类SOTA的降维打击

    作者丨陀飞轮@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/360513527 导读 本文介绍了一种称为Swin Transformer的新型transformer, ...

  6. 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma

    这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...

  7. EOS原力孤矢:站在EOS肩膀上,看齐BTC

    FBEC2018 由深圳市互联网文化市场协会指导,游戏陀螺.陀螺财经联合主办的2018未来商业生态链接大会暨第三届金陀螺奖颁奖盛典(简称"FBEC2018")将于2018年12月在 ...

  8. 站在巨人肩膀上优雅地分蛋糕

    作者:不多爸初稿.巨人姐修订 编辑:PRS布道者 普通人并非不懂保护图片版权 我是一名软件开发工程师,和很多人一样,开了一个微信订阅号「不多不多」记录一下自己的思考与生活,目前已经发布 60 多篇文章 ...

  9. 站在巨人肩膀上的意思就是拒绝重复造轮子,分享12个常见的js插件

    1.copy-to-clipboard (剪贴板) github/zenorocha/clipboard.js 2.FileSaver (文件另存为) github/eligrey/FileSaver ...

最新文章

  1. 元素重叠及position定位的z-index顺序
  2. 用python制作信贷审批监测表
  3. 在家学习的核心就是专注
  4. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程
  5. Dynamics AX 2012 R2 外部程序运行在没有AD的环境(如PDA) 调用AX服务
  6. EXT.NET 更改lable和Text的颜色
  7. django HttpResponse的用法
  8. 二分查找的最大比较次数
  9. 回文数(信息学奥赛一本通-T1309)
  10. 构建之法第一、二、十六章
  11. 算法(一):二分查找法
  12. 23. Navigator javaEnabled() 方法
  13. 微信公众平台H5支付
  14. 模块化,组件化,插件化简析
  15. 【matlab】iir滤波器
  16. wireshark抓包使用教程
  17. PowerPC PPC460-S MMU(三 Access Control)
  18. 敷完面膜后要擦水乳吗_敷完面膜还要擦水乳吗
  19. 基于Springboot的智慧校园管理系统(PC端和APP端双端应用)
  20. 汕头大学计算机英语复试,汕头大学计算机系2021年硕士研究生复试办法

热门文章

  1. SAP License:对虚拟利润中心的几点认识
  2. CentOS 安装MySQL5.7 源码方式安装
  3. Docker学习笔记之浅谈虚拟化和容器技术
  4. win7+opencv3.0.0+vs2010 安装及配置
  5. python_cookie
  6. 机器学习:样本去中心化目的
  7. 博文视点大讲堂28期 “助你赢在软件外包行业”成功举办
  8. 玩转Android---事件监听篇---第2篇
  9. UITableView 自带编辑删除 自己定义button
  10. [Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误