OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  OpenNRE — 面向关系抽取任务的开源神经网络工具包

OpenNRE — 面向关系抽取任务的开源神经网络工具包

 
  armed ·  2026-08-06 11:00:23 · 1 次点击  · 0 条评论  

OpenNRE(OpenSKL 子项目)

OpenNRE 是 OpenSKL 的一个子项目,提供一个开源抽取工具包,用于从纯文本中提取结构化知识,其中 ATT 作为关键特性,以考虑与关系相关的文本信息。

概述

OpenNRE 是一个开源、可扩展的工具包,提供了统一框架来实现关系抽取模型。我们统一了不同关系抽取模型的输入和输出接口,并为每个模型提供了可扩展的选项。该工具包涵盖了监督学习和远程监督两种设置,并兼容传统神经网络和预训练语言模型。

关系抽取是一项自然语言处理(NLP)任务,旨在抽取实体(例如 比尔·盖茨微软)之间的关系(例如 创始人)。例如,从句子 比尔·盖茨创立了微软 中,我们可以抽取关系三元组(比尔·盖茨创始人微软)。

关系抽取是自动构建知识图谱的关键技术。通过使用关系抽取,我们可以不断积累新的关系事实并扩展知识图谱,这作为机器理解人类世界的一种方式,具有许多下游应用,如问答系统、推荐系统和搜索引擎。如果您想了解更多关于神经关系抽取的内容,请访问我们的另一个项目(NREPapers)。

我们很荣幸能通过 OpenNRE 工具包帮助您更好地探索关系抽取!您可以参考我们的文档以了解更多项目细节。

模型

在此工具包中,我们支持基于 CNN 的关系抽取模型,包括标准 CNN 和我们提出的 CNN+ATT。我们还实现了基于预训练语言模型(BERT)的方法。

评估

为了验证此工具包的有效性,我们采用包级关系抽取任务进行评估。

设置

我们使用 NYT10 数据集,这是一个基于纽约时报语料和 FreeBase 的远程监督集合。我们主要在 CNN-ATT 模型上进行实验,该模型采用实例级注意力机制,相比普通 CNN 模型表现出更优的性能。

结果

我们报告两个模型的 AUC 和 F1 分数。标有 (*) 的最右两列表示来自 Gao et al.(2021)Lin et al.(2016) 的结果。结果显示,我们实现的 CNN-ATT 模型略优于原始论文,同时也证实了 CNN-ATT 相对标准 CNN 模型的更优性能。

模型 AUC F1 AUC(论文*) F1(论文*)
CNN - - 0.212 0.318
CNN-ATT 0.333 0.397 0.318 0.380

使用方法

安装

作为 Python 包安装

我们目前正在努力将 OpenNRE 部署为 Python 包。敬请期待!

使用 Git 仓库

从我们的 GitHub 页面克隆仓库(别忘了给我们点个星!)

git clone https://github.com/thunlp/OpenNRE.git

如果速度太慢,您可以尝试

git clone https://github.com/thunlp/OpenNRE.git --depth 1

然后安装所有依赖:

pip install -r requirements.txt

注意:请根据您的机器(与 CUDA 版本相关)选择合适的 PyTorch 版本。有关详细信息,请参阅 https://pytorch.org/。

然后使用以下命令安装包:

python setup.py install 

如果您还想修改代码,请运行:

python setup.py develop

请注意,为了快速部署,我们已排除了所有数据和预训练文件。你可以通过运行 benchmarkpretrain 文件夹中的脚本手动下载它们。例如,如果您想下载 FewRel 数据集,可以运行

bash benchmark/download_fewrel.sh

数据

您可以进入 benchmark 文件夹并使用我们的脚本下载数据集。我们还在此文档中列出了一些关于数据集的信息。我们提供了两个带有手动标注测试集的远程监督数据集:NYT10mWiki20m。请参阅数据集部分了解详情。

快速开始

确保您已按上述说明安装了 OpenNRE。然后导入我们的包并加载预训练模型。

>>> import opennre
>>> model = opennre.get_model('wiki80_cnn_softmax')

请注意,第一次下载检查点和数据可能需要几分钟。然后使用 infer 进行句子级关系抽取

>>> model.infer({'text': 'He was the son of Máel Dúin mac Máele Fithrich, and grandson of the high king Áed Uaridnach (died 612).', 'h': {'pos': (18, 46)}, 't': {'pos': (78, 91)}})
('father', 0.5108704566955566)

您将获得关系结果及其置信度分数。

如果您想在 GPU 上使用该模型,只需在调用推理函数之前运行

>>> model = model.cuda()

目前,我们提供以下可用模型:

  • wiki80_cnn_softmax:使用 CNN 编码器在 wiki80 数据集上训练。
  • wiki80_bert_softmax:使用 BERT 编码器在 wiki80 数据集上训练。
  • wiki80_bertentity_softmax:使用 BERT 编码器(通过实体表示拼接)在 wiki80 数据集上训练。
  • tacred_bert_softmax:使用 BERT 编码器在 TACRED 数据集上训练。
  • tacred_bertentity_softmax:使用 BERT 编码器(通过实体表示拼接)在 TACRED 数据集上训练。

