李智恒 复杂命名实体识别方法简介
新闻来源:IR实验室       发布时间:2019/3/28 13:40:24

  命名实体识别是自然语言处理(Natural Language Processing NLP)里的一项基础任务,是指从文本中识别出命名性指称项,为关系抽取等任务做铺垫。该任务中识别出的命名实体可以用三元组<start, end, type>来表示,其中start为实体在句子中的起始位置,end为终止位置,type为实体的类型(这里的类型通常为预设类型)。例如,在句子“Tricuspid valve regurgitation and lithium carbonate toxicity in a newborn infant.”中,“Tricuspid valve regurgitation”和“toxicity”为疾病,可以表示为<0, 29, disease><52, 60, disease>,“lithium carbonate”为化学物质,可以表示为<34, 51,chemical>。因此,在主流命名实体方法中,该问题通常被转化为序列标注问题,通过给句子中的每一个token(一般为一个词语)打一个标签来找到特定类型的实体的起始位置和终止位置。

上述命名实体识别的表示方法基于两个基本假设:1)命名实体在句子中是连续词语表示的,即一个实体中间不能被其他词语断开;2)实体之间不能相互重叠,换句话说,一个token不能同时属于多个实体。

但是在某些情况下,命名实体在句子中并不能同时满足上述条件。我们把不满足上述条件的实体成为“复杂实体”。复杂实体包括以下4类:1)嵌套实体:一个实体完全嵌套在另一个实体的词语表示中(例如“the HIV-1 enhancer”中,HIV-1是病毒实体,其完全嵌套于HIV-1 enhancer这个DNA实体中);2)多类型实体:同一个命名实体表示有多个不同类型(例如,“蛋白质”同时也可以是“药物”或者“化合物”);3)重叠实体:实体之间有部分重叠词语(例如“pain in knee and foot”中实体“pain in knee”与实体“pain in foot”同时包含tokenpain”,则pain为重叠部分);4)不连续实体:一个实体的多个组成词语被其他词语断开(例如“every joint in my body is in pain”中,“joint pain”为一个实体,被“in my body is in”断开。本文中我们把插入到实体中的其他词语称为中断词)。

识别复杂命名实体有一下两个意义:首先,复杂命名实体中往往包含关系信息,例如在组织实体“悉尼大学”中嵌套了城市实体“悉尼”,这里可以得到一个<悉尼大学,loc_in,悉尼>的关系。识别这样的实体可以加快构建知识库的进程。另外,由于不同语言中具有表示的一致性,例如“悉尼大学”的英文为“University of Sydney”,日文表示为“シドニー大学”,这样的一致性表示有助于提升机器翻译的性能。

复杂命名实体识别方法可以分为两个大类:token-level方法和sentence-level方法。如图1所示,token-level方法是指将每一个token的表示输入模型中,模型为每一个token输出一个标签,将这些标签串联起来得到命名实体。这种方法是基于前文提到的两个假设,为每一个token只给出一个预测标签,因此无法处理非连续实体和重叠实体。

为了识别重叠实体和非连续实体,Dai等人借用了一种新的标签策略来抽取复杂实体。除了传统的BIO标签外,还增加了DBDI分别表示非连续实体的开头和中间词(如表1所示),HBHI分别表示非连续实体和重叠实体的开头和中间词(如表2所示)。最终标签集合为{B,I,O,DB,DI,HB,BI},通过增加标签来表示复杂实体进而抽取出重叠、非连续实体。

1 token-level方法示例

 

1非连续实体表示

every

joint

in

my

body

is

in

pain

O

DB

O

O

O

O

O

DI

 

2 重叠实体表示

it

has

left

me

feeling

exhausted

and

depressed

O

O

O

O

HB

HI

O

HI

 

虽然上述方法能够有效地抽取出部分重叠非连续实体,但是该方法仍然存在问题。如表3所示,句子“had intense pelvic and back pain”中“intense pelvic pain”和“back pain”为两个实体,利用标签策略可以得到标签序列如表3所示。这里可以得到“intense pelvic pain”和“back pain”两个实体。但是基于标签的含义,tokenpain”也应该是一个独立的实体,这与标注有出入。这是该方法存在的第一个问题,我们称之为高度模糊性。

