/BERT-BILSTM-CRF

使用BERT-BILSTM-CRF进行中文命名实体识别。

Primary LanguagePython

BERT-BILSTM-CRF

使用BERT-BILSTM-CRF进行中文命名实体识别。突出一个词:方便

数据和模型下载地址:https://cowtransfer.com/s/3a155b702dfa42 点击链接查看 [ BERT-BILSTM-CRF ] ,或访问奶牛快传 cowtransfer.com 输入传输口令 hmpdf8 查看;

问题勘验

  • TypeError: init() got an unexpected keyword argument 'batch_first': pip install pytorch-crf==0.7.2

依赖

scikit-learn==1.1.3 
scipy==1.10.1 
seqeval==1.2.2
transformers==4.27.4
pytorch-crf==0.7.2

目录结构

--checkpoint模型和配置保存位置
--model_hub预训练模型
----chinese-bert-wwm-ext:
--------vocab.txt
--------pytorch_model.bin
--------config.json
--data存放数据
----dgre
--------ori_data原始的数据
--------ner_data处理之后的数据
------------labels.txt标签
------------train.txt训练数据
------------dev.txt测试数据
--config.py配置
--model.py模型
--process.py处理ori数据得到ner数据
--predict.py加载训练好的模型进行预测
--main.py训练和测试

说明

这里以dgre数据为例,其余数据类似。

