本文整理自知乎文章:https://zhuanlan.zhihu.com/p/100248426
任务定义
- 实体链接就是把文本中的mention链接到知识图谱里的entity的任务。
- 当一句话:乔丹是美国著名的篮球运动员。这句句子里面出现的实体有
- 人物:乔丹
- 国家:美国
- 运动:篮球
- 职业:运动员
- 可以将句子中的mention对应到知识图谱内具体的三元组集合,则为实体链,简称EL
应用
- 有KB的地方必然会出现EL,KB的意思是知识图谱库,比如中国最大的KB——CNDBpedia,必然会用到EL去完成以下的内容:
- 问答系统
- 文本分析:可以延伸出推荐系统
- 信息检索
- 扩充知识图谱
分类
- 大体来说,EL的工作分为两类:
- End-to-End:先从文本中提取mention,找到对应的候选实体,然后进行消歧义,再映射到给定的KB中。
- Linking-Only:直接将text和mention作为输入,找到候选实体以及消歧义,映射至KB中。
- 针对上面两个内容,有如下两个方法:
- Candidate Entity Generation:从mention出发,找到KB中所有可能的实体,组成候选实体集。
- Entity Disambiguation:从candidate entities中,选择最可能的实体作为预测实体。
具体的方法
-
Candidate Entity Generation ( CEG ) :
- 网上都没有讲得太清楚,我的理解就是根据给定的文本,我要找出文本中的mention对应的具体的entity的类别,比如最开始给出的例子中的乔丹,一定是个人物、或者是个姓名,而不会是个球鞋的品牌。
- 最重要的方法:Name Dictionary ( { mention: entity } )
- 构建方法:
- Wikipedia
- 基于搜索引擎
- Heuristic Methods
- 人工标注,用户日志
- 具体的方法还是要看EL的使用场景。比如百科问答或者是用文本的阅读增强,就需要用到Wikipedia和搜索引擎;如果是某个具体的行业领域,就需要通过一些启发式的方法、用户日志、网页爬取、人工标注的方法来构建Name Dictionary
-
Entity Disambiguation ( ED ) :(实体消歧)
-
特征的类型
- Context-Independent Features:
- LinkCount : 知识库中某个提及m指向实体e的次数
- Entity Attributes : Popularity、Type
- Context-Dependent Features:
- Textual Context: BOW(词袋), Concept Vector
- Coherence Between Entities ( 实体一致性 ): WLM、PMI、Jaccard Distance
- 其中:
- Jaccard Distance:与Jaccard Distance相关的另一个单词叫余弦距离,本来,在多维空间中,两个向量的方向越一致,则余弦值越小,比欧式距离更能体现两个向量在方向上的差异。Jaccard系数——集合A和B交集元素的个数在A、B并集中所占的比例,用符合J(A,B)表示,是用来衡量两个集合相似度的一种指标,Jaccard Distance是与Jaccard系数完全相反的一种度量,主要是用来衡量两个集合差异性的一种指标。
- PMI:点互信息算法,两个词的PMI值越大,则相关性越强;PMI为0则不相关也不互斥;PMI为负的则互斥性越大
- Context-Independent Features:
-
在特征里,独立的有:mention到LinkCount、实体自身的一些属性。其中LinkCount作为先验知识,在用来做实体消歧的时候很有用。
-
不独立的有:文本的context、实体间的一致性。文本context可以用一些深度学习的方法去深度理解文本的语义,从而实现消除歧义;实体间的coherence则困难一些,由于文本包含的mention都没有确定,所以全局地进行entities的消歧义实际上是一个NP-hard的问题。目前,如何更加快速有效地利用一致性特征是一个非常有趣的方向。
-
基于这些常用的特征,ED的方法大致有以下几种:
- Learning to Rank Methods: 这里需要用到机器学习的ranking技术中的learn2rank技术,包括pointwise,pairwise,listwise三大类型,具体的内容本文中不再赘述,这里有个写的比较详细的网站可以去瞅瞅:https://blog.csdn.net/weixin_34005042/article/details/86264976。由于ED任务中的ground truth 只有一个实体(在有监督学习中,数据是有标注的,以(x,t)的形式出现,其中x是输入数据,t是标注,正确的t标注是ground truth,错误的标记则不是,所以也有人将标注数据都叫做ground truth),一般都是用point-wise来做,输入是文本的context、mention、某个entity的一些attributes,输出mention指向该entity的置信度,以此rank,选出最可信的entity。
- Probabilistic Methods: Incorporate heterogeneous knowledge into a probabilistic model,将异构知识整合进概率模型中。结合不同的信息得到条件概率P(e|m,c),其中c是输入文本,e是实体,m是mention。比如用归一化的LinkCount信息,作为先验概率P(e|m)
- Graph-Based Approaches: maximize coherence between entities.利用图特征(entity,embedding,relation),在消歧义时,考虑全局消歧义后的一致性。
-
-
Unlinkable Mention Prediction
- 如何拒识未知实体
- NIL Threshold:通过一个置信度的阈值来调节
- Binary Classification:训练一个二分类的模型,判断Top-ranked Entity是否真的是文中mention想要表达的实体
- Rank with NIL:在rank的时候,在候选实体中加入NIL Entity
- 如何拒识未知实体
EL近期的工作
主要讲三篇论文:
1. Deep Joint Entity Disambiguation with Local Neural Attention ( 2017 EMNLP )
2. Improving entity linking by modeling latent relations between mentions. ( 2018 ACL )
3. DeepType: multilingual entity linking by neural type system evolution. ( 2018 AAAI )
- Deep Joint Entity Disambiguation with Local Neural Attention
- 这篇文章是EL领域第一篇不依赖特征工程,而是用深度学习来学习基础特征的工作,主要的创新点有三个:
- Entity Embeddings:用到了知识库里实体的embedding
- Context Attention:用attention机制来获得context的表征
- Collective Disambiguation:考虑实体间的coherence,联合消歧
- 给定文本 D D D,其中有一堆 m e n t i o n ( m 1 , m 2 , . . . . . . , m n ) mention(m_{1},m_{2},......,m_{n}) mention(m1,m2,......,mn)。 m i m_{i} mi对应的实体为 e i e_{i} ei,对应的 c o n t e x t context context为 c I c_{I} cI,对应的候选实体集为 C i = ( e i 1 , e i 2 , . . . . . . , e i l i ) C_{i}=(e_{i1},e_{i2},......,e_{il_{i}}) Ci=(ei1,ei2,......,eili)。文章提出了两种模型:Local model,Global model,local只考虑mention的context;global还需要考虑实体间的一致性,联合消歧。
- Local model:令 Ψ ( e i , c i ) \Psi{(e_{i},c_{i})} Ψ(ei,ci)为local score function,local model要解决的问题即: e i ∗ = arg max e i ∈ C i Ψ ( e i , c i ) e^{*}_{i} = \argmax_{e_{i}\in C_{i}}\Psi ({e_{i},c_{i}}) ei∗=ei∈CiargmaxΨ(ei,ci)
- Global model: 除了context,还考虑实体间的coherence(为了简化,只考虑二元一致性)。令
Φ
(
e
i
,
e
j
,
D
)
\Phi(e_{i},e_{j},D)
Φ(ei,ej,D)为实体之间的pair-wise coherence score function,
E
=
(
e
1
,
e
2
,
.
.
.
.
.
.
,
e
n
)
E = (e_{1},e_{2},......,e_{n})
E=(e1,e2,......,en),全局搜索:
E
∗
=
arg max
E
∈
C
1
×
C
2
×
.
.
.
.
.
.
×
C
n
∑
i
=
1
n
Ψ
(
e
i
,
c
i
)
+
∑
i
≠
j
Φ
(
e
i
,
e
j
,
D
)
E^{*} = \argmax_{E\in C_{1}\times C_{2}\times ...... \times C_{n}}\sum^{n}_{i=1}\Psi (e_{i},c_{i}) + \sum_{i\neq j}\Phi(e_{i},e_{j},D)
E∗=E∈C1×C2×......×Cnargmaxi=1∑nΨ(ei,ci)+i=j∑Φ(ei,ej,D)
Local and pair-wise score function的计算方式如下: Ψ ( e i , c i ) = e i T B f ( c i ) \Psi (e_{i},c_{i}) = e^{T}_{i}Bf(c_{i}) Ψ(ei,ci)=eiTBf(ci) Φ ( e i , c j , D ) = 1 n − 1 e i T R e j \Phi(e_{i},c_{j},D) =\frac{1}{n-1} e^{T}_{i}Re_{j} Φ(ei,cj,D)=n−11eiTRej
其中, e i , e j e_{i},e{j} ei,ej是实体ei,ej的embedding, B , R B,R B,R是对角矩阵, f ( c i ) f(c_{i}) f(ci)是在上下文 c i c_{i} ci上取attention后的表征,具体的attention计算如下图:
- 这篇文章是EL领域第一篇不依赖特征工程,而是用深度学习来学习基础特征的工作,主要的创新点有三个:
-
这里是用candidate entity embeddings做key,context word embeddings做value,得到score matrix之后,按列取max,如果某个word的score较高表示这个word至少和一个entity相关度高。为了去除stop words的影响,作者只取了top R的score,剩下的置为负无穷。得到score后,还会结合m到e的LinkCount先验概率,计算出最终各个实体的概率。该工作在AIDA数据集上取得了SOTA ( local: 88.8、global: 92.22 )。
-
Improving entity linking by modeling latent relations between mentions
- 上一篇论文降到了在EL中引入entity embedding作为信息,那自然还会想到一个问题——KB中还有其他的信息吗?比如开头的句子中,乔丹与美国是否构成了公民的关系
- 于是隐关系信息的方法被提出,假定图谱中有K个关系,令 ( m i , m j ) (m_{i},m_{j}) (mi,mj)之间为关系k的置信度为 a i j k a_{ijk} aijk,上文中的pair-wise coherence score function可以写成: Φ ( e i , c j , D ) = ∑ k = 1 K α i j k e i T R e j \Phi(e_{i},c_{j},D) =\sum^{K}_{k=1} \alpha_{ijk} e^{T}_{i}Re_{j} Φ(ei,cj,D)=k=1∑KαijkeiTRej α i j k = 1 Z i j k exp ( f T ( m i , c i ) D k f ( m i , c j ) d ) \alpha_{ijk} = \frac{1}{Z_{ijk}}\exp(\frac{f^{T}(m_{i},c_{i})D_{k}f(m_{i},c_{j})}{\sqrt{d}}) αijk=Zijk1exp(dfT(mi,ci)Dkf(mi,cj))
- 其中,
R
k
,
D
k
R_{k},D_{k}
Rk,Dk都是用来表示关系k的对角矩阵(类似于关系k的embedding),
Z
i
j
k
Z_{ijk}
Zijk为归一化因子,
f
f
f为映射函数这样一来,就隐式地添加了关系k,关于如何计算归一化因子,有如下两种思路:
- Rel-norm:Relation-wise normalization。就是以关系k维度来norm。
- Ment-norm:Mention-wise Normalization。就是以实体j维度来norm。
-
DeepType: multilingual entity linking by neural type system evolution
-
前两篇论文都是在联合消歧的这个角度,做了一定的工作。本文则另辟蹊径,从优化知识库的角度type系统来做。文章很重要的一个观点是:当我们能预测出实体的mention的type,消歧这个任务就做得差不多了。EL系统主要分为三个模块
- Type System:一组正交的type轴和一个type标注函数
- type轴:一组互斥的type集合 A A A(比如 I s H u m a n ⋂ I s P l a n e = { } IsHuman\bigcap IsPlane = \{\} IsHuman⋂IsPlane={})
- type标注函数: t 1 , . . . . . . , t k = T y p e L a b e r l e r ( e , A ) t_{1},......,t_{k} = TypeLaberler(e,A) t1,......,tk=TypeLaberler(e,A)
- 举个例子:假定一个包含两个轴的type系统 { I s A , T o p i c } \{IsA,Topic\} {IsA,Topic},比如<奥巴马>对应的就是{黑人,美国前总统}
- Type Classifier:给定mention和text,输出mention对应实体的type
- Entity Prediction Model:给定mention、text和候选实体,预测概率最高的实体。(本文使用的是LinkCount)
- Type System:一组正交的type轴和一个type标注函数
-
很显然,这三个模块的核心就在于Type System的构建,由于Entity Predict Model是直接用的LinkCount,实际上整个EL系统就两组参数,一组是Type System的离散参数 A A A,一组是 M = ( m 0 , e 0 G T , ξ m n ) M=(m_{0},e_{0}^{GT},\xi_{m_{n}}) M=(m0,e0GT,ξmn),其中 e i G T e_{i}^{GT} eiGT为ground truth的实体, ξ m I \xi_{m_{I}} ξmI为候选实体集,令 S m o d e l ( A , θ ) S_{model}(A,\theta) Smodel(A,θ)为EL系统的消歧准确率,则我们的问题可以定义为: max A max θ S m o d e l ( A , θ ) = ∑ ( m , e G T , ξ m ) ∈ M e G T ( e ∗ ) ∣ M ∣ \max_{A}\max_{\theta}S_{model}(A,\theta)=\frac{\sum(m,e^{GT},\xi_{m})\in M^{e^{GT}(e^{*})}}{|M|} AmaxθmaxSmodel(A,θ)=∣M∣∑(m,eGT,ξm)∈MeGT(e∗)
-
其中 e ∗ = arg max e ∈ A E n t i t y S c o r e ( e , m , D , A , θ ) e^{*} = \argmax_{e\in A} EntityScore(e,m,D,A,\theta) e∗=e∈AargmaxEntityScore(e,m,D,A,θ)这个entityScore可以看成是给定m后,EL系统给出的置信度,后面会给具体公式。
-
同步优化两组参数很耗时,本文将Type System和Type Classifier两个部分独立优化
-
a. Discrete Optimization of Type System:
- 先固定住classifier,优化Proxy Objective
J
(
A
)
∼
S
m
o
d
e
l
(
A
,
θ
)
J(A)\sim S_{model}(A,\theta)
J(A)∼Smodel(A,θ),先假设两个classifier model的极端:
- Oracle(极端优秀),不管 A A A咋变,都能预测对mention的type,然后从该type对应的候选实体集的子集中选LinkCount最高的, S o r a c l e S_{oracle} Soracle
- Greedy(极端愚蠢),不预测type,直接从候选实体集中选linkcount最高的, S g r e e d y S_{greedy} Sgreedy
- 所以优化的目标函数可以定为最简单的 J ( A ) = S o r a c l e J(A)=S_{oracle} J(A)=Soracle,但考虑到真实的学习能力,更合理的目标函数应该为: J ( A ) = ( S o r a c l e − S g r e e d y ) ∗ l ( A ) + S g r e e d y − λ ∣ A ∣ J(A)=(S_{oracle}-S_{greedy})*l(A) + S_{greedy}-\lambda |A| J(A)=(Soracle−Sgreedy)∗l(A)+Sgreedy−λ∣A∣
- 那如何才能不依赖A去计算学习能力呢?如果softmax使用了多分类,那每更换一次,就要训练一个classifier,因此作者设计了二元分类器代替了多分类器,令
l
(
A
)
=
∑
t
∈
A
A
U
C
(
t
)
/
∣
A
∣
l(A)=\sum_{t\in A} AUC(t)/|A|
l(A)=∑t∈AAUC(t)/∣A∣,这样只需要最开始计算一次就好了,如下图:
- 先固定住classifier,优化Proxy Objective
J
(
A
)
∼
S
m
o
d
e
l
(
A
,
θ
)
J(A)\sim S_{model}(A,\theta)
J(A)∼Smodel(A,θ),先假设两个classifier model的极端:
-
b. Type Classifier:
上面讲过了 -
c. Inference:
- 在训练完Type System和Type Classifier之后,我们就可以计算我们上面说的Entity Score了: s e , m , D , A , θ = P ( e ∣ m ) ∗ ( 1 − β + β ( ∏ i = 1 k ( 1 − a i + a i P ( t i ∣ m , D ) ) ) ) s_{e,m,D,A,\theta} = P(e|m)*(1-\beta+\beta(\prod^{k}_{i=1}(1-a_{i}+a_{i}P(t_{i}|m,D)))) se,m,D,A,θ=P(e∣m)∗(1−β+β(i=1∏k(1−ai+aiP(ti∣m,D))))
- 其中 A = ( t 1 , . . . . . . , t k ) A=(t_{1},......,t_{k}) A=(t1,......,tk)是k个type组成的type轴, α , β ∈ ( 0 , 1 ) \alpha,\beta\in(0,1) α,β∈(0,1)是smoothing系数,最终在AIDA数据集上取得了SOTA(94.88)
-
数据集
Knowledge Base | EL监督数据 |
---|---|
Wikipedia | 中文:CCKS |
DBpedia | 英文:TAC KBP 2010 EL |
Freebase | AIDA CoNLL-YAGO |
一个不错的多因子消歧总结:https://link.zhihu.com/?target=https%3A//cloud.tencent.com/developer/article/1491361
ccks实体链接第一名方案:https://link.zhihu.com/?target=https%3A//github.com/panchunguang/ccks_baidu_entity_link
DeepType原作博客:https://link.zhihu.com/?target=https%3A//openai.com/blog/discovering-types-for-entity-disambiguation/