知识图谱实体链接:一份“由浅入深”的综述
作者丨Nicolas
单位丨追一科技AI Lab研究员
研究方向丨信息抽取、机器阅读理解
EL入门
实体链接,就是把文本中的 mention 链接到 KG 里的 entity 的任务。如下图所示 [1]:
有些读者可能对知识图谱的概念不甚了解,这边先解释一下图谱里常用的一些概念。
Knowledge Graph(知识图谱):一种语义网络,旨在描述客观世界的概念实体及其之间的关系,有时也称为 Knowledge Base(知识库)。
图谱由三元组构成:<实体1,关系,实体2> 或者 <实体,属性,属性值>;
例如:<姚明,plays-in,NBA>、<姚明,身高,2.29m>;
常见的KB有:Wikidata、DBpedia、YOGO。
Entity(实体):实体是知识图谱的基本单元,也是文本中承载信息的重要语言单位。
Mention(提及):自然文本中表达实体的语言片段。
回过头再看,上面的这个图中,“乔丹”、“美国”、“NBA”这些蓝色的片段都是 mention,其箭头所指的“块块”就是它们在图谱里对应的 entity。
2. 几个应用
EL 有什么用呢?一般有 KB 的地方就离不开 EL。以下是 EL 的几个应用 [2]:
Question Answering:EL 是 KBQA 的刚需,linking 到实体之后才能查询图数据库;
Content Analysis:舆情分析、内容推荐、阅读增强;
Information Retrieval:基于语义实体的搜索引擎,google 搜索一些实体,右侧会出现 wikipedia 页面;
Knowledge Base population:扩充知识库,更新实体和关系。
3. Taxonomy
大体来说,EL 的工作可以分为两类 [3]:
End-to-End:先从文本中提取到实体 mention(即 NER),对应到候选实体,然后将提取到的 entities 消除歧义,映射到给定的 KB 中。
Linking-Only:与第一种方法对比,跳过了第一步。该方法直接将 text 和 mention 作为输入,找到候选实体并消除歧义,映射到给定的 K B中。
由于端到端的工作比较少,且 NER 也没太多可讲的。本文着重介绍 Linking-Only 的相关技术方向和工作。
EL的三大模块
EL 的工作非常有挑战性,主要有两个原因:
1. Mention Variations:同一实体有不同的 mention。(<科比>:小飞侠、黑曼巴、科铁、蜗壳、老科)
2. Entity Ambiguity:同一 mention 对应不同的实体。(“苹果”:中关村苹果不错;山西苹果不错)
针对上述两个问题,一般会用 Candidate Entity Generation (CEG) 和 Entity Disambiguation (ED) 两个模块 [2] 来分别解决:
1. Candidate Entity Generation:从 mention 出发,找到 KB 中所有可能的实体,组成候选实体集(candidate entities);
2. Entity Disambiguation:从 candidate entities 中,选择最可能的实体作为预测实体。
下面我们来讲讲这两个模块里都有些啥东西。其中,CEG 的方法都比较朴素,没什么可讲的,笔者会把重点放在 ED 上。
1. Candidate Entity Generation (CEG)
最重要的方法:Name Dictionary ( {mention: entity} )
哪些别名:首字母缩写、模糊匹配、昵称、拼写错误等。
构建方法:
Wikipedia (Redirect pages, Disambiguation pages, Hyperlinks);
基于搜索引擎:调 google api,搜 mention。若前 m 个有 wiki entity,建立 map;
Heuristic Methods;
人工标注、用户日志。
CEG 这部分,最主流也最有效的方法就是 Name Dictionary,说白了就是配别名。虽然 CEG 很朴素,但作为 EL 任务中的第一道门槛,其重要性不言而喻。对于每一个 entity,紧凑而充分地配置别名,才能保证生成的 candidate entites 没有遗漏掉 ground truth entity。
具体的,要配置哪些别名,要用什么构建方法,往往取决于 EL 的使用场景。比如做百科问答或是通用文本的阅读增强,就很依赖于 wikipedia 和搜索引擎;但如果是某个具体的行业领域,就需要通过一些启发式的方法、用户日志、网页爬取,甚至人工标注的方法来构建 Name Dictionary。
2. Entity Disambiguation (ED) (手动划重点)
Features:
Context-Independent Features:
LinkCount: #(m->e),知识库中某个提及 m 指向实体 e 的次数;
Entity Attributes: Popularity, Type;
Context-Dependent Features:
Textual Context: BOW, Concept Vector
Coherence Between Entities: WLM, PMI, Jaccard Distance
实体消歧时,不同场景的特征选取是非常重要的。总的来说,实体消歧的特征分为,context 独立和 context 不独立的。
特征里,独立的有:mention 到实体的 LinkCount、实体自身的一些属性(比如热度、类型等等)。其中,LinkCount 作为一个先验知识,在消歧时,往往很有用,比如当我们在问“姚明有多高?”时,大概率都是在问<篮球运动员姚明>,而不是其他不为人知的“姚明”。
虽然 context 中完全没有包含篮球运动员这一信息,但大多数情况下,根据“姚明”到<篮球运动员姚明>的 LinkCount 最高,选其作为实体进行查询,都会是一个不错的答案。
不独立的有:文本的 context、实体间的 coherence(一致性)。这部分,可深入挖掘的东西比较多,文本 context 可以用一些深度学习的方法去深度理解文本的语义,从而实现消歧;实体间的一致性更加有趣,由于文本包含的所有的 mention 都没有确定,所以全局地进行 entities 的消歧实际上是一个 NP-hard 的问题。因此,如何更加快速有效地利用一致性特征,是一个非常有趣的方向。
基于这些常用的特征,消歧的方法可以大致分为以下几种:
Learning to Rank Methods: Point-wise、Pair-wise、List-wise。由于 ED 任务 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 coherene between entities。利用图特征(entity embedding、relation),在消歧时,考虑全局消歧后实体的一致性;
一般来说,现在的 ED 工作都会综合以上的方法来设计,后面我们会具体介绍几篇近期的论文,大家可以对照这三类方法看看。
3. 还有个小问题:Unlinkable Mention Prediction
除了上面的两大模块,还有一个小问题,就是如何拒识掉未知实体,毕竟你不可能建立一个能穷举万物的 KB。这就涉及到 Unlinkable Mention Prediction,不是很复杂,一般就三种做法:
NIL Threshold: 通过一个置信度的阈值来卡一下;
Binary Classification: 训练一个二分类的模型,判断 Top-rankeded Entity 是否真的是文中的 mention 想要表达的实体;
Rank with NIL: 在 rank 的时候,在候选实体中加入 NIL Entity。
一般就阈值卡一下就好了,不是太大的问题。但如果具体的场景是做 KB Population 且实体还不是很全的时候,就需要重点关注一下了。
EL的近期工作
1. Deep Joint Entity Disambiguation with Local Neural Attention. (Ganea and Hofmann, 2017, EMNLP)
2. Improving entity linking by modeling latent relations between mentions. (Le et al., 2018, ACL)
3. DeepType: multilingual entity linking by neural type system evolution. (Raiman et al., 2018, AAAI)
1. Deep Joint Entity Disambiguation with Local Neural Attention
早期的 EL 工作都非常依赖 manually-designed 的特征,这篇文章是 EL 领域第一篇不依赖特征工程,用深度学习来学习基础特征的工作。主要的创新点和关键部件有三个:
Entity Embeddings: 用到了知识库里实体的 embedding;
Context Attention: 用 attention 机制来获得 context 的表征;
Collective Disambiguation: 考虑实体间的 coherence,联合消歧。
给定文本 D,其中有一堆 mention
Local model: 令
Global model: 除了 context,还考虑实体间的 coherence(为了简化,只考虑两元一致性)。令
其中,
这里是用 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)。
2. Improving entity linking by modeling latent relations between mentions
上一篇论文开创性地在 EL 中引入 entity embedding 作为信息,很自然的,我们会思考一个问题,KB 中还有别的可利用的信息吗?参考本文一开始的那张图片,“乔丹”、“美国”、“Nike”这些实体之间还有着“公民”、“赞助商”等关系信息,显然,若加以利用,一定能成大器。
于是 Le et al. 在 Ganea and Hofmann 工作的基础上,增加了隐关系信息。假定图谱中有 K 个关系,令
其中,
看起来很 fancy!但是有一个问题,这个归一化因子我们要咋算呢?作者提供了两种思路:
1. Rel-norm: Relation-wise normalization。就是以关系 k 维度来 norm;
2. Ment-norm: Mention-wise Normalization。就是以实体 j 维度来 norm。
看一下上面这张图,就很清晰了。该工作在 AIDA 数据集上得到了新的 SOTA (global: 93.07)。
3. DeepType: multilingual entity linking by neural type system evolution
前两篇论文都是在联合消歧的这个角度,做了一定的工作。DeepType 这篇文章则另辟蹊径,从优化知识库的 type 系统来做。文章很重要的一个观点是:当我们能预测出实体 mention 的 type,消歧这个任务就做的差不多了。EL 系统主要分成三个模块:
1. Type System: 一组正交的 type 轴和一个 type 标注函数;
type 轴:一组互斥的 type 集合 A (e.g. {IsHuman} ∩ {IsPlant} = {})
type 标注函数:
举个例子,假定一个包含两个轴 {IsA, Topic} 的 type 系统,<追一科技>对应的就是 {公司,人工智能}
2. Type Classifier: 给定 mention 和 text,输出 mention 对应实体的 type;
3. Entity Prediction Model: 给定 mention、text 和候选实体,预测概率最高的实体(文中直接用的 LinkCount)。
很显然,这三个模块的核心点在于 Type System 的构建。由于 Entity Prediction Model 是直接用的 LinkCount,实际上整个 EL 系统就只有两组参数,一组是 Type System 的离散参数 A,一组是 Type Classifier 的连续参数 θ。给定 text 及其所含的 mention:
其中
其中:
这个 entity score 可以看成是给定 m 后,EL 系统给出的置信度,后面会给具体公式。
同步优化两组参数很耗时,因此文章分成 Type System 和 Type Classfier 两个部分独立优化。
a. Discrete Optimization of Type System:
为了避免同时训练 Type System 和 Type Classifier,我们得先固定 classifier,然后优化 Proxy Objective
1. Oracle(极端优秀):假设 Type Classifier 开了天眼,不管 A 咋变,都能预测对 mention 的 type,然后从该 type 对应的候选实体集的子集中选 LinkCount 最高的,令:
最简单的思路直接
但是怎么才能不依赖 A 去计算学习能力呢,如果是用 softmax 多分类,那就糟了,每换一次 A,就得重新训练一个 classifier。因此作者巧妙的用二元分类器代替了多分类,令:
这样就只需要最开始计算一次就好了,如下图所示:
b. Type Classifier
就按照上图 b 优化就是了,没什么可说的。
c. Inference
在训练完 Type System 和 Type Classifier 之后,我们就可以计算我们上面说的 EntityScore 了:
其中
4. 三篇论文效果对比和思考
前两篇都是联合消歧的,而 DeepType 其实是个 Local 模型。这么看来,如果考虑联合消歧的话,应该还会有提升。
总结
Entity Linking 其实算是个很复杂的技术领域,因为优化过程中,不仅要考虑 text 的文本信息、KB 的信息、消歧后的一致性,还需要根据具体的业务场景采用不同的方案,同时也不能为了效果去暴力搜索 NP-hard 的离散优化问题。在具体实施的过程中不可能面面俱到,需要一定程度的 trade-off。总结起来,四大特征:LinkCount、Context、Attributes、Coherence。方法千千万,大家灵活运用。
Appendices
数据集:
1. Knowledge Base:Wikipedia, YAGO, DBpedia, Freebase;
2. EL 监督数据:
中文:
https://www.biendata.com/competition/ccks_2019_el/data/ 英文:
TAC KBP 2010 EL:
https://catalog.ldc.upenn.edu/LDC2019T02
AIDA CoNLL-YAGO:
https://www.mpi-inf.mpg.de/departments/databases-and-information-systems/research/yago-naga/aida/downloads/
一个不错的多因子消歧总结:
https://cloud.tencent.com/developer/article/1491361ccks实体链接第一名方案:
https://github.com/panchunguang/ccks_baidu_entity_linkDeepType原作博客(有一些可玩的插件):
https://openai.com/blog/discovering-types-for-entity-disambiguation/References
点击以下标题查看更多往期内容:
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。
▽ 点击 | 阅读原文 | 获取最新论文推荐