零基础入门--中文实体关系抽取(BiLSTM+attention,含代码)

前面写过一片实体抽取的入门,实体关系抽取就是在实体抽取的基础上,找出两个实体之间的关系。

本文使用的是BiLSTM+attention模型,代码在这里,不定期对代码进行修改添加优化。

数据处理

其实数据处理的方法有很多,我用的是近两年英文论文使用的比较多的词向量+位置向量的方法。

中文实体关系抽取的数据实在是太难找了,我现在只有忘记在哪里找到的一个人物关系数据集。希望同学们能分享一些其他的数据集。

先看原始数据(其实原始数据里好多句子我都看不出来其中人物实体的关系):

霍启山 霍启刚 兄弟姐妹 两位弟弟:霍震霆与朱玲玲育有三子,大公子霍启山、二公子霍启刚、三公子霍启仁

先是两个实体,然后是两个实体之间的关系,最后是两个实体所在的句子,都用空格分开。

所以数据处理先将这4部分分开。

先将句子转换成词向量,或者叫字向量。具体方法是建立word2id词典,把每个字都转换成id。

然后记录句子中每个字距离两个实体的距离。比如前面的例子,霍启山是第一个实体,这里假设实体后面为正,汉字和标点符号都计算在内,句子开始“两”和实体一的距离是-20,“位”和实体一的距离是-19。。。最后一个字“仁”和实体一的距离为16。

每个字距离实体二的距离同上。

这样每个字都有了一个字向量和两个距离向量,将这三个向量结合起来,就可以作为模型的输入了。

模型的输出就是人物关系的id,这个数据集里一共有11+1个人物关系。

unknown 0
父母 1
夫妻 2
师生 3
兄弟姐妹 4
合作 5
情侣 6
祖孙 7
好友 8
亲戚 9
同门 10
上下级 11

训练

我的github里目前只有pytorch版本的代码,训练前先运行data文件夹中的 data_util.py 文件,将中文数据处理成pkl文件供模型使用。

然后运行train.py文件即可,可以在train.py文件中设置epoch、batch等参数,运行结束模型会储存到model文件夹中。

准确度判断

实体关系抽取和命名实体识别的准确度判断相似,有三个值:准确率、召回率和f值。

准确率 = 某类被正确分类的关系数/被判定为某类的关系实例数
召回率 = 某类被正确分类的关系实例数/测试集中某类关系实例数
f = 2准确率召回率/(准确率+召回率)

END

学一下pytorch,看懂模型的代码基本上还是比较简单的。这里我使用的是字向量,也可以使用词向量,这样每个实体都是一个词,位置计算时候也比较方便。

不定期更新。。。

你可能感兴趣的:(关系抽取,中文,知识图谱,知识图谱)