背景
命名实体识别(NER, Named Entity Recognition),是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。
评价指标
使用实体级别的精确率、召回率、F1
本文主要讲解NER历史使用过的一些方法,如果更关注于现在使用功能的一些方法,可以参考:
基于词典和规则的方法
利用词典,通过词典的先验信息,匹配出句子中的潜在实体,通过一些规则进行筛选。
或者利用句式模板,抽取实体,例如模板"播放歌曲${song}",就可以将query="播放歌曲七里香"中的song=七里香抽取出来。
正向最大匹配&反向最大匹配&双向最大匹配。
原理比较简单,直接看代码:ner_rule.py
正向最大匹配:从前往后依次匹配子句是否是词语,以最长的优先。
后向最大匹配:从后往前依次匹配子句是否是词语,以最长的优先。
双向最大匹配原则:
- 覆盖token最多的匹配。
- 句子包含实体和切分后的片段,这种片段 实体个数最少的。基于机器学习的方法
CRF,原理可以参考:Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data
在随机变量X取值为x的条件下,随机变量Y取值为y的条件概率为:
`$P(y mid x)=frac{1}{Z(x)} exp left(sum{i, k} lambda{k} t{k}left(y{i-1}, y{i}, x, iright) sum{i, l} u{l} s{l}left(y_{i}, x, iright)right)
Z(x)=sum{y} exp left(sum{i, k} lambda{k} t{k}left(y{l-1}, y{i}, x, iright) sum{i, l} u{i} s{l}left(y{l}, x, tright)right)$`
其中t_k,s_l 是特征函数(如上图),lambda_k,u_i 对应权值,Z(x)是规范化因子。
来(chao)自李航的统计学习方法
引入深度学习语义编码器
BI-LSTM CRF
Bidirectional LSTM-CRF Models for Sequence Tagging
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: 使用功能句子级标签信息,精度高。
比较经典的模型,BERT之前很长一段时间的范式,小数据集仍然可以使用。
stack-LSTM & char-embedding
Neural Architectures for Named Entity Recognition
stack-LSTM :stack-LSTM 直接构建多词的命名实体。Stack-LSTM 在 LSTM 中加入一个栈指针。模型包含chunking和
- 堆栈包含三个:output(输出栈/已完成的部分),stack(暂存栈/临时部分),buffer (尚未处理的单词栈)
- 三种操作(action):
- SHIFT: 将一个单词从 buffer 中移动到 stack 中;
- OUT: 将一个单词从 buffer 中移动到 output 中;
- REDUCE: 将 stack 中的单词全部弹出,组成一个块,用标签y对其进行标记, 并将其push到output中。
- 模型训练中获取每一步的action的条件概率分布,标签是真实每一步 action 的概率分布。预测时候,同坐预测每一步action概率,用概率最大action来执行action操作。
- 在REDUCE操作输出chunking块之后,通过lstm对其编码输出chunk的向量表达,然后预测其标签。
举例见图示:
stack-LSTM来源于:Transition-based dependency parsing with stack long-short-term memory
同时使用初始化的char-embedding,对于每一个词语,通过BI-LSTM将字符编码作为输入,输出词语的字符级别表达,然后concat词向量输入到BI-LSTM CRF。
CNN BI-LSTM CRF
End-to-end Sequence Labeling via Bi-directional LSTM- CNNs-CRF
- 通过CNN获取字符级的词表示。CNN是一个非常有效的方式去抽取词的形态信息(例如词的前缀和后缀)进行编码的方法,如图。
- 然后将CNN的字符级编码向量和词级别向量concat,输入到BI-LSTM CRF网络中,后面和上一个方法类似。整体网络结构:
IDCNN
2017Fast and Accurate Entity Recognition with Iterated Dilated Convolutions
针对Bi-LSTM解码速度较慢的问题,本文提出 ID-CNNs 网络来代替 Bi-LSTM,在保证和 Bi-LSTM-CRF 相 当的正确率,且带来了 14-20 倍的提速。句子级别的解码提速 8 倍相比于 Bi- LSTM-CRF。
CNN缺点:CNN 的上下文信息取决于窗口的大小,虽然不断地增加 CNN 卷积层最终也可以达到使每个 token 获取到整个输入句子作为上下文信息,但是其输出的分辨表现力太差。
于是出现了扩张卷积(or 空洞卷积):对于扩张卷积,有效 输入宽度可以随着深度呈指数增长,在每层不会有分辨率损失,并且可以估计 一定数量的参数
胶囊网络
Joint Slot Filling and Intent Detection via Capsule Neural Networks Git: Capsule-NLU
NLU中两个重要的任务,Intent detection和slot filling,当前的无论pipline或者联合训练的方法,没有显示地对字、槽位、意图三者之间的层次关系建模。
本文提出将胶囊网络和dynamic routing-by-agreement应用于slot filling和intent detection联合任务.
- 使用层次话的胶囊网络来封装字、槽位、意图之间的层次关系。
- 提出rerouting的动态路由方案建模slot filling。
网络分为WordCaps、SlotCaps、IntentCaps。胶囊网络原理参考:Dynamic Routing Between Capsules
WordCaps
对于输入x = (w_1, w_2, ..., w_T) ,输入BI-LSTM编码成为T个胶囊向量h_t=overrightarrow{h_t}, overleftarrow{h_t} ,和普通BI-LSTM并无区别:
`$overrightarrow{ht} = LSTM{forward}(wt, overrightarrow{h{t-1}})
overleftarrow{ht} = LSTM{backward}(wt, overleftarrow{h{t-1}})$`
SlotCaps
这里有k个slotCaps,对应k个ner的标签。作者利用第t个wordCap对于第k个slotCap的动态路由权重$c_{kt}$作为第t个字的ner预测标签的概率。初始向量:
通过动态路由算法,更新权重:
输出胶囊向量:
最终slot filling的损失为:
`$hat{y}{t}^{k} = {argmax}{k in K}(c_{kt})
mathcal{L}{s l o t}=-sum{t} sum{k} y{t}^{k} log left(hat{y}_{t}^{k}right)$`
IntentCaps
输入是slotCaps的输出胶囊向量,第k个slotCap对第l个intentCap的表达向量:
同样通过动态路由算法获得输出胶囊向量,向量的模作为属于l类的概率:
损失使用了max-margin Loss:
Re-Routing
为了将Intent的信息提供给NER使用,提出了Re-Routing机制,它和动态路由机制很像,唯一改动在于权重更新中同时使用了v_k, hat{u_{hat{z}}} ,其中hat{u_{hat{z}}} 是norm值最大的胶囊向量。
Transformer
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
直说吧,就是BERT,bert之前万年bilstm crf,bert之后,基本没它什么事儿了,bert原理不多赘述,应用在NER任务上也很简单,直接看图,每个token的输出直接分类即可:
语义特征
char-embedding
Neural Architectures for Named Entity Recognition
将英文字符拆解为字母,将词语的每个字母作为一个序列编码。
Attending to Characters in Neural Sequence Labeling Models
Attending to Characters in Neural Sequence Labeling Models
使用了单词或字符级别embedding组合,并在两种embedding之间使用attention机制“灵活地选取信息”,而之前模型是直接将两种embedding concat。
直接看公式,z是一个动态权重:
并交叉熵上增加额外的loss:
非OOV单词希望m和x越相似越好(期望解决oov问题)。
char-embedding学习的是所有词语之间更通用的表示,而word-embedding学习的是特特定词语信息。对于频繁出现的单词,可以直接学习出单词表示,二者也会更相似。
Radical-Level Features(中文部首)
Character-Based LSTM-CRF with Radical-LevelFeatures for Chinese Named Entity Recognition.
也是一种char embedding方法,将每个中文字拆分为各个部首,例如“朝”会被拆分为字符:十、日、十、月。后面结构都类似。
n-gram prefixes and suffixes
Named Entity Recognition with Character-Level Models
提取每个词语的前缀和后缀作为词语的特征,例如:"aspirin"提取出3-gram的前后缀:{"asp", "rin"}.
包含两个参数:n、T。n表示n-gram size,T是阈值,表示该后缀或者前缀至少在语料库中出现过T次。
多任务联合学习
联合分词学习
Improving Named Entity Recognition for Chinese Social Mediawith Word Segmentation Representation Learning
将中文分词和 NER任务联合起来。使用预测的分割标签作为特征作为NER的输入之一,为NER系统提供更丰富的边界信息。
分词语料目前是很丰富的。如果目标域数据量比较小,不妨用分词的语料作为源域,来预训练一个底层编码器,然后再在目标域数据上联合分词任务fine-tuning.
联合意图学习
slot-gated
Slot-Gated Modeling for Joint Slot Filling and Intent Prediction
slot-gated这篇文章提出了slot-gate将槽位和意图的关系建模,同时使用了attention方法,所以介绍这篇文章直接一起介绍attention,之前attention相关的就不介绍了,
底层特征:
使用BiLSTM结构,输入:x = (x_1, x_2,... x_T) ,输出:h_t = [overrightarrow{h_t}, overleftarrow{h_t}]
attention:
- slot filling attention:
- 权重计算:
`$ci^S = sum^T{j=1} alpha^S_{i,j} h_j,
alpha^S{i,j} = frac{exp(e{i,j})}{sum{k=1}^T exp(e{j,k})}
e{i,k} = V^T sigma(W{he}^S hk W{ie} h_i) $`
- Slot
- Intent Prediction:其输入时BiLSTM的最后一个单元的输出$h^T$以及其对应的context向量,c的计算方式和slot filling的一致,相当于其i=T。
Attention具体细节见:Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling,博客:Attention
slot-Gate:
利用意图上下文向量来建模槽意图关系,以提高槽填充性能。如图3:
- 槽位的context向量和意图的context向量组合通过门结构(其中v和W都是可训练的):
- 用g作为预测$yi^S$的权重向量:
Stack-Propagation
A Stack-Propagation Framework with Token-level Intent Detection for Spoken Language Understanding Git
首先什么是Stack-Propagation呢,如下图所示:
它是区别于多任务, 不同的任务通过stack(级联?)的方式一起学习优化。
然后本文将意图任务的输出stack输入给NER任务,具体做法:
- Token intent(意图阶段):假设每个token都会有一个意图的概率分布(标签是句子的意图,通过大量数据训练,就能够学到每个token的意图分布,对于每个意图的’偏好‘),最终句子的意图预测通过将每个token的意图预测结果投票决定。
- Slot Filling:输入包含三部分:mathbf{h}_{i-1}^{S}, mathbf{y}_{i-1}^{S}, mathbf{y}_{i}^{I} oplus mathbf{e}_{i} ,其中y_i^I 是上一阶段token intent的预测结果的intent id,然后经过一个意图向量矩阵,转化为意图向量,输入给实体预测模块,解码器就是一层lstm softmax。
BERT for Joint Intent Classification and Slot Filling
BERT for Joint Intent Classification and Slot Filling
原理如图,底层编码器使用了BERT,token的输出向量接softmax预测序列标签,cls向量预测意图。
bert之后,似乎 之前的一些优化都变成了奇技淫巧,那么就没有新的方法了吗?bert之前实体识别都是以序列标注(sequence labeling)来识别,没有其他的解码方式吗?
暂且就以BERT为过去和现在的分界点,关于NER的现在,且听下回分解。
下篇:NER的过去、现在和未来综述-现在
Reference
- NER的过去、现在和未来综述-过去篇
- NER的过去、现在和未来综述-现在
- Conditional Random Fields: Probabilistic Models for Segmenting and Labeling Sequence Data
- Bidirectional LSTM-CRF Models for Sequence Tagging
- Neural Architectures for Named Entity Recognition
- Transition-based dependency parsing with stack long-short-term memory
- End-to-end Sequence Labeling via Bi-directional LSTM- CNNs-CRF
- Fast and Accurate Entity Recognition with Iterated Dilated Convolutions
- Joint Slot Filling and Intent Detection via Capsule Neural Networks
- Dynamic Routing Between Capsules
- Neural Architectures for Named Entity Recognition
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- Neural Architectures for Named Entity Recognition
- Attending to Characters in Neural Sequence Labeling Models
- Character-Based LSTM-CRF with Radical-LevelFeatures for Chinese Named Entity Recognition
- Named Entity Recognition with Character-Level Models
- Improving Named Entity Recognition for Chinese Social Mediawith Word Segmentation Representation Learning
- Slot-Gated Modeling for Joint Slot Filling and Intent Prediction
- Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling
- A Stack-Propagation Framework with Token-level Intent Detection for Spoken Language Understanding
- BERT for Joint Intent Classification and Slot Filling