关系提取、常识图谱、实体和 OpenNRE

关系提取( Relation Extraction)是一项自然语言解决工作,旨在提取实体之间的关系。 例如,从句罗密欧与朱丽叶是由威廉莎士比亚写的,咱们能够提取关系三元组(威廉莎士比亚,是罗密欧与朱丽叶的作者)。

关系提取是主动常识图谱构建中的一项关键技术。 通过关系提取,咱们能够累积提取新的关系事实,扩大常识图谱,这些常识能够作为机器了解人类世界的一种形式,在问答、举荐零碎、搜索引擎等上游有很多利用。

OpenNRE 是对文本进行关系提取最罕用的库之一。

OpenNRE 是一个开源且可扩大的工具包,它提供了一个对立的框架来实现关系提取模型。

该库带有两个预训练模型,无需任何训练即可投入生产:

  • wiki80_cnn_softmax:应用 CNN 编码器在 Wiki80 数据集上训练。
  • wiki80_bert_softmax:应用 BERT 编码器在 Wiki80 数据集上训练。

两个模型都在 Wiki80 数据集上进行训练,该数据集由 80 个关系组成,每个关系有 700 个实例。

为了应用 OpenNRE 库,必须首先从它的 repo 装置它:

# download repo with OpenNRE librarygit clone https://github.com/thunlp/OpenNRE.git# install librarycd OpenNREpip install -r requirements.txtpython setup.py install

接下来的步骤是:

  • Python 代码中导入库
  • 加载预训练模型。
  • 调用模型的 infer 函数,传递 (1) 一个段落,(2) 第一个实体地位,以及 (3) 第二个实体地位。 该函数返回实体对的预测关系,应用段落作为上下文。
import opennre# download NRE pretrained modelmodel = opennre.get_model('wiki80_cnn_softmax')# text used to look for relationstext = """Kobe Bean Bryant was an American professional basketball player.A shooting guard, he spent his entire career with the Los Angeles Lakers in the NBA."""# choose two entities whose relation is to be predictedh_text = "Kobe Bean Bryant"t_text = "shooting guard"h_pos = (text.index(h_text), text.index(h_text) + len(h_text))t_pos = (text.index(t_text), text.index(t_text) + len(t_text))# predict relationmodel.infer({'text': text, 'h': {'pos': h_pos}, 't': {'pos': t_pos}})# output:# ('position played on team / speciality', 0.9829357862472534)

只管名称为关系提取,但咱们在这里看到的示例实际上是一个多标签分类问题,其中能够提取的关系类型是训练集中存在的关系类型。

https://medium.com/nlplanet/t...