前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NER的过去、现在和未来综述-现在

NER的过去、现在和未来综述-现在

作者头像
百川AI
修改2022-10-08 15:54:21
2.7K0
修改2022-10-08 15:54:21
举报
文章被收录于专栏:我还不懂对话我还不懂对话

命名实体识别(NER, Named Entity Recognition),是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。

之前的过去篇:NER的过去、现在和未来综述-过去篇 下一篇:NER的过去、现在和未来综述-未来


过去和现在是相对于某个时间节点的,暂且以bert作为这个时间节点,本文就主要寻找NER在BERT之后的一些方法。本文将从以下方面展开:

在这里插入图片描述
在这里插入图片描述

解码框架(Framework)

这里归类的解码器似乎也不太合适,但是也找不到好的了。

sequence labeling(序列标注)将实体识别任务转化为序列中每个token的分类任务,例如softmax、crf等。相比于sequence labeling的解码方式,最近也有很多新的解码方式。

span

SpanNER: Named EntityRe-/Recognition as Span Prediction Coarse-to-Fine Pre-training for Named Entity Recognition

本质是预测实体的开始和结束节点,即对于每个token都会预测它是不是某个实体的开始和结束,对于多实体类型,有两种方式:

  • 对于每个token,会预测start和end,对于start,是一个多分类(N+1)任务,N是实体个数
  • 对于每一个类别,都预测对应的start和end。

这种方式的优点是,可以解决实体嵌套问题。但是也有一个缺点,就是预测实体的start和end是独立的(理论上应该联合start和end一起考虑是否是一个实体),解码阶段容易解码出非实体,例如:

token“林”预测为start,“伟”预测为end,那么“林丹对阵李宗伟”也可以解码为一个实体。

所以,span更适合去做实体召回,或者句子中只有一个实体(这种情况应该很少),所以阅读理解任务一般会使用功能span作为解码。

损失函数:

\mathcal{L}=-\frac{1}{n} \sum{i=1}^{n} y{i}^{\mathrm{s}} \log \left(P{\text {start }}\left(y{i}^{s} \mid x{i}\right)\right) -\frac{1}{n} \sum{i=1}^{n} y{i}^{\mathrm{e}} \log \left(P{\text {end }}\left(y{i}^{e} \mid x{i}\right)\right)

MRC(阅读理解)

A Unified MRC Framework for Named Entity Recognition

这个方法很有意思,当我们要识别一句话中的实体的时候,其实可以通过问题和答案的方式。解码阶段还是可以使用crf或者span。例如:

  • 问题:句子中描述的人物是?;句子:林丹在伦敦夺冠;答案:林丹;

个人主观意见认为不实用,原因如下:

  • 对于不同的实体,需要去构建问题模板,而问题模板怎么构建呢?人工构建的话,那么人构建问题的好坏将直接影响实体识别。
  • 增加了计算量,原来输入是句子的长度,现在是问题+句子的长度。
  • span的问题,它也会有(当然span的优点它也有),或者解码器使用crf。

片段排列+分类

Span-Level Model for Relation Extraction Instance-Based Learning of Span Representations

其实span还是属于token界别的分类任务,而片段排列+分类的方式,是直接对于所有可能的片段,输入是span-level的特征,输出的是实体的类别。片段排列会将所有可能的token组合作为输入进行分类,例如:

在这里插入图片描述
在这里插入图片描述

span-leval特征一般包含:

  • 片段的编码,pooling或者start和end向量的拼接,一般比较倾向于后者。
  • 片段的长度,然后通过embedding矩阵转为向量。
  • 句子特征,例如cls向量。

模型的话,参考这个模型,其中的a,b阶段是实体识别:

在这里插入图片描述
在这里插入图片描述

SpERT:Span-based Joint Entity and Relation Extraction with Transformer Pre-training

缺点:

  • 对于长度为N的句子,如果不限制长度的话,会有N(N+1)/2,长文本的话,片段会非常多,计算量大,而且负样本巨多,正样本极少。
  • 如果限制候选片段长度的话,那么长度又不灵活。

其实刚刚讲到span合适用来做候选召回,那么span的预测结果再用分类的方式进行识别,也不失为一种方式。

融合知识

隐式融合

这部分主要指通过预训练模型中融入知识,一种是通过在目标域的数据上进行adaptive pretrain,例如是对话语料,那么使用对话语料进行适配pretrain(预训练)。

另一种是在预训练阶段引入实体、词语实体信息,这部分论文也比较同质化,例如nezha/ernie/bert-wwm,以ernie为例,将知识信息融入到训练任务中,ERNIE提出一种知识掩盖策略取代bert的mask,包含实体层面和短语级别的掩盖,见下图:

在这里插入图片描述
在这里插入图片描述
  • Basic-Level Masking: 和bert一样,随机选取token做mask。
  • Phrase-Level Masking: 会将语法中的短语做mask,例如:a series of|such as 等。
  • Entity-Level Masking: 会将一些实体整个mask,主要实体包含人物、地点、组织、产品名等。

训练预料包括中文维基百科,百度百科,百度新闻(最新的实体信息),百度贴吧。

