NER综述 | 命名实体识别的过去和现在

每天给你送来NLP技术干货!


转载 | PaperWeekly

作者 | 周志洋

单位 | 腾讯算法工程师

方向 | 对话机器人

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

本文将以 BERT 作为时间节点,详细介绍 NER 历史使用过的一些方法,以及在 BERT 出现之后的一些方法。

01 NER—过去篇


本节将从以下方面展开:

5ffeb925745d4ddb7d2afbd462c35cfb.png

1.1 评价指标

使用实体级别的精确率、召回率、F1。


1.2 基于词典和规则的方法

利用词典,通过词典的先验信息,匹配出句子中的潜在实体,通过一些规则进行筛选。

或者利用句式模板,抽取实体,例如模板“播放歌曲${song}”,就可以将query=“播放歌曲七里香”中的 song= 七里香抽取出来。

正向最大匹配 & 反向最大匹配 & 双向最大匹配。

原理比较简单,直接看代码:

https://github.com/InsaneLife/MyPicture/blob/master/NER/ner_rule.py

正向最大匹配:从前往后依次匹配子句是否是词语,以最长的优先。

后向最大匹配:从后往前依次匹配子句是否是词语,以最长的优先。

双向最大匹配原则:

  • 覆盖 token 最多的匹配。

  • 句子包含实体和切分后的片段,这种片段+实体个数最少的。


1.3 基于机器学习的方法

CRF,原理可以参考:Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data

288ce02d6d61f118dafcc44dcf445bd9.png

在随机变量 X 取值为 x 的条件下,随机变量 Y 取值为 y 的条件概率为:

3627dae908270a714d5c7280f07c269a.png

其中 是特征函数(如上图), 对应权值,是规范化因子。

来(chao)自李航的统计学习方法


1.4 引入深度学习语义编码器

1.4.1 BI-LSTM + CRF

Bidirectional LSTM-CRF Models for Sequence Tagging [2]

BI-LSTM-CRF 模型可以有效地利用过去和未来的输入特征。借助 CRF 层, 它还可以使用句子级别的标记信息。BI-LSTM-CRF 模型在 POS(词性标注),chunking(语义组块标注)和 NER(命名实体识别)数据集上取得了当时的 SOTA 效果。同时 BI-LSTM-CRF 模型是健壮的,相比之前模型对词嵌入依赖更小。

文中对比了 5 种模型:LSTM、BI-LSTM、CRF、LSTM-CRF、BI-LSTM-CRF,LSTM:通过输入门,遗忘门和输出门实现记忆单元,能够有效利用上文的输入特征。BI-LSTM:可以获取时间步的上下文输入特征。CRF:使用功能句子级标签信息,精度高。

3111a857601180f366a5c0c48d8ae54c.png

比较经典的模型,BERT 之前很长一段时间的范式,小数据集仍然可以使用。


1.4.2 stack-LSTM & char-embedding

Neural Architectures for Named Entity Recognition [3]

stack-LSTM :stack-LSTM 直接构建多词的命名实体。Stack-LSTM 在 LSTM 中加入一个栈指针。模型包含 chunking 和 NER(命名实体识别)。

1. 堆栈包含三个:output(输出栈/已完成的部分),stack(暂存栈/临时部分),buffer(尚未处理的单词栈)。

2. 三种操作(action):

  • SHIFT:将一个单词从 buffer 中移动到 stack 中;

  • OUT:将一个单词从 buffer 中移动到 output 中;

  • REDUCE:将 stack 中的单词全部弹出,组成一个块,用标签 y 对其进行标记, 并将其 push 到 output 中。

3. 模型训练中获取每一步的 action 的条件概率分布,标签是真实每一步  action 的概率分布。预测时候,同坐预测每一步 action 概率,用概率最大 action 来执行 action 操作。

4. 在 REDUCE 操作输出 chunking 块之后,通过 lstm 对其编码输出 chunk 的向量表达,然后预测其标签。

举例见图示:

6c7790ec085a5eb5b247bee0b2d25cf7.png

