网络知识 娱乐 NER的过去、现在和未来综述-过去

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

背景

命名实体识别(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和

  1. 堆栈包含三个:output(输出栈/已完成的部分),stack(暂存栈/临时部分),buffer (尚未处理的单词栈)
  2. 三种操作(action):
    1. SHIFT: 将一个单词从 buffer 中移动到 stack 中;
    2. OUT: 将一个单词从 buffer 中移动到 output 中;
    3. REDUCE: 将 stack 中的单词全部弹出,组成一个块,用标签y对其进行标记, 并将其push到output中。
  3. 模型训练中获取每一步的action的条件概率分布,标签是真实每一步 action 的概率分布。预测时候,同坐预测每一步action概率,用概率最大action来执行action操作。
  4. 在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联合任务.

  1. 使用层次话的胶囊网络来封装字、槽位、意图之间的层次关系。
  2. 提出rerouting的动态路由方案建模slot filling。

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

WordCaps

对于输入

在这里插入图片描述

输出胶囊向量:

语义特征

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是一个动态权重:

在这里插入图片描述

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

联合意图学习

slot-gated

Slot-Gated Modeling for Joint Slot Filling and Intent Prediction

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

image-20181014174328660

底层特征:

使用BiLSTM结构,输入:

  1. Slot
  1. 槽位的context向量和意图的context向量组合通过门结构(其中v和W都是可训练的):
  1. 用g作为预测$yi^S$的权重向量:

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

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