实体链接调研总结


本文是针对中文实体链接的内容做简要概述,介绍实体链接的定义、目前的挑战和问题、一般的链接流程、现有的一些方法。

什么是实体链接?

实体链接(Entity Linking,EL)是指将自由文本中已识别的实体对象(例如:人名、地名、机构名等),无歧义的正确的指向知识库中目标实体的过程。
通俗的讲,就是自由文本中的实体对象到底是个啥,找到知识库中最符合该实体的目标项。
如果有对应的实体,则返回该实体;如果没有,则将该实体标记为NIL

实体链接的目前存在的问题

  1. 由于实体链接属于相对下游的任务,其性能受制于中文分词和实体识别的准确性,难度较大。
  2. 英文领域有TAC-KBP公开数据集,标注完整且较为准确,中文相关领域缺乏权威数据集。
  3. 相较于Wikipedia、YAGO、Freebase等知识库,中文百科知识库起步较晚且不成熟。
  4. 实体间的歧义问题较为严重,具体表现为多样性和歧义性两个方面:
    (1)多样性:同一个实体具有多个名称。如:孙中山,又叫孙文,字载之。
    (2)歧义性:同一个名称具有多个实体。如:阿里巴巴,是一个公司名,同样也是《一千零一夜》中的一个故事人物。

实体链接的分类与流程

实体链接从大类上可以分为两类:

  1. 单实体消歧(single named entity disambiguation,SNED),只针对文本中单个实体进行独立消歧
  2. 多实体消歧(Collective named entity disambiguation,CNED),在实体消歧时考虑多个候选实体之间的关系进行联合消歧

单实体消歧相对简单,但会损失一些实体与实体之间的联系所带来的信息量。而多实体联合消歧的复杂度相对较高。

实体链接的流程:

Step1:指称识别:命名实体识别,识别出文本中有哪些实体。
Step2:查询扩展:根据识别的指称项,将其更多的同义信息项,显式的表达出来。更多的是解决多样性的问题。
Step3:候选实体生成:根据扩展之后的指称项(集合),在知识库中查找到所有相关的候选实体项。(候选实体召回)
Step4:特征抽取:根据指称项和候选实体集,提取尽可能反应实体本质的表层特征和深层特征,以便相似性计算。
Step5:排序:根据抽取的特征,做对应的相似性计算,最后对候选实体集中的实体进行评分,排序后取出Top1,即为链接的内容。
其实指称识别的工作是NER任务,并不是EL任务所聚焦的点,所以整个实体识别的流程可以分为两个阶段:候选实体集合的生成(候选实体生成),链接实体的选择(候选实体排序)。
NIL,无可以链接的实体,可以分为两种情况:

  1. 知识库中本身没有该实体指称项的候选实体。
  2. 所有候选实体集合中的实体没有与指称项可链接的实体。

实体链接的一般方法

因为实体链接的任务分为实体生成和实体排序两个阶段,所以分两个方面进行阐述。

候选实体生成

候选实体集的生成是根据文本中已有的指称项,去知识库中召回与之相关尽可能多的实体,该过程要求较高的召回率。

构建规则维护词表

词表的构造,一般需要规则或人工的方式进行。维护的词表有:同义词表、缩写全称映射表和别名词表。

同义词表

这里所说的同义词表指的是,名字大致相同的情况。注意与别名词表的区分。

  1. 可以根据百科中(Wiki百科)的重定向页面,抽取同义词。
  2. 从Wiki百科中首段加粗内容抽取同义词。
缩写全称映射表
  1. 对于人名,名字扩展成为全称。如:“Brown”扩展成“John Brown”。
  2. 对于大写缩写,可根据库中实体核对首字母。如:"IBM"扩展为“International Brotherhood of Magicains”。
  3. 对于地名,可根据地名表扩展。如:“US”扩展为“United States”。
别名词表

