中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现

中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现

向AI转型的程序员都关注了这个号????????????

人工智能大数据与深度学习  公众号:datayx

数据集

本项目尝试使用了多种不同的模型(包括HMM,CRF,Bi-LSTM,Bi-LSTM+CRF)来解决中文命名实体识别问题,数据集用的是论文ACL 2018Chinese NER using Lattice LSTM中收集的简历数据,

https://github.com/jiesutd/LatticeLSTM

该数据集就位于项目目录下的ResumeNER文件夹里。

数据的格式如下,它的每一行由一个字及其对应的标注组成,标注集采用BIOES,句子之间用一个空行隔开。

中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现

运行结果

下面是四种不同的模型以及这Ensemble这四个模型预测结果的准确率(取最好):

中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现

最后一列Ensemble是将这四个模型的预测结果结合起来,使用“投票表决”的方法得出最后的预测结果。

(Ensemble的三个指标均不如BiLSTM+CRF,可以认为在Ensemble过程中,是其他三个模型拖累了BiLSTM+CRF)

具体的输出可以查看output.txt文件。

代码获取方式

关注微信公众号 datayx  然后回复 NER  即可获取。

AI项目体验地址 https://loveai.tech

代码中一些需要注意的点

  • HMM模型中要处理OOV(Out of vocabulary)的问题,就是测试集里面有些字是不在训练集里面的, 这个时候通过观测概率矩阵是无法查询到OOV对应的各种状态的概率的,处理这个问题可以将OOV对应的状态的概率分布设为均匀分布。

  • HMM的三个参数(即状态转移概率矩阵、观测概率矩阵以及初始状态概率矩阵)在使用监督学习方法进行估计的过程中,如果有些项从未出现,那么该项对应的位置就为0,而在使用维特比算法进行解码的时候,计算过程需要将这些值相乘,那么如果其中有为0的项,那么整条路径的概率也变成0了。此外,解码过程中多个小概率相乘很可能出现下溢的情况,为了解决这两个问题,我们给那些从未出现过的项赋予一个很小的数(如0.00000001),同时在进行解码的时候将模型的三个参数都映射到对数空间,这样既可以避免下溢,又可以简化乘法运算。

  • CRF中将训练数据以及测试数据作为模型的输入之前,都需要先用特征函数提取特征!

  • Bi-LSTM+CRF模型可以参考:Neural Architectures for Named Entity Recognition,

    https://arxiv.org/pdf/1603.01360.pdf

  • 可以重点看一下里面的损失函数的定义。代码里面关于损失函数的计算采用的是类似动态规划的方法,不是很好理解,这里推荐看一下以下这些博客:

    • CRF Layer on the Top of BiLSTM - 5

      https://createmomo.github.io/2017/11/11/CRF-Layer-on-the-Top-of-BiLSTM-5/

    • Bi-LSTM-CRF for Sequence Labeling PENG

           https://zhuanlan.zhihu.com/p/27338210

    • Pytorch Bi-LSTM + CRF 代码详解

https://blog.****.net/cuihuijun1hao/article/details/79405740


阅读过本文的人还看了以下:

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现

长按图片,识别二维码,点关注

AI项目体验

https://loveai.tech

中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现