BERT-BiLSTM-CRF命名实体识别应用

本文共1399个字,预计阅读时间需要5分钟。

引言

本文将采用BERT+BiLSTM+CRF模型进行命名实体识别(Named Entity Recognition 简称NER),即实体识别。命名实体识别,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。

  • BERT(Bidirectional Encoder Representation from Transformers),即双向Transformer的Encoder。模型的创新点在预训练方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的表示。
  • BiLSTM是Bi-directional Long Short-Term Memory的缩写,是由前向LSTM与后向LSTM组合而成。
  • CRF为条件随机场,可以用于构造在给定一组输入随机变量的条件下,另一组输出随机变量的条件概率分布模型。

环境

采用的Python包为:Kashgari,此包封装了NLP传统和前沿模型,可以快速调用,快速部署模型。

  • Python: 3.6
  • TensorFlow: 1.15
  • Kashgari: 1.x

其中Kashgari1.x版本必须使用TensorFlow一代。

BERT中文预训练数据

谷歌提前训练好的数据,其中中文模型可以从https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip下载。

更多预训练模型参考:https://github.com/ymcui/Chinese-BERT-wwm

自带数据训练评价

数据为中国日报的NER语料库,代码自动下载。

训练集、测试集和验证集的存储格式:

train_x: [[char_seq1],[char_seq2],[char_seq3],….. ]
train_y:[[label_seq1],[label_seq2],[label_seq3],….. ]
其中 char_seq1:[“我”,”爱”,”中”,”国”]
对应的的label_seq1:[“O”,”O”,”B_LOC”,”I_LOC”]

最后注释的为模型保存和调用代码。

实例

此本分将用自己的数据来进行命名实体识别。train_x和y存储格式和上面相同。

可用的标注格式

BIO标注模式: (B-begin,I-inside,O-outside)

BIOES标注模式: (B-begin,I-inside,O-outside,E-end,S-single)

  • B,即Begin,表示开始
  • I,即Intermediate,表示中间
  • E,即End,表示结尾
  • S,即Single,表示单个字符
  • O,即Other,表示其他,用于标记无关字符

代码

结果

输出展示了BERT的12层Transformer结构,以及它的参数量。最后是NER的结果。

参考资料

  • https://kashgari-zh.bmio.net/
  • https://www.jianshu.com/p/1d6689851622
  • https://blog.csdn.net/ctwy291314/article/details/102819221

 

评论