别名词表,内容大致为名称不太相同,但是意义一致的内容。如:鲁迅与周树人。

  1. 根据wiki中的锚文本信息中抽取别名。
  2. infobox中的别名。

基于编辑距离召回实体

给定指称项,根据指称项计算知识库中实体与指称项的编辑距离,小于阈值则可以召回。
编辑距离:是指两字字符串A、B的字面相似度。是指字符串A到字符串B,所需的最少编辑操作次数:

  1. 增加一个字符(insertion)
  2. 删除一个字符(deletion)
  3. 替换一个字符(substitution)

都算作一次操作。

基于词向量相似性召回实体

根据文本训练词向量,将指称项的词向量与文本中的词向量计算余弦相似度,设定阈值(0.5)。大于阈值的即可算作指称项的同义词。
c o s i n e _ s i m ( x , y ) = x ⋅ y ∣ x ∣ ⋅ ∣ y ∣ cosine\_sim(x,y)=\frac{x\cdot y}{|x|\cdot|y|} cosine_sim(x,y)=xyxy
上式中的x,y分别代表不同的词向量。

小结

根据,上述的方法,将一个指称项进行扩展,得到一个指称项集合m。跟据集合m中的元素,可用基于倒排的方式从知识库中检索的到相关的候选实体集合。至此就完成了第一阶段候选实体生成的任务。

候选实体排序

实体指称项和候选实体之间的链接,只根据实体本身(名称)所含的信息量是不足以完成实体链接的工作。所以,实体链接的工作是根据指称项上下文信息和候选实体的上下文信息进行计算相似度,而得到最终的链接结果。

基于流行度的方法

基本假设为:候选实体的流行程度越高,候选实体作为目标实体的可能性就越大。
衡量流行度的方法:

  1. Wikipedia中的描述文本的长度。
  2. 实体的超链接数。
  3. P o p u l a r i t y = L N Popularity=\frac{L}{N} Popularity=NL,其中知识库中出现的次数N,被链接到的次数L。
    优点在于简单,缺点在于准确性较差。

基于VSM的方法

这种方法是根据文本信息表层含义去度量相似度,根据指称项上下文和候选实体的上下文构建词袋模型。BOW用TF-IDF值表示,然后根据创建好的文本向量 T m T_m Tm(指称项文本向量)和 T e T_e Te(候选实体文本向量)计算相似度,一般性的计算余弦相似度,公式
c o s i n e _ s i m ( T m , T e ) = T m ⋅ T e ∣ T m ∣ ⋅ ∣ T e ∣ cosine\_sim(T_m,T_e)=\frac{T_m\cdot T_e}{|T_m|\cdot|T_e|} cosine_sim(Tm,Te)=TmTeTmTe

基于LDA的方法

LDA:是主题模型,通过该模型可以构造一个与文档主题相关的词袋模型。由于得到的词袋模型是刻画主题词的概率分布的情况,所以通过JS散度或者是KL散度来计算两个文本之间的相似度。JS和KL散度公式如下:
J S ( P ∣ ∣ Q ) = 1 2 K L ( P ( x ) ∣ ∣ P ( x ) + Q ( x ) 2 ) + 1 2 K L ( Q ( x ) ∣ ∣ P ( x ) + Q ( x ) 2 ) JS(P||Q)=\frac{1}{2}KL(P(x)||\frac{P(x)+Q(x)}{2})+\frac{1}{2}KL(Q(x)||\frac{P(x)+Q(x)}{2}) JS(PQ)=21KL(P(x)2P(x)+Q(x))+21KL(Q(x)2P(x)+Q(x)) K L ( P ∣ ∣ Q ) = ∑ P ( x ) l o g P ( x ) Q ( x ) KL(P||Q)=\sum P(x)log\frac{P(x)}{Q(x)} KL(PQ)=P(x)logQ(x)P(x)
其中P、Q分别代表不同的分布。

基于语义相似度的方法

