kashgari实现BERT-BILSTM-CRF中文命名实体识别

kashgari实现BERT-BILSTM-CRF中文命名实体识别@TOC

关于kashgari的安装教程及使用教程

通过我一天半的不断尝试,努力,终于完成了kashgari的配置,把我配置过程中需要注意的事项写在下文,供大家借鉴

kashgari与tensorflow环境问题

说实话,网上许多注意事项,我也就觉得下面的信息最有用(一定要在conda环境中,新建一个python环境,再进行下面的安装,我建的是python3.8的环境,最好是3.6+):
kashgari实现BERT-BILSTM-CRF中文命名实体识别配置信息表

注意:我的配置命令是:
pip install kashgari2.0.2 tensorflow_addons0.13.0 tensorflow==2.5.0
本来尝试了一下tensorflow2.3.0结果失败,果断安装2.5.0

由于我已经配置成功了,忘记截那些成功图了,大家按照我的步骤来就行,有什么问题可以评论区留言。

测试阶段

首先来第一段代码:
1.数据集的获取

from kashgari.corpus import ChineseDailyNerCorpus

train_x, train_y = ChineseDailyNerCorpus.load_data('train')
valid_x, valid_y = ChineseDailyNerCorpus.load_data('validate')
test_x, test_y  = ChineseDailyNerCorpus.load_data('test')

print(f"train data count: {len(train_x)}")
print(f"validate data count: {len(valid_x)}")
print(f"test data count: {len(test_x)}")

成功之后,显示如下运行结果:
kashgari实现BERT-BILSTM-CRF中文命名实体识别
2.创建bert模块
下面的汇总代码中我对BERTEmbedding模块进行了改正,感觉是kashgari太新,导致模块的位置发生了改变,大家如果这一步不太行,可以参考我最后的汇总代码。

import kashgari
from kashgari.embeddings import BERTEmbedding

bert_embed = BERTEmbedding('chinese_wwm_ext_L-12_H-768_A-12',
                           task=kashgari.LABELING,
                           sequence_length=100)

3.创建并训练模型

from kashgari.tasks.labeling import BiLSTM_CRF_Model

# 还可以选择 `CNN_LSTM_Model`, `BiLSTM_Model`, `BiGRU_Model` 或 `BiGRU_CRF_Model`

model = BiLSTM_CRF_Model(bert_embed)
model.fit(train_x,
          train_y,
          x_validate=valid_x,
          y_validate=valid_y,
          epochs=20,
          batch_size=512)
model.save('ner.h5')

最后放一个汇总代码吧,我把上述过程融合了一下:

from kashgari.corpus import ChineseDailyNerCorpus
from kashgari.tasks.labeling import BiLSTM_CRF_Model
import kashgari
from kashgari.embeddings.bert_embedding import  BertEmbedding#改变了调用代码
import warnings
warnings.filterwarnings('ignore')
train_x, train_y = ChineseDailyNerCorpus.load_data('train')
valid_x, valid_y = ChineseDailyNerCorpus.load_data('validate')
test_x, test_y  = ChineseDailyNerCorpus.load_data('test')

print(f"train data count: {len(train_x)}")
print(f"validate data count: {len(valid_x)}")
print(f"test data count: {len(test_x)}")
#此处也进行了改变
bert_embed = BertEmbedding('chinese_L-12_H-768_A-12',
                           sequence_length=100)

model = BiLSTM_CRF_Model(bert_embed)
model.fit(train_x,
          train_y,
          x_validate=valid_x,
          y_validate=valid_y,
          epochs=20,
          batch_size=512)
model.save('ner.h5')

运行结果,写这个博客的时候,我运行了一夜还没结束,就展示一下大致的结果吧:
kashgari实现BERT-BILSTM-CRF中文命名实体识别

后续我可能还会增加kashgari的相关使用代码,大家后续关注即可。

参考博客:
https://my.oschina.net/u/4313749/blog/3358422

很好的一个学习网址:
https://pypi.org/project/kashgari/

上一篇:BERT-as-service


下一篇:Sentence-BERT论文阅读笔记