摘要
现有的大规模预料训练的语言表征模型(如BERT)能够很好的从文本中获取丰富的语义模型,进行微调后能够提升各种NLP任务。然而这些模型几乎不考虑知识图谱,知识图谱能够为语言理解提供丰富的结构化信息。本文通过外部知识增强语言表达,同时利用大规模语料库和知识图谱,充分利用词汇、句法和知识信息。
发展
预训练语言表征模型包括基于特征的和基于微调的两种。
- feature-based:
- 基于特征将单词转为分布表示(2008-2014)
表征好的词嵌入作为各种NLP任务的输入初始化,通过捕捉语料库中的句法和语义信息,能够提升效果,但是对于一词多义的情景无法处理 - the sequence-level model(ELMo 2018)
该模型能够在不同语言环境中捕捉复杂的单词特征,常用语生成上下文感知的词嵌入
- 基于特征将单词转为分布表示(2008-2014)
- fine-tuning
- auto-encoders(2015)
在为标记的文本上训练自动编码器,然后预训练模型的架构和参数作为其他特定NLP模型的起点。 - AWD-LSTM(2017)
这是一个通用的语言模型,能够生成一个预训练的TRANSFORMER来学习语言表征。 - BERT(2018)
具有多层Transformer的深度双向模型,达到了当前的峰点。
- auto-encoders(2015)
BERT模型当前处于各种霸主地位,不管是从实体识别、问题回答、自然语言推理以及文本分类都具有 the-state-of-the-art效果
然而,重点来了,看下图:
如果不知道《Blowin in the wind》是一首歌,《Chronicles:Volume One》是一本书,那么在实体类型中就难以判断 Bob Dylan既是歌手也是作家。
因此,考虑知识图谱的话,能够更好的对语言进行理解,从而提升各种知识驱动的应用。比如上图的实体分类,或者关系分类。
那么就得考虑,如何将知识图谱纳入语言表征模型,这个过程中,会面临两大挑战:
- 结构化的信息编码问题
给定文本后,在语言表征模型中,怎样有效地提取和编码文本内容在知识图谱出现的相关信息 - 异构信息融合问题
语言表征模型和知识图谱两个过程完全不同,因此处于两个独立的向量空间。因此,设计一个特殊的模型来融合词汇、句法和知识信息也很关键。
为了解决以上两个问题,本文提出了ERNIE:
- 为了对结构化信息进行编码,我们首先提取文本中的实体,然后将实体与知识图谱进行对齐。通过知识嵌入方法(如TransE)先对知识图谱进行编码,然后作为ERNIE模型的输入。
- 跟BERT一样,采用MLM(mask language model) 和 NSP(the next sentence prediction)作为预训练目标。此外,为了更好地融合文本和知识特征,我们通过屏蔽输入文本中的一些实体,然后让模型从知识图谱中找到一些合适实体来对齐。这样,不仅利用了上下文信息也利用了知识图谱的信息。
效果:在实体分类、关系分类的任务中,效果比BERT好~~~~
模型解析
如上图,ERNIE模型包括两个堆叠的模块,T-Encoder和K-Encoder
- T-Encoder:负责从文本中捕获基本的词法和语法信息
- K-Encoder:负责将知识图谱集成到底层的文本信息中
这样将词汇信息和实体的异构信息表示为一个统一的特征空间。
接下来详细解释着两部分
- T-Encoder
(1)首先对token embedding,segment embedding,position embedding 进行合并,作为T-Encoder的输入,即下图的Token-input
(2)然后再计算词法和语义特征,如下
{ w 1 , … , w n } = T − Encoder ( { w 1 , … , w n } ) \left\{\mathbf{w}_{1}, \ldots, \mathbf{w}_{n}\right\}=\mathrm{T}-\text { Encoder }\left(\left\{w_{1}, \ldots, w_{n}\right\}\right) { w1,…,wn}=T− Encoder ({ w1,…,wn})
T-Encoder 是一个多头双向Transformer,
- K-Encoder
(1)首先抽取文本中对应的实体 { e 1 , … , e m } \left\{e_{1}, \ldots, e_{m}\right\} { e1,…,em},通过知识图谱嵌入法(TransE)将实体转为对应向量表示 { e 1 , … , e m } \left\{\mathbf{e}_{1}, \ldots, \mathbf{e}_{m}\right\} { e1,…,em}
(2)然后将 { e 1 , … , e m } \left\{\mathbf{e}_{1}, \ldots, \mathbf{e}_{m}\right\} { e1,…,em} 和 { w 1 , … , w n } \left\{\mathbf{w}_{1}, \ldots, \mathbf{w}_{n}\right\} { w1,…,wn}作为K-Encoder的输入
{ w 1 o , … , w n o } , { e 1 o , … , e m o } = K − E n c o d e r ( { w 1 , … , w n } , { e 1 , … , e m } ) \left \{ w_{1}^o, \ldots, w_{n}^o \right \},\left\{e_{1}^o, \ldots, e_{m}^o\right\}= K-Encoder (\left\{\mathbf{w}_{1}, \ldots, \mathbf{w}_{n}\right\},\left\{\mathbf{e}_{1}, \ldots, \mathbf{e}_{m}\right\}) { w1o,…