stack-LSTM 来源于:Transition-based dependency parsing with stack long-short-term memory [4]

同时使用初始化的 char-embedding,对于每一个词语,通过 BI-LSTM 将字符编码作为输入,输出词语的字符级别表达,然后 concat 词向量输入到 BI-LSTM + CRF。

1.4.3 CNN + BI-LSTM + CRF

End-to-end Sequence Labeling via Bi-directional LSTM- CNNs-CRF [5]

通过 CNN 获取字符级的词表示。CNN 是一个非常有效的方式去抽取词的形态信息(例如词的前缀和后缀)进行编码的方法,如图。

e2e2513e59eca2678cc1d4e65b45c556.png

然后将 CNN 的字符级编码向量和词级别向量 concat,输入到 BI-LSTM + CRF 网络中,后面和上一个方法类似。整体网络结构:

0d47e80bf43c99d1751a1c25c43fbaf8.png

1.4.4 IDCNN

2017 Fast and Accurate Entity Recognition with Iterated Dilated Convolutions [6]

针对 Bi-LSTM 解码速度较慢的问题,本文提出 ID-CNNs 网络来代替 Bi-LSTM,在保证和 Bi-LSTM-CRF 相当的正确率,且带来了 14-20 倍的提速。句子级别的解码提速 8 倍相比于 Bi- LSTM-CRF。

CNN 缺点:CNN 的上下文信息取决于窗口的大小,虽然不断地增加 CNN 卷积层最终也可以达到使每个 token 获取到整个输入句子作为上下文信息,但是其输出的分辨表现力太差。

于是出现了扩张卷积(or 空洞卷积):对于扩张卷积,有效输入宽度可以随着深度呈指数增长,在每层不会有分辨率损失,并且可以估计一定数量的参数。

a26e97883050d0454b7314f54d6e4caf.png

1.4.5 胶囊网络

Joint Slot Filling and Intent Detection via Capsule Neural Networks [7]

Git: https://github.com/czhang99/Capsule-NLU

NLU 中两个重要的任务,Intent detection 和 slot filling,当前的无论 pipline 或者联合训练的方法,没有显示地对字、槽位、意图三者之间的层次关系建模。

本文提出将胶囊网络和 dynamic routing-by-agreement 应用于 slot filling 和 intent detection 联合任务。

1. 使用层次话的胶囊网络来封装字、槽位、意图之间的层次关系。

2. 提出 rerouting 的动态路由方案建模 slot filling。

网络分为 WordCaps、SlotCaps、IntentCaps。胶囊网络原理参考:Dynamic Routing Between Capsules [8]

WordCaps:对于输入 ,输入 BI-LSTM 编码成为 T 个胶囊向量 ,和普通 BI-LSTM 并无区别:

e59a1933cb5c4f42ba6e77216a93885c.png

SlotCaps:这里有 k 个 slotCaps,对应 k 个 ner的标签。作者利用第 t 个 wordCap 对于第k个 slotCap 的动态路由权重 作为第 t 个字的 ner 预测标签的概率。初始向量:

d677f913e7fc35369e1ecc9f4f695585.png

outside_default.png

通过动态路由算法,更新权重:

03c432af405205a34e0a9e22b83f175f.png

输出胶囊向量:

f5abb90ca7ff9003b9698af2f6ec797d.png

最终 slot filling 的损失为:

cea2fb04d10254c318473a88e9febd9e.png

IntentCaps:输入是 slotCaps 的输出胶囊向量,第 k 个 slotCap 对第 l 个 intentCap 的表达向量:

2541fc17d5805601a911bc970dac4487.png

同样通过动态路由算法获得输出胶囊向量,向量的模作为属于 l 类的概率:

8bbd54d0faa7d0edcf5d029f419f73e9.png

损失使用了 max-margin Loss:

af0f339d817167156c6695bddb258f61.png

Re-Routing:为了将 Intent 的信息提供给 NER 使用,提出了 Re-Routing 机制,它和动态路由机制很像,唯一改动在于权重更新中同时使用了 ,其中 是 norm 值最大的胶囊向量。