显示融合

这部分显示融合主要指通过在模型数据层面引入知识。

Trie树匹配结果作为特征

这部分比较简单,即将句子通过规则匹配到的词语信息作为先验输入,如果对于垂域的NER可以使用此方式。

匹配方式参考这篇:NER的过去中的词典匹配的方法。

融合分词信息(multi-grained: fine-grained and coarse-grained)

multi-grained翻译应该是多粒度,但是个人认为主要是融入了分词的信息,因为bert就是使用字。

中文可以使用词语和字为粒度作为bert输入,各有优劣,那么有么有可能融合两种输入方式呢:

前期融合

LICHEE, 前期即输入embedding层面融合,使用max-pooling融合两种粒度(词和字粒度)embedding:

\begin{aligned} \vec{e}_{i}^{f} &=\text { embedding }_{\text {fine }}\left(t_{i}^{f}\right) \\ \vec{e}_{i-k}^{c} &=\text { embedding }_{\text {coarse }}\left(t_{j-k}^{c}\right) \\ \vec{e}_{i} &=\max \text {-pool }\left(\vec{e}_{i}^{f}, \bar{e}_{j-k}^{c}\right) \end{aligned}
在这里插入图片描述
在这里插入图片描述

TNER:改进了Transformer的encdoer,更好地建模character级别的和词语级别的特征。通过引入方向感知、距离感知和un-scaled的attention,改造后的Transformer encoder也能够对NER任务显著提升。

文章比较有意思是分析了Transformer的注意力机制,发现其在方向性、相对位置、稀疏性方面不太适合NER任务。

在这里插入图片描述
在这里插入图片描述

embedding中加入了word embedding和character embedding,character embedding经过Transformer encoder之后,提取n-gram以及一些非连续的字符特征。

计算self-attention包含了相对位置信息,但是是没有方向的,并且在经过W矩阵映射之后,相对位置信息这一特性也会消失。所以提出计算attention权值时,将词向量与位置向量分开计算:

在这里插入图片描述
在这里插入图片描述

去掉了attention计算中的scaled,即不除以$\sqrt{d_k}$,认为效果更好。

FLAT, 将Lattice结构和Transformer相结合,解决中文会因为分词引入额外的误差,并且能够利用并行化,提升推理速度。如下图,通过词典匹配到的潜在词语(Lattice),然后见词语追加到末尾,然后通过start和end位置编码将其和原始句子中的token关联起来。

另外也修改了attention的相对位置编码(加入了方向、相对距离)和attention计算方式(加入了距离的特征),和TNER类似,后续也有一篇Lattice bert,内容几乎一样。

中期融合

ZEN: Pre-training Chinese Text Encoder Enhanced by N-gram Representations

即在encoder某些层中融入词语和字的输出。在char的中间层添加N-gram的embedding输入。

在这里插入图片描述
在这里插入图片描述

这种n-gram加入到char的输出上,可能会找出信息泄露,例如mlm预测粤的时候,由于融入了“港澳”、“粤港澳”、“粤港澳大湾区”,可能会对预测粤的时候泄露答案。聪明的小伙伴会说那我直接mask全词啊,那这里如果mask掉“粤港澳大湾区”,其实会找出mask大部分句子,模型很难学。另一种就是修改attention的可见矩阵。

  • 后期融合:Ambert, 字和词语各自经过一个共享的encoder,然后将粗细粒度的输出融合,看输出不适合ner任务,更适合分类任务。
在这里插入图片描述
在这里插入图片描述

融合知识图谱信息

K-BERT: Enabling Language Representation with Knowledge Graph

知识图谱包含实体、实体类型、实体和实体的关系(边),怎么把这些信息融入到输入中呢?K-BERT使用方式很直接,如下图:

例如句子中,cook在图谱中是apple的ceo,那么直接将其插入到句子中,那不就扰乱了句子顺序吗,并且对于其他token是引入了额外的信息干扰。因此它提出了两种方法解决这个问题。

  • 位置编码,原始句子的位置保持不变,序列就不变,同时对于插入的“CEO”、"Apple"和“cook”的位置是连续,确保图谱知识插入的位置。
  • 同时对于后面的token,“CEO”、"Apple"属于噪声,因此利用可见矩阵机制,使得“CEO”、"Apple"对于后面的token不可见,对于CLS也不可见。

标注缺失

首先对于NER标注,由于标注数据昂贵,所以会通过远程监督进行标注,由于远监督词典会造成高准确低召回,会引起大量未标注问题?

另外即使标注,存在实体标注缺失是很正常的现象,除了去纠正数据(代价过高)之外,有么有其他的方式呢?

AutoNER

Learning Named Entity Tagger using Domain-Specific Dictionary Better Modeling of Incomplete Annotations for Named Entity Recognition

当使用词典进行实体的远监督标注时,由于词典有限,一般会造成标注数据中实体高准确,低召回(未标注)的问题。为了解决数据中的未标注问题,提出了AutoNER with ““Tie or Break””的方法。

