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

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

作者:余海阳

机构:浙江大学


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

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

 

一、系统简介

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

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

 

二、主要算法简介

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

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

 

640?wx_fmt=png

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

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

640?wx_fmt=png

 

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

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

640?wx_fmt=png

三、安装与使用

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

640?wx_fmt=png 

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)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

640?wx_fmt=jpeg

点击阅读原文,了解 DeepKE。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微前端在美团外卖的实践

背景 微前端是一种利用微件拆分来达到工程拆分治理的方案,可以解决工程膨胀、开发维护困难等问题。随着前端业务场景越来越复杂,微前端这个概念最近被提起得越来越多,业界也有很多团队开始探索实践并在业务中进行了落地。可以看到&#xff0c…

论文浅尝 | Meta Relational Learning: 基于元关系学习的少样本知识图谱推理

本文转载自公众号:浙大KG。 笔记整理:陈名杨,浙江大学在读博士发表会议:EMNLP-2019论文链接:https://arxiv.org/abs/1909.01515开源代码&…

测试集没标签,可以拿来测模型吗?

文:维建编:白鹡鸰背景正常情况下,我们可以用一个带标签的数据集来测试分类器的表现(称之为测试集)。然而,现实中,因为种种因素的制约(标注成本高、标注难度大等 Google:穷…

从0到1 | 手把手教你如何使用哈工大NLP工具——PyLTP!

原文链接:https://flashgene.com/archives/46041.html 本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢. 作者 | 杨秀璋 来源 | CSDN 博客(CSDN id:Eastmount) 【导语】此文是作者基于 Python 构…

美团智能配送系统的运筹优化实战

深入各个产业已经成为互联网目前的主攻方向,线上和线下存在大量复杂的业务约束和多种多样的决策变量,为运筹优化技术提供了用武之地。作为美团智能配送系统最核心的技术之一,运筹优化是如何在美团各种业务场景中进行落地的呢?本文…

Android如何给无法更改继承关系的Activity更换ActionBar(setContentView方法实战)

前言: 通常我们有时候会直接使用ADT工具直接新建一个Activity页,而这个Activity我们又无法更改它的父类,那遇到这种情况该如何处理呢?其实很简单,好,看如何来解决这个问题: 先来看看这个问题出…

论文浅尝 | 基于属性embeddings的跨图谱实体对齐

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识库问答。来源:AAAI 2019链接:https://aaai.org/ojs/index.php/AAAI/article/view/3798跨图谱实体对齐任务的目标是从两个不同知识图谱中找出同一 real-world 实体&a…

LeetCode 771. 宝石与石头(哈希)

文章目录1. 题目信息2. 解题1. 题目信息 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复,J 和 S中的所有字符都是字母…

开启NLP新时代的BERT模型,真的好上手吗?

都说BERT模型开启了NLP的新时代,更有“BERT在手,天下我有”的传说,它解决了很多NLP的难题:1、BERT让低成本地训练超大规模语料成为可能;2、BERT能够联合神经网络所有层中的上下文来进行训练,实现更精准的文…

YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介

原文链接: https://zhuanlan.zhihu.com/p/136382095 YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介YOLO系列是基于深度学习的回归方法。RCNN, Fast-RCNN,Faster-RCNN是基于深度学习的分类方法。YOLO官网:https://g…

一站式机器学习平台建设实践

本文根据美团配送资深技术专家郑艳伟在2019 SACC(中国系统架构师大会)上的演讲内容整理而成,主要介绍了美团配送技术团队在建设一站式机器学习平台过程中的经验总结和探索,希望对从事此领域的同学有所帮助。 0. 写在前面 AI是目前…

LeetCode 535. TinyURL 的加密与解密(哈希)

文章目录1. 题目信息2. 哈希解题1. 题目信息 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它将返回一个简化的URL http://tinyurl.com/4e9iAk. 要求:设计一个 TinyURL 的…

论文浅尝 | Doc2EDAG:一种针对中文金融事件抽取的端到端文档级框架

论文笔记整理:叶宏彬,浙江大学博士生,研究方向为知识图谱、自然语言处理。链接:https://arxiv.org/pdf/1904.07535.pdf背景大多数现有的事件提取(EE)方法仅提取句子范围内的事件参数。但是,此类…

NeurIPS'20 | 通过文本压缩,让BERT支持长文本

作者 | wangThr来源 | 知乎这是今年清华大学及阿里巴巴发表在NIPS 2020上的一篇论文《CogLTX: Applying BERT to Long Texts》,介绍了如何优雅地使用bert处理长文本。作者同时开源了不同NLP任务下使用COGLTX的代码:论文题目:CogLTX: Applying…

福利!Android官方网站出现中文版本!

这两天在Android开发者网站上查东西的时候发现有中文的搜索结果,点开结果全是中文的,以后可以畅通无阻的看文档了,快来围观。

自然场景人脸检测技术实践

一、 背景 人脸检测技术是通过人工智能分析的方法自动返回图片中的人脸坐标位置和尺寸大小,是人脸智能分析应用的核心组成部分,具有广泛的学术研究价值和业务应用价值,比如人脸识别、人脸属性分析(年龄估计、性别识别、颜值打分和…

LeetCode 257. 二叉树的所有路径(DFS)

文章目录1. 题目2. DFS解题1. 题目 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例:输入:1/ \ 2 3\5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->…

JAVA BIO

JAVA BIO深入剖析1. Java BIO 基本介绍2. Java BIO 工作机制3. 传统BIO编程4. BIO模式下的多发和多收消息5. BIO模式下接收多个客户端6. 伪异步I/O编程7. 基于BIO的文件上传8. Java BIO模式下的端口转发9. 基于BIO模式下的即时通信功能清单简单说明项目启动与演示1. Java BIO 基…

速览EMNLP 2020上录取的知识图谱相关论文

文 | 泽宇源 | 知乎前不久,自然语言处理领域三大顶会之一的 EMNLP 2020 发布了论文录取的结果。在EMNLP 2020论文正式出版之前,泽宇搜集了目前Arxiv上已经发布出来的录取在EMNLP 2020上所有和知识图谱相关的论文,下面我们就一起来一睹为快。1…

技术动态 | 数据库研究者视角下的知识图谱研究

本文转载自公众号:图谱学苑 。本次讲解的是数据库领域的三大会(SIGMOD、VLDB、ICDE)近两年关于图数据的研究进展,特别是知识图谱的最新研究。知识图谱是2012年Google为改进其搜索引擎而提出的概念,其本质是一个描述事物…