026ad556a83587e71cb54fe848a2be57.png

1.4.6 Transformer

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding [10]

直说吧,就是 BERT,bert 之前万年 bilstm+crf,bert 之后,基本没它什么事儿了,bert 原理不多赘述,应用在 NER 任务上也很简单,直接看图,每个 token 的输出直接分类即可:

02ac1ef6a338998ad4d515ca35f170e8.png


1.5 语义特征

1.5.1 char-embedding

Neural Architectures for Named Entity Recognition [9]

将英文字符拆解为字母,将词语的每个字母作为一个序列编码,编码器可以使用 rnn,cnn 等。

9d76005bf94488e1f65fbd97e16215dc.png

1.5.2 Attending to Characters in Neural Sequence Labeling Models

Attending to Characters in Neural Sequence Labeling Models [12]

使用了单词或字符级别 embedding 组合,并在两种 embedding 之间使用 attention 机制“灵活地选取信息”,而之前模型是直接将两种 embedding concat。

46c1392fb711ac9660d4f0b2b4c44c5e.png

直接看公式,z 是一个动态权重:

3ebd98e38b0e7d17885ba54d78140e2f.png

并交叉熵上增加额外的 loss:

8c97f5011c2c1d0b269e083eae6e6295.png

非 OOV 单词希望 m 和 x 越相似越好。

char-embedding 学习的是所有词语之间更通用的表示,而 word-embedding 学习的是特特定词语信息。对于频繁出现的单词,可以直接学习出单词表示,二者也会更相似。

1.5.3 Radical-Level Features(中文部首)

Character-Based LSTM-CRF with Radical-LevelFeatures for Chinese Named Entity Recognition [13]

也是一种 char embedding 方法,将每个中文字拆分为各个部首,例如“朝”会被拆分为字符:十、日、十、月。后面结构都类似。

1.5.4 n-gram prefixes and suffixes

Named Entity Recognition with Character-Level Models [14]

提取每个词语的前缀和后缀作为词语的特征,例如:“aspirin” 提取出 3-gram 的前后缀:{"asp", "rin"}.

包含两个参数:n、T。n 表示 n-gram size,T 是阈值,表示该后缀或者前缀至少在语料库中出现过 T 次。

1.6 多任务联合学习

1.6.1 联合分词学习

Improving Named Entity Recognition for Chinese Social Mediawith Word Segmentation Representation Learning [15]

将中文分词和 NER 任务联合起来。使用预测的分割标签作为特征作为 NER 的输入之一,为 NER 系统提供更丰富的边界信息。

e601e680907fd38e24a51f7e06617960.png

分词语料目前是很丰富的。如果目标域数据量比较小,不妨用分词的语料作为源域,来预训练一个底层编码器,然后再在目标域数据上联合分词任务 fine-tuning。

1.6.2 联合意图学习

slot-gated


Slot-Gated Modeling for Joint Slot Filling and Intent Prediction [16]

slot-gated 这篇文章提出了 slot-gate 将槽位和意图的关系建模,同时使用了 attention 方法,所以介绍这篇文章直接一起介绍 attention,之前 attention 相关的就不介绍了。

cee50cfb408f3439dce8b0bece127ac2.png

底层特征:使用 BiLSTM 结构,输入:,输出: 。

attention:

slot filling attention 权重计算:

77f7c6cca340c54346742b209d71d672.png

,和 一致。, 计算的是 和当前输入向量 之间的关系。作者 TensorFlow 源码 用的卷积实现,而 用的线性映射 _linear()。T 是 attention 维度,一般和输入向量一致。

slot:

7b7bd659b3cc7c18b7a4047ce5ede7ac.png

Intent Prediction:其输入时 BiLSTM 的最后一个单元的输出 以及其对应的 context 向量,c 的计算方式和 slot filling 的一致,相当于其 i=T。

cbdb3ea47d3d1cd6c21faed9492876db.png