3 标签策略问题示例

had

intense

pelvic

and

back

pain

O

DB

DI

O

B

HB

 

另外,利用这种标签策略只能抽取具有同样实体类别的重叠实体,因为重叠部分的类别只能用一个标签表示,因此,对于重叠实体具有不同实体类别的情况,这种标签策略仍存在缺陷。

token-level方法相比,sentence-level方法则是直接预测出句子中的命名实体组合。例如:McDonald等人在2005年将实体识别任务看成是多分类方法,为每个token打出kk为超参数,图2k=3)个标签从而识别出非连续和重叠实体。该方法的有点是便于解码,缺点是时间复杂度很高。

2 sentence-level方法示例多标签分类

      

32015LuRoth提出的利用超图求解子超图从而识别命名实体的方法。图3中右侧为短语“university of lowa”的超图表示,其中红色的子超图表示实体“university of lowa”,而蓝色的子超图表示实体“lowa”。该方法能够很好地识别出重叠实体,但是并不能表示非连续实体。

3 sentence-level方法示例子超图表示

基于上述超图表示句子的方法,MuisLu2016年提出一种能够同时识别重叠实体和非连续实体的方法。如图4所示,句子序列为“Infarctions either water shed or embolic”其中实体分别为“Infarctions”,“Infarctions water shed”和“Infarctions embolic”。图中绿色的节点Bi表示当前token i为实体的一部分。边{BiX}表示当前token为实体的结束为止。例如token Infarctions”开始的子超图存在{B0X},则说明“Infarctions”为一个实体。该方法用节点“O”表示非连续实体中间出现的中断词,即“either”为实体“Infarctions water shed”的中断词;“either water shed or”为实体“Infarctions embolic”的中断词。

4 sentence-level方法示例改进子超图表示

 

该方法存在一个问题:首先如果O节点同时拥有两个父节点和两个子节点,则在实体识别的时候会出现歧义,这种歧义性用文中提出的“模糊性”表示。模糊性定义为同一个编码解出的实体组合的平均个数。评价两个模型的模糊性程度可以用图5的先关模糊性的公式进行计算。MuisLu在文中计算了该方法和token-level方法中的基于标签策略的线性链方法的相关模糊性。其结论为基于标签策略的线性链方法的模糊性高于改进子超图方法。

5 相关模糊性

 

MuisLu在两个数据集上验证他们的方法,分别为ShARe/CLEF eHealth Evaluation Lab in 2013SHEL)和SemEval-2014评测集。两个数据集中包含非连续不重叠实体,非连续重叠实体和最多3个组合相互重叠不连续实体。其实验结果如图6所示。LI表示基于标签策略的线性链方法,SH表示文中介绍方法,SP表示改进超子图方法中通过添加B标签节点下标用于识别多实体组合重叠问题,从而减少模糊性的方法。语料ENH表示取模型输出模糊实体解码出的最小集合作为最终输出,ALL表示取模型输出模糊实体解码出的全体集合作为最终输出。Train-Disc表示用评测语料的子集进行训练,Train-Orig表示用原始语料集进行训练。子集中的每个句子均包含非连续重叠实体,非连续实体数量占子集中实体数量的53.61%

实验结果表明,1)改进子超图方法可以有效地抽取非连续重叠实体;2)该方法降低了模型的模糊性;3)尽管有连续实体存在仍然是实验数据越多,模型的性能越好。

6改进子超图方法实验结果

 

通过上述模型方法介绍,总结未来复杂实体识别的发展方向有以下4点:

1)             基于McDonald等人提出的标签策略,可以利用先进的多标签分类方法降低模型的时间复杂度;

2)             Seq2seq模型可以很好的为一个句子序列解出多个标签序列,从而识别句子中的多个复杂实体;

3)             自主学习(active learning)可以有效的减少复杂实体的标注数据量;

4)             将先进的命名实体识别方法(例如:字符向量)加入到复杂实体识别任务中,从而提升模型效果。