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

pip install bert-serving-server

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

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

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

安装:

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

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

1)、命令及参数:

bert-base-ner-train \
    -data_dir {your dataset dir}\
    -output_dir {training output dir}\
    -init_checkpoint {Google BERT model dir}\
    -bert_config_file {bert_config.json under the Google BERT model dir} \
    -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,请按照这个格式命名文件,否则会报错。

训练数据的格式如下:

 

 

海 O
钓 O
比 O
赛 O
地 O
点 O
在 O
厦 B-LOC
门 I-LOC
与 O
金 B-LOC
门 I-LOC
之 O
间 O
的 O
海 O
域 O
。 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

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

bert-base-serving-start \
    -model_dir C:\workspace\python\BERT_Base\output\ner2 \
    -bert_model_dir F:\chinese_L-12_H-768_A-12
    -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)、客户端访问:

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

 

  • 6
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值