站在BERT肩膀上的NLP新秀们(PART I)

48 篇文章 18 订阅
29 篇文章 3 订阅

去年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:

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

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

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

  • Structured Knowledge Encoding: 对于给定的文本,如何高效地抽取并编码对应的知识图谱事实;
  • Heterogeneous Information Fusion: 语言表征的预训练过程和知识表征过程有很大的不同,它们会产生两个独立的向量空间。因此,如何设计一个特殊的预训练目标,以融合词汇、句法和知识信息又是另外一个难题。

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

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

okay,接下来看看模型到底长啥样?
在这里插入图片描述
如上图,整个模型主要由两个子模块组成:

  • 底层的textual encoder (T-Encoder),用于提取输入的基础词法和句法信息,N个;
  • 高层的knowledgeable encoder (K-Encoder), 用于将外部的知识图谱的信息融入到模型中,M个。
knowledgeable encoder

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

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

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

接着利用multi-head self-attention对文本和实体分别处理: { w ~ 1 ( i ) , … , w ~ n ( i ) } = M H − ATT ⁡ ( { w 1 ( i − 1 ) , … , w n ( i − 1 ) } ) { e ~ 1 ( i ) , … , e ~ m ( i ) } = M H − ATT ⁡ ( { e 1 ( i − 1 ) , … , e m ( 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)})
然后就是将实体信息和文本信息进行融合,实体对齐函数为 e k = f ( w j ) e_{k}=f\left(w_{j}\right) ek=f(wj):

  • 对于有对应实体的输入:
    h j = σ ( W ~ t ( i ) w ~ j ( i ) + W ~ e ( i ) e ~ k ( i ) + b ~ ( i ) ) w j ( i ) = σ ( W t ( i ) h j + b t ( i ) ) e k ( i ) = σ ( W e ( i ) h j + b e ( 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))
  • 对于没有对应实体的输入词:
    h j = σ ( W t ( i ) w ~ j ( i ) + b ~ ( i ) ) w j ( i ) = σ ( W t ( i ) h j + b t ( 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: { w 1 ( i ) , … , w n ( i ) } , { e 1 ( i ) , … , e m ( i ) } =  Aggregator  ( { w 1 ( i − 1 ) , … , w n ( i − 1 ) } , { e 1 ( i − 1 ) , … , e m ( 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 ( e j ∣ w i ) = exp ⁡ ( 1  inear  ( w i o ) ⋅ e j ) ∑ k = 1 m exp ⁡ ( 1  i near  ( w i o ) ⋅ e k ) 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(1 i near (wio)ek)exp(1 inear (wio)ej)

微调

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

  • 【CLS】:该token含有句子信息的表示,可适用于一般任务
  • 【HD】和【TL】:该token表示关系分类任务中的头实体和尾实体(类似于传统关系分类模型中的位置向量),然后使用【CLS】来做分类;
  • 【ENT】:该token表示实体类型,用于entity typing等任务。
    在这里插入图片描述
    试验部分也略过了哈~感觉有些部分还不是很清晰,需要看看源码…
reference

小结

芝麻街恐成最大赢家:

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

  • 11
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值