神经网络在关系抽取中的应用
转载:http://blog.csdn.net/sparkexpert/article/details/72785304
一、关系抽取简介
信息抽取的主要目的是将非结构化或半结构化描述的自然语言文本转化成结构化数据(Structuring),关系抽取是其重要的子任务,主要负责从文本中识别出%9识别出实体(Entities),抽取实体之间的语义关系。
如:句子“Bill Gates is the founder of MicrosoftInc.”中包含一个实体对(Bill Gates, Microsoft Inc.),这两个实体对之间的关系为Founder。
Freebase中的关系类型
现有主流的关系抽取技术分为有监督的学习方法、半监督的学习方法和无监督的学习方法三种:
1、有监督的学习方法将关系抽取任务当做分类问题,根据训练数据设计有效的特征,从而学习各种分类模型,然后使用训练好的分类器预测关系。该方法的问题在于需要大量的人工标注训练语料,而语料标注工作通常非常耗时耗力。
2、半监督的学习方法主要采用Bootstrapping进行关系抽取。对于要抽取的关系,该方法首先手工设定若干种子实例,然后迭代地从数据从抽取关系对应的关系模板和更多的实例。
3、无监督的学习方法假设拥有相同语义关系的实体对拥有相似的上下文信息。因此可以利用每个实体对对应上下文信息来代表该实体对的语义关系,并对所有实体对的语义关系进行聚类。
与其他两种方法相比,有监督的学习方法能够抽取更有效的特征,其准确率和召回率都更高。因此有监督的学习方法受到了越来越多学者的关注。
因为NLP中的句子长度是不同的,所以CNN的输入矩阵大小是不确定的,这取决于m的大小是多少。卷积层本质上是个特征抽取层,可以设定超参数F来指定设立多少个特征抽取器(Filter),对于某个Filter来说,可以想象有一个k*d大小的移动窗口从输入矩阵的第一个字开始不断往后移动,其中k是Filter指定的窗口大小,d是Word Embedding长度。对于某个时刻的窗口,通过神经网络的非线性变换,将这个窗口内的输入值转换为某个特征值,随着窗口不断往后移动,这个Filter对应的特征值不断产生,形成这个Filter的特征向量。这就是卷积层抽取特征的过程。每个Filter都如此操作,形成了不同的特征抽取器。Pooling 层则对Filter的特征进行降维操作,形成最终的特征。一般在Pooling层之后连接全联接层神经网络,形成最后的分类过程。
二、论文研读
论文1:Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks
- 假如现在有一语料集,要判断Bill Gates is the founder of Microsoft这句话中Bill Gates 和Microsoft这两者之间的关系,首先要找出包含这两个单词的句子集{,, … ,}。现在要判断这些句子中两者众多关系中关系r的概率。
- 考虑句子集中每个包含m个单词的句子x。,为了表达这个句子的意思,将每个单词转化为对应的word embedding (维度)。同时找出每个单词相对于两个实体之间距离的position embeddings (维度)。讲两者联结起来,构成新向量集,(维度)
位置向量
- 接下来则要进行卷积运算了,设d=|w|, l为滑动窗口长度,可以就看出图一的例子中d=6 , l=2 。现在假设为w中第i-l+1到i行构成的。其中,超出边界(i<1或i>m)的值为0。
因此,卷积层的第i个滑动窗口由下式计算得到。
接着最大池化得到一数。
- 这篇论文在池化层时将通过两个实体位置将 feature map 分为三段进行池化,其目的是为了更好的捕获两个实体间的结构化信息。最后,通过 softmax 层进行分类。
如果将句子通过两个实体的位置将其分为三段,这样,就被分成了三段
然后再对每一段最大池化,
接着将 首尾连接起来得到
最后,通过非线性层tanh得到向量
最后一层全连接层
(n1是最后的关系分类数)
- 原始句子经过CNN的处理后,就成为了一个具有多个特征的向量,之后就可以用不同的方法去处理了。
- 这篇论文使用了多示例学习(multi-instance learning)的方法。
7. 假设网络所有参数为θ,训练集有T个包,
第i个包有qi个示例:
算法流程如下:
目标函数:
最大化目标函数以学习参数。
论文2:Neural Relation Extraction with Selective Attention over Instances (2016)
- 论文在前半部分的处理与前一篇论文一样,不多做阐述。
- 如上图所示,主要区别在于全连接层本篇论文使用了选择性关注机制。
- 考虑包含两个实体的句子集合,将这些矢量加权求和:
- 论文中选择了两种求权值的方法,如下:
(1)取平均(AVE): (2)选择性关注(ATT):
该方法主要是为了减少错误标签的影响。
- 加入attention之后的s,再通过一层网络:
这一层网络的参数M是现存所有实体关系的向量所组成的矩阵,这样的处理在数学上的意义也是很直观的,最后将该层网络的输出经过一个softmax层,那么所要最大化的的就是的就是在网络参数下某实体关系的概率:
- 选取交叉熵函数并利用随机梯度下降进行优化最后便可以学得网络的所有参数:
论文3:Attention-Based Bidirectional Long Short-Term Memory Networks for RelationClassification
- 该论文在前面也做了类似的词向量和位置向量处理。后面使用了LSTM的方法。
- 主要流程图如下:
- 这里只简要各层的功能:
输入层:将原始句子输入该层;
向量层:将每个单词映射到一个低维向量;
LSTM层:利用BLSTM从输入的向量得到该句子的强特征
关注层:产生一个权重向量,将LSTM中的每一个时间节点通过这个权重向量联结起来;
输出层:将上面得到的向量运用到关系分类任务上。
三、实验过程与验证:
1、前两篇论文实验:
代码使用的语言是C++,在Ubuntu环境下测试
代码:https://github.com/thunlp/NRE
下载完代码后,编译,进入文件夹要测试的文件夹包括CNN+ONE, PCNN+ONE,CNN+ATT, PCNN+ATT打开终端输入make
其中:PCNN+ONE对应第一篇论文,PCNN+ATT对应第二篇论文。
训练数据: ./train
测试数据: ./test
p.s.作者已经训练好数据并且已保存好模型,可以直接test,所以没有必要每个都运行train。
(1)CNN+ONE结果
(2)CNN+ATT结果
(3)PCNN+ONE结果
(4)PCNN+ATT结果
效果上PCNN > CNN
ATT>ONE
2、第三篇论文实验:
第三篇论文实验使用的python3语言,在Ubuntu环境下测试
首先下载代码:https://github.com/thunlp/TensorFlow-NRE
作者使用的python版本是python2,同时tensorflow的版本是r0.11
而我电脑上的python版本是python3,tensorflow 的版本是1.1.0
%安装,所以只能改动源代码。
首先,ubuntu中默认安装的python2中有个2to3工具,可以直接将python2的代码转换为python3的代码。
终端输入 2to3 –w example.py就能将example.py转换为python3,同时产生example.oy.bak的备份文件。
这样就可以将所有的相关代码转换为对应的python3语言,非常方便,省的一个一个改。
接着就要改tensorflow了,由于tensorflow版本的变动比较大,所以要改的地方还挺多的,针对我改动过程中遇到的问题,整理如下,当然一些没遇到的就没有整理了。
Tensorflow 新旧版本的改动
一、AttributeError:module 'tensorflow.python.ops.nn' has no attribute 'rnn_cell'
tf.nn.rnn_cell ===》
tf.contrib.rnn
二、TypeError:Expected int32, got list containing Tensors%2got list containing Tensors of type '_Message' instead.
tf.concat参数调换下位置,数字放在后面
三、AttributeError:module 'tensorflow' has no attribute 'batch_matmul'
batch_matmul ===》
matmul
四、AttributeError:module 'tensorflow' has no attribute 'mul'
mul ===>
multiply
五、ValueError:Only call `softmax_cross_entropy_with_logits` with named arguments (labels=...,logits=..., …)
注明哪个是labels,哪个是logits
六、AttributeError:module 'tensorflow' has no attribute 'scalar_summary'
tf.audio_summary ===》 tf.summary.audio
tf.contrib.deprecated.histogram_summary===》 tf.summary.histogram
tf.contrib.deprecated.scalar_summary===》 tf.summary.scalar
tf.histogram_summary===》 tf.summary.histogram
tf.image_summary===》 tf.summary.image
tf.merge_all_summaries===》 tf.summary.merge_all
tf.merge_summary===》 tf.summary.merge
tf.scalar_summary===》 tf.summary.scalar
tf.train.SummaryWriter===》 to tf.summary.FileWriter
七、WARNING:initialize_all_variables(from tensorflow.python.ops.variables) is deprecated and will be removed after2017-03-02.
Instructions forupdating:
Use`tf.global_variables_initializer` instead.
代码改完后,就可以运行了。
Python3 train_GRU.py
根据保存的模型修改test.py中的testlist:
修改完后运行
Python3test_GRU.py
在众多评测结果中我找到的比较好的结果是iter16000,结果如下
Evaluating P@Nfor iter 16000
Evaluating P@Nfor one
P@100:
0.71
P@200:
0.65
P@300:
0.5866666666666667
Evaluating P@Nfor two
P@100:
0.72
P@200:
0.64
P@300:
0.62
Evaluating P@Nfor all
P@100:
0.74
P@200:
0.705
P@300:
0.6533333333333333
2017-05-15T16:12:42.613068
Evaluating alltest data and save data for PR curve
saving all testresult...
PR curvearea:0.309841978919
2017-05-15T16:15:40.915434
P@N for all testdata:
P@100:
0.7
P@200:
0.665
P@300:
0.65
而作者找到的较好的结果是iter10900,PR曲线 ,可见其效果是最好的。
而我得到的PR曲线如下,效果跟CNN+ATT差不多
参考资料:
论文1
论文2
论文3
http://www.cipsc.org.cn/qngw/?p=890
http://it.sohu.com/20170402/n486130957.shtml
神经网络在关系抽取中的应用相关推荐
- 【信息抽取】如何使用循环神经网络进行关系抽取
事物.概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中.为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开. 然而,随着互联 ...
- 【信息抽取】如何使用卷积神经网络进行关系抽取
事物.概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中.为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开. 然而,随着互联 ...
- 信息抽取(四)【NLP论文复现】Multi-head Selection和Deep Biaffine Attention在关系抽取中的实现和效果
Multi-head Selection和Deep Biaffine Attention在关系抽取中的应用 前言 Multi-head Selection 一.Joint entity recogni ...
- ACL 2021 | 基于词依存信息类型映射记忆神经网络的关系抽取
©作者 | 陈桂敏 来源 | QTrade AI研究中心 QTrade AI 研究中心是一支将近 30 人的团队,主要研究方向包括:预训练模型.信息抽取.对话机器人.内容推荐等.本文介绍的是一篇信息抽 ...
- 机器不学习:浅析深度学习在实体识别和关系抽取中的应用
机器不学习 jqbxx.com -机器学习好网站 命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.命名实体 ...
- AGGCN | 基于图神经网络的关系抽取模型
今天给大家介绍2019年6月发表在ACL上的论文"Attention Guided Graph Convolutional Networks for Relation Extraction& ...
- 最新综述!基于图神经网络的关系抽取技术进展
关系抽取任务是为了预测文本中两个实体中的语义关系,是 NLP 中的重要任务.基于图的模型由于其在关系推理中的有效性和强度而被广泛采用,许多研究依赖于外部解析器将文本序列转换为依赖树来初始化图,但是,解 ...
- 腾讯AI Lab 提出「完全依存森林」,大幅缓解关系抽取中的错误传递
2020-02-16 10:11:00 作者 | 腾讯 AI Lab责编 | 贾伟 AAAI 是人工智能领域的顶级国际会议之一.今年的 AAAI 2020 是第 34届,于2月7日至12日在美国纽约举 ...
- ACL 2021 | 基于依存句法驱动注意力图卷积神经网络的关系抽取
©作者 | 陈桂敏 来源 | QTrade AI研究中心 QTrade 的 AI研究中心是一支将近 30 人的团队,主要研究方向包括:预训练模型.信息抽取.对话机器人.内容推荐等.本文介绍的是一篇信息 ...
- 谈谈我对NLP文档级关系抽取中Ign_F1指标的理解(Ign_F1与F1的关系)
因为Ign_F1这个参数网上所解释的内容都是一致的,并且不太好理解 于是我就特地请教了YX师兄 这里特地感谢1107实验室YX师兄 F1分数 F1为精确率和召回率的调和平均数(为下部分做准备) 对于查 ...
最新文章
- Linux虚拟机和Window本地共享文件夹用于PHP项目调试
- android jason动画,Android 动画之Lottie动画使用
- bool 字符串方法 和for循环
- Spring Boot引起的“堆外内存泄漏”排查及经验总结
- Exchange收件人管理
- uint8_t / uint16_t / uint32_t /uint64_t 有什么区别?
- android 获取uri的正确文件路径的办法
- IDC 网络数据存储
- 署五笔软件测试初学者,三天学会五笔打字练习测试新手教程
- 研发/项目计划管理表格
- openstack进阶:虚拟桌面usb重定向(usb映射)
- Python排序算法(四)——插入排序
- nc工具测试tcp/udp协议
- Android获取基带版本
- Joda-Time 操作常用时间函数
- JS中onchange事件:域内容被改变的事件
- scrum认证费用_如何获得专业Scrum大师的认证-快速和慢速方式
- betapubgmobile服务器维护,pubg mobile beta测试版
- STM32 CUBEMX 设置GPIO重映射
- loadrunner12-错误 -26366: 找不到 web_reg_find 的“Text=19728.00”
热门文章
- htc 常见错误和解决方案
- Atitit java js groupby 分组操作法
- Atitit 常见的bpmn事件类型与触发机制 目录 1. 事件定义概述	2 2. 按照事件的位置分类	2 2.1. 对事件按照位置进行分类,主要可分为开始事件、中间事件和结束事件,	2 3. 按照
- 21世纪高等专业教材21 CENTURY HIGHER PROFESSIONAL TEXTBOOKS RESUME WRITING METHOD PRINCIPLES AND RULES
- Atitit NER实体命名识别(Name Entity Recognition 目录 1.1. a. NER实体命名识别(Name Entity Recognition) 	1 2. NER抽
- paip.mysql 性能跟iops的以及硬盘缓存的关系
- paip.TechExcel DevSuite IIS 应用配置
- paip.支付宝即时到账接口改双功能接口.txt
- paip.流程图的图形化编程及源码生成时序图
- (转)Atom安装插件被墙,解决方案:给apm设置中国国内镜像