具体算法如图,其中:

  1. Tie:对于两个相邻的token,如果他们是属于同一个实体,那么他们之间是Tie。
  2. Unknow:两个相邻的token其中一个属于未知类型的高置信实体,挖掘高置信实体使用AutoPhrase
  3. Break:不属于以上情况,即非同一实体。
  4. 两个Break之间的tokens作为实体,需要去识别对应的类别。
  5. 计算损失的时候,对于Unknow不计算损失。(主要是为了缓解漏标(false negative)问题)

解决的问题:

  • 即使远监督将边界标注错误,但是实体内部的多数tie还是正确的。

个人理解出发点:1. 提出tie or break是为了解决边界标注错误问题,Unknow不计算损失缓解漏标(false negative)问题。 但是有个问题,文中提到了false negative的样本来自于high-quality phrase,但是这些high-quality phrase是基于统计,所以对于一些低频覆盖不太好。

另外一篇论文也是类似的思想:Training Named Entity Tagger from Imperfect Annotations,它每次迭代包含两步:

  1. 错误识别:通过交叉训练识别训练数据集中可能的标签错误。
  2. 权重重置:降低含有错误标注的句子的权重。

PU learning

Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning

主要解决词典漏标或者标注不连续问题,降低对于词典构造的要求。Unbiased positive-unlabeled learning正是解决未标记样本中存在正例和负例的情况,作者定义为:

R_{\ell}=\pi_{n} \mathbb{E}_{\mathbf{X} \mid \mathrm{Y}=0} \ell(f(\boldsymbol{x}), 0)+\pi_{p} \mathbb{E}_{\mathbf{X} \mid \mathrm{Y}=1} \ell(f(\boldsymbol{x}), 1)

\pi_{n} 是负例,未标注样本属于是正例\pi_{p} ,解决未标注问题就是怎么不用负样本去预估\mathbb{E}_{\mathbf{X} \mid \mathrm{Y}=0} \ell(f(\boldsymbol{x}), 0)

为什么不用负样本,因为负样本可能保证未标注正样本。

作者将其转化为:

\begin{aligned} \pi_{n} \mathbb{E}_{\mathbf{X} \mid \mathrm{Y}=0} \ell(f(\boldsymbol{x}), 0) &=\mathbb{E}_{\mathbf{X}} \ell(f(\boldsymbol{x}), 0) -\pi_{p} \mathbb{E}_{\mathbf{X} \mid \mathrm{Y}=1} \ell(f(\boldsymbol{x}), 0) \end{aligned}

所以我直接去学正样本就好了嘛,没毛病。这里大概就能猜到作者会用类似out of domian的方法了。

但是我感觉哪里不对,你这只学已标注正样本,未标注的正样本没学呢。

果然,对于正样本每个标签,构造不同的二分类器,只学是不是属于正样本。

我不是杠,但是未标注的实体仍然会影响二分类啊。

负采样

Empirical Analysis of Unlabeled Entity Problem in Named Entity Recognition

未标注会造成两类问题1)降低正样本量。2)将未标注视为负样本。1可以通过adaptive pretrain缓解,而2后果却更严重,会对于模型造成误导,怎么消除这种误导呢,那就是负采样。

本文ner框架使用了前面介绍的片段排列分类的框架,即每个片段都会有一个实体类型进行分类,也更适合负采样。

负采样: 即对于所有非实体的片段组合使用功能下采样,因为非实体的片段组合中有可能存在正样本,所以负采样一定程度能够缓解未标注问题。注意是缓解不是解决。损失函数如下:

\left(\sum_{(i, j, l) \in \mathbf{y}}-\log \left(\mathbf{o}_{i, j}[l]\right)\right)+\left(\sum_{\left(i^{\prime}, j^{\prime}, l^{\prime}\right) \in \hat{\mathbf{y}}}-\log \left(\mathbf{o}_{i^{\prime}, j^{\prime}}\left[l^{\prime}\right]\right)\right)

其中前面部分是正样本,后面部分是负样本损失,$\hat{y}$就是采样的负样本集合。方法很质朴,我觉得比pu learning有效。作者还证明了通过负采样,不讲未标注实体作为负样本的概率大于(1-2/(n-5)),缓解未标注问题。

预训练语言模型

这个主要是bert相关的优化。对于下游任务,包括NER也有提升,就不展开了,见图:

在这里插入图片描述
在这里插入图片描述
image.png
image.png

Reference

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解码框架(Framework)
    • span
      • MRC(阅读理解)
        • 片段排列+分类
        • 融合知识
          • 隐式融合
            • 显示融合
              • Trie树匹配结果作为特征
              • 融合分词信息(multi-grained: fine-grained and coarse-grained)
              • 融合知识图谱信息
          • 标注缺失
            • AutoNER
              • PU learning
                • 负采样
                • 预训练语言模型
                • Reference
                相关产品与服务
                对话机器人
                对话机器人(Conversation Robot,ICR),是基于人工智能技术,面向企业场景的 AI 服务,可应用于智能客服、服务咨询、业务办理等场景。本产品旨在帮助企业快速构建,满足自身业务诉求的对话机器人,从而减少企业人力成本或解决服务不及时问题。用户可通过对话机器人用户端引擎,实现高准确率的对话服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档