Skip to content

taishan1994/pytorch_bert_coreference_resolution

Repository files navigation

pytorch_bert_coreference_resolution

基于pytorch+bert的指代消解

说明

提取span1及span2对应位置的向量后和[CLS]对应的向量进行拼接,然后在第0维进行求和之后,最终利用融合后的向量进行二分类。使用的预训练模型可以去hugging face上下载:hfl/chinese-roberta-wwm-ext。已经训练好的模型:
阿里云盘链接:https://www.aliyundrive.com/s/YhRYjA8zD16

目录结构

--checkpoints:模型保存位置
--logs:日志保存位置
--utils:辅助函数位置
--data:数据文件
--bertBaseModel.py:基本的Bert
--config.py:配置
--CRModel.py:指代消解模型
--dataset.py:pytorch数据集
--main.py:主运行程序
--preprocess.py:数据预处理

运行指令

由于已经在config.py中修改了相关的参数,因此直接运行以下命令即可,如果需要修改相关参数,可以直接在config.py中进行修改,也在命令行中修改。

python main.py

训练及验证

epoch:7/50 step:137/1000 loss:0.160401
2021-09-16 15:19:28,529 - INFO - main.py - train - 109 - [train] epoch:7/50 step:138/1000 loss:0.168107
2021-09-16 15:19:29,554 - INFO - main.py - train - 109 - [train] epoch:7/50 step:139/1000 loss:0.107534
2021-09-16 15:19:32,756 - INFO - main.py - train - 114 - [dev] loss:3.039502 accuracy:0.7632 precision:0.7632 recall:0.7632 f1:0.7632

测试

2021-09-16 15:19:36,391 - INFO - main.py - test - 175 -               
                precision    recall  f1-score   support

           0       0.86      0.77      0.81       193
           1       0.66      0.78      0.72       111

    accuracy                           0.78       304
   macro avg       0.76      0.78      0.77       304
weighted avg       0.79      0.78      0.78       304

预测

