/pytorch_bilstm_crf_chinese_ner

基于pytorch+bilstm_crf的中文命名实体识别

Primary LanguagePython

基于pytorch+bilstm_crf的中文命名实体识别

已训练好的模型可以在下面地址下载:
链接:https://pan.baidu.com/s/1D1Z2YXeCQNmCz3CkNuYQTw
提取码:86ar
下载好之后放在chceckpoints文件夹下,也可以自己自行训练、验证、测试和预测。
vocab.txt是结合训练集、验证集、测试集里面的字生成的,可能比较少,针对于自己的数据集,可以自行生成相关的字表。

依赖

python==3.6
pytorch==1.6.0
pytorch-crf==0.7.2

文件说明

--checkpoints:模型保存的位置
--data:数据位置
--|--cnews:数据集名称
--|--|--raw_data:原始数据存储位置
--|--|--final_data:存储标签、词汇表等
--logs:日志存储位置
--utils:辅助函数存储位置,包含了解码、评价指标、设置随机种子、设置日志等
--config.py:配置文件
--dataset.py:数据转换为pytorch的DataSet
--main.py:主运行程序
--main.sh:运行命令
--models.py:模型
--process.py:预处理,主要是处理数据然后转换成DataSet

运行命令

python main.py --data_dir="../data/cnews/final_data/" --log_dir="./logs/" --output_dir="./checkpoints/" --num_tags=33 --seed=123 --gpu_ids="0" --max_seq_len=128 --lr=3e-5 --train_batch_size=32 --train_epochs=10 --eval_batch_size=32 --dropout=0.3 --dropout2=0.5  --hidden_size=128

结果

训练和验证(部分记录)

2021-07-26 20:54:58,212 - INFO - main.py - train - 82 -trainepoch59 step:7198/7200 loss2.283885
2021-07-26 20:54:58,464 - INFO - main.py - train - 82 -trainepoch59 step:7199/7200 loss2.496460
2021-07-26 20:54:58,714 - INFO - main.py - train - 82 -trainepoch59 step:7200/7200 loss1.282612
2021-07-26 20:55:00,311 - INFO - main.py - train - 89 -devloss82.923920 precision0.6591 recall0.8510 micro_f10.7429

测试

2021-07-26 20:55:02,553 - INFO - main.py - test - 185 -          
            precision    recall  f1-score   support

     PRO       0.23      0.55      0.32        11
     ORG       0.13      0.75      0.22        85
    CONT       1.00      1.00      1.00        28
    RACE       1.00      0.93      0.96        14
    NAME       0.99      0.88      0.93       112
     EDU       0.98      0.90      0.94       112
     LOC       0.00      0.00      0.00         6
   TITLE       0.95      0.91      0.92       769

micro-f1       0.66      0.88      0.76      1137

预测

2021-07-26 20:55:03,116 - INFO - main.py - predict - 203 - 虞兔良先生1963年12月出生汉族**国籍无境外永久居留权浙江绍兴人**党员MBA经济师2021-07-26 20:55:03,116 - INFO - main.py - predict - 204 - {'NAME': [('虞兔良', 0)], 'RACE': [('汉族', 17)], 'CONT': [('**国籍', 20)], 'TITLE': [('**党员', 40), ('经济师', 49)], 'EDU': [('MBA', 45)]}

最后

这里是随机初始化字向量,也可以加载相关的预训练的字向量,应该会有更好的结果。