从非结构化文本中提取知识

前言

从人们在互联网上的公开话语中, 可以提取到异常多的信息。 在Heuritech,我们使用这些信息来更好地了解人们想要什么,他们喜欢什么产品以及原因。 这篇文章从科学的角度解释了什么是知识提取和细节,它们在几个最新的方法中是如何做到的。

什么是知识提取?

高度结构化的数据库使其容易来推理,并且可以用来进行推测。 例如,在WikiData(h̀ps://www.wikidata.org/wiki/Wikidata:Main_Page) 或 YAGO(h̀p://www2007.org/papers/paper391.pdf),实体是隔离的, 之间是通过关系连接到一起的。 然而,大多数人类知识表达采取非结构化文本的形式,从中很难推理和获得智慧。 例如下面的例子:

左边的原始文本包含了以非结构化方式呈现的很多有用信息,例如生日、国籍、活动。 提取这些信息对应到了自然语言处理中的一个具有挑战性的领域,即可能需要句子剖析(将自然语言映射为机器可理解的表达),实体检测和多参考解析来聚集同一个实体的相关信息。 知识提取的导入是为了,例如,能够执行QuestionAnswering任务:在结构化知识库中,人们可以进行查询并得到所请求的信息。 另一个应用是通过在提取的知识图中找到相应路径来进行任意复杂的推理。 在知识提取中,人们可能对上下关系中实体包含于其他实体而感兴趣,也可能是对关系提取感兴趣的。

这篇博文的目的是回顾能从原始文本或现有知识图中采集和提取结构化信息的方法。 更精确地,我们旨在从语义上解析文本以便提取实体和/或关系。 我们定义句子中一个三元组为两个实体E1,E2和它们之间的关系R:(E1,R,E2)。 一个知识图 (KG)表示为一组三元组构建的图:顶点是实体和边是关系。 下面大多数文章假定实体是可识别和无歧义的。 在实践中,可以用类似来自Stanford的FACTORIE(h̀ps://people.cs.umass.edu/~kschulꀀ/publications/factorie‑nips‑2009.pdf)或NER parser (h̀p://nlp.stanford.edu/software/CRF‑NER.shtml)这样的工具来实现。

知识图谱完成化:链接预测

尽管在Heuritech我们对从原始文本中进行知识提取更感兴趣,我们还是先快速在这回顾下只依赖于一个KG(没有额外文本语料库可用)的技术。 我们要执行的任务是填充一个不完整的KG。 在2013年之前,连接以图论的技术来完成,却忽略了图是KG的事实。

在2013年,TranslatingEmbeddings for Modelling Multi-relational Data (byBordes et al)

的论文(h̀ps://www.utc.fr/~bordesan/dokuwiki/_media/en/transe_nips13.pdf)是专注KG完成化方法的第一次尝试。 它在相同的低维向量空间中学习实体和关系的嵌入。 目标函数需要约束实体E2接近E1 + R。

这是通过对现有三元组赋于一个高于由负抽样的随机三元组的分数来实现的(h̀p://deeplearning4j.org/word2vec)。 上述模型被称为TRANSE,这项工作与Mikolov的word2vec(h̀p://deeplearning4j.org/word2vec)有关,在图片中可看到,word2vec中概念之间的关系自然地采用嵌入空间转换的形式。

再添加一些改进就进化到TransH和TransR这些模型了。 Probabilistic Reasoning via DeepLearning: Neural Association Models 是目前最佳方法。

从原始文本中提取三元组

这里,我们专注于从原始文本提取三元组(E1,R ,E2)。 取决于所使用的监督类型,这个任务有多种变身。三元组的提取可以百分百的以无监督的方式进行。 通常,文本首先被不同的工具(例如TreeBank剖析器,MiniPar或OpenNLP剖析器)来解析,然后实体(以及来剖析器的标记)之间的文本被聚类并最终简化。虽然一看上去很有吸引力,因为看不需要监督,其实缺点很多。首先,根据使用的剖析器的不同,所依赖的手工定制的规则就是非常枯燥繁琐。再加上,发掘的聚类虽然包含了语义上相关的关系,但它们不能给出跟细化的释义。通常,聚类中可以包含“is-capital-of”和“is-city-of”这样语义接近的关系。 然而,仅仅依赖无监督,我们将不会发现“is-capital-of” 能推出“is-city-of”的关系,但是反过来推理就不可以。

我们还是更关注不同方面的监督: 监督学习 , 远程监督和通用Schema 。 我们先给出一些定义。 固定的Schema关系的抽取是指被发现的关系是来自固定的含有可能关系的列表。与此相反,在开放域关系抽取,关系不受此限制。在这种情况下,没有固定Schema来过多的限制知识提取,如果不是完美的适用的话。但是,这就让从一个由开放域构成的图中泛化和推测新的关系变得更加困难,因为太多的关系有各种类型。 OpenIE(开放信息抽取)是一种过滤器和标准化实体之间的原始文本以获得开放域关系的工具。

基于Schema的监督学习

在这种案例中,可用数据是一个句子集,每个句子用从它提取的三元组来标注。这意味着原始文本对应到了文本的知识图谱(KG)。 最近有两篇论文(均出版于2016年)为这个问题提供了前沿的解决方案。

End-to-End RelationExtraction using LSTMs on Sequences and Tree Structures (by Miwa and Bansal)的论文展示了一个利用双堆栈网络的方法: 一个双向LSTM做实体检测(它创建一个实体的嵌入), 另外一个Tree-based LSTM用于检测出找到的实体之间链接关系。 下图来自原始文件,显示了所使用的架构。

他们的方法是将原始文本做了词性标注, 这和原始词一起输入到双向LSTM。 这种方法的优势在于实现了端到端,这样模型联合在一起学习检测实体和关系。 这个架构是相当复杂,作者使用了很多奇技淫巧来训练(如Schedule采样和实体的预训练 )。 这些技巧显着提高了训练模型的效果。 该方法胜过了ACE04和ACE05数据集上的关系提取任务和 SemEval-2010任务8开发集上取得的最佳结果方法。可以发现超过80%的实体和60%的关系。

Dong和Lapata合写的论文Language to Logical Form with neuralattention (htt̀p://arxiv.org/abs/1601.01280) 描述了一个sequence-to-sequence的模型。它将原始句子作为输入(不需要POS Tagging标记)并且能输出所需的信息。 在我们这种情况下,所需的信息是三元组(E1,R,E2),但原始论文给出的模型并不局限于这种特定案例。 该模型是编码器-解码器架构。 更确切地说,LSTM单元分布在堆栈两层结构里, 并且使用了注意机制( 见我们的其他博客文章,详细了解注意机制

https://blog.heuritech.com/2016/01/20/attention-mechanism/)。 注意机制使得自动学出自然语言表达和固定Schema关系之间的软对齐成为可能。 在后处理步骤中会处理生僻字和数字:在训练期间用生僻字标记或数字标记以及唯一ID来替换它。 在推理中,标记+ ID在被原始生僻字或数字替换回来。 为了避免过大的字典, 这个技巧非常好用。 实验结果达到了最先进方法的结果,有时甚至超过最先进方法。 注意,实验没有专门针对三元组提取,所以我们不能与Miwa和Bansal模型比较。

关系提取的监督学习方法与端到端方法结合的很好(根据概述的第二篇文章中的案例,他们甚至不需要POS Tagging标记)。 但是,该种学习方式受到有限的标记数据量的限制,然而网络上可用的原始文本实际上是无限的。

基于Schema的远程监督

远程监督 ,也称弱监督 ,是指当我们想从文本中抽取关系时,有个初始KG作为种子可以用来提取三元组。 一对实体是由链接他们的KG中的每一个关系弱监督的。当然,这种监督噪声很大,例如句子“巴拉克奥巴马比米歇尔奥巴马大3岁”将被(巴拉克奥巴马,米歇尔奥巴马)的KG实例(和所有其他连接奥巴马和他的妻子的实例)弱标记,但显然这两个关系不相同。 如果我们有很多文本和足够大的KG(含有文本中相同的实体),我们可以学习从原始文本到KG的固定Schema关系的映射。

Weston, Bordes et al. (2013) 写的ConnectingLanguage and Knowledge Bases with Embedding Models for Relation Extraction 就是一个远程监督。 它假定实体被发现,然后消除歧义,并且实体之间的文本利用OpenIE工具在开放域关系进行转换。 实体和关系的嵌入创建在在同样的低维空间中。OpenIE文本到最相似固定Schema关系的映射是通过他们之间的嵌入的相似度计算的。这个系统是通过排序误差来训练的。给定一个OpenIE关系,这个想法给含有弱标签的配对要比KG中的随机关系(通过Negative Sampling)要更高的得分。这个文件更进一步,一旦文本中提出去三元组,这个模型就学出实体和它们之间关系的空间嵌入值。在这个嵌入空间中,我们期望关系r对应到E1到E2的转化。这个空间嵌入不仅由找到的三元组创建,也包括原始KG里面的所有三元组。

在上面提供的所有示例中,找到的关系在最初提出的固定Schema之内。 然而,如前所述,不存一个固定Schema能够完美的适合所有可能的文本能够表达的两个实体间的关系,

通用Schema

通用Schema通过嵌入文本中包含的来自种子KG(固定Schema的关系)和开放领域的关系来建立KG。 通用Schema的一个巨大优势是它不需要远程监督。通过学习嵌入来为实体和关系建立语义空间。固定Schema关系的嵌入对于开放域关系来说是相同的:关于两类关系的推断是可能的,KG完善是能够改进的。

介绍通用Schema的第一篇文章是RelationExtraction with Matrix Factorization and Universal Schemas(Riedel et al. in2013)。在本文中,使用OpenIE工具计算开放域关系。然后创建一个二进制矩阵,其中行对应于成对的实体,而列对应到到固定Schema关系和开放域关系的连接。矩阵中的1表示实体之间存在关系。我们希望预测矩阵中的缺失值,并生成一个置信度值(在0和1之间),正如原始论文中的图片所展示的。 矩阵构造所带来的思考是使得关系提取逼近另一个领域:协同过滤。因而也可以使用协同过滤的方法来推断新关系。

可以考虑应用嵌入方法的几种参数化处理:隐含特征模型,邻居模型和实体模型,或甚至它们之间的组合。 对于训练而言, BayesianPersonalized Ranking (BPR) 可以被使用; 它是一种排序流程,给予观察到的事实比随机事实(通过Negative Samping获得)以更高的得分。

上述方法的问题是每个openIE文本嵌入在不同的向量中,因此不可能泛化到一个没有在训练集出现的新的openIE文本。

基于深度学习的通用Schema

Representing Text for Joint Embedding of Text and Knowledge Bases (Toutanova等,2015)提出利用卷积神经网络(ConvNet)来嵌入实体之间的文本, 实现泛化到新的开放领域关系的问题。和前面提到的使用openIE工具不同。

使用ConvNet用于参数化在两个实体之间(在字的层次上)对文本进行参数化。利用句法依赖解析作为额外输入。在这里的图片上,黄色向量是开放域关系的嵌入。注意,在嵌入上相似的开放域关系也避开在了在协同过滤中的冷启动问题。

MultilingualRelation Extraction using Compositional Universal Schema ( Verga et al. 2016) 使用了相同的架构。

他们试验了ConvNet和LSTM循环神经网络,结果证明LSTM网络优于ConvNet。他们的模型和Toutanova的模型之间有两个其他的区别。 第一个是当我们想要泛化文本而不重新训练模型时,在推理时利用开放域关系的编码器网络。 第二,Verga 等没使用对原始文本的句法依赖性解析的信息。 Verga 等更进一步,因为他们的模型应用于多语言数据。重要的是,他们的方法使用多语言迁移学习,提供了在KG中没有实体的语言提供预测模型,通过为跨文本语料库的共享实体学习类似的表达。 下图给出了要填充的矩阵和参数化模型的概述。 请注意,不同的编码器(带有权重)用于不同的语言。 有趣的是,英语和西班牙语的联合学习仅仅提高了英语模型的得分。

文章还强调开放域关系, 这些关系从过滤和规范化实体之间的原始文本获得, 这对惯用的表达式也有优势,例如当文本片段的含义不是它包含的单词的组合时。在这种情况下,我们不想将惯用表达式送到LSTM网络,但是更好地学习它的唯一嵌入。 在实践中,文章显示整合两种嵌入参数化(基于字的LSTM和唯一嵌入)词的整体非常好,因为它充分利用了互补的方法。

结论

我们在这里回顾了各种技术来推断知识图中的新关系,以及从文档中提取关系。 我们关注最近的技术,这些技术依赖于关系和实体的嵌入,深度学习,协同过滤... 我们的进一步工作是考虑那些不总能给出绝对的或者不按时间变化的知识的文本。 例如,在社交媒体中,当人们表达自己的意见时,事实可能因人而异,导致知识库的冲突。 此外,在Heuritech,我们对多模数据感兴趣,因此我们希望能够从图像中提取相关信息,并将其和从文本中找到的信息放在相同的KG中。

原文: Eloizablocki, knowledge extraction from unstructured texts, 2016/04/15, https://blog.heuritech.com/author/eloizablocki/

本文分享自微信公众号 - AI2ML人工智能to机器学习(mloptimization)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数说戏聊

Tableau基础知识1.文件与数据1.1 Tableau文件类型2.制表3.绘图

19320
来自专栏JavaEdge

Spring Data JPA: 分页和排序实战继承PagingAndSortingRepository通过参数生成Pageable对象直接获取Pageable对象返回结果

之前我们学习了使用Jpa访问关系型数据库 通过Jpa大大简化了我们对数据库的开发工作。但是,之前的例子中我们只提到了最简单的CRUD。 实际上,Spring...

31120
来自专栏数说戏聊

Python3分析MySQL数据库

1.在bash_profile中配置全局环境变量 终端open ~/.bash_profile打开环境变量配置文件,写入:

13320
来自专栏测试开发架构之路

MySQL/Oracle视图的创建与使用

视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。

16230
来自专栏数说戏聊

07-08 创建计算字段使用函数处理数据第7章 创建计算字段第8章 使用函数处理数据

上述例子中,存储在表中的数据都不是应用程序所需要的。我们需要直接从数据库中检索出转换、计算或格式化过的数据,而不是检索出数据,然后再在客户端应用程序中重新格式化...

11320
来自专栏测试开发架构之路

【转载】Impala和Hive的区别

Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中...

49020
来自专栏JavaEdge

使用Spring Data JPA访问关系型数据库添加数据库和jpa依赖定义实体对象创建对象访问方法总结

我们将定义一个实体对象UserApply并将其存储到关系型数据库中,并使用JPA注解:

12320
来自专栏后台及大数据开发

springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用

首先说下查询缓存:查询缓存就是相同的数据库查询请求在设定的时间间隔内仅查询一次数据库并保存到redis中,后续的请求只要在时间间隔内都直接从redis中获取,不...

14210
来自专栏JavaEdge

Spring Data JPA踩坑记:与Bootstrap Table的分页协作@PersistenceContext和@Resource的区别

注入一堆保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就...

14810
来自专栏python3

python 元组

当程序的变量,不希望被修改的时候,就可以用到了。比如数据库连接信息,如果被修改了,就会造成程序异常。

12910

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励