在清华大学开源的OpenNRE项目基础上实现中文实体关系识别
github项目地址,点我
使用哈工大,BERT-wwm,中文bert,在20w中文人物关系数据上的准确率达到0.97
实现过程十分简单,如下:
1)token阶段:将文本根据两个实体位置分割成五个小片;
2)index阶段:文本开头使用[CLS],结尾使用[SEP],中间的分割使用[unused1-4];
3)padding阶段:0填充,最大长度80;
4)attention mask,完成embedding;
5)通过bert模型;
6)全连接;
7)softmax。
=== Epoch 0 train ===
100%|██████████████████████████████████████████████████████████████████| 3094/3094 [40:12<00:00, 1.28it/s, acc=0.773, loss=0.687]
=== Epoch 0 val ===
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:06<00:00, 2.42it/s, acc=0.934]
Best ckpt and saved.
=== Epoch 1 train ===
100%|██████████████████████████████████████████████████████████████████| 3094/3094 [38:17<00:00, 1.35it/s, acc=0.923, loss=0.235]
=== Epoch 1 val ===
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 2.78it/s, acc=0.972]
Best ckpt and saved.
=== Epoch 2 train ===
100%|██████████████████████████████████████████████████████████████████| 3094/3094 [22:43<00:00, 2.27it/s, acc=0.961, loss=0.121]
=== Epoch 2 val ===
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 2.71it/s, acc=0.986]
Best ckpt and saved.
Best acc on val set: 0.986000
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:06<00:00, 2.64it/s, acc=0.986]
Accuracy on test set: 0.986
model.infer({'text': '场照片事后将发给媒体,避免采访时出现混乱,[3]举行婚礼侯佩岑黄伯俊婚纱照2011年4月17日下午2点,70名亲友见 证下,侯佩', 'h': {'pos': (28, 30)}, 't': {'pos': (31, 33)}})
(‘夫妻’, 0.9995878338813782)
model.infer({'text': '及他们的女儿小苹果与汪峰感情纠葛2004年,葛荟婕在欧洲杯期间录制节目时与汪峰相识并相恋,汪峰那首《我如此爱你', 'h': {'pos': (10, 11)}, 't': {'pos': (22, 24)}})
(‘情侣’, 0.9992896318435669)
model.infer({'text': '14日,彭加木的侄女彭丹凝打通了彭加木儿子彭海的电话,“堂哥已经知道了,他说这些年传得太多,他不相信是真的', 'h': {'pos': (4, 6)}, 't': {'pos': (22, 21)}})
(‘父母’, 0.8954808712005615)
model.infer({'text': '名旦吴菱仙是位列“同治十三绝”的名旦时小福的弟子,算得梅兰芳的开蒙老师,早年曾搭过梅巧玲的四喜班,旧谊', 'h': {'pos': (2, 4)}, 't': {'pos': (27, 29)}})
(‘师生’, 0.996309220790863)
1.bert模型下载:在./pretrain/下面放置chinese_wwm_pytorch模型,下载地址:https://github.com/ymcui/Chinese-BERT-wwm
2.数据下载:在./benchmark/people-relation/下执行gen.py,生产中文人物关系数据,具体脚本中有说明。
3.配置环境变量:vim ~/.bash_profile 添加
# openNRE
export openNRE=项目位置
如果自己训练了tensorflow 的bert,可以通过https://github.com/huggingface/transformers 里面的convert_bert_original_tf_checkpoint_to_pytorch.py 脚本转换为pytorch版。
踩坑记录:
1.安装tensorflow 2.0,最终用的都是PyTorch模型,但TensorFlow也得安装
2.构造checkpoint文件
3.报错:Embedding’ object has no attribute ‘shape’ ,解决:将报错位置assert那几行直接删除