训练

您可以使用 OpenNRE 在自己的数据上训练模型。在 example 文件夹中,我们提供了监督关系抽取模型和包级关系抽取模型的示例训练代码。您可以使用我们提供的数据集,也可以使用自己的数据集。例如,您可以使用以下脚本在带有手动测试集的 NYT10 数据集上训练 PCNN-ATT 包级模型。ATT 算法是一种典型的方法,用于组合句子包以抽取实体间的关系。

python example/train_bag_cnn.py \
    --metric auc \
    --dataset nyt10m \
    --batch_size 160 \
    --lr 0.1 \
    --weight_decay 1e-5 \
    --max_epoch 100 \
    --max_length 128 \
    --seed 42 \
    --encoder pcnn \
    --aggr att

或者使用以下脚本在 Wiki80 数据集上训练 BERT 模型:

python example/train_supervised_bert.py \
    --pretrain_path bert-base-uncased \
    --dataset wiki80

示例训练代码中提供了许多选项,您可以查看这些选项以获取详细说明。

引用

如果您觉得 OpenNRE 对您的研究有帮助,请考虑引用以下论文:

@inproceedings{han-etal-2019-opennre,
    title = "{O}pen{NRE}: An Open and Extensible Toolkit for Neural Relation Extraction",
    author = "Han, Xu and Gao, Tianyu and Yao, Yuan and Ye, Deming and Liu, Zhiyuan and Sun, Maosong",
    booktitle = "Proceedings of EMNLP-IJCNLP: System Demonstrations",
    year = "2019",
    url = "https://www.aclweb.org/anthology/D19-3029",
    doi = "10.18653/v1/D19-3029",
    pages = "169--174"
}

此包主要由 Tianyu GaoXu HanShulian CaoLumin TangYankai LinZhiyuan Liu 贡献。


关于 OpenSKL

OpenSKL 项目旨在通过表示学习利用结构化知识和自然语言的力量。OpenSKL 的所有子项目按算法资源应用分类如下。

  • 算法
  • OpenKE
    • 一个高效的工具包,用于将大规模知识图谱中的结构化知识表示为嵌入,以 TransRPTransE 作为关键特性,处理复杂关系和关系路径。
    • 该工具包还包括三个仓库:
    • KB2E
    • TensorFlow-Transx
    • Fast-TransX
  • ERNIE
    • 一个高效的工具包,用于通过知识图谱表示增强预训练语言模型。
  • OpenNE
    • 一个高效的工具包,用于将大规模图中的节点表示为嵌入,以 TADW 作为关键特性,融合节点的文本属性。
  • OpenNRE
    • 一个高效的工具包,用于实现神经网络,从文本中提取结构化知识,以 ATT 作为关键特性,考虑与关系相关的文本信息。
    • 该工具包还包括两个仓库:
    • JointNRE
    • NRE
  • 资源
  • 由 OpenKE 预训练的大规模知识图谱嵌入,涵盖三个典型的大规模知识图谱:Wikidata、Freebase 和 XLORE。这些嵌入在 MIT 许可证 下可免费使用,请点击以下链接提交下载请求
  • OpenKE-Wikidata
    • Wikidata 是一个免费协作的数据库,收集结构化数据以支持维基百科。原始的 Wikidata 包含 20,982,733 个实体、594 种关系和 68,904,773 个三元组。特别是,Wikidata-5M 是 Wikidata 的核心子图,包含 5,040,986 个高频实体及其对应的 927 种关系和 24,267,796 个三元组。
    • TransE 版本:由 OpenKE 预训练的 Wikidata 知识嵌入。
    • Wikidata-5M 的 TransR 版本:由 OpenKE 预训练的 Wikidata-5M 知识嵌入。
  • OpenKE-Freebase
    • Freebase 是一个大型协作知识库,数据主要由社区成员提供。它是一个在线收集结构化数据的平台,数据来自多种来源。Freebase 包含 86,054,151 个实体、14,824 种关系和 338,586,276 个三元组。
    • TransE 版本:由 OpenKE 预训练的 Freebase 知识嵌入。
  • OpenKE-XLORE
    • XLORE 是由 THUKEG 开发的最受欢迎的中文知识图谱之一。XLORE 包含 10,572,209 个实体、138,581 种关系和 35,954,249 个三元组。
    • TransE 版本:由 OpenKE 预训练的 XLORE 知识嵌入。
  • 应用
    • Knowledge-Plugin
    • 一个高效即插即用的知识注入工具包,用于预训练语言模型。Knowledge-Plugin 适用于上述所有种类的知识图谱嵌入。在该工具包中,我们将 Wikidata-5M 的 TransR 版本插入 BERT 作为应用示例。通过 TransR 嵌入,我们在不微调原始模型的情况下增强了 BERT 的知识能力,例如在问答任务上最多可提升 8%。
1 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 17 ms
Developed with Cursor