当前位置:   article > 正文

BERT+BiLSTM+CRF命名实体识别模型训练及深度学习网络的构建_bert bilstm crf模型

bert bilstm crf模型

开头先附上 BERT的论文,还有中文翻译版哦 ,笑纳!

 

原版:

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT中文翻译PDF版.pdf

 

 

1、下载BERT及中文模型

 

BERT 源码地址:https://github.com/google-research/bert

中英文模型 分为 base large版本,其中base版本较小是很小型公司或院校使用。

cased 表示区分模型的大小写

uncased表示不区分模型的大小写

目前中文只有bsert-base,Chinese模型

具体模型具体如下,说明了 网络层数,参数量等信息

2、BERT的tensorflow版本安装,还有pytorch版本:

tensorflow 版本在1.9 以上

pip insatall bert-tensorflow

还可以根据源码 引入项目使用

 

3、目前社区内比较的 BERT微服务

1)、bert as service of hanxiao,启动服务,发送请求就可以获取BERT word embeding

https://github.com/hanxiao/bert-as-service

  1. pip install bert-serving-server
  2. pip install bert-serving-client # client, independent of `bert-serving-server`

2)、bert-base macan 可以训练NER模型,发送请求获取实体解析结果

https://github.com/macanv/BERT-BiLSTM-CRF-NER

安装:

  1. pip install bert-base==0.0.7 -i https://pypi.python.org/simple

4、使用bert_base,做NER训练数据准备

1)、命令及参数:

  1. bert-base-ner-train \
  2. -data_dir {your dataset dir}\
  3. -output_dir {training output dir}\
  4. -init_checkpoint {Google BERT model dir}\
  5. -bert_config_file {bert_config.json under the Google BERT model dir} \
  6. -vocab_file {vocab.txt under the Google BERT model dir}

2)、标签定义

["O", "B-PER", "I-PER", "B-ORG", "I-ORG", "B-LOC", "I-LOC","B-TIM","I_TIM", "X", "[CLS]", "[SEP]"]

 

B表示实体开端单字,I表示实体后续字,O表示非实体内容

PER 表示人员,ORG表示机构,LOC表示位置,TIM表示时间

"X", “[CLS]”, “[SEP]” 是附加的,[CLS]”, "[SEP]"是句子的开始和结束标志,X是wordpice产生的东西,中文先不用关注。

3)、训练数据格式:

其中data_dir是你的数据所在的目录,训练数据,验证数据和测试数据命名格式为:train.txt, dev.txt,test.txt,请按照这个格式命名文件,否则会报错。

训练数据的格式如下:

 

 

  1. O
  2. O
  3. O
  4. O
  5. O
  6. O
  7. O
  8. B-LOC
  9. I-LOC
  10. O
  11. B-LOC
  12. I-LOC
  13. O
  14. O
  15. O
  16. O
  17. O
  18. O

 

每行得第一个是字,第二个是它的标签,使用空格’ '分隔,请一定要使用空格。句与句之间使用空行划分。程序会自动读取你的数据。

output_dir: 训练模型输出的文件路径,模型的checkpoint以及一些标签映射表都会存储在这里,这个路径在作为服务的时候,可以指定为-ner_model_dir

init_checkpoint: 下载的谷歌BERT模型

bert_config_file : 谷歌BERT模型下面的bert_config.json

vocab_file: 谷歌BERT模型下面的vocab.txt

训练完成后,你可以在你指定的output_dir中查看训练结果。

4)、启动命名实体识别任务的服务,

服务的命名是:bert-base-serving-start,同样的,你可以先使用-help查看相关帮助

bert-base-serving-start -help

命名实体服务的启动命令解释:

  1. bert-base-serving-start \
  2. -model_dir C:\workspace\python\BERT_Base\output\ner2 \
  3. -bert_model_dir F:\chinese_L-12_H-768_A-12
  4. -mode NER

 

参数解释:

bert_model_dir: 谷歌BERT模型的解压路径,可以在这里下载 https://github.com/google-research/bert

model_dir: 训练好的NER模型或者文本分类模型的路径,对于上面的output_dir

model_pd_dir: 运行模型优化代码后, 经过模型压缩后的存储路径,例如运行上面的命令后改路径下会产生 ner_model.pb 这个二进制文件

mode:NER 或者是BERT这两个模式,类型是字符串,如果是NER,那么就会启动NER的服务,如果是BERT,那么具体参数将和[bert as service] 项目中得一样。

本地测试命令启动:

bert-base-serving-start  -model_pb_dir D:\work\python-space\bert\model\ner 	  -bert_model_dir D:\work\python-space\bert\Corpus\chinese_L-12_H-768_A-12 -model_dir D:\work\python-space\bert\model\ner 	-num_worker 1 -mode NER 

 

如下图表示启动成功:

5)、客户端访问:

  1. import time
  2. from bert_base.client import BertClient
  3. # 指定服务器的IP
  4. with BertClient(ip='XXX,XXX,XXX,XXX', ner_model_dir=ner_model_dir, show_server_config=False, check_version=False, check_length=False, mode='NER') as bc:
  5. start_t = time.perf_counter()
  6. str = '1月24日,新华社对外发布了中央对雄安新区的指导意见,洋洋洒洒1.2万多字,17次提到北京,4次提到天津,信息量很大,其实也回答了人们关心的很多问题。'
  7. rst = bc.encode([str, str]) #测试同时输入两个句子,多个输入同理
  8. print('rst:', rst)
  9. print(time.perf_counter() - start_t)

 

返回结果:

结果说明:

实体已经在结果list中标注处理,后续业务使用,可以扩展解析方式解决,在此不再赘述。

 

5、BERT模型在SQUAD 和 GLUE公开数据集的表现:

以上是小编的一些模仿实践,希望对大家有点用,如果不正确的释放请指正!!!

最后附上keras-bert的源码地址及参考博客地址:

https://github.com/CyberZHG/keras-bert

https://blog.csdn.net/macanv/article/details/85684284

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号