赞
踩
向AI转型的程序员都关注了这个号????????????
机器学习AI算法工程 公众号:datayx
简介信息抽取(information extraction),即从自然语言文本中,抽取出特定的事件或事实信息,帮助我们将海量内容自动分类、提取和重构。这些信息通常包括实体(entity)、关系(relation)、事件(event)。例如从新闻中抽取时间、地点、关键人物,或者从技术文档中抽取产品名称、开发时间、性能指标等。
显然,信息抽取任务与命名实体识别任务类似,但相对来说更为复杂。有时,信息抽取也被称为事件抽取(event extraction)。
与自动摘要相比,信息抽取更有目的性,并能将找到的信息以一定的框架展示。自动摘要输出的则是完整的自然语言句子,需要考虑语言的连贯和语法,甚至是逻辑。有时信息抽取也被用来完成自动摘要。
由于能从自然语言中抽取出信息框架和用户感兴趣的事实信息,无论是在知识图谱、信息检索、问答系统还是在情感分析、文本挖掘中,信息抽取都有广泛应用。
信息抽取主要包括三个子任务:
实体抽取与链指:也就是命名实体识别
关系抽取:通常我们说的三元组(triple)抽取,主要用于抽取实体间的关系
事件抽取:相当于一种多元关系的抽取
由于工作上的原因,先对关系抽取进行总结,实体链指部分之后有时间再补上吧。
关于关系抽取
关系抽取通常再实体抽取与实体链指之后。在识别出句子中的关键实体后,还需要抽取两个实体或多个实体之间的语义关系。语义关系通常用于连接两个实体,并与实体一起表达文本的主要含义。常见的关系抽取结果可以用SPO结构的三元组来表示,即 (Subject, Predication, Object),如
中国的首都是北京 ==> (中国, 首都, 北京)
关系抽取的分类:
是否有确定的关系集合:限定关系抽取:事先确定好所有需要抽取的关系集合,则可讲关系抽取看作是一中关系判断问题,或者说是分类问题
开放式关系抽取:需要抽取的关系集合是不确定的,另一方面抽取预料的所属领域也可能是不确定的
关系抽取可以用有监督、半监督甚至是无监督的方法来做。有监督学习:监督学习的关系集合通常是确定的,我们仅需要将其当作一个简单的分类问题来处理即可。高质量监督数据下的监督学习模型的准确率会很高,但缺点就是需要大量的人力成本和时间成本来对文本数据进行标注,且其难以扩展新的关系类别,模型较为脆弱,泛化能力有限
半监督学习利用少量的标注信息作为种子模版,从非结构化数据中抽取大量的新的实例来构成新的训练数据。主要方法包括 Bootstraping 以及远程监督学习的方法
无监督学习一般利用语料中存在的大量冗余信息做聚类,在聚类结果的基础上给定关系,但由于聚类方法本身就存在难以描述关系和低频实例召回率低的问题,因此无监督学习一般难以得很好的抽取效果。
对于有监督的关系抽取任务,通常也将其分为两大类Pipline:将实体抽取与关系抽取分为两个独立的过程,关系抽取依赖实体抽取的结果,容易造成误差累积
Joint Model:实体抽取与关系抽取同时进行,通常用模型参数共享的方法来实现
随着深度学习以及词向量的发展,近年来大多的关系抽取模型都采用词向量作为关系抽取的主要特征,且均取得了非常好的效果。限于篇幅,本文仅对有监督学习下的 Pipline 经典模型进行介绍
Pipline Model#
Model 1: Relation Classification via Convolutional Deep Neural Network#
原文链接:https://www.aclweb.org/anthology/C14-1220/
在深度学习兴起之前,关系抽取的传统方法依赖于特征工程,而这些特征通常由预先准备的NLP系统得到,这容易在构造特征的过程中造成误差累积,阻碍系统性能。
该论文属于早期使用深度卷积网络模型解决关系抽取任务的经典论文。该论文将关系抽取问题定义为:给定一个句子 SS 和名词对 e1e1和 e2e2,判断 e1e1 和 e2e2 在句子中的关系,即将关系抽取问题等效为一个关系分类问题。与传统的方法相比,该模型只需要将整个输入句子以及简单的词信息作为输入,而不需要认为构造特征,就能得到非常好的效果。模型的主要架构如下所示:
模型的输入主要包括两个部分,即词汇级别特征以及句子级别特征:
lexical level features:词汇级别特征包括实体对e1e1 和 e2e2 的词嵌入向量,e1e1 和 e2e2 的左右两边词的词嵌入向量,以及一个 WordNet 上位词向量。WordNet 上位词特征指的是 e1e1 和 e2e2 同属于哪一个上位名次,如“狗”和“猫”的上位词可以是“动物”或者“宠物”,具体需要参考的 WordNet 词典是怎样构建的。直接将上述的5个向量直接拼接构成词汇级别的特征向量 ll
sentence level feature:句子级别特征采用最大池化的卷积神经网络作为主要特征抽取模型,输入特征包括词向量信息以及位置向量信息。Word Features:为了能够抽取到每个词完整的上下文信息,在句子首位额外添加了Padding字符,Word Embedding 层是预训练得到的,并且参与后续的训练任务
Position Features:额外增加了时序特征来弥补卷积网络对时序特征抽取能力不足的缺陷。论文中的做法是为每个词拼接两个固定维度的位置向量,分别表示词距离两个关键实体的相对位置信息。如“中国 的 首都 是 北京”,“的”与“中国”的距离大小为 1,与“北京”的距离大小为 -3,再将 1 和 -3 在 Position Embedding 层中查表得到,Position Embedding 层是随机初始化的,并且参与到模型训练当中
将上述的 Word Features 与 Position Features 拼接,输入到卷积网络中,再用Max Pooling 层把每个卷积核的输出进行池化操作。再将池化结果通过一个全连接层,激活函数为 tanhtanh,将其看作一个更高层次的特征映射,得到最终的句子级别的特征向量 gg
将词汇级别特征与句子级别特征直接拼接,即f=[l;g]f=[l;g],最终将其送入分类器进行分类。
小结:该模型将关系抽取任务利用神经网络进行建模,利用无监督的词向量以及位置向量作为模型的主要输入特征,一定程度上避免了传统方法中的误差累积。但仍然有 lexical level feature 这个人工构造的特征,且 CNN 中的卷积核大小是固定的,抽取到的特征十分单一
Model 2: Relation Extraction: Perspective from Convolutional Neural Networks
原文链接:https://www.aclweb.org/anthology/W15-1506/
该论文首先提出关系分类和关系抽取两个主要任务:
关系分类:两个实体之间存在多个关系类型,并且这多个可能关系中有一个 non-relation 类别,这多个类别的样本数量基本是平衡的
关系抽取:关系抽取与关系分类的区别在于,关系抽取中的 non-relation 类别的样本数目可能远远超过其他类别的样本数目,这样的任务更有挑战性,但在实际中有更为广泛的应用
论文主要关注的是关系抽取任务。与 Model 1 类似,同样是利用卷积神经网络作为主要的特征抽取模型,模型细节如下所示:
Look-up tables:包括 word embedding 层和 position embedding 层两个部分。word embedding 为预训练得到,而 position embedding 则随机初始化,两者均参与训练。对于输入句子长度,将其限定在两个实体可能的最大长度的范围内,假设句子长度为 nn,用 i−i1i−i1 和 i−i2i−i2 表示地i个词距离第一个实体和第二个实体的距离,则 position embedding 层的维度为(2n−1)×md(2n−1)×md,其中mdmd 为位置向量的维度。假设句子中第 ii 个词的词向量为 eiei ,位置向量为 di1di1 和 di2di2,则该词的词表征为 xi=[ei;di1;di2]xi=[ei;di1;di2]
Convolutional layer:该模型的卷积层借鉴了 TextCNN 的模型结构,通过设计多个不同宽度的卷积核来抽取不同粒度大小的特征来提升模型性能。
Pooling layer:最大池化操作,用于抽取最重要的特征
Classifier:全连接层,激活函数为softmax,还使用了 dropout 和 l2 正则化策略
小结:该论文的模型输入完全没有人工特征,且使用多宽度大小的卷积核进行特征抽取,相对于 Zeng 的效果来说仅提升了 0.1%0.1%,个人认为提升的主要关键点在于多粒度大小的卷积核上,而 lexical feature 在这种简单的深度学习模型上还是能够起到一定的效果的,这在之后的工作中也得到了证实
Model 3: Classifying Relations by Ranking with Convolutional Neural Networks
原文链接:https://www.aclweb.org/anthology/P15-1061/
这篇论文同样是在 Model 1 基础上的改进,模型的基本架构与之前基本一致,最大的改变损失函数。模型结构如上图所示,主要有以下几个部分:
模型仅将整个句子作为输入,不考虑 lexical level feature。输入词表征包括 Word Embedding 和 Position Embedding 两个部分,获取方式与之前一样
卷积层为窗口为 3 的固定大小的卷积核,且也对输出进行了最大池化操作
对于得到的编码表征,输入一个全连接层,得到每个类别的非归一化分数,但不再对输出做 softmax 操作,而是直接对正类别和负类别进行采样,从而计算损失函数,损失函数(pairwise ranking loss function)如下所示:
这个损失函数主要有以下几个特点:m+m+ 和 m−m− 为 margin 参数,γγ 为缩放因子
sθ(x)sθ(x) 为模型输出的非归一化分数,y+y+ 为正确标签,c−c− 为错误标签中分数大于 m−m− 的那些标签,作者认为这些标签具有更大的信息量。
显然,损失函数 L 将随着 sθ(x)sθ(x)y+ 的增大而减小,随着 sθ(x)sθ(x)c− 的减小而减小
此外,模型还考虑了两个实体不属于任何类别,将其看作类别 "Other",在训练的过程中,不考虑这个类别的分类,或者说在全连接层为该类别分配了一个不可训练的零初始化的神经元,对于该类别为正确标签的训练样本,损失函数的第一项为0,只保留第二项。在预测的时候,只当某个样本所有类别分数为负数时,才将其分类为 "Other"
模型在训练过程中还额外添加了 L2 正则化项
小结:该模型的主要创新点在于其 Ranking loss 上,相比于 Softmax 函数,其能够使得模型不仅仅考虑到正类别分数要尽量高,还要关注易分类错误的类别分数尽量低。其缺点仍然是模型结构上的缺陷。
Model 4: Bidirectional Long Short-Term Memory Networks for Relation Classification
原文链接:https://www.aclweb.org/anthology/Y15-1009/
在这篇论文之前有过利用简单的 RNN 和 BiRNN 作为模型编码模块的处理关系抽取任务的,但是效果较 CNN 来说差的就不是一点两点了,这里就不提了。该论文用经典的 BiLSTM 作为模型主要模块,此外,重新考虑了 lexical feature,实验证明 lexical feature 对模型性能确实有十分明显的提升效果。
模型的主要架构是 BiLSTM,这个结构大家再熟悉不过了,论文也没有贴模型整体图,这里我也偷下懒...接下来分段阐述一下模型的主要工作。
特征初始化:模型使用到的特征除了词和位置特征以外,还利用NLP工具获得了词性(POS)、实体(NER)、依存句法(dependency parse)以及上位(hypernyms)特征词、词性(POS)、实体(NER)以及上位(hypernyms)特征均为 lexical feature
位置向量和依存句法特征的构造方式如下所示位置向量:位置向量(图中为PF)的构造方法与 Zeng CNN 中一致
相对依存特征(Relative dependency features)依赖 Stanford dependency parser 依存句法树生成,做如下定义Relative root feature:根节点定义为 rrrr,根节点的子节点定义为 rcrc,其他节点定义为 roro
Relative e1e1 feature:实体 e1e1 定义为 ee1e,实体 e1e1 的父节点定义为 ee1p,实体 e1e1 的子节点定义为 ee1c,其他节点定义为 ee1o
Relative e2e2 feature:相对实体 e2e2 做如 e1e1 类似的定义
Dep feature:为每个词与其父节点的依存关系
将两个向量拼接,然后通过多层的全连接网络将其进行整合
最后利用前连接层 + softmax 进行分类
小结:论文最后测试了不加人工特征,只用 word embedding,结果下降了1.51.5个点,说明人工特征还是有一定效果的。此外,论文还测试了移除某个特征对模型的影响,发现位置特征和 NER 特征的移除对模型的影响非常小,这也是十分好理解的,这里就不多说了。
Model 5: Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification
原文链接:https://www.aclweb.org/anthology/P16-2034/
该模型利用了典型的注意力机制对 BiLSTM 的输出进行了注意力加权求和,在仅利用了词向量的情况下效果接近加入人工特征的模型,可见注意力机制的作用也是十分强大的。
模型的主要架构如上图所示。其实模型的主要架构还是比较常规的,下面简单介绍一下:
Input Layer: 即输入的句子,每个词用 one-hot 向量表示
Embedding Layer: 预训练的词向量层,为 one-hot 向量提供查询词表
LSTM Layer: 利用 BiLSTM 对输入句子进行编码,得到每个时刻的输出,即对应每个词的编码结果
Attention Layer: 典型的 Soft-Attention 层。直接随机初始化一个参数向量作为 Query,用于与句子的编码结果进行一维匹配计算注意力分数,再对句子的各个词的编码结果进行加权求和,具体表达式如下所示:
其中,H为 BiLSTM 的所有时刻的输出,ww 为随机初始化的参数向量,同时也参与到模型训练,αα 为注意力分数的计算结果,rr 为对 HH 注意力分数加权的结果,最后还对注意力加权结果通过一个 tanhtanh 激活函数,即 h∗=tanh(r)h∗=tanh(r) 得到注意力层的输出
Output Layer: 即一层全连接层分类器,损失函数为交叉熵,同时加入了 L2 正则化项
小结:从论文的结果来看,不进行特征工程,仅仅将整个句子作为模型输入,并加入注意力机制,模型效果得到了非常大的提高,一方面说明必要的特征工程还是有效的,另一方面表明注意力机制也起到了十分明显的作用
Model 6: Relation Classification via Multi-Level Attention CNNs
原文链接:https://www.aclweb.org/anthology/P16-1123/
这篇文章公布其在 SemEval-2010 Task 8 上的分数达到了 88.0,但是没有开源,且复现结果也不太好,这个模型的效果存在争议,或许是论文中个别细节描述有误,但是其思路还是非常不错的,先给概括一下整个论文的工作:
模型主要依赖一种多层注意力机制第一层的注意力机制在输入层,用于计算所有词对目标实体的注意力大小
第二层的注意力机制在CNN的输出部分,用于计算对于目标关系的注意力大小
提出了一种新的损失函数,证明其效果要优于传统的损失函数
其优秀的模型表现依赖于非常丰富的先验知识
模型的主要结构如上图所示,下面分别阐述下模型的各个模块:
小结:可以看到这篇论文的两次 Attention 以及 损失函数的设计都是十分巧妙的,且论文中提到效果非常好,许多技巧还是可以借鉴的。
Model 7: Bidirectional Recurrent Convolutional Neural Network for Relation Classification
原文链接:https://www.aclweb.org/anthology/P16-1072/
论文的主要思想是对两个实体间的词法句法的最短依赖路径 SDP (shortest dependency path)进行建模,这也是常见的一种关系抽取任务的建模方法,并与之前的建模方式存在一些区别,下面相对详细地阐述一下。
由于受到卷积神经网络和循环神经网络特性的限制,之前的工作将句法依赖关系看作是词或者某些句法特征,如词性标签 (POS)。该论文的第一个贡献就是提出了一种 RCNN 的网络结构:
利用两通道的 LSTM 对 SDP 进行全局信息编码
利用 CNN 捕获每个依赖关系连接的两个单词的局部特征
此外,作者还指出,两个实体之间的依赖关系是有向的,如上图展示的因果关系示例图,若存在 KK 个关系,则需要将其看作 (2K+1)(2K+1) 种分类问题,其中 11 为 OtherOther 类。因此,作者提出其第二个贡献就在于使用双向的循环卷积神经网络 (BRCNN) 来同时学习双向的表征,可以将双向依赖问题建模为对称的依赖问题,从而将其简化为 (K+1)(K+1) 的分类问题
模型细节如上图所示,下面简单讲解一下整个模型结构:
Input:模型的输入为两个实体间的 SDP。论文中提到,对于句子中的两个实体,存在某种关系R,则其词法句法的最短依赖路径 SDP 将阐明这个关系 R 的大多数信息,其主要有如下两个原因:如果实体 e1e1 和 e2e2 是同一谓词的论元(与谓词搭配的名词),则它们之间的最短路径将通过该谓词;
如果实体 e1e1 和 e2e2 属于不同的谓词-论元结构,但共享了同一个论元,则最短路径通过这个共享论元
Lookup Table:包括词向量和依存关系向量,词向量是预先训练得到的,依存关系向量直接随机初始化即可,此外,还可以在词向量中加入 NER、POS 以及 WordNet 等特征
BRCNN:BRCNN 为模型的主要架构,包括三个部分 Two-channel BiLSTM、CNN、Classifier
小结:将词法句法的 SDP 作为输入特征来实现关系抽取也是常见的一种建模方法,且效果也非常不错。这篇论文通过对文本以及依赖关系分别建模,利用 LSTM 和 CNN 进行不同层次的特征编码,并分两个方向进行信息融合,确实是一大亮点。如果词向量只用 Word Embeddings,分数可以达到 85.4,如果加上 NER、POS 以及 WordNet 等特征可以达到 86.3。
Pipline Model 性能对比
将关系抽取看作单独任务的模型总结就做到这里了,或许之后看见更优秀的论文还会进行一些更新,这里将每个模型在 SemEval-2010 Task-8 上的分数都记载一下:
总的来说,人工特征、句法特征、注意力机制、特殊的损失函数都是关系抽取模型性能提升的关键点,其余的就需要在模型架构上进行合理的设计了,下一篇准备介绍实体与关系联合抽取模型,争取早点写出来...
参考链接
http://www.shuang0420.com/2018/09/15/知识抽取-实体及关系抽取/
https://zhuanlan.zhihu.com/p/91762831
http://shomy.top/2018/02/28/relation-extraction/
阅读过本文的人还看了以下文章:
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
长按图片,识别二维码,点关注
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。