8

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

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

例如考虑以下文本:

“你们有些人可能知道,我上周在欧洲高能物理实验室 CERN 度过,著名的希格斯玻色子在去年 7 月被发现。每次去 CERN,我都会感到深深的敬意。除了快速参观之外多年来,我在 1990 年代后期作为访问科学家在那里呆了三个月,从事早期宇宙物理学的研究,试图弄清楚如何将我们今天看到的宇宙与其婴儿期可能发生的事情联系起来。”

实体:(作者)、欧洲核子研究中心希格斯玻色子

关系: - 我“访问过”CERN - CERN“发现了”希格斯玻色子

谢谢。

4

5 回答 5

7

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

这里有网站: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)

于 2018-10-28T20:58:12.953 回答
3

例如,您可以使用 Stanford Parser 提取动词及其依赖项。例如,您可能会得到“依赖链”,例如

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

认识到“我在 CERN 度过”、“我访问了 CERN”和“CERN 主持了我的访问”(等等)表示相同类型的事件是一项艰巨的任务。了解如何做到这一点超出了 SO 问题的范围,但您可以阅读释义识别文献(这里是一篇概述论文)。还有一个关于 SO的相关问题。

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

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

于 2013-03-07T11:16:11.357 回答
3

不知道您是否仍然感兴趣,但 CoreNLP 添加了一个名为 OpenIE(开放信息提取)的新注释器,它应该可以完成您正在寻找的内容。看看:OpenIE

于 2017-03-24T04:44:37.593 回答
1

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

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

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

于 2018-01-31T19:41:18.233 回答
0

There are many ways to do relation extraction. As colleagues mentioned that you have to know about NER and coreference resolution. Different techniques require different approaches. Nowadays, Distant Supervision is most common, and for detecting the relation between entities, they used FREEBASE.

于 2019-02-26T16:19:10.567 回答