text=作为代价这个兵种在不拔剑的时候他们看起来就跟普通的精锐没什么区别顺带从这里也可以看出来曹操给曹真补了这五千多锐士是怎么个想法很明显曹操也不是好鸟2021-09-16 15:33:21,227 - INFO - main.py - <module> - 275 - span1=['曹操', 46]
2021-09-16 15:33:21,227 - INFO - main.py - <module> - 276 - span2=['他们', 17]
2021-09-16 15:33:21,661 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:21,663 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,663 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,663 - INFO - main.py - <module> - 274 - text=作出回答的却不是高文而是一直趴在桌子旁边往嘴里塞葡萄的琥珀这位半精灵蹭了蹭嘴巴对瑞贝卡甩过去一个白眼因为他不想赔钱啊2021-09-16 15:33:21,663 - INFO - main.py - <module> - 275 - span1=['高文', 8]
2021-09-16 15:33:21,663 - INFO - main.py - <module> - 276 - span2=['他', 58]
2021-09-16 15:33:21,711 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:21,712 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,712 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,712 - INFO - main.py - <module> - 274 - text=作出回答的却不是高文而是一直趴在桌子旁边往嘴里塞葡萄的琥珀这位半精灵蹭了蹭嘴巴对瑞贝卡甩过去一个白眼因为他不想赔钱啊2021-09-16 15:33:21,712 - INFO - main.py - <module> - 275 - span1=['瑞贝卡', 43]
2021-09-16 15:33:21,712 - INFO - main.py - <module> - 276 - span2=['他', 58]
2021-09-16 15:33:21,760 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:21,762 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,763 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,763 - INFO - main.py - <module> - 274 - text=最终决定由丁槐负责解码板系统控制软件及电路版等关键配件的开发苏津东负责辅助配件的开发并负责项目的整体调度张恪相信苏津东此时已具备这样的能力只是他之前缺乏发挥的空间刘明辉负责后勤保障2021-09-16 15:33:21,763 - INFO - main.py - <module> - 275 - span1=['张恪', 54]
2021-09-16 15:33:21,763 - INFO - main.py - <module> - 276 - span2=['他', 74]
2021-09-16 15:33:21,814 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:21,815 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,815 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,816 - INFO - main.py - <module> - 274 - text=最终决定由丁槐负责解码板系统控制软件及电路版等关键配件的开发苏津东负责辅助配件的开发并负责项目的整体调度张恪相信苏津东此时已具备这样的能力只是他之前缺乏发挥的空间刘明辉负责后勤保障2021-09-16 15:33:21,816 - INFO - main.py - <module> - 275 - span1=['丁槐', 5]
2021-09-16 15:33:21,816 - INFO - main.py - <module> - 276 - span2=['他', 74]
2021-09-16 15:33:21,865 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:21,866 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,867 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,867 - INFO - main.py - <module> - 274 - text=最近一段时间小不点石昊常与三头幼鸟厮混摸索出了不少门道族长石云峰也乐得他们凑在一起2021-09-16 15:33:21,867 - INFO - main.py - <module> - 275 - span1=['石昊常与三头幼鸟', 10]
2021-09-16 15:33:21,867 - INFO - main.py - <module> - 276 - span2=['他们', 38]
2021-09-16 15:33:21,920 - INFO - main.py - predict - 228 - 结果1
2021-09-16 15:33:21,921 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,922 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,922 - INFO - main.py - <module> - 274 - text=最近一段时间小不点石昊常与三头幼鸟厮混摸索出了不少门道族长石云峰也乐得他们凑在一起2021-09-16 15:33:21,922 - INFO - main.py - <module> - 275 - span1=['石云峰', 32]
2021-09-16 15:33:21,922 - INFO - main.py - <module> - 276 - span2=['他们', 38]
2021-09-16 15:33:21,975 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:21,976 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:21,976 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:21,976 - INFO - main.py - <module> - 274 - text=走出医院庄睿心里有点遗憾因为他到临走都没有见到那位十几天来一直照顾他的宋护士刚才他专门去到医生值班室想去谢谢宋护士得到的消息却是宋护士请假了2021-09-16 15:33:21,976 - INFO - main.py - <module> - 275 - span1=['庄睿', 5]
2021-09-16 15:33:21,976 - INFO - main.py - <module> - 276 - span2=['他', 16]
2021-09-16 15:33:22,025 - INFO - main.py - predict - 228 - 结果1
2021-09-16 15:33:22,027 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:22,027 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:22,027 - INFO - main.py - <module> - 274 - text=走出医院庄睿心里有点遗憾因为他到临走都没有见到那位十几天来一直照顾他的宋护士刚才他专门去到医生值班室想去谢谢宋护士得到的消息却是宋护士请假了2021-09-16 15:33:22,027 - INFO - main.py - <module> - 275 - span1=['宋护士', 37]
2021-09-16 15:33:22,027 - INFO - main.py - <module> - 276 - span2=['他', 43]
2021-09-16 15:33:22,074 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:22,075 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:22,075 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:22,075 - INFO - main.py - <module> - 274 - text=走出房间抬天看了看看情形雨点子马上就要砸落下来张恪与翟丹青朝小宴会厅走去邢爱国的嗓门很大在走廊上就听得见张恪与翟丹青倒不用服务员领路循着声音就能找到他们2021-09-16 15:33:22,075 - INFO - main.py - <module> - 275 - span1=['邢爱国', 40]
2021-09-16 15:33:22,075 - INFO - main.py - <module> - 276 - span2=['他们', 81]
2021-09-16 15:33:22,122 - INFO - main.py - predict - 228 - 结果1
2021-09-16 15:33:22,123 - INFO - main.py - <module> - 278 - ===============================
2021-09-16 15:33:22,124 - INFO - main.py - <module> - 273 - ===============================
2021-09-16 15:33:22,124 - INFO - main.py - <module> - 274 - text=走出房间抬天看了看看情形雨点子马上就要砸落下来张恪与翟丹青朝小宴会厅走去邢爱国的嗓门很大在走廊上就听得见张恪与翟丹青倒不用服务员领路循着声音就能找到他们2021-09-16 15:33:22,124 - INFO - main.py - <module> - 275 - span1=['张恪', 26]
2021-09-16 15:33:22,124 - INFO - main.py - <module> - 276 - span2=['他们', 81]
2021-09-16 15:33:22,169 - INFO - main.py - predict - 228 - 结果0
2021-09-16 15:33:22,170 - INFO - main.py - <module> - 278 - ===============================

讲在最后

由于数据比较少,最后效果,不太好。实体的位置是预先就得到的,也可以根据命名实体识别来找出需要指代的实体以及代词,然后两两配对进行指代消解。

Releases

No releases published

Packages

 
 
 

Languages