一、信息抽取(IE)
Information Extraction
从大规模非结构或半结构的自然语言文本中抽取结构化信息。主要任务有:
- 实体抽取、命名实体识别(Named Entity Recognition,NER)
- 关系抽取(Relation Extraction,RE)
- 事件抽取
二、命名实体识别(NER)
1.NER概述
-
指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。
一般来说,命名实体识别的任务就是识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、时间、日期、货币和百分比)命名实体。当然也可以定义其他的类别。
-
通常包括两部分:
(1)实体边界识别;
(2)确定实体类别(人名、地名、机构名或其他)。
-
NER应用
NER是NLP中一项基础性关键任务,是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。例如:
机器翻译中,命名实体的翻译常会有一些特殊翻译规则,准确识别出文本中的命名实体,对提高机器翻译的效果有重要的意义。
信息检索中,命名实体可以用来提高和改进检索系统的效果,当用户输入“重大”时,可以发现用户更想检索的是“重庆大学”,而不是其对应的形容词含义。
-
中文与英文NER相比
英语中的命名实体具有比较明显的形式标志,即实体中的每个词的第一个字母要大写,所以实体边界识别相对容易,任务的重点是确定实体的类别。
中文命名实体识别任务和英语相比,更加复杂,而且相对于实体类别标注子任务,实体边界的识别更加困难。难点主要存在于:(1)汉语文本没有类似英文文本中空格之类的显式标示词的边界标示符,命名实体识别的第一步就是确定词的边界,即分词;(2)汉语分词和命名实体识别互相影响;(3)除了英语中定义的实体,外国人名译名和地名译名是存在于汉语中的两类特殊实体类型;(4)现代汉语文本,尤其是网络汉语文本,常出现中英文交替使用,这时汉语命名实体识别的任务还包括识别其中的英文命名实体;(5)命名实体存在嵌套现象,如“北京大学第三医院”这一组织机构名中还嵌套着同样可以作为组织机构名的“北京大学”,而且这种现象在组织机构名中尤其严重。(6)中文里广泛存在简化表达现象,如“北医三院”、“国科大”,乃至简化表达构成的命名实体,如“国科大桥”。(7)中文的用字灵活多变,有些词语在脱离上下文语境的情况下无法判断是否是命名实体,而且就算是命名实体,当其处在不同的上下文语境下也可能是不同的实体类型。
-
NER存在的问题
- 实体数量巨大,而且在不断增长。
- 实体组合多。很多实体都是组合词,包括中英文组合也很多。
- 歧义多。比如“李飞飞起来了”,可以识别出”李飞”或”李飞飞”
2.NER的三种方法
(1)基于规则的方法
利用手工编写的规则,将文本与规则进行匹配来识别出命名实体。例如:“大学”、“医院”等词语可作为组织机构名的结尾。还可以利用到词性、句法信息。在构建规则的过程中往往需要大量的语言学知识,不同语言的识别规则不尽相同,而且需要谨慎处理规则之间的冲突问题;此外,构建规则的过程费时费力、可移植性不好。
(2)基于特征模板的方法
统计机器学习方法将 NER 视作序列标注任务,利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。
NER 任务中常用的模型包括生成式模型HMM、判别式模型CRF等。比较流行的方法是特征模板 + CRF的方案:特征模板通常是人工定义的一些二值特征函数,试图挖掘命名实体内部以及上下文的构成特点。对于句子中的给定位置来说,提特征的位置是一个窗口,即上下文位置。而且,不同的特征模板之间可以进行组合来形成一个新的特征模板。CRF的优点在于其为一个位置进行标注的过程中可以利用到此前已经标注的信息,利用Viterbi解码来得到最优序列。对句子中的各个位置提取特征时,满足条件的特征取值为1,不满足条件的特征取值为0;然后把特征喂给CRF,training阶段建模标签的转移,进而在inference阶段为测试句子的各个位置做标注。
(3)基于深度学习的方法
深度学习方法也是将 NER 视作序列标注任务。
-
常见序列标注方式
-
BIO标注集
B表示实体的首字,I表示实体的非首字,O代表该字不属于命名实体的一部分。
比如,某token被标注为B-P,B代表实体首字,P代表实体类型,即这是一个P类型实体的首字。
-
BIOSE标注集
B,即Begin,表示实体首字;
I,即Intermediate,表示实体中间的字;
E,即End,表示实体尾字;
S,即Single,表示单个字符构成实体;
O,即Other,表示其他,用于标记非实体部分的无关字符。
比如,某token被标注为I-P,I代表实体中间的字,P代表实体类型,即这是一个P类型实体的中间字。
-
-
RNN+Softmax
将token从离散one-hot表示映射到低维空间中成为稠密的embedding,随后将句子的embedding序列输入到RNN中,用神经网络自动提取特征,Softmax来预测每个token的标签。这种方法使得模型的训练成为一个端到端的整体过程,而非传统的pipeline,不依赖特征工程,是一种数据驱动的方法;但网络变种多、对参数设置依赖大,模型可解释性差。此外,这种方法的一个缺点是对每个token打标签的过程中是独立的分类,不能直接利用上文已经预测的标签(只能靠隐状态传递上文信息),进而导致预测出的标签序列可能是非法的,例如标签B-PER后面是不可能紧跟着I-LOC的,但Softmax不会利用到这个信息。
- LSTM+CRF
LSTM-CRF 模型做序列标注。LSTM层后接入CRF层来做标签预测,使得标注过程不再是对各个token独立分类。如果仅仅利用Softmax进行标签的预测,每一步都是挑选一个最大概率值的label输出,没有考虑Label之间的限制关系,比如BIOSE标注方式中,B-P后不能跟B-P。
3.基于字的BiLSTM-CRF模型
(1)模型结构
(2)结构解析
-
$ look-up $层
利用预训练或随机初始化的$embedding$矩阵将句子中的每个字 $x_i$ 由one-hot向量映射为低维稠密的字向量(character embedding)$xi∈R^d$ ,$d$ 是$embedding$的维度。
-
$BiLSTM$层
将一个句子的char embedding序列 $(x_1,x_2,…,x_n)$作为双向LSTM各个时间步的输入,再将正向LSTM输出的隐状态序列$ (\vec{h_1}, \vec{h_2} ,…, \vec{h_n}) $与反向LSTM的$ (\overleftarrow{h_1}, \overleftarrow{h_2} ,…, \overleftarrow{h_n}) $在各个位置输出的隐状态进行按位置拼接 $ht=[\overleftarrow{h_t};\vec {h_t}]∈R_m$,得到完整的隐状态序列
\((h1,h2,...,hn)∈R^{n×m}\)
-
CRF层
-
先接入一个线性层,将隐状态向量从 $m$ 维映射到$ k $维,$k$ 是标注集的标签数,从而得到句子特征,记作矩阵 $P=(p_1,p_2,…,p_n)∈R^{n×k} $。
-
再接入CRF层,进行句子级的序列标注。
-
CRF层的参数是一个 $(k+2)×(k+2)$的矩阵 $A$ ,$A_{ij}$表示的是从第 $i$个标签到第$ j$个标签的转移得分。之所以要加2是因为要为句子首部添加一个起始状态以及为句子尾部添加一个终止状态。
-
记一个长度等于句子长度的标签序列 $y=(y_1,y_2,…,y_n)$ ,那么模型对于句子 $x$的标签等于 $y$ 的打分为
$P_{i,y_i}$为第i个位置输出为$y_i$的概率,$A_{y_i,y_{i+1}}$为从$y_i$到$y_{i+1}$的转移概率。
-
-
最后接入Softmax层,得到归一化的概率。
$y’ \in Y,Y$为句子所有可能标注序列集合。
-
(3)模型训练
-
训练会更新的参数
BiLSTM、Linear、CRF的转移矩阵概率A
-
目标函数
模型训练时通过最大化对数似然函数,对真实标记序列y的概率取$P(y x)$取$log$: 损失函数对目标函数取负即可。
(4)模型预测
模型在预测过程(解码)时使用动态规划的Viterbi算法来求解最优路径:
参考链接
https://www.cnblogs.com/Determined22/p/7238342.html
https://blog.csdn.net/bobobe/article/details/80489303