NLP(四十二)人物关系分类的再次尝试
两周前的周末,笔者决定对人物关系分类进行再次尝试。
为什么说是再次尝试呢?因为笔者之前已经写过一篇文章NLP(二十一)人物关系抽取的一次实战,当时的标注数据大约2900条,使用的模型也比较简单,为BERT+Bi-GRU+Attention+FC结构,其中BERT用作特征提取,该模型在原有数据集上的F1为79%。
经过笔者一年断断续续的努力,现在的标注样本已经达到3900多条。鉴于笔者已做过BERT微调相关工作,当然希望在此数据集上进行再次尝试。
现有的人物关系数据集大约3900多条,分布如下图:
首先,我们只使用BERT分类模型,对输入数据进行格式改造,进行简单地尝试。
我们以样本
亲戚 1837年6月20日,威廉四世辞世,他的侄女维多利亚即位。
为例,其中亲戚
为人物关系,威廉四世
为实体1,维多利亚
为实体2,来演示输入的文本格式。下面的部分我们统一使用chinese-RoBERTa-wwm-ext
作为预训练模型,数据集分为训练集和测试集,比例为8:2。第一种方法,我们与文章NLP(二十一)人物关系抽取的一次实战一样,在文本中将实体1替换为同样数量的
#
,实体2替换为同样数量的#
,再将实体1、实体2、文本用$
连接,输入格式为:威廉四世$维多利亚$1837年6月20日,####辞世,他的侄女####即位。
。使用BERT+Bi-GRU+Attention+FC模型,在测试集上的评估结果如下:模型名称 | 训练1 | 训练2 | 训练3 | 训练4 | 训练5 | Avg |
---|---|---|---|---|---|---|
BiGRU+Attention | 0.7726 | 0.7974 | 0.7935 | 0.7908 | 0.7941 | 0.7897 |
第二种方法,输入格式与第一种方法一致。使用文章NLP(三十五)使用keras-bert实现文本多分类任务中的多分类模型进行训练,在测试集上的评估结果如下:
模型名称 | 训练1 | 训练2 | 训练3 | 训练4 | 训练5 | Avg |
---|---|---|---|---|---|---|
Bert_cls | 0.8246 | 0.8110 | 0.8282 | 0.8448 | 0.8218 | 0.8260 |
可以看到,有了预训练模型的帮助,模型效果有了显著提升,F1值平均高了3.6%。
第三种方法,在文本中将实体用#
包围,输入格式为:1837年6月20日,#威廉四世#辞世,他的侄女#维多利亚#即位。
使用BERT_cls模型,在测试集上的评估结果如下:
模型名称 | 训练1 | 训练2 | 训练3 | 训练4 | 训练5 | Avg |
---|---|---|---|---|---|---|
Bert_cls2(实体用#围绕) | 0.8175 | 0.8259 | 0.8275 | 0.8335 | 0.8299 | 0.8269 |
可以看到,该输入格式与第二种方法相比,在模型效果上并没有太大的提升。
也许,是时候尝试新的模型了。
上周一晚上,笔者无意中看到一篇论文,名称为Enriching Pre-trained Language Model with Entity Information for Relation Classification,顾名思义为使用实体信息将预训练模型用于关系分类(RC)。其模型结构如下图:
该模型被称为
R-BERT
,模型结构在此不多介绍,后面有机会再介绍。在Github上有R-BERT
模型的Torch框架实现方式,在Semeval 2010 Task 8 Dataset
取得了不错的效果。笔者将
R-BERT
用于人物关系分类数据集中,在测试集上的评估结果如下:Model: chinese-roberta-wwm-ext, weighted avgage F1 = 85.35%
该项目笔者已上传至Github,网址为:https://github.com/percent4/R-BERT_for_people_relation_extraction。
本周,笔者下定决心使用Keras实现R-BERT
。第一天,无果。第二天,实现关键Keras层的突破,进行简单模型训练,发现离Torch版本的结果尚有一定差距。第三天,对照Torch版本,不断调整模型,加入Warmup机制,发现终于取得了与Torch版本一样的效果。在测试集上的评估结果如下:
# Model: chinese-RoBERTa-wwm-ext, weighted avgage F1 = 85.27%
precision recall f1-score support
unknown 0.7930 0.8612 0.8257 209
上下级 0.7188 0.7419 0.7302 31
亲戚 0.8824 0.6250 0.7317 24
兄弟姐妹 0.8378 0.9118 0.8732 34
合作 0.8600 0.7288 0.7890 59
同人 1.0000 0.9487 0.9737 39
同学 0.8800 0.9167 0.8980 24
同门 0.9615 0.9615 0.9615 26
夫妻 0.8333 0.8861 0.8589 79
好友 0.8065 0.8333 0.8197 30
师生 0.8857 0.8378 0.8611 37
情侣 0.9231 0.7742 0.8421 31
父母 0.9062 0.9062 0.9062 128
祖孙 0.9524 0.8000 0.8696 25
accuracy 0.8531 776
macro avg 0.8743 0.8381 0.8529 776
weighted avg 0.8566 0.8531 0.8527 776
该项目已上传至Github,网址为:https://github.com/percent4/Keras_R_BERT。后面有机会笔者再详细介绍。
至此,笔者不仅用Keras实现了R-BERT,并且比最初的BERT+Bi-GRU+Attention+FC模型,在测试集上的F1值提升了6.3%。
实现模型的过程是痛苦的,笔者一度想放弃,但当模型成功复现后,那种快乐,是简单枯燥的工作中的一抹绚丽的阳光!这也是笔者第一次复现模型,虽然只是深度学习框架不同,但对我来说是极其重要的一步!
最近又发现一个很不错的关系分类的模型:Mul-BERT
,但由于该模型的论文并未公布,Github也没有公开源码,笔者只好按自己的理解,简单地实现了近似Mul-BERT
模型,已上传至Github,网址为:https://github.com/percent4/Keras_quasi_Mul_BERT。等论文出来后,再用Keras去复现Mul-BERT
模型。
本文到此结束,感谢阅读~
2021年3月25日于上海浦东,此日阳光明媚~