KnowLM 知识图谱 + 大模型:实现信息抽取

KnowLM 原理KnowLM 部署KnowLM 应用1. 命名实体识别(NER)2. 关系抽取(RE)3. 事件抽取(EE)

 

KnowLM 原理

代码:https://github.com/zjunlp/KnowLM/blob/main/README_ZH.md

  目前需要从大量文本中,抽取信息,构建知识图谱,加强和补足大模型的专业能力,避免胡说八道、宽泛模糊问题。

知识图谱 = 实体 + 关系 + 实体

实体:现实世界存在的事物,如人名、地名 关系:实体之间的关系,如朋友、家 举例:小明-电话-xxx,小明-年龄-20,小明-朋友-小张

  安利 浙大的开源项目 KnowLM:

KnowLM 的信息抽取模型,叫 智能分析

NER 是,实体命名识别(现实世界存在的事物,比如地名、人名)Event Extraction 是,事件抽取(哪里发生了什么事情,如旅游)Relation Extraction 是,关系抽取(对象之间的关系,如父亲、女儿、朋友)

  这个项目是怎么实现的?

KnowLM 是使用知识图谱来增强大型语言模型的预训练、推理和可解释性。 用知识图谱的结构化数据来提高模型的专业知识和输出质量,同时也用大模型的能力来更新和维护知识图谱本身。

KnowLM 结构图:

左侧用于预训练的数据集,包括中文(红色)、英文(绿色)、代码(蓝色),以及这些数据的处理步骤,如分词、清洗等。

预训练过程详细的数据处理代码和训练代码、完整的训练脚本、详细的训练情况:https://github.com/zjunlp/KnowLM/tree/main/pretrain

右侧更专注于指令数据集,包括实体识别(NER)、关系抽取(RE)、事件抽取(EE)等NLP任务,以及各种中文和英文的数据集。

详细的指令微调训练参数、训练脚本:https://github.com/zjunlp/KnowLM/tree/main/finetune/lora

数据量:

在信息抽取(从文本中抽取信息,建立知识图谱),智析 对比 GPT:

在这个例子中,GPT在执行关系抽取任务时存在以下问题:

不准确的关系抽取:GPT未能正确识别和提取文本中的关系三元组。它提供的输出可能包含不正确的关系或实体,或者完全缺失了某些关系。 不完整的信息提取:GPT在输出结果时,可能未能包含所有相关的信息,导致提供的信息不全面或不具体。 不适用的格式:GPT可能没有遵循指定的结构化输出格式,这是关系抽取任务中一个重要的要求,以便于后续的信息整合和知识图谱构建。

与之相比,“智析”这个系统在以下方面显示出了改进:

更准确的关系识别:智析能够更准确地识别出文本中的实体和关系,提供更符合预期的关系三元组。 完整性:智析提供的输出更完整,覆盖了指令中要求识别的所有相关信息。 遵循格式:智析能够根据指定的{s_format}格式提供结构化输出,这对于后续自动化处理和知识图谱的构建是非常有用的。

智析 相比 通用的GPT模型,在准确性、完整性和遵循指定输出格式方面的优势。

 

KnowLM 应用框架:

1.知识提示 - EasyInstruct:基于知识图谱等结构化数据的知识提示生成和知识增强约束技术,解决知识抽取和推理问题

2.知识编辑 - EasyEdit:基于知识编辑技术对齐大模型内过时、错误及价值观不正确的知识,解决知识谬误问题 (英文版Tutorial)

3.知识交互 - EasyAgent:基于知识动态交互和反馈实现工具组合学习及多智能体协作,解决大模型具身认知问题 (英文版Tutorial)

 

KnowLM 部署

跟着教程部署就行: 遇到问题在 issues 提问即可:

https://github.com/zjunlp/KnowLM/issues

 

KnowLM 应用

模板用于构建模型输入的指令,包括三个部分:

任务描述:明确定义模型的功能和需要完成的任务,如实体识别、关系抽取、事件抽取等。候选标签列表{s_schema}(可选):定义模型需要抽取的标签类别,如实体类型、关系类型、事件类型等。结构化输出格式{s_format}:指定模型应如何呈现它提取的结构化信息。

指定候选标签列表的模板:

命名实体识别(NER):您是专门从事实体抽取的专家。

请根据候选实体类型列表{s_schema},从下面的输入中提取可能的实体,

如果某个实体不存在,请输出NAN。请按照{s_format}格式回答。

关系抽取(RE):您是抽取关系三元组的专家。

请根据候选关系列表{s_schema},从下面的输入中提取可能的头实体和尾实体,并提供相应的关系三元组。

如果关系不存在,请输出NAN。请以{s_format}格式回答。

事件抽取(EE):您是事件抽取的专家。根据候选事件字典{s_schema},请从下面的输入中提取任何可能的事件。

如果事件不存在,请输出NAN。请以{s_format}格式回答。

事件类型抽取(EET):作为事件分析专家,您需要审查输入并根据事件类型目录{s_schema}确定可能的事件。

所有答案应基于{s_format}格式。如果事件类型不匹配,请标记为NAN。

事件论元抽取(EEA):您是事件论元抽取的专家。

鉴于事件字典{s_schema1},以及事件类型和触发词{s_schema2},请从以下输入中提取可能的论元。

如果事件论元不存在,请输出NAN。请以{s_format}格式回答。

举例:

信息抽取 Prompt:https://github.com/zjunlp/KnowLM/blob/main/examples/ie_prompt.py

应用:

要使用这些模板构建知识图谱,我们需要从文本中抽取实体、关系和事件。以下是一个如何应用这些模板的例子:

示例输入文本:

小明和小红是同学,他们都在北京大学读书。

小明的专业是计算机科学,而小红的专业是金融学。

他们经常一起在图书馆学习。

上周,小明和小红参加了学校的编程比赛并获得了第一名。

1. 命名实体识别(NER)

使用NER模板识别文本中的实体。 候选实体类型列表(s_schema)可能包括:人名、地点、学校、专业等。 结构化输出格式(s_format)可以选择为:“(实体类型: 实体)”。

示例输出(NER):

(人名: 小明)(人名: 小红)(地点: 北京大学)(专业: 计算机科学)(专业: 金融学)(事件: 编程比赛)

2. 关系抽取(RE)

接下来使用RE模板抽取实体间的关系。 候选关系列表(s_schema)可能包括:同学、读书于、专业是、一起学习、参加比赛、获得名次等。 结构化输出格式(s_format)可以为:“{‘head’: ‘头实体’, ‘relation’: ‘关系’, ‘tail’: ‘尾实体’}”。

示例输出(RE):

{‘head’: ‘小明’, ‘relation’: ‘同学’, ‘tail’: ‘小红’}{‘head’: ‘小明’, ‘relation’: ‘读书于’, ‘tail’: ‘北京大学’}{‘head’: ‘小明’, ‘relation’: ‘专业是’, ‘tail’: ‘计算机科学’}{‘head’: ‘小红’, ‘relation’: ‘专业是’, ‘tail’: ‘金融学’}{‘head’: ‘小明’, ‘relation’: ‘参加比赛’, ‘tail’: ‘编程比赛’}{‘head’: ‘小明’, ‘relation’: ‘获得名次’, ‘tail’: ‘第一名’}

3. 事件抽取(EE)

使用EE模板抽取文本中的事件。 候选事件字典(s_schema)可能包括:学习、比赛等。 结构化输出格式(s_format)可以为:“事件: {事件类型}”。

示例输出(EE):

事件: 学习事件: 比赛

通过这样的过程,我们可以从文本中抽取出实体、关系和事件,构建成一个知识图谱。

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。