NLP查找实体之间的关系

问题描述 投票:5回答:5

我目前的理解是,可以使用OpenNLP,Stanford NLP等工具包从文本文档中提取实体。

但是,有没有办法找到这些实体之间的关系?

例如,请考虑以下文本:

“正如你们中的一些人可能知道的那样,我上周在欧洲核子研究中心(欧洲核子研究中心,欧洲高能物理实验室,去年7月发现了着名的希格斯玻色子)。每次去欧洲核子研究中心,我都会感到极度敬畏。除了快速访问多年来,我作为一名访问科学家在20世纪90年代末在那里工作了三个月,从事早期宇宙物理学研究,试图找出如何将我们今天看到的宇宙与其初期可能发生的事物联系起来。“

实体:我(作者),CERN,希格斯玻色子

关系: - 我“访问”欧洲核子研究中心 - 欧洲核子研究中心“发现”希格斯玻色子

谢谢。

text nlp stanford-nlp opennlp information-extraction
5个回答
3
投票

例如,您可以使用Stanford Parser从其家属中提取动词。例如,你可能会得到“依赖链”

"I :: spent :: at :: CERN". 

认识到“我在欧洲核子研究中心度过”和“我访问欧洲核子研究中心”和“欧洲核子研究中心主持我的访问”(等)表示同样的事件是一项更艰巨的任务。如何做到这一点超出了SO问题的范围,但你可以读取释义识别的文献(here是一篇概述论文)。在SO上还有一个related question

一旦你可以聚类相似的链,你需要找到一种标记它们的方法。您只需选择群集中最常见链的动词即可。

但是,如果您想要提取一组预定义的关系类型,并为这些关系手动注释许多文本,那么该方法可能会非常不同,例如,使用机器学习来学习如何识别基于关系类型在注释数据上。


3
投票

不知道你是否仍然感兴趣但是CoreNLP添加了一个名为OpenIE(开放信息提取)的新注释器,它应该可以实现你所需要的。看看:OpenIE


1
投票

与斯坦福解析器类似,您也可以使用Google语言API,在其中发送字符串并获取依赖关系树响应。

您可以先测试此API,看看它是否适用于您的语料库:https://cloud.google.com/natural-language/

这里的结果是主题谓词对象(SPO)三元组,其中谓词描述了这种关系。您需要遍历依赖关系图并编写脚本来解析三元组。


1
投票

是的,一点没错。这称为关系提取。斯坦福大学开发了几种有用的工具来解决这个问题。

这里有网站:http://deepdive.stanford.edu/relation_extraction这是github存储库:https://github.com/philipperemy/Stanford-OpenIE-Python

一般来说,这个过程是如何运作的。

results = entract_entity_relations("Barack Obama was born in Hawaii.")
print(results)
# [['Barack Obama','was born in', 'Hawaii']]

一些重要的是,只有三元组被提取为(subject,predicate,object)形式。


0
投票

有很多方法可以进行关系提取。正如同事提到的那样,您必须了解NER和共指消解。不同技术需要不同的方法。如今,远程监督是最常见的,为了检测实体之间的关系,他们使用了FREEBASE。

© www.soinside.com 2019 - 2024. All rights reserved.