1去https://huggingface.co/hfl/chinese-bert-wwm-ext/tree/main下载相关文件到chinese-bert-wwm-ext下2在process.py里面定义将ori_data里面的数据处理得到ner_data下的数据ner_data下数据样本是这样的--labels.txt
故障设备
故障原因
--train.txt/dev.txt
{"id": "AT0001", "text": ["6", "2", "号", "汽", "车", "故", "障", "报", "告", "综", "合", "情", "况", ":", "故", "障", "现", "象", ":", "加", "速", "后", ",", "丢", "开", "油", "门", ",", "发", "动", "机", "熄", "火", "。"], "labels": ["O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "B-故障设备", "I-故障设备", "I-故障设备", "B-故障原因", "I-故障原因", "O"]}
一行一条样本格式为BIO3在config.py里面定义一些参数比如--max_seq_len句子最大长度GPU显存不够则调小--epochs训练的epoch数
--train_batch_size训练的batchsize大小GPU显存不够则调小--dev_batch_size验证的batchsize大小GPU显存不够则调小--save_step多少step保存模型
其余的可保持不变4在main.py里面修改data_name为数据集名称需要注意的是名称和data下的数据集名称保持一致最后运行python main.py

5在predict.py修改data_name并加入预测数据最后运行python predict.py

DGRE数据集

max_seq_len=512
train_batch_size=12
dev_batch_size=12
save_step=500
epochs=3
              precision    recall  f1-score   support

        故障原因       0.70      0.74      0.72       490
        故障设备       0.75      0.79      0.77       484

   micro avg       0.72      0.76      0.74       974
   macro avg       0.72      0.76      0.74       974
weighted avg       0.72      0.76      0.74       974

文本>>>>>492号汽车故障报告故障现象一辆车用户用水清洗发动机后在正常行驶时突然产生铛铛异响自行熄火
实体>>>>>: {'故障原因': [('异响', 40, 41), ('熄火', 45, 46)]}
====================================================================================================
文本>>>>>故障现象空调制冷效果差实体>>>>>: {'故障设备': [('空调', 5, 6)], '故障原因': [('制冷效果差', 7, 11)]}
====================================================================================================
文本>>>>>原因分析1遥控器失效或数据丢失;2ISU模块功能失效或工作不良;3系统信号有干扰导致处理方法体会1检查该车发现两把遥控器都不能工作两把遥控器同时出现故障的可能几乎是不存在的由此可以排除遥控器本身的故障2检查ISU的功能受其控制的部分全部工作正常排除了ISU系统出现故障的可能3怀疑是遥控器数据丢失用诊断仪对系统进行重新匹配发现遥控器匹配不能正常进行此时拔掉ISU模块上的电源插头使系统强制恢复出厂设置再插上插头发现系统恢复可以进行遥控操作但当车辆发动在熄火后遥控又再次失效4查看线路图发现在点火开关处安装有一钥匙行程开关当钥匙插入在点火开关内处于ON位时该开关接通向ISU发送一个信号此时遥控器不能进行控制工作当钥匙处于OFF位时开关断开遥控器恢复工作可以对门锁进行控制如果此开关出现故障也会导致遥控器不能正常工作同时该行程开关也控制天窗的自动回位功能测试天窗发现不能自动回位确认该开关出现故障
实体>>>>>: {'故障设备': [('遥控器', 7, 9), ('ISU模块', 20, 24), ('系统信号', 37, 40), ('遥控器', 66, 68), ('遥控器', 158, 160), ('遥控器', 182, 184), ('开关', 434, 435)], '故障原因': [('失效', 10, 11), ('数据', 13, 14), ('丢失', 15, 16), ('功能失效', 25, 28), ('工作不良', 30, 33), ('干扰', 42, 43), ('不能工作', 70, 73), ('数据丢失', 161, 164), ('失效', 260, 261), ('不能自动回位', 424, 429), ('故障', 438, 439)]}
====================================================================================================
文本>>>>>原因分析1发动机点火系统不良;2发动机系统油压不足;3喷嘴故障;4发动机缸压不足;5水温传感器故障实体>>>>>: {'故障设备': [('发动机点火系统', 7, 13), ('发动机系统', 19, 23), ('喷嘴', 31, 32), ('发动机', 38, 40), ('水温传感器', 48, 52)], '故障原因': [('不良', 14, 15), ('油压不足', 24, 27), ('故障', 33, 34), ('缸压不足', 41, 44), ('故障', 53, 54)]}
====================================================================================================

DUIE数据集

max_seq_len=256
train_batch_size=12
dev_batch_size=12
save_step=500
epochs=1

没跑完,在第1500step后手动停止了。

             precision    recall  f1-score   support

        Date       0.87      0.79      0.83      3130
      Number       0.77      0.72      0.75       877
        Text       0.70      0.63      0.66      2045
          人物       0.80      0.90      0.85     44595
          企业       0.47      0.67      0.55      3148
       企业/品牌       0.53      0.69      0.60       160
          作品       0.00      0.00      0.00        90
          国家       0.71      0.74      0.73      2241
        图书作品       0.86      0.72      0.78      4535
          地点       0.40      0.50      0.44       958
          城市       0.45      0.61      0.52       220
          奖项       0.00      0.00      0.00       529
          学校       0.64      0.86      0.74      1879
        学科专业       0.00      0.00      0.00         8
        影视作品       0.86      0.63      0.72      7900
        文学作品       0.57      0.21      0.30       188
          景点       0.44      0.36      0.40       118
          机构       0.81      0.37      0.51      2977
          歌曲       0.80      0.76      0.78      4976
          气候       0.80      0.80      0.80       132
        电视综艺       0.76      0.65      0.70      1010
         行政区       0.73      0.70      0.71       305
          语言       0.00      0.00      0.00        20
        音乐专辑       0.70      0.70      0.70      1035

   micro avg       0.77      0.79      0.78     83076
   macro avg       0.57      0.54      0.55     83076
weighted avg       0.78      0.79      0.77     83076

文本>>>>>歌曲墨写你的美是由歌手冷漠演唱的一首歌曲
实体>>>>>: {'歌曲': [('墨写你的美', 3, 7)], '人物': [('冷漠', 13, 14)]}
====================================================================================================
文本>>>>>982阎维文回到山西隆重地迎娶了刘卫星
实体>>>>>: {'人物': [('阎维文', 5, 7), ('刘卫星', 19, 21)]}
====================================================================================================
文本>>>>>王皃姁为还是太子的刘启生了二个儿子刘越汉景帝第11子)、刘寄汉景帝第12子实体>>>>>: {'人物': [('王皃姁', 0, 2), ('刘启', 9, 10), ('刘越', 18, 19), ('刘寄', 30, 31)]}
====================================================================================================
文本>>>>>数据分析方法五种是2011年格致出版社出版的图书作者是尤恩·苏尔李
实体>>>>>: {'图书作品': [('数据分析方法五种', 0, 7)], '人物': [('尤恩·苏尔李', 29, 34)]}
====================================================================================================
文本>>>>>视剧不可磨灭是导演潘培成执导刘蓓丁志诚李洪涛丁海峰雷娟刘赫男等联袂主演
实体>>>>>: {'影视作品': [('不可磨灭', 3, 6)], '人物': [('潘培成', 11, 13), ('刘蓓', 17, 18), ('丁志诚', 20, 22), ('李洪涛', 24, 26), ('丁海峰', 28, 30), ('雷娟', 32, 33), ('刘赫男', 35, 37)]}
====================================================================================================

延申

由于这几个项目的代码结构都差不多,而且都和信息抽取相关,就一起放在这。