NER技术的探索与实践

NER概述

命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等,一般的也可以识别特定类型的、人为规定的实体。NER是信息提取、问答系统、句法分析、机器翻译等领域的重要基础工具,在自然语言处理走向落地应用过程中占有重要的地位。

例如,我们可以使用命名实体识别技术抽取出病历单上的病人姓名、年龄、性别、患病部位、问诊时间、科室、诊断结果、检查结果等等。提取这些信息之后,我们可以将这些关键信息存储至结构化数据库,或者利用这些信息构建病人的病历肖像,也可以用这些信息生成只是图谱等。

又例如,有很多合同比如基金合同,我们需要提取合同中的关键信息显示在公告网站上,如基金管理人,基金名称,基金申购赎回时间,基金申购和赎回费率等。这时可以利用命名实体识别直接提取出这些信息。

从上面的例子来看,命名实体识别技术可以提取出关键信息,这是数据电子化之后的重要一步,也可以作为后续自然语言处理技术的基础。

NER数据与评估

数据与标注

NER任务的基本方法当成一个序列标注(序列分类)任务,简单来说就是把一个句子序列中的每一个字都预测出一个标签,然后从这些标签中提取出实体。

举个例子:

上海是一座美丽的城市

B_LOC I_LOC O O O O O O O O

每个字都预测出一个类别,然后把字的类别组合成实体。比如“上”的标签为“B_LOC”,“海”的标签为“I_LOC”,“上海”两个字的标签组合为“LOC”,即location位置。

一般来说,不同的NER任务会有不同的类别,但都基本基于以下两种:

  • BIO:B-begin,I-inside,O-outside
  • BIESO:B-begin,I-inside,O-outside,E-end,S-single 或者BMESO,M类似于I

这里主要介绍BIO标注方法。BIO标注方法,就是给句子中的每一个字都标注一个标签,这个标签由两部分组成:一部分是该单词所属实体的位置,其中B表示该单词是实体的第一个单词,I表示该单词是实体的中间单词,O表示不是实体;另一部分是该单词对应的实体类型。因此,最终每个单词都被标注为BIO+实体类型的形式,这就变成了一个文本序列分类任务。

绝大部分的公开数据集也是按照这个方法标注的,常见的数据集参考这个

还存在一种标注方式:

{

“Text”: “上海是一个美丽的城市。”,

“entity”: [(1,2, “LOC”)]

}

即用一个字典表示实体的位置和类别,很多阅读理解和关系抽取使用这种方式标注。

评估方法

命名实体识别模型的评估方式分为两种,一是通用的基于token标签进行直接评估,即评估每一个字的标签。二是将字的结果生成实体的标签之后再评估。后者的评测方法比较严格,也会考虑到字标签生成实体标签的方法的效果。

举个例子:

原始序列:上海是一座美丽的城市

原始标签:B_LOC I_LOC O O O O O O O O

预测结果:B_LOC I_LOC I_LOC O O O O O O O

按照第一个评估方法,实体(非“O”)标签的召回率=1,精确率=2/3。

而按照第二个方法,需要先将字预测标签生成实体标签,这里以“B_LOC”作为实体开始,最后一个遇到“O”的“I_LOC”作为实体结束,则原始标签实体为“上海”,预测实体为“上海是”,那么实体的召回率为0,精确率也为0。

很显然的,第二种方法很严格,只有最终生成的实体结果完全正确才能算作抽取出正样本,而不是仅仅字级别标签分类正确就可以了。

这时,细心的读者会考虑到,将字预测标签变成实体标签这一步属于人为生成的算法,而不是模型的一部分,并且这一部分也会较大的影响最终结果。

例如:

原始序列:上海是一座美丽的城市

原始标签:B_LOC I_LOC O O O O O O O O

预测结果:I_LOC I_LOC O O O O O O O O

在从单个字符的预测结果转换成实体结果的时候,如果我们认为孤立的,没有B作为开头的”I_LOC”都是错误的预测,那么预测出的“I_LOC I_LOC”不会生成实体。如果我们认为句子开头的“I_LOC”可以人为修改成“B_LOC”,那么就可以生成出实体,从而正确预测。

一般来说,我们会把从单个字符预测结果转换成为实体的过程叫做后处理,正确的后处理有时可以很大程度上提高整体的预测效果。

NER算法

大部分的NER算法是将NER任务当作一个序列标注任务来处理,预测出每一个字符的标签。

lstm+CRF

《Bidirectional LSTM-CRF Models for Sequence Tagging》是百度2015年发表的论文,论文将LSTM和CRF这两种方法结合,实现序列标注任务。

LSTM-CRF模型结构图

  1. 输入为字符的销量表示,先经过LSTM层,这里可以将字符的向量表示进行融合,LSTM层输出的结果为类别的预测结果,也称为发射概率P(黄色框部分)。

