基于BERT的中文命名实体识别

导览

  • Bert-ChineseNER
      • Introduction
        • BERT
        • Fine-tune
      • Results
      • Train
      • Conclusion
      • 项目代码链接

Bert-ChineseNER

Introduction

BERT

简要地介绍一下BERT,网上对于BERT的介绍已经满天飞了。BERT是谷歌在2018年提出的一个预训练语言模型,不同于传统的语言模型使用自回归的方式对文本进行语言模型的学习,BERT提出了一种新颖的Mask Language Model,结合谷歌在2017年提出的Transformer网络结构,对文本进行“真正”的双向建模。

Fine-tune

BERT只是一个预训练的语言模型,在各大任务上都刷新了榜单。我们本次实验的任务也是一个序列标注问题,简而言之,就是是基于BERT预训练模型,在中文NER(Named Entity Recognition,命名实体识别)任务上进行fine-tune。

Fine-tune是什么意思,中文译为微调。在transfer learning中,对事先训练好的特征抽取网络,直接拿来用在下游任务上。固定其特征抽取层的网络参数,只在原有的网络上增加少量神经元,做最后的分类任务,而且只更新分类参数。

Results

基于BERT的中文命名实体识别_第1张图片

引入bert之后,可以看到在验证集上的F-1值在训练了16个epoch时就已经达到了94.87,并在测试集上达到了93.68,在这个数据集上的F-1值提升了两个多百分点。

Train

  1. 下载bert模型代码,放入本项目根目录
  2. 下载bert的中文预训练模型,解压放入本项目根目录
  3. 搭建依赖环境python3+tensorflow1.12
  4. 执行python3 train.py即可训练模型
  5. 执行python3 predict.py可以对单句进行测试

整理后的项目目录,应如下图所示。基于BERT的中文命名实体识别_第2张图片

Conclusion

可以看到,使用bert以后,模型的精度提升了两个多百分点。并且,在后续测试过程中发现,使用bert训练的NER模型拥有更强的泛化性能,比如训练集中未见过的公司名称等,都可以很好的识别。而仅仅使用ChineseNER中提供的基于维基数据训练的词向量,基于BiLSTM+CRF的框架训练得到的模型,基本上无法解决OOV问题。

项目代码链接

https://github.com/yumath/bertNER

你可能感兴趣的:(NLP)