Attention 具体细节见:Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling [19],博客:

https://blog.csdn.net/shine19930820/article/details/109756345?spm=1001.2014.3001.5501

slot-Gate

利用意图上下文向量来建模槽意图关系,以提高槽填充性能。如图 3:

dfd43582d1350a1ef977eaa21ab1c0b5.png

槽位的 context 向量和意图的 context 向量组合通过门结构(其中 v 和 W 都是可训练的):

747a9ed8e29cdfb87eb2a34ac5271f30.png

,d 是输入向量 h 的维度。

,获得 的权重。

论文源码使用的是:

用 g 作为预测 的权重向量:


6c83e5a946c6245e17db0fa235ff3d23.png

Stack-Propagation

A Stack-Propagation Framework with Token-level Intent Detection for Spoken Language Understanding [18]
Git: https://github.com/%20LeePleased/StackPropagation-SLU

首先什么是 Stack-Propagation 呢,如下图所示:

a7652f1de59160c396035030701b0734.png

它是区别于多任务,不同的任务通过 stack(级联?)的方式一起学习优化。

然后本文将意图任务的输出 stack 输入给 NER 任务,具体做法:

  • Token intent(意图阶段):假设每个 token 都会有一个意图的概率分布(标签是句子的意图,通过大量数据训练,就能够学到每个 token 的意图分布,对于每个意图的‘偏好’),最终句子的意图预测通过将每个 token 的意图预测结果投票决定。

  • Slot Filling:输入包含下面三部分:,其中 是上一阶段 token intent 的预测结果的 intent id,然后经过一个意图向量矩阵,转化为意图向量,输入给实体预测模块,解码器就是一层 lstm+softmax。

68ead664dae51bc1f30ec11721c56965.png

ad0ccc90dd096d623619ce7345cb107c.png

1.6.3 BERT for Joint Intent Classification and Slot Filling

BERT for Joint Intent Classification and Slot Filling [19]

原理如图,底层编码器使用了 BERT,token 的输出向量接 softmax 预测序列标签,cls 向量预测意图。

41d099686cdaa6a5296dae51c4371b8c.png

bert 之后,似乎之前的一些优化都变成了奇技淫巧,那么就没有新的方法了吗?bert 之前实体识别都是以序列标注(sequence labeling)来识别,没有其他的解码方式吗?关于 NER 的现在,且往下看。

02 NER—现在篇

本节将从以下方面展开:

8991085c54a73e99b326ffc7f4a45f03.png

2.1 解码框架(Framework)

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

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

2.1.1 span

SpanNER: Named EntityRe-/Recognition as Span Prediction [20]

Coarse-to-Fine Pre-training for Named Entity Recognition [21]

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

1. 对于每个 token,会预测 start 和 end,对于 start,是一个多分类 (N+1) 任务,N 是实体个数:

9e9a8ba3ebd0b06f7ad72be2fbb07d1e.png

2. 对于每一个类别,都预测对应的 start 和 end。

7ecfdcb26186b19788420515754ca30f.png


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

f681a5a901bb2c480868701bb27933fb.png

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

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

损失函数:

69f4223c1f3e0f66b5aa22f341cd3ecf.png


2.1.2 MRC(阅读理解)

A Unified MRC Framework for Named Entity Recognition [22]

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

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

3e8f89dbbff4fceec1a34f020f6fce59.png

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

  • 对于不同的实体,需要去构建问题模板,而问题模板怎么构建呢?人工构建的话,那么人构建问题的好坏将直接影响实体识别。

  • 增加了计算量,原来输入是句子的长度,现在是问题+句子的长度。

  • span 的问题,它也会有(当然 span 的优点它也有),或者解码器使用 crf。


2.1.3 片段排列+分类

Span-Level Model for Relation Extraction [23]

Instance-Based Learning of Span Representations [24]

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

b9b1b95f091acdc1fc1435ab276deb93.png