1. 基于Doc2Vec:

与Word2Vec类似,Doc2Vec是描述文档级别的向量,根据上下文信息,构造Doc2Vec向量然后计算余弦相似度即可。

2. 基于Word2Vec直接求平均(求和):

将上下文本的所有Word2Vec直接求和或者求平均,会得到一个向量,这个向量是同样是描述上下文的语义信息的向量。

3. 基于Word2Vec利用权重求和:

(1) 对于每个词汇的Word2Vec的值都可以统计出当前文本中该词汇的TF-IDF值。将TF-IDF值作为权重与当前的词向量相乘,并与整个文章的向量相加即可得到对应的文档级别的Embedding。计算余弦相似度即可。
d o c _ e m b = ∑ T F − I D F ( w o r d i ) ⋅ W o r d 2 V e c ( w o r d i ) doc\_emb=\sum TF-IDF(word_i)\cdot Word2Vec(word_i) doc_emb=TFIDF(wordi)Word2Vec(wordi)
(2) 除了TF-IDF可以做权重,也可以将指称项上下文的词与指称项的相似度做权重,当作指称项上下文词汇与候选实体上下文词汇的权重。具体公式如下:
S i m ( m , e ) = 1 n × l ∑ i = 1 n ∑ j = 1 l s i m ( v ( m c i ) , v ( m c j ) ) × s i m ( v ( m ) , v ( m c i ) ) Sim(m,e)=\frac{1}{n\times l}\sum_{i=1}^{n}\sum_{j=1}^{l}sim(v(mc_i),v(mc_j))\times sim(v(m),v(mc_i)) Sim(m,e)=n×l1i=1nj=1lsim(v(mci),v(mcj))×sim(v(m),v(mci))其中m代表指称项,e代表候选实体, m c i mc_i mci代表指称项上下文第i个词汇, m c j mc_j mcj代表候选实体上下文第j个词汇。

其他特征

可以根据编辑相似度、字符相似度,实体的类别相似度、实体在指称项上下文共现特征等构建特征,利用LTR训练模型去对候选实体进行排序。

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现实体链接,你需要使用自然语言处理技术和实体链接API。下面是一个使用Python实现实体链接的示例: 1. 首先,你需要安装NLTK库和spacy库。可以通过pip安装这两个库。 2. 安装完成之后,你需要下载spacy的模型。可以使用以下命令下载英语模型: ``` python -m spacy download en_core_web_sm ``` 3. 导入spacy和NLTK库: ``` import spacy import nltk from nltk.tokenize import word_tokenize ``` 4. 加载spacy的英语模型: ``` nlp = spacy.load('en_core_web_sm') ``` 5. 定义一个实体链接函数: ``` def entity_linking(text): doc = nlp(text) entities = [] for ent in doc.ents: entities.append((ent.text, ent.label_)) for entity in entities: if entity[1] == 'PERSON': # 使用实体链接API进行人物实体链接 # 你需要在这里添加你的API密钥和URL response = requests.get(url, headers=headers, params=parameters) result = response.json() # 将实体链接结果替换原文本中的实体 text = text.replace(entity[0], result['name']) elif entity[1] == 'ORG': # 使用实体链接API进行组织实体链接 # 你需要在这里添加你的API密钥和URL response = requests.get(url, headers=headers, params=parameters) result = response.json() # 将实体链接结果替换原文本中的实体 text = text.replace(entity[0], result['name']) return text ``` 在这个函数中,我们首先使用spacy提取文本中的实体,然后使用实体链接API对每个实体进行链接。最后,我们将实体链接结果替换原文本中的实体。 6. 测试实体链接函数: ``` text = "Steve Jobs was the CEO of Apple Inc." result = entity_linking(text) print(result) ``` 这个例子中,我们将一句话作为输入,函数将返回实体链接结果。你可以根据需要对输入文本进行更改,并根据API的要求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值