开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具

2019 年 9 月 27 日 开放知识图谱

本文转载自公众号:浙大 KG。


作者:余海阳

机构:浙江大学



代码地址: https://github.com/zjunlp/deepke

OpenKG 发布地址: http://openkg.cn/tool/deepke

 

一、系统简介

关系抽取是知识图谱构建的基本子任务之一 它主要面向非结构化的文本数据,抽取文本/句子中两个或多个实体之间的语义关系,从而组成结构化的知识,用于信息抽取、问答系统和知识库补全等任务中。基于传统方法的关系抽取工作,依赖人工设计的特征及抽取特征的质量,有很大的局限性。而随着深度学习在图像、语音等领域取得的成功,许多关系抽取的研究工作也引入神经网络以自动提取文本/句子中的特征,减少人工工作的同时,取得了非常好的效果。

本系统基于深度学习,以统一的接口实现了目前主流的关系抽取模型。包括卷积神经网络、循环神经网络、注意力机制网络、图卷积神经网络、胶囊神经网络以及使用语言预训练模型等在内的深度学习算法。后续仍将持续更新,添加如端到端实体关系联合抽取等新模型。

 

二、主要算法简介

1. 基于 CNN 的关系抽取模型

使用 CNN 抽取每个句子中最重要的特征,得到句子的特征向量表示,并用于最终的分类。模型首先通过预训练或者随机初始化的 embedding 将句子中的词转化为词向量,同时使用句子中的实体词及其上下文相对位置表征实体词的位置向量;随后通过 CNN 网络抽取句子级别的特征,并使用池化方式得到压缩后的特征向量表示。最后将特征向量输入一个全连接的神经网络层对句子所表述的关系进行分类。

2. 基于 RNN 的关系抽取模型

与使用 CNN 网络抽取句子特征不同,本模型主要通过双向 LSTM 网络抽取句子的特征,并且加入 Attention 机制对输出的特征向量施加权重,最终生成有偏向性的向量表示;同样地,生成的向量输入全连接的神经网络层最终实现对关系的分类。


3、基于 PCNN 的远程监督关系抽取模型

在关系抽取任务中引入远程监督学习的方法,尤其是针对远程监督中的标记噪声问题,使用分段的 CNN(Piecewise CNN,简写为 PCNN)抽取句子特征向量表示的同时,考虑到同一个 Bag 中句子表达关系的不同重要性,引入了句子级别的Attention 机制。

句子特征向量表示: PCNN 与 CNN 模型抽取句子特征向量方法相同,组合词和词相对位置的 embedding 表示输入 CNN 模型进行卷积。不同的是在池化部分,使用分段池化取代前面的最大值池化操作。分段池化根据句子中两个实体的位置将句子分为三个片段,再分别进行池化操作,这样能捕捉句子中的结构信息以及更加细粒度的特征。

4. 基于 Capsule 的关系抽取模型

模型首先通过预训练的 embedding 将句子中的词转化为词向量;随后使用 BiLSTM 网络得到粗粒度的句子特征表示,再将所得结果输入到胶囊网络,首先构建出 primary capsule,经由动态路由的方法得到与分类结果相匹配的输出胶囊。胶囊的模长代表分类结果的概率大小。


5. 基于 Transformer 的关系抽取模型

模型使用 Transformer 的 encoder 部分编码句子信息。使用 multi-head attention 模块不断的抽取句子中重要的特征,并且使用残差网络的叠加方法,将注意力层得到的输出与输入拼接到一起并正则化。如此方式可以堆叠多层,更好的抽取句子信息。最后将 Transformer 的结果接一层全连接层得到最终的分类效果。

 


6. 基于 GCN 的关系抽取模型

GCN 在图像领域的成功应用证明了以节点为中心的局部信息聚合同样可以有效的提取图像信息。因此仿照在图像领域的应用方式,将方法迁移到关系抽取中,利用句子的依赖解析树构成图卷积中的邻接矩阵,以句子中的每个单词为节点做图卷积操作。如此就可以抽取句子信息,再经过池化层和全连接层即可做关系抽取的任务。

 

