知识图谱抽取工具总结
一、知识图谱构成
1.需要抽取模型
知识图谱的抽取一般需要三个模块:实体识别、属性抽取、关系抽取,有时候还有事件抽取。
2.工具评测标准
1.抽取模块是否齐全
2.抽取准确率是否高
3.抽取是否支持小样本学习
4.是否支持标注工具
二、抽取工具介绍
1.UIE-百度
(1)背景介绍
官方地址1(paddle版本):https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie
官方地址2(pytorch版本):https://github.com/heiheiyoyo/uie_pytorch
论文地址:https://arxiv.org/pdf/2203.12277.pdf
发布时间:2022年并持续维护升级
(2)支持功能
支持:实体识别、属性抽取、关系抽取、事件抽取、观点抽取、情感分类
领域:支持跨领域
语言:支持多语言(中英)
多模型:大、中、小不同模型大小
小样本:支持小样本学习
其他:支持模型评测、部署(cpu/gpu)
支持标注工具:https://github.com/heiheiyoyo/uie_pytorch/blob/main/doccano.md
2.DeepKe:浙江大学
(1)背景介绍
官网:https://github.com/zjunlp/DeepKE/blob/main/README_CN.md
论文:https://arxiv.org/abs/2201.03335
发布时间:2022年并持续维护升级
(2)支持功能
支持:实体识别、属性抽取、关系抽取;不支持:事件抽取
语言:支持多语言(中英)
小样本:支持小样本学习
3.OpenUE:浙江大学
官网:https://github.com/zjunlp/OpenUE
论文:https://aclanthology.org/2020.emnlp-demos.1.pdf
发布时间:2020年,后续没有更新
(2)支持功能
支持:实体识别、属性抽取、关系抽取;不支持:事件抽取
语言:支持多语言(中英)
4.NeuralKG:浙江大学开源知识图谱表示学习工具
官网地址:https://github.com/zjukg/NeuralKG/blob/main/README_CN.md
支持多种方法:NeuralKG提供了对三类知识图谱嵌入方法的代码实现,包括传统知识图谱嵌入,基于图神经网络的知识图谱嵌入,以及基于规则的知识图谱嵌入
发布时间:2022年并持续维护升级
5.其他抽取工具-不推荐(时间较长,功能支持不全)
(1)OpenEA: https://github.com/nju-websoft/OpenEA
(2)OmniEvent: https://github.com/THU-KEG/OmniEvent
综合比较和试验,百度UIE目前最合适
三、抽取工具-UIE详解
1. 模型简介
UIE(Universal Information Extraction):Yaojie Lu等人在ACL-2022中提出了通用信息抽取统一框架UIE。该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。
2.UIE版本
(1)paddle版本:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie
(2)torch版本:https://github.com/heiheiyoyo/uie_pytorch
3.UIE优势
(1)使用简单:用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。实现开箱即用,并满足各类信息抽取需求。
(2)降本增效:以往的信息抽取技术需要大量标注数据才能保证信息抽取的效果,为了提高开发过程中的开发效率,减少不必要的重复工作时间,开放域信息抽取可以实现零样本(zero-shot)或者少样本(few-shot)抽取,大幅度降低标注数据依赖,在降低成本的同时,还提升了效果。
(3)效果领先:开放域信息抽取在多种场景,多种任务上,均有不俗的表现
4.UIE支持功能
1.实体抽取
命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。
例如抽取的目标实体类型是"时间"、"选手"和"赛事名称", schema构造如下:
['时间', '选手', '赛事名称']
2.关系抽取
关系抽取(Relation Extraction,简称RE),是指从文本中识别实体并抽取实体之间的语义关系,进而获取三元组信息,即<主体,谓语,客体>。
例如以"竞赛名称"作为抽取主体,抽取关系类型为"主办方"、"承办方"和"已举办次数", schema构造如下:
{
'竞赛名称': [
'主办方',
'承办方',
'已举办次数'
]
}
3.事件抽取
事件抽取 (Event Extraction, 简称EE),是指从自然语言文本中抽取预定义的事件触发词(Trigger)和事件论元(Argument),组合为相应的事件结构化信息。
例如抽取的目标是"地震"事件的"地震强度"、"时间"、"震中位置"和"震源深度"这些信息,schema构造如下:
{
'地震触发词': [
'地震强度',
'时间',
'震中位置',
'震源深度'
]
}
触发词的格式统一为触发词或`XX触发词,XX
表示具体事件类型,上例中的事件类型是地震
,则对应触发词为地震触发词
。
4 评论观点抽取
评论观点抽取,是指抽取文本中包含的评价维度、观点词。
例如抽取的目标是文本中包含的评价维度及其对应的观点词和情感倾向,schema构造如下:
{
'评价维度': [
'观点词',
'情感倾向[正向,负向]'
]
}
5 情感分类
句子级情感倾向分类,即判断句子的情感倾向是“正向”还是“负向”,schema构造如下:
'情感倾向[正向,负向]'
调用示例:
>>> schema = '情感倾向[正向,负向]' # Define the schema for sentence-level sentiment classification
>>> ie.set_schema(schema) # Reset schema
>>> ie('这个产品用起来真的很流畅,我非常喜欢')
[{'情感倾向[正向,负向]': [{'text': '正向', 'probability': 0.9988661643929895}]}]
6 跨任务抽取
例如在法律场景同时对文本进行实体抽取和关系抽取,schema可按照如下方式进行构造:
[
"法院",
{
"原告": "委托代理人"
},
{
"被告": "委托代理人"
}
]
5. 模型选择
6. 数据标注
详细标注介绍参考:https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/doccano.md
推荐使用数据标注平台doccano 进行数据标注,本示例也打通了从标注到训练的通道,即doccano导出数据后可通过doccano.py脚本轻松将数据转换为输入模型时需要的形式,实现无缝衔接。标注方法的详细介绍请参考doccano数据标注指南。
原始数据示例:
深大到双龙28块钱4月24号交通费
抽取的目标(schema)为:
schema = ['出发地', '目的地', '费用', '时间']
标注步骤如下:
在doccano平台上,创建一个类型为序列标注的标注项目。
定义实体标签类别,上例中需要定义的实体标签有出发地、目的地、费用和时间。
使用以上定义的标签开始标注数据,下面展示了一个doccano标注示例:
标注完成后,在doccano平台上导出文件,并将其重命名为doccano_ext.json后,放入./data目录下。
7 模型部署
以下是UIE Python端的部署流程,包括环境准备、模型导出和使用示例。
环境准备 UIE的部署分为CPU和GPU两种情况,请根据你的部署环境安装对应的依赖。
CPU端
CPU端的部署请使用如下命令安装所需依赖
pip install -r deploy/python/requirements_cpu.txt
GPU端
为了在GPU上获得最佳的推理性能和稳定性,请先确保机器已正确安装NVIDIA相关驱动和基础软件,确保CUDA >= 11.2,cuDNN >= 8.1.1,并使用以下命令安装所需依赖
pip install -r deploy/python/requirements_gpu.txt