ubuntu 16.04
anaconda创建一个python==3.7的虚拟环境
pip install -r requirements.txt
使用kashgari调用bert预训练权重和下游分类任务
本实验可以完成BiLSTM_CRF_Model
, CNN_LSTM_Model
, BiLSTM_Model
, BiGRU_Model
或 BiGRU_CRF_Model
的搭建
训练数据使用的是:source.txt和target.txt
验证数据使用的是:dev.txt和dev-label.txt
测试数据使用的是:test1.txt和test_tgt.txt
运行实验需要替换 BERTEmbedding()中的预训练权重目录,本次实验选用的chinese_L-12_H-768_A-12
/media/ding/Data/model_weight/nlp_weights/tensorflow/google/chinese_L-12_H-768_A-12
权重下载地址chinese_L-12_H-768_A-12
训练模型,主函数修改为:
main(train=True)
设置网络的参数epoch=5;batch_size=64;sequence_length=150;开始训练模型,保存模型到checkpoint文件夹下
测试模型,主函数修改为:
main(predict=True, checkpoint='checkpoint')
开始对模型在测试集上测试,checkpoint为模型保存的文件夹
预测模型,主函数修改为:
main(predict=True, checkpoint='checkpoint')
开始输入一个样本用模型进行预测,checkpoint为模型保存的文件夹
训练模型:
BiLSTM_CRF_Model;epoch=10;batch_size=64;sequence_length=150;
训练方法:
python ner.py
训练过程:
Epoch 1/10
282/282 [==============================] - 172s 610ms/step - loss: 5.8533 - accuracy: 0.9877 - val_loss: 139.6916 - val_accuracy: 0.9901
Epoch 2/10
282/282 [==============================] - 169s 601ms/step - loss: 1.5082 - accuracy: 0.9967 - val_loss: 137.0616 - val_accuracy: 0.9910
Epoch 3/10
282/282 [==============================] - 172s 610ms/step - loss: 1.0474 - accuracy: 0.9975 - val_loss: 134.8197 - val_accuracy: 0.9912
Epoch 4/10
282/282 [==============================] - 165s 585ms/step - loss: 0.7489 - accuracy: 0.9982 - val_loss: 132.7582 - val_accuracy: 0.9917
Epoch 5/10
282/282 [==============================] - 165s 586ms/step - loss: 0.5523 - accuracy: 0.9986 - val_loss: 131.1968 - val_accuracy: 0.9935
Epoch 6/10
282/282 [==============================] - 167s 592ms/step - loss: 0.4096 - accuracy: 0.9990 - val_loss: 129.8139 - val_accuracy: 0.9946
Epoch 7/10
282/282 [==============================] - 164s 582ms/step - loss: 0.3472 - accuracy: 0.9991 - val_loss: 128.5244 - val_accuracy: 0.9946
Epoch 8/10
282/282 [==============================] - 167s 591ms/step - loss: 0.2750 - accuracy: 0.9993 - val_loss: 127.5287 - val_accuracy: 0.9943
Epoch 9/10
282/282 [==============================] - 169s 600ms/step - loss: 0.1996 - accuracy: 0.9995 - val_loss: 126.6077 - val_accuracy: 0.9942
Epoch 10/10
282/282 [==============================] - 165s 584ms/step - loss: 0.1689 - accuracy: 0.9996 - val_loss: 125.9106 - val_accuracy: 0.9942
验证集的测试结果:
precision recall f1-score support
PER 0.9415 0.9699 0.9555 166
ORG 0.8459 0.8543 0.8501 302
LOC 0.8919 0.8967 0.8943 368
micro avg 0.8853 0.8959 0.8906 836
macro avg 0.8851 0.8959 0.8905 836
测试集的测试结果:
precision recall f1-score support
LOC 0.9070 0.9070 0.9070 258
PER 0.9752 0.9899 0.9825 199
ORG 0.9020 0.8976 0.8998 205
micro avg 0.9262 0.9290 0.9276 662
macro avg 0.9259 0.9290 0.9275 662
预测:
'十 一 月 , 我 们 被 称 为 “ 南 京 市 首 届 家 庭 藏 书 状 元 明 星 户 ” 。'
输出:
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-LOC', 'I-LOC', 'I-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'
BiGRU_CRF_Model;epoch=10;batch_size=64;sequence_length=150;
训练方法:
python ner.py
Epoch 1/10
282/282 [==============================] - 172s 609ms/step - loss: 6.2045 - accuracy: 0.9876 - val_loss: 147.0721 - val_accuracy: 0.9933
Epoch 2/10
282/282 [==============================] - 163s 578ms/step - loss: 1.3152 - accuracy: 0.9970 - val_loss: 144.6661 - val_accuracy: 0.9921
Epoch 3/10
282/282 [==============================] - 163s 578ms/step - loss: 0.8577 - accuracy: 0.9980 - val_loss: 142.6533 - val_accuracy: 0.9921
Epoch 4/10
282/282 [==============================] - 163s 579ms/step - loss: 0.5895 - accuracy: 0.9986 - val_loss: 140.9434 - val_accuracy: 0.9924
Epoch 5/10
282/282 [==============================] - 164s 583ms/step - loss: 0.4318 - accuracy: 0.9989 - val_loss: 139.7154 - val_accuracy: 0.9923
Epoch 6/10
282/282 [==============================] - 164s 580ms/step - loss: 0.3175 - accuracy: 0.9992 - val_loss: 138.5307 - val_accuracy: 0.9928
Epoch 7/10
282/282 [==============================] - 162s 575ms/step - loss: 0.2626 - accuracy: 0.9993 - val_loss: 137.6368 - val_accuracy: 0.9924
Epoch 8/10
282/282 [==============================] - 162s 576ms/step - loss: 0.2176 - accuracy: 0.9994 - val_loss: 136.7970 - val_accuracy: 0.9921
Epoch 9/10
282/282 [==============================] - 162s 576ms/step - loss: 0.2019 - accuracy: 0.9995 - val_loss: 135.7567 - val_accuracy: 0.9928
Epoch 10/10
282/282 [==============================] - 163s 577ms/step - loss: 0.1632 - accuracy: 0.9996 - val_loss: 135.0596 - val_accuracy: 0.9926
验证集的测试结果:
precision recall f1-score support
LOC 0.8909 0.9321 0.9110 368
PER 0.9583 0.9699 0.9641 166
ORG 0.8562 0.8874 0.8715 302
micro avg 0.8915 0.9234 0.9072 836
macro avg 0.8918 0.9234 0.9073 836
测试集的测试结果:
precision recall f1-score support
LOC 0.9129 0.9341 0.9234 258
PER 0.9752 0.9899 0.9825 199
ORG 0.9171 0.9171 0.9171 205
micro avg 0.9329 0.9456 0.9392 662
macro avg 0.9329 0.9456 0.9392 662
预测:
'十 一 月 , 我 们 被 称 为 “ 南 京 市 首 届 家 庭 藏 书 状 元 明 星 户 ” 。'
输出:
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-LOC', 'I-LOC', 'I-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'