7. 基于 BERT 语言预训练模型的关系抽取模型

BERT 的问世证明了语言预训练模型对下游的 nlp 任务有很大的提升,可以帮助提升关系抽取的效果。简单的使用 BERT 语言预训练模型方式,将句子输入到 BERT 后,得到的结果输入到全连接层即可做关系抽取任务。实验结果表明可以取得相当不错的效果。


三、安装与使用

1. 首先推荐使用 Anaconda,可以更方便的管理python虚拟环境。在 Anaconda官网下载安装后,在终端输入:conda info 检查是否成功安装 conda。

2. 新建python虚拟环境。终端输入:conda create -n deepkeTest python=3.7,需要确认的命令时,输入 y,直到虚拟环境安装完成。此时终端中输入conda activate deepkeTest,即可进入新建的虚拟环境。

3. 安装python依赖包。终端输入命令:pip install -r requirements.txt,即可开始安装。若是安装速度较慢,建议添加pip国内镜像。具体方法为,终端输入命令:vim ~/.pip/pip.conf 打开pip配置文件,如果找不到该文件就新建一个。打开文件后写入如下内容:

[global]

index-url= https://mirrors.aliyun.com/pypi/simple/

[install]

trusted-host=mirrors.aliyun.com

写完保存之后,重新输入依赖包安装命令 pip install -r requirements.txt,即可大幅加快安装速度。

4. 安装完成后,即可开始使用本系统。终端输入:python main.py 即可立刻开始运行系统,此时为默认配置效果。具体运行效果如下:

===== start preprocess data =====

load raw files...

load data/origin/train.csv

load data/origin/test.csv

verify whether need split words...

need word segment, use jieba to split sentence

build sentence vocab...

after trim, keep words [6615 / 18645] = 35.48%

Directory 'data/out' do not exist; creating...

save vocab in data/out/vocab.pkl

 

build train data...

build test data...

build relation data...

 

save train data in data/out/train.pkl

save test data in data/out/test.pkl

===== end preprocess data =====

 

load data in data/out/vocab.pkl

load data in data/out/train.pkl

load data in data/out/test.pkl

 

CNN(

  (embedding): Embedding(

    (word_embed):Embedding(6615, 50, padding_idx=0)

    (head_pos_embed):Embedding(102, 5, padding_idx=0)

    (tail_pos_embed):Embedding(102, 5, padding_idx=0)

  )

  (mask_embed):Embedding(4, 3)

  (convs): ModuleList(

    (0): Conv1d(60, 100,kernel_size=(3,), stride=(1,), padding=(1,), bias=False)

    (1): Conv1d(60, 100,kernel_size=(5,), stride=(1,), padding=(2,), bias=False)

  )

  (fc1):Linear(in_features=600, out_features=100, bias=True)

  (fc2):Linear(in_features=100, out_features=10, bias=True)

  (dropout):Dropout(p=0.3, inplace=False)

)

==========  Starttraining  ==========

Train Epoch: 1 [640/4000 (16%)]           Loss:2.115848

Train Epoch: 1 [1280/4000 (32%)]        Loss: 1.695553

Train Epoch: 1 [1920/4000 (48%)]        Loss: 1.826675

Train Epoch: 1 [2560/4000 (63%)]        Loss: 1.423478

Train Epoch: 1 [3200/4000 (79%)]        Loss: 1.081029

Train Epoch: 1 [3840/4000 (95%)]        Loss: 0.764394

Train Epoch: 1 [4000/4000 (100%)]       Loss: 0.771318


 

macro metrics: [p:0.8403, r:0.7970, f1:0.7709]

micro metrics: [p:0.7970, r:0.7970, f1:0.7970]

 

......

 

5. 其他配置详情见 deepke/config.py 文件。

 

 