span-leval 特征一般包含:

  • 片段的编码,pooling 或者 start 和 end 向量的拼接,一般比较倾向于后者。

  • 片段的长度,然后通过 embedding 矩阵转为向量。

  • 句子特征,例如 cls 向量。

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

0d3d9493f49dd09a85fe5c4c8aad6157.png


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

缺点:

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

  • 如果限制候选片段长度的话,那么长度又不灵活。

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

2.2 融合知识

2.2.1 隐式融合

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

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

3b7d3d81096b238379f9ea3d24e2e29d.png


Basic-Level Masking: 和 bert 一样,随机选取 token 做 mask。

Phrase-Level Masking: 会将语法中的短语做 mask,例如:a series of|such as 等。

Entity-Level Masking: 会将一些实体整个 mask,主要实体包含人物、地点、组织、产品名等。

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


2.2.2 显示融合

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


Trie树匹配结果作为特征

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

匹配方式参考上一节中的词典匹配的方法。


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

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

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


前期融合:

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

c6a05af27abc81a65e0d6a3242ac5016.png

90c62d690467abcec8d89c95314e3cf4.png

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

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

f36eb09a0ea069a57b98578e91c287e0.png


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

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

c59637444342a530aeb3aeea809cd0dd.png

去掉了 attention 计算中的 scaled,即不除以,认为效果更好。

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

f442730e0cea1a0fa5aec5a3e82e0377.png

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


中期融合

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

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

d73a13f365ebeb5cae55f2784c197a31.png

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

后期融合:

Ambert [31]:字和词语各自经过一个共享的 encoder,然后将粗细粒度的输出融合,看输出不适合 ner 任务,更适合分类任务。

a5729892bb813d6849a398ce135878b6.png


融合知识图谱信息

K-BERT: Enabling Language Representation with Knowledge Graph [32]

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

3bba2105e02007fc4c20f7a8df5b3e4e.png

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

  • 位置编码,原始句子的位置保持不变,序列就不变,同时对于插入的“CEO”、"Apple"和“cook”的位置是连续,确保图谱知识插入的位置。

  • 同时对于后面的 token,“CEO”、"Apple属于噪声,因此利用可见矩阵机制,使得“CEO”、"Apple"对于后面的 token 不可见,对于 [CLS] 也不可见。


2.3 标注缺失

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

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


2.3.1 AutoNER


Learning Named Entity Tagger using Domain-Specific Dictionary [33]

Better Modeling of Incomplete Anotations for Named Entity Recognition [34]

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

a3849aeea84a5bd9133b8570ace75953.png

具体算法如图,其中:

1. Tie:对于两个相邻的 token,如果他们是属于同一个实体,那么他们之间是 Tie。

2. Unknow:两个相邻的 token 其中一个属于未知类型的高置信实体,挖掘高置信实体使用 AutoPhrase [35]。

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 [36],它每次迭代包含两步:

1. 错误识别:通过交叉训练识别训练数据集中可能的标签错误。

2. 权重重置:降低含有错误标注的句子的权重。


2.3.2 PU learning

Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning [37]

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

197d129af637274066faa28a68685908.png

 是负例,未标注样本属于是正例 ,解决未标注问题就是怎么不用负样本去预估 。

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

作者将其转化为:

97c18e0386a0cb2e23a21765dd52ddb9.png

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

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

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

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


2.3.3 负采样

Empirical Analysis of Unlabeled Entity Problem in Named Entity Recognition [38]

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

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

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

602582047dac49aef6f56e67de8195aa.png

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


2.4 预训练语言模型

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

082cb93c01dac04f0f97982d1e88de57.png

参考文献

[1] Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data

[2] Bidirectional LSTM-CRF Models for Sequence Tagging:https://arxiv.org/abs/1508.01991v1

[3] Neural Architectures for Named Entity Recognition:https://arxiv.org/abs/1603.01360

[4] Transition-based dependency parsing with stack long-short-term memory:http://www.oalib.com/paper/4074644

[5] End-to-end Sequence Labeling via Bi-directional LSTM- CNNs-CRF:https://www.aclweb.org/anthology/P16-1101.pdf

