腾讯文本理解系统 TexSmart 中的细粒度实体识别关键技术
导读 本文分享主题为腾讯文本理解系统 TexSmart 中的细粒度实体识别关键技术。
主要介绍以下内容:
- TexSmart 系统介绍
- TexSmart 细粒度 NER 综述
- 基于知识库的组合方法
- 基于相似实体推断的远程监督方法
- 基于多源融合的 Zero-shot 方法
分享嘉宾|蒋海云博士 腾讯 AI Lab 高级研究员
编辑整理|程煜晴 新疆大学
出品社区|DataFun
01 TexSmart 系统介绍
TexSmart^[1]^^ ^是一种自然语言理解系统,例如大家熟知的哈工大的 LTP^[2]^、复旦大学的 FastNLP^[3]^、斯坦福的 CoreNLP^[4]^,提供一种面向自然语言理解的工具和服务,能够对中、英文两种语言的文本进行词法、句法和语义分析。相比现有的系统,TexSmart 具有以下三大特色:
① 细粒度 NER(细粒度命名实体识别)
能够支持上千种实体类型的识别和分类,同时支持类型之间的层级结构。
② 增强的语义理解功能
如给定一个词,能够支持上下文相关的语义联想。
③ 为多维度应用需求而设计
兼顾学术与工业界对精度和速度的不同需求。
如下图所示 ,对于句子“上个月30号,南昌王先生在自己家里边看流浪地球边吃煲仔饭”,传统的文本理解工具的 NER(Named Entity Recognition,实体识别)功能能够识别出“南昌”、“王先生”实体,而 TexSmart 在基础粒度基础上,还能进一步识别复合粒度的实体,如“流浪地球”,以及“流浪”和“地球”。
“南昌”在传统工具中被识别为“地方”,而在 TexSmart 中被识别为“城市”;“流浪地球”在传统工具中可能被识别为“作品”或不被识别,而 TexSmart 进一步将其定义为“电影”。
此外,TexSmart 还提供上下文相关的语义联想,比如与“流浪地球”相关的“战狼二”等电影。
由此,面对细粒度 NER 遇到的可扩展性和歧义问题的挑战,TexSmart 经过人工整理和筛选,将传统十几种类别实体扩充到一千多种类别,增强了实体识别的可扩展性。
在语义联想方面,TexSmart 能够做到对句子中给定的实体,预测与其关联的实体集合。
同时,TexSmart 对系统中的每一种算法都提供了大于等于两种的候选实现方式,能够适应对精度和速度的不同要求;在测试范围上,TexSmart 多采用无监督方法,能够覆盖更多的复杂数据;TexSmart 也会定期收集无标签数据,动态更新模型。
除了上述功能,TexSmart 同样支持文本理解,如分词、词性标注、文本分类等场景,并支持文本匹配和文本图谱应用。
02 TexSmart 细粒度 NER 概述
NER 的步骤一般是先找出文本中的 mention 位置,再在此基础上识别类型,在这一模块,我们专注于 NER 中的细粒度场景,如何识别上千种类别的实体,实现“超细粒度”的识别。
如图是超细粒度 NER 中的类别样例,在 Ontology 树中 Person 类别的深度达到了7层。
下面,我们将介绍如何在给定一句话中的 mention 后,识别其中蕴含的实体类别。
03 基于知识库的组合方法
1. 无监督算法
这类方法已经较为成熟,借鉴了上下文抽取以及概念图谱的思想, 先从无结构的文本数据中抽取出大量 “is-a” 对 ,如(苹果,公司)、(苹果,水果), 之后通过人工将上位词映射到预定义的实体类别 ,如(苹果,org.company)、(苹果,food.fruit),得到 term(mention)-to-type graph,由此,在 Type 下积累了一系列的 mentions,在使用时,只需要计算上下文与 mentions 的相似度,即可得到实体的类别。
如要识别出“苹果汁”中的“苹果”实体的类别,在已构造好的实体集合-类别库中,上下文与“汁”相关的更多是食物或饮料类别的 mention,与 company 类相比,这里的“苹果”更可能属于 fruit 类,由此 实现了消歧 。
这类方法同样存在一些 缺点 ,首先,词典需要足够大,对于新的实体无法很好地识别,其次,我们也面临词典规模与覆盖率的折衷问题。
2. 无监督和有监督的组合方法
为了缓解这一问题,我们提出了一种 组合算法 。 在粗粒度上 ,由于类别数量较少,可以通过少量标签数据训练出一个有监督模型,在细粒度的类别预测上采用无监督方法,最后将两者结合,联合推理出最优的细粒度类别。
如图,对于“王青松”这一词典中没有的 mention,在无监督中模型中无法直接预测,但有监督模型将其预测为 person;又如“流浪地球”在有监督模型中被预测为(work, generic),在无监督模型中被预测为(work,movie),经过联合,综合预测结果为(work,movie)。
可以看到,我们的 Hybrid 方法在 Base 基础上获得了有效提升。
04 基于相似实体推断的远程监督方法
在细粒度实体识别的场景下,由于上下文十分复杂,或者是十分简短而具有歧义,因此很难学到有效的表示。在 ACL2022上,我们发表了一篇基于相似实体推断的方法,其核心思想类似于检索方法,即通过相似的实体推断出目标实体。
我们将相似实体定义为 Sibling Mentions(一般情况下,Mention 代表识别前的实体,为方便表述,在 Slides 中我们混用了 Mention 和实体,请注意),相似实体指该实体与目标实体具有相同或相似的概念分布,如 country 和 nation。在语料库中,我们常会发现上下文中出现了与识别实体相似的“兄弟实体”,即 Sibling Mention,这类实体是否能帮助我们推断出目标实体。
我们将其建模成一种 异构图问题 ,即图中有两类节点,一类是 Mention,一类是 Type;三种关系,Mention 之间的“兄弟”关系、Type 之间的层级结构以及训练数据中已有 “is-a” 的关系,对应 Mention 与 Type 之间的关系。
之后,采用图神经网络方法学习异构图中的节点表示,并进行节点分类。
1. 如何找出相似实体
首先,在相似 Mention 的检测方面,我们采用了两种方法:
① Word distribution-based metric
首先 ,采用 TF-IDF 将 mention 中的词映射成稀疏向量,并用余弦相似度方法进行相似度计算。
② Typing distribution-based metric
另外一种更精确的方法是在训练数据上先训练一个轻量实体识别模型,运用模型对实体做初步类型预测,并将预测的 Type 信息作为先验知识。
2. 如何推断目标实体
图神经网络建模了图上节点传播的过程,即如何通过邻居节点的信息更新当前节点信息。我们采用一种 自注意力图神经网络 ,由于在图上有 Mention 节点与 Type 节点两种类型,对于 Type 节点,我们通过子节点更新上层父节点;对于 Mention 节点,我们通过 Sibling mention 和 ground truth 的 Type 更新节点的表示,在预测时,用最后一层神经网络的节点做分类即可。
但是,这种方法存在着 ground truth 泄漏问题,使得模型退化到只关注 ground truth 中的 type 邻居,即只预测这一种 type。为了克服这一问题,我们采用一种 Dropout 的方法,在构图时,对于每一个 mention,其每一个邻居都有一定概率被丢弃,使得预测模型需要“自食其力”,进而改善预测的效果。
3. 可扩展的模型推理
在模型推理过程中,当有新的 mention,首先将它作为一个节点加入图,与训练集中的相似实体相连。值得注意的是,新 mention 是没有 Type 邻居的(这正是我们需要预测的),且我们以 batch 的方式加入,加入的一批 mentions 之间也没有边的关联。
之后 ,在保持原参数不变的情况下,使用图神经网络得到节点表示,并用于节点分类。从结果来看,我们在以往的 baseline 中得到了较为明显的提升。
我们也做了相关消融实验,验证相似实体的有效性。我们定义了三种指标,分别是 Purity、Coverage 和 Quality ,分别对应 Precision、Recall 和 F1-score 。
实验中,对于寻找相似实体,我们的两种方法与随机取实体、基于 ground truth 取实体做了比较,可以看出,当相似实体定义地越好时,节点分类的效果也越好。
05 多源融合的Zero-shot方法
多源可以理解为一种多视角学习,**Zero-shot **在实体分类中可以定义为在训练集中完全没有见过的实体。
我们认为, Zero-shot 的核心是需要建立训练时实体类别和推理时实体类别的语义相关性 ,在实体分类任务中如此,其余任务亦然。为了建立这一种相关性,我们需要引入 辅助信息 。
辅助信息源主要分为三类:
(1) Context consistency
把 Type 当作一个词,从语言模型的角度建模当前的 Type 与上下文的相关性。
(2)Type hierarchy
Type 之间的相关性可以通过 Ontology 树得到,例如,当预测文中实体的类型为 Organization 时,我们倾向于进一步预测实体为 Corporation 或 Government,而非 fruit。
(3)Background Knowledge
- Protypes :为 Type 选择一个具有代表性的 mention。
- Descriptions :通过 WordNet 获取关于每个 Type 词的描述信息。
为了对前面三种信息分别建模。
(1) Context-Consistency-Aware Module(CA)
我们首先通过大规模预训练语言模型(如,BERT),捕捉当前 Type 和其上下文语义上的兼容性。
(2) Type-Hierarchy-Aware Module(HA)
- Hierarchy-aware type encoder
借鉴 Transformer 的思想,由于 Type 之间的关系是不具顺序的,因此去掉其中的 position embedding。对于 self-attention 机制,我们针对 Type 的层级结构特点,使得每个 Type 只 attend 它的父节点和它自己。
为了实现这一点,我们引入一个 MASK 矩阵,当两个节点之间不需要 attention,我们就将矩阵元素置为-∞,在经过 softmax 之后值就趋于0。
- Mention-context encoder
使用 ELMo 学习词向量,并对 Mention 及其 context 的词向量进行堆叠。
建立损失函数如下:
(3) Background-Knowledge-Aware Module(KA)
我们将其建模为多前提的文本蕴含任务,前提即为 Context、Prototype 和 Description。
在损失函数上,借鉴知识图谱表示学习中的 Trans 系列技术,使假设的表示和前提表示加起来尽可能相等,损失函数表示如下:
最终在训练和测试时,得分由三个子模型的得分得到,根据验证集对三个子模型相应设置参数。
在 BBN 和 Wiki 两个数据集上,对比 Baseline 提升4~5个点。
在有监督实验上,只考虑粗粒度样本,切分一部分作为测试。
同时,我们也考虑每个辅助信息源的效果,进行消融实验。
此外,我们发现当 context 越长时,效果越好。
对每一个辅助信息源的预测能力,我们做如下实验。
上图中未重合的部分表示只有该部分的辅助信息源能够预测,有共16.05%的例子是三种辅助信息源都无法预测的,有待进一步探索。
06 问答环节
1. TextSmart 最近在细粒度 NER 任务中的表现,以及后续规划?
A1:后续将在如何设计 Span 上做进一步探索,目前在细粒度实体识别上的表现大部分都比较好。
2. Prototype 是从训练集数据中选择的吗?
A2:我们引用了2016年的一篇 Entity typing 相关工作[6],使用了他们的开源数据。
3. 在异构图节点表示中,为什么要弱化异构图,是否有尝试过其他的 GNN 方法?
A3:我们在这里的侧重点在如何用 Sibling Type 学到目标实体,使用异构图只是因为我们的有两类节点,三种边,并没有强调异构图的特性,可以继续尝试其他图神经网络方法。
07 参考文献
[1] https://ai.tencent.com/ailab/nlp/texsmart/en/index.html
[2] https://ltp.ai/
[3] http://www.fastnlp.top/about/
[4] https://stanfordnlp.github.io/CoreNLP/
[5] https://aclanthology.org/C16-1017/