参考文献

[1] Zeng, D., Liu, K., Lai, S., Zhou, G., Zhao, J.: Relation classification via convolutional deep neural network. In: COLING. pp. 2335–2344.ACL (2014)

[2] Zhou, P., Shi, W., Tian, J., Qi, Z., Li, B., Hao, H., Xu, B.: Attention-based bidirectional long short-term memory networks for relation classification. In:ACL (2). The Association for Computer Linguistics (2016)

[3] i, G., Liu, K., He, S., Zhao, J.: Distant supervision for relation extraction with sentence-level attention and entity descriptions. In: AAAI. pp. 3060–3066. AAAI Press (2017)

[4] Zhang N, Deng S, Sun Z, et al. Attention-based capsule networks with dynamic routingfor relation extraction[J]. arXiv preprint arXiv:1812.11321, 2018.

[5] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.

[6] Zhang Y, Qi P, Manning C D, et al. Graph Convolution over Pruned Dependency Trees Improves Relation Extraction[C]. Empirical Methods in Natural Language Processing, 2018: 2205-2215.

[7] Shi P, Lin J. Simple BERT Models for Relation Extraction and Semantic Role Labeling[J]. arXiv preprint arXiv:1904.05255, 2019.




OpenKG


开放知识图谱(简称 OpenKG)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

点击阅读原文,了解 DeepKE

登录查看更多
2

相关内容

关系抽取指的是检测和识别文本中实体之间的语义关系,并将表示同一语义关系的提及(mention)链接起来的任务。关系提取任务需要在一组工件(通常来自文本或XML文档)中对语义关系提及进行检测和分类。该任务与信息抽取(IE)的任务非常相似,但是IE还需要删除重复关系(消除歧义),并且通常指的是提取许多不同的关系。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
209+阅读 · 2020年4月26日
基于深度学习的多标签生成研究进展
专知会员服务
140+阅读 · 2020年4月25日
【斯坦福大学-论文】实体上下文关系路径的知识图谱补全
[综述]基于深度学习的开放领域对话系统研究综述
专知会员服务
78+阅读 · 2019年10月12日
OpenNRE 2.0:可一键运行的开源关系抽取工具包
PaperWeekly
22+阅读 · 2019年10月30日
论文浅尝 | 基于局内去噪和迁移学习的关系抽取
开放知识图谱
16+阅读 · 2018年12月2日
总结 | 清华大学韩旭:神经关系抽取模型
AI科技评论
8+阅读 · 2018年9月28日
领域应用 | 深度学习在知识图谱构建中的应用
开放知识图谱
5+阅读 · 2018年3月19日
论文浅尝 | Distant Supervision for Relation Extraction
开放知识图谱
4+阅读 · 2017年12月25日
赛尔原创 | 基于深度学习的候选答案句抽取研究
哈工大SCIR
5+阅读 · 2017年10月9日
Arxiv
91+阅读 · 2020年2月28日
Arxiv
21+阅读 · 2019年3月25日
Arxiv
10+阅读 · 2018年4月19日
Arxiv
3+阅读 · 2018年2月22日
VIP会员
相关资讯
OpenNRE 2.0:可一键运行的开源关系抽取工具包
PaperWeekly
22+阅读 · 2019年10月30日
论文浅尝 | 基于局内去噪和迁移学习的关系抽取
开放知识图谱
16+阅读 · 2018年12月2日
总结 | 清华大学韩旭:神经关系抽取模型
AI科技评论
8+阅读 · 2018年9月28日
领域应用 | 深度学习在知识图谱构建中的应用
开放知识图谱
5+阅读 · 2018年3月19日
论文浅尝 | Distant Supervision for Relation Extraction
开放知识图谱
4+阅读 · 2017年12月25日
赛尔原创 | 基于深度学习的候选答案句抽取研究
哈工大SCIR
5+阅读 · 2017年10月9日
Top
微信扫码咨询专知VIP会员