2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

用 iText2KG 增量构建《西游记》知识图谱

发布日期:2024-09-29 18:39:00 浏览次数: 3300
作者:数翼

微信搜一搜,关注“数翼”

iText2KG 是一个 Python 包,旨在通过利用大型语言模型从文本文档中提取实体和关系, 逐步构建具有已解析实体和关系的一致知识图谱。它具有零样本能力,无需专门的训练即可跨各个领域提取知识。 该包包括用于文档提炼、实体提取和关系提取的模块,确保已解析且唯一的实体和关系。 它不断用新文档更新知识图谱,并将其集成到 Neo4j 等框架中进行可视化表示。

总体架构

iText2KG软件包由四个主要模块组成,它们协同工作,从非结构化文本构建和可视化知识图谱。整体架构概述:

  1. 1. 文档提取器:该模块处理原始文档,并根据用户定义的模式将其重新组织成语义块。它通过关注相关信息并以预定义的格式对其进行结构化来提高信噪比。

  2. 2. 增量实体提取器:此模块从语义块中提取唯一实体并解决歧义以确保每个实体都有明确定义。它使用余弦相似度度量将局部实体与全局实体进行匹配。

  3. 3. 增量关系提取器:此模块识别提取的实体之间的关系。它可以以两种模式运行:使用全局实体丰富图形中的潜在信息,或使用局部实体建立更精确的关系。

  4. 4. 图形集成器和可视化:此模块将提取的实体和关系集成到 Neo4j 数据库中,提供知识图谱的可视化表示。它允许对结构化数据进行交互式探索和分析。

LLM 被提示提取代表一个唯一概念的实体,以避免语义混合的实体。 下图显示了使用 Langchain JSON 解析器的实体和关系提取提示。 它们分类如下:

  • • 蓝色 - 由 Langchain 自动格式化的提示;

  • • 常规 - 我们设计的提示;

  • • 斜体 - 专门为实体和关系提取设计的提示。

    • • (a)关系提取提示和

    • • (b)实体提取提示。

安装

要安装 iText2KG,请确保已安装 Python,然后使用 pip 安装

pip install itext2kg

或者使用 poetry 安装:

poetry add itext2kg

准备文档

我这里使用《西游记》的白话文版本来进行演示。

准备好文本(百度搜索有很多),放到 datasets 目录:

加载大模型

iText2KG 进行知识图谱的抽取使用到了聊天和嵌入两个模型,可以使用本地 Ollama 的模型:

from langchain_ollama import ChatOllama, OllamaEmbeddings

llm = ChatOllama(
    model="glm4",
    temperature=0,
)
embeddings = OllamaEmbeddings(
    model="glm4",
)

记得安装依赖:

pip install langchain-community langchain-ollama

定义指令

iText2KG 可以很方便的定义指令,比如我下面的:

IE_query = '''
指令:
- 像经验丰富的信息提取者一样行动。
- 提取的信息包含人物、地点、事件、物品、任务以及技能。
- 您有大量的故事阅读。
- 如果找不到正确的信息,请将其保留为空白。
'''

你可以根据你要抽取的数据类型进行简单定制。

文件处理

类似 RAG 一样,我们也需要对文件进行预处理,我直接给出函数代码,大家需要的话可以直接拿来用:

def build_sections(file_path):
    loader = PythonLoader(file_path)
    pages = loader.load_and_split()

    # we have replaced the curly braces with square brackets to avoid the error in the query
    distilled_cv = document_distiller.distill(
        documents=[page.page_content.replace("{"'[').replace("}""]"for page in pages],
        IE_query=IE_query,
        output_data_structure=CV
    )

    sections = [f"{key} - {value}".replace("{""[").replace("}""]"for key, value in distilled_cv.items()
                if value != [] and value != "" and value != None]
    return sections

如果要处理 xiyou01.txt 文件,那么可以如下写:

sections = build_sections('./datasets/xiyou01.txt')

sections 的内容大概是这样:

构建图谱

加下来就是构建图谱了,我也把写好的函数贴到下面,需要的大家可以直接用:

def build_graph(sections, existing_global_entities=None, existing_global_relationships=None,ent_threshold=0.6, rel_threshold=0.6):
    global_ent, global_rel = itext2kg.build_graph(
        sections=sections, ent_threshold=ent_threshold, rel_threshold=rel_threshold,
        existing_global_relationships=existing_global_relationships,
        existing_global_entities=existing_global_entities
    )
    print(global_rel)
    print(global_ent)
    return global_ent, global_rel

传入刚才的 sections 就可以得到节点和关系数据:

global_ent, global_rel = build_graph(sections)

我们可以看到节点数据大约如下:

关系数据大约如下:

从控制台的调试信息我们可以看出,iText2KG 会进行关系梳理、节点去重等动作:

显示

我们使用 pyvis 这个工具来显示图谱。

首先是安装:

pip install pyvis

程序比较简单:

from pyvis.network import Network

net = Network(height="100vh", width="100%")
for x in global_ent:
    net.add_node(x['name'])
for x in global_rel:
    net.add_edge(x['startNode'], x['endNode'], weight=1)
net.show('mygraph.html', notebook=False)

然后点击生成的 mygraph.html 文件,就可以看到关系数据如下:

调整下参数,你可能得到更多的节点和关系:

增量构建

iText2KG 在构建图谱的一个亮点功能就是增量构建

比如刚才了构建了《西游记》的第一章的图谱,我们可以在第一章的基础之上进行构建, 而不是第一章和第二章一起构建。

sections2 = build_sections(text02)
global_ent2, global_rel2 = build_graph(sections2, existing_global_entities=global_ent1, existing_global_relationships=global_rel1)

再次画图看一下结构吧:

这次效果不是很好,产生了一些孤立节点。

指定结构

iText2KG 还有一个很棒的特性就是你可以指定节点的属性结构。

先声明一个节点类,比如官方示例中的简历:


class JobOffer(BaseModel):
    job_offer_title: str = Field(..., description="The job title")
    company: str = Field(..., description="The name of the company offering the job")
    location: str = Field(..., description="The job location (can specify if remote/hybrid)")
    job_type: str = Field(..., description="Type of job (e.g., full-time, part-time, contract)")
    responsibilities: List[JobResponsibility] = Field(..., description="List of key responsibilities")
    qualifications: List[JobQualification] = Field(..., description="List of required or preferred qualifications")
    certifications: Optional[List[JobCertification]] = Field(None, description="Required or preferred certifications")
    benefits: Optional[List[str]] = Field(None, description="List of job benefits")
    experience_required: str = Field(..., description="Required years of experience")
    salary_range: Optional[str] = Field(None, description="Salary range for the position")
    apply_url: Optional[str] = Field(None, description="URL to apply for the job")

然后我们再蒸馏的时候就可以指定 output_data_structure 参数:

distilled_Job_Offer = document_distiller.distill(
    documents=[job_offer], IE_query=IE_query,
    output_data_structure=JobOffer
)

写在最后

AI应用 特别是 LLM 应用的性能,很大程度依赖大模型本身。

iText2KG 也不例外,小参数的大模型很可能解析不出期望的结果。

个人感觉,这个框架虽然能用,但是速度、准确度都比较慢,成本(TOKEN)也比较高。 但是好在,项目本身是在积极开发中。

项目代码:https://github.com/AuvaLab/itext2kg[1]

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