LSTM layer的输出维度是类别大小,设Bi-LSTM的输出矩阵为P,其中$P(i, j)$代表字符$w_i$映射到$tag_j$的非归一化概率。

例如上图的 $w_0, w_1, w_2, w_3, w_4$ 经过LSTM的预测结果分别为 $B-Person, I-Person, O, B-Organization, O$。

  1. 将发射概率送入CRF,CRF中存在一个转移矩阵A,表示每一类标签转移到下一类标签的概率, 即$A(i,j)$表示$tag_i$到$tag_i$的转移概率。例如上图中,存在 $B-Person, I-Person, B-Organization,I-Organization, O$ 共5个类别,则加上开头和结尾,转移矩阵大小为$7*7$。

对于整个序列$X$的输出$y$, 整个序列的分数

实际上,在第一步的时候已经获取到每一个字符的预测结果了,但是CRF保证了序列中字符预测结果的可靠性。

例如,

真实标签:B I O B I

LSTM的预测结果:B I O I I

这种预测结果是不符合实际情况的,因为标签 I 的前面一个标签不可能是 I 。这表明序列的标签顺序存在一种约束关系,这是LSTM没办法学到的。

CRF将序列长度为N,类别数为K的序列的预测方式从N个K分类任务转换成一个$K^N$分类任务,从而可以剔除掉一些不符合实际情况的序列预测结果。随之而来的代价就是复杂度提高,解码速度慢。

预训练模型

随着这些年预训练模型越来越强大,基本上绝大部分任务的编码阶段都使用预训练模型完成了,序列标注任务也不例外。

使用Bert之类的预训练模型+LSTM+CRF可以大幅度提高模型效果,甚至于实践证明,如果抛弃LSTM和CRF,仅仅使用softmax作为解码器,仍然可以取得不错的效果,并且大幅度提升速度。

词汇增强

根据论文《Is Word Segmentation Necessary for Deep Learning of Chinese Representations?》中的结论,一般来说,中文字向量的效果要强于词向量,并且一般中文预训练模型会生成字向量而不是词向量。而根据常识,在中文中,语义大部分以词汇的形式表示,同一个字在不同词语中的含义可能不同,所以引入词汇信息或许可以对字向量做一些补充,这一方法在一些特定领域会比较有效。

Lattice LSTM

Lattice LSTM:Chinese NER Using Lattice LSTM(ACL2018)算是词汇增强方法的中文NER的开篇之作。

这篇论文提出了一种lattice结构,它是一个有向无环图,由词汇的开始和结束决定这个无环图的位置。对于当前的字符,融合以该字符结束的所有word信息,如对于「店」融合了「人和药店」和「药店」的信息。

但是这种结构也存在一些缺点:

  1. 计算性能低下,不能batch并行化。因为在不同序列中字符之间的增加word cell数目不一致,每一个序列都要生成单独的lattice结构;
  2. 信息损失:每个字符只能获取以它为结尾的词汇信息,对于其之前的词汇信息也没有持续记忆。如对于「药」,并无法获得‘inside’的「人和药店」信息;
  3. 可迁移性差:只适配于LSTM,不具备向其他网络迁移的特性。
FLAT

FLAT: Chinese NER Using Flat-Lattice Transformer(ACL2020)适用于Transformer网络结构,设计了一种巧妙position encoding来融合Lattice 结构:

  1. 将原始序列(设序列字向量个数为N)分词,并将分词之后的词向量(设词向量个数为n)拼接到字向量之后,则新序列向量总长度为N+n;
  2. 根据字和词汇的位置生成k种(论文中为4种)相对位置矩阵,大小为 $(N+n)*(N+n)*k$;

  3. 将相对位置矩阵重新编码之后融合到新序列向量的attention中,生成一个新的attention score。

这样就可以将词汇的向量信息和相对位置信息融合到Transformer网络结构,并且这种方式可以安排在预训练模型之后,这样就可以同时有效利用预训练模型。


  上一篇
Don't stop pretraining Don't stop pretraining
如今很多NLP任务都会在Bert等预训练模型的基础上进行fine-tuning,可能很多人没有意识到在任务领域上进行新的预训练会进一步提高模型效果,下面这篇论文就从多个实践角度证明了这种方法的可行性。
2021-12-11
下一篇 
神经网络语言模型 神经网络语言模型
语言模型本质是计算给定序列的概率,而神经网络强大的非线性拟合能力很适合拟合概率分布。并且神经网络模型可以获取到当前词汇下文的信息,这一点是N-gram语言模型所不具备的,另外神经网络模型能够利用到的的上下文词汇长度要比N-gram模型长的多。
2021-08-06
   目录