[6] Fast and Accurate Entity Recognition with Iterated Dilated Convolutions:https://arxiv.org/abs/1702.02098

[7] Joint Slot Filling and Intent Detection via Capsule Neural Networks:https://arxiv.org/abs/1812.09471

[8] Dynamic Routing Between Capsules:http://papers.nips.cc/paper/6975-dynamic-routing-between-capsules.pdf

[9] Neural Architectures for Named Entity Recognition:https://arxiv.org/abs/1603.01360

[10] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding:https://arxiv.org/abs/1810.04805

[11] Neural Architectures for Named Entity Recognition:https://arxiv.org/abs/1603.01360

[12] Attending to Characters in Neural Sequence Labeling Models:https://arxiv.org/abs/1611.04361

[13] Character-Based LSTM-CRF with Radical-LevelFeatures for Chinese Named Entity Recognition:http://www.nlpr.ia.ac.cn/cip/ZongPublications/2016/13董传海Character-Based%20LSTM-CRF%20with%20Radical-Level%20Features%20for%20Chinese%20Named%20Entity%20Recognition.pdf

[14] Named Entity Recognition with Character-Level Models:https://nlp.stanford.edu/manning/papers/conll-ner.pdf

[15] Improving Named Entity Recognition for Chinese Social Mediawith Word Segmentation Representation Learning:https://www.aclweb.org/anthology/P16-2025

[16] Slot-Gated Modeling for Joint Slot Filling and Intent Prediction:https://aclanthology.org/N18-2118

[17] Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling:https://blog.csdn.net/shine19930820/article/details/83052232

[18] A Stack-Propagation Framework with Token-level Intent Detection for Spoken Language Understanding:https://www.aclweb.org/anthology/D19-1214/

[19] BERT for Joint Intent Classification and Slot Filling:https://arxiv.org/abs/1902.10909

[20] SpanNER: Named EntityRe-/Recognition as Span Prediction (https://arxiv.org/pdf/2106.00641v1.pdf)

[21] Coarse-to-Fine Pre-training for Named Entity Recognition (https://aclanthology.org/2020.emnlp-main.514.pdf)

[22] A Unified MRC Framework for Named Entity Recognition (https://arxiv.org/pdf/1910.11476v6.pdf)

[23] Span-Level Model for Relation Extraction (https://aclanthology.org/P19-1525.pdf)

[24] Instance-Based Learning of Span Representations (https://aclanthology.org/2020.acl-main.575)

[25] SpERT:Span-based Joint Entity and Relation Extraction with Transformer Pre-training (https://arxiv.org/abs/1909.07755)

[26] https://medium.com/jasonwu0731/pre-finetuning-domain-adaptive-pre-training-of-language-models-db8fa9747668

[27] https://arxiv.org/pdf/2108.00801.pdf

[28] https://arxiv.org/pdf/1911.04474.pdf

[29] https://arxiv.org/pdf/2004.11795.pdf

[30] ZEN: Pre-training Chinese Text Encoder Enhanced by N-gram Representations (https://arxiv.org/abs/1911.00720)

[31] https://arxiv.org/pdf/2008.11869.pdf

[32] K-BERT: Enabling Language Representation with Knowledge Graph (https://arxiv.org/pdf/1909.07606.pdf)

[33] Learning Named Entity Tagger using Domain-Specific Dictionary (https://arxiv.org/abs/1809.03599)

[34] Better Modeling of Incomplete Annotations for Named Entity Recognition (https://aclanthology.org/N19-1079.pdf)

[35] https://arxiv.org/abs/1702.04457

[36] Training Named Entity Tagger from Imperfect Annotations (https://arxiv.org/abs/1909.01441)

[37] Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning (https://arxiv.org/abs/1906.01378)

[38] Empirical Analysis of Unlabeled Entity Problem in Named Entity Recognition (https://arxiv.org/pdf/2012.05426)


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

60d94e61c19417b393b6d7ff79385eec.png

记得备注呦

整理不易,还望给个在看!
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值