两周前的周末,笔者决定对人物关系分类进行再次尝试。
  为什么说是再次尝试呢?因为笔者之前已经写过一篇文章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   supportunknown     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        25accuracy                         0.8531       776macro 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日于上海浦东,此日阳光明媚~

NLP(四十二)人物关系分类的再次尝试相关推荐

  1. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器 DirectInput专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  2. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8547531 作者:毛星云(浅墨) ...

  3. 大数据的过去、现在和未来:万字长文解读《大数据四十二条》

    这是傅一平的第314篇原创 "与数据同行"开通了微信群,现已汇聚了3500位小伙伴了,长按以下二维码发送"入群"后加入. 正文开始 它山之石可以攻玉,何宝宏博士 ...

  4. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8547531 作者:毛星云(浅墨 ...

  5. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  6. 左耳听风 第四十二周

    左耳听风 第四十二周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  7. maya批量命名插件_教你玩转MAYA的四十二精华造诣(第一期)

    最近在整理文档时发现我收藏了一篇关于MAYA应用技巧的文章,突然有兴趣看了看,结果发现老版本MAYA中的某些内容很多已经无法应用于新版本.我又上网查了一下,结果发现网上好多帖子和我收藏的这篇内容基本一 ...

  8. 四十二、深入Java中的文件读取操作

    @Author:Runsen @Date:2020/6/8 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  9. JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足

    JavaScript学习(四十二)-利用工厂模式创建对象以及工厂模式创建对象的不足 一.利用工厂模式创建对象 工厂模式是JavaScript中的一种设计模式,它的作用是批量创建具有同种属性的对象. 格 ...

  10. 多麦克风做拾音的波束_乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评...

    原标题:乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 20 ...

最新文章

  1. 实验研究信标无线电能输出功率的因素
  2. 进程注入的研究与实现
  3. [VS2010]在C#工程中设置Reference的相对路径
  4. C# 用数据库记录填充树
  5. android 返回图标,在Toolbar中添加一个返回图标
  6. bootstrapt 表格自适应_一起聊B端设计 - 如何设计表格?
  7. MacBook如何设置自动纠正拼写和自动大写字词的首字母
  8. WINCE Driver 心得总结
  9. 如何手动删除并重新安装 .NET Framework 2.0
  10. 类似pyinstaller_pyinstaller安装与使用——那些我踩过的坑
  11. 使用Vue cli 来快速开发并打包封装项目教程
  12. (一)GPS与基站定位
  13. 分享5篇医疗数据挖掘论文(附pdf下载)
  14. 计算机显示器闪烁,电脑显示器闪屏怎么办 显示器闪屏原因【解决方法】
  15. (收藏)不错的敏捷迭代回顾会步骤
  16. Word 只读模式修改
  17. iP138版 离线iP数据库ip.txt导入Mysql示例
  18. 悉尼mit it硕士选课 INFO5990
  19. 分享一个会遮掩的吊炸天登录页面
  20. phpstudy Error while setting value ‘STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

热门文章

  1. DoubleClick公司推出移动广告平台
  2. C语言绘画示例-进度条
  3. 1038 Recover the Smallest Number
  4. few-shot vid2vid部署安装及测试
  5. systemd.timer定时任务
  6. python取字符串首字母_python字符串操作
  7. 智能快递柜 软件架构 linux,13.智能快递柜(对接流程)
  8. 开心网外挂开发之 三
  9. Android11 使用NTP同步时间
  10. 计算机硬盘数据如何恢复,怎样进行硬盘数据恢复