开放领域的关系抽取的一次尝试
平台组成
- 标注平台(前端网页),对应目录
spo_tagging_platform
; - 标注内容: S,P,O, is_tagging, 原文以及SPO的关系。
- 模型:
- S,P,O: 序列标注算法(ALBERT+BiLSTM+CRF),对应目录
sequence_labeling
,在测试集上的F1大约为81%; - 关系抽取: 文本二分类(ALBERT+BiGRU+ATT),对应目录
text_classification
,在测试集上的准确率大约为96%。
标注语料来源于新闻内容和小说内容。
- 该项目在提取小说、新闻以及其他无结构文本方面的应用,对应目录为
extract_example
。
数据介绍
现阶段的序列标注算法的样本为3211个,关系抽取的标注数据为9279,共有关系1365个,数量最多的前20个关系如下图:
平台使用前的准备工作
- 该平台采用Python3开发,需要安装的模块参考requirements.txt
如何使用该平台?
序列标注算法
和文本二分类
已经训练好,可以直接clone下来使用。
-
运行
sequence_labeling/run.py
,该HTTP服务运行端口为12306; -
运行
text_classification/extract_server.py
,该HTTP服务运行端口为12308;
在Postman中输入如下(输入为一个句子,句子不宜过长,建议句子长度不超过128个字):
平台效果
该平台标注的时候,标注内容大部分为人物头衔,人物关系,公司与人的关系,影视剧主演、导演信息等。
当句子有只有一对三元组的时候,效果相对较好。
extract_example
目录中为抽取的效果,包括几本小说和一些新闻上的效果,关于这方面的演示,可以参考另一个项目:https://github.com/percent4/knowledge_graph_demo 。
一些句子也存在抽取出无用的三元组的情况,导致召回率偏高,这是因为本项目针对的是开放领域的三元组抽取,因此效果比不会有想象中的那么好,提升抽取效果的办法如下:
- 增加数据标注量,目前序列标注算法的样本仅3211多个;
- 模型方面:现在是pipeline形式,各自的效果还行,但总体上不如Joint形式好;
- 对于自己想抽的其他三元组的情形,建议增加这方面的标注;
- 文本预测耗时长(该问题已经解决)。
交流
本项目作为笔者在开放领域的三元组抽取的一次尝试,在此之前关于这方面的文章或者项目还很少,因此可以说是探索阶段。
源码和数据已经在项目中给出。
如需要更深一步的交流,请发送消息至邮箱[email protected]
,或者在Github上直接留言。
本人的微信公众号为Python爬虫与算法
,欢迎关注~