背景
命名实体识别(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的条件概率为:
比较经典的模型,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
对于输入
输出胶囊向量: