实体关系抽取:BiLSTM + Attention (含代码+详细注释)

 

数据集介绍

本文采用的是一份中文数据集(数据质量不高,我们主要目的是展现实体关系抽取过程,掌握方法后可以用于高质量数据集上)

每个样例格式如下:

实体1    实体2    实体间关系    句子xxxxxxxxxxxxxxxxx

示例:

郭全宝 郭启儒    合作 、郭全宝)、我是家长(侯宝林、郭启儒)、武松打虎(侯宝林、郭全宝)、戏剧杂谈(侯宝林、郭启儒)、

数据集共11+1种关系 (包括unknow)

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

 我们本质上是把关系抽取问题转换成了多分类问题。

 

数据分布

1、获取实体关系分布状况:

标签的分布状况
relation_id    numbers
        0     78642
        2     36889
        1     28864
        5     14030
        4     12223
        3      8385
        6      8221
        8      3259
        10     2740
        11     2709
        7      2036
        9      2002
        dtype: int64

2、为了保证数据分布均匀,我门最好取 训练集+ 验证集 + 测试集 == 2000(总个数)

3、虽然步骤2保证了各种label的均与分布,但如果由于机器性能原因,一次只能训练一部分数据的时候,我们为了防止出现取出的小部分数据出现实体关系标签分布不均匀的情况,在划分数据之前进行了随机划分的处理。详细过程见代码。

 

特征提取

每个样本特征 :  pos1 + word + pos2 。其中pos1和pos2分别代表当前word对于实体1和实体2距离的向量表征。

 

模型选择

实体关系抽取:BiLSTM + Attention (含代码+详细注释)_第1张图片

 

采用BiLSTM + Attention 的方式

BiLSTM用于提取上下文信息,Attention用于得到句子级别的向量表示

 

模型训练

采用 train + validate + test 的模式

 

总结

本文实际上相当于对论文Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification的复现。

特别感谢这篇文章的博主https://blog.csdn.net/buppt/article/details/82961979,本次实现是基于该博主代码,把其python2代码转换为python3代码,加上完整的注释,并且有很细节与代码上的改进与优化。

BiLSTM+Attention 详见论文:https://www.aclweb.org/anthology/P16-2034/

 

鉴于很多人私信代码,代码链接:https://download.csdn.net/download/Tianweidadada/12005792

 

你可能感兴趣的:(知识图谱,实体关系抽取,NRE,pytorch)