面包屑图标 当前位置: 首页
AI资讯
热点详情

本地部署开源大模型实现文档到知识图谱转换

AI热点日报
AI热点日报时间:2026-07-03
热点解读

利用开源大模型,轻松将文档转换为知识图谱。核心内容:1 知识图谱的核心概念与构成要素2 基于 Mistral 7B Openorca instruct 和 Zephyr 模型,从文本中提取概念关系3 使用 Pandas DataFrame 和 NetworkX 构建并可视化知识图谱知识图谱(K

利用开源大模型,轻松将文档转换为知识图谱。
核心内容:
1. 知识图谱的核心概念与构成要素
2. 基于 Mistral 7B Openorca instruct 和 Zephyr 模型,从文本中提取概念关系
3. 使用 Pandas DataFrame 和 NetworkX 构建并可视化知识图谱

一种在本地使用开源大模型将文档转换为知识图谱的方法


知识图谱(Knowledge Graph,KG)本质上是由节点(Node)和边(Edge)构成的网络结构。每个节点代表一个概念,每条边则刻画两个概念之间的语义关系。接下来分享一种方法,能够将任意文本语料库转化为“概念图”(Graph of Concepts,GC)。文中会交替使用“概念图”与“知识图谱”这两个术语,以便更准确地描述演示内容。


这套方法所需的全部组件均支持本地部署,因此需要选用参数规模较小的开源大模型。最终选定的是功能强大的 Mistral 7B Openorca instructZephyr 模型,它们可以通过 Ollama 在本地环境中流畅运行。


虽然像 Neo4j 这样的专业图数据库能极大便利存储与检索,但为了简化实现,这里采用内存中的 Pandas DataFrame 以及 NetworkX Python 库作为替代方案。


目标十分明确:将任意文本语料库转换为“概念图”并完成可视化,最终效果如下图所示。



甚至还可以与图进行交互——调整节点和边的位置、缩放视图,甚至修改图的物理属性,使其完全符合需求。最终的成果可以在以下 GitHub 页面体验:

? https://rahulnyk.github.io/knowledge_graph/


不过在动手实现之前,我们先深入了解一下知识图谱的基本概念及其为何重要。如果对此已经熟悉,可以直接跳过下一段落。




知识图谱



知识图谱(Knowledge Graph,也常称为语义网络,Semantic Network)本质上是由现实世界实体(如对象、事件、情境或概念)构成的网络,并清晰地展示出它们之间的关联。这些信息通常存储在图数据库中,并以图结构的形式进行可视化,因此得名“知识图谱”。


来看下面这段文本:

Mary had a little lamb,
You’ve heard this tale before;
But did you know she passed her plate,
And had a little more!

大致翻译如下:

玛丽有一只小羊羔,

你以前听过这个故事;

但你知道吗,她把盘子伸过来,

又吃了一点!


以下是一种可能的知识图谱表示方式,用于展现该文本中的概念与关系。



为什么要使用知识图谱?


知识图谱在多个领域都发挥着重要作用。你可以运行图算法并计算任意节点的中心性,从而了解某个概念在整个知识体系中的核心程度。还可以分析相连与不相连的概念集合,或计算概念的社区结构,以深入理解特定主题。此外,还能识别看似不相关概念之间的隐藏关联


知识图谱还能用于构建“图检索增强生成”(Graph Retrieval Augmented Generation,GraphRAG 或 GAG),并与文档进行智能对话。这种方法相比传统的 RAG(检索增强生成)能提供更优质的结果,因为传统 RAG 存在一些明显的局限性。例如,单纯依靠语义相似度检索来查找最相关的上下文并不总是有效,尤其是在以下场景中:

  • 查询未提供足够的上下文信息,导致难以准确判断真实意图;

  • 相关上下文散落在庞大的文本语料库中,难以通过简单检索获取完整信息。


试想以下查询:

请告诉我《百年孤独》中何塞·阿尔卡迪奥·布恩迪亚的家族树。


这本书记录了 7 代何塞·阿尔卡迪奥·布恩迪亚的家族史,其中一半的角色都同名!使用简单的 RAG 方法来回答这个问题将是一个巨大挑战,甚至可能根本无法完成。


RAG 的另一个缺陷在于:它不会提示你应该提出什么问题。然而在很多情况下,问对问题比找到答案本身更重要


图增强生成(Graph Augmented Generation, GAG)可以在一定程度上弥补这些不足。更进一步,还可以融合两者的优势,构建一个“图增强检索增强生成”(Graph Augmented Retrieval Augmented Generation, GARAG)流水线,从而获得最佳效果。


总之,知识图谱不仅有趣、实用,而且视觉效果也相当出色!




如何创建概念图?



如果询问 DeepSeek 如何从文本中构建知识图谱,它可能会给出以下步骤:

  1. 从文本中提取概念和实体(这些将作为节点);

  2. 识别概念之间的关系(这些将作为边);

  3. 将节点(概念)和边(关系)存储到图数据结构或图数据库中;

  4. 进行可视化(即使仅为了美观)。


第 3 和第 4 步看起来很好理解,但第 1 和第 2 步该如何实现呢?


下面是一种设计的方法流程图,用于从任意文本语料库中提取“概念图”。它与上述通用流程类似,但有一些细微的差异。


  1. 将文本语料库拆分成多个块,并为每个块分配一个 chunk_id。

  2. 对于每个文本块,使用 LLM 提取概念及其语义关系,并为该关系分配一个权重 W1。同一对概念之间可能存在多种关系,每个关系构成一条边。

  3. 考虑到出现在同一个文本块中的概念也会因上下文接近度而关联,为该关联分配一个权重 W2。注意,同一对概念可能出现在多个块中。

  4. 将相似的对进行分组,求和它们的权重,并合并它们的关系。最终,任意一对不同概念之间仅保留一条边,边具有一定的权重和一个关系列表作为其名称。


完整的 Python 代码实现可在本文分享的 GitHub 仓库中找到。接下来的几节将简要介绍实现的关键思路。


Mistral 与 Prompt(提示)设计


在上述流程图中,第 1 步相对简单。LangChain 提供了丰富的文本分割器(text splitters),可以直接用于将文本拆分成多个小块。

第 2 步才是真正的亮点!为了提取概念及其关系,我们采用了 Mistral 7B 模型。在确定最适合需求的模型变体之前,尝试了以下几个版本:

  • Mistral Instruct

  • Mistral OpenOrca

  • Zephyr(Hugging Face 版本,基于 Mistral 训练)


这些模型均使用了 4-bit 量化版本,以便在本地环境中运行,且不会让一台 Mac 彻底崩溃?。它们均可通过 Ollama 在本地启动。


这些模型都是经过指令微调的模型,支持系统提示(system prompt)用户提示(user prompt)。只要清晰地告知要求,它们都能很好地遵循指令,并将答案格式化为 JSON,输出整洁易读。


经过多轮试错实验后,最终选定了 Zephyr 模型,并设计了以下提示词(prompt)


    SYS_PROMPT = (    "You are a network graph maker who extracts terms and their relations from a given context. "    "You are provided with a context chunk (delimited by ```) Your task is to extract the ontology "    "of terms mentioned in the given context. These terms should represent the key concepts as per the context. n"    "Thought 1: While tra versing through each sentence, Think about the key terms mentioned in it.n"        "tTerms may include object, entity, location, organization, person, n"        "tcondition, acronym, documents, service, concept, etc.n"        "tTerms should be as atomistic as possiblenn"    "Thought 2: Think about how these terms can ha ve one on one relation with other terms.n"        "tTerms that are mentioned in the same sentence or the same paragraph are typically related to each other.n"        "tTerms can be related to many other termsnn"    "Thought 3: Find out the relation between each such related pair of terms. nn"    "Format your output as a list of json. Each element of the list contains a pair of terms "    "and the relation between them, like the following: n"    "[n"    "   {n"    '       "node_1": "A concept from extracted ontology",n'    '       "node_2": "A related concept from extracted ontology",n'    '       "edge": "relationship between the two concepts, node_1 and node_2 in one or two sentences"n'    "   }, {...}n"    "]")
    USER_PROMPT = f"context: ```{input}``` nn output: "


    用这个提示词处理那首童谣(虽然这首诗并不太适合幼儿园小朋友?),会得到如下输出:



    值得注意的是,它甚至主动推断出“食物”是一个概念,而文本块中并未明确提及。这充分体现了模型的强大能力!


    如果对示例文章的每个文本块都运行上述代码,并将 json 转换为 Pandas DataFrame,最终结果会呈现如下形式。



    在这个 DataFrame 中,每一行代表两个概念之间的语义关系。换句话说,每一行就是知识图谱中两个节点(node)之间的一条边(edge)

    需要留意:

    • 同一对概念之间可能存在多条边(多种关系);

    • 权重(weight)在 DataFrame 中被临时设定为 4(仅作为示例值)。


    语境接近性(Contextual Proximity)


    一个合理的假设是:在文本语料库中相互靠近的概念是相关的,我们将这种关系称为语境接近性(contextual proximity)。为了计算这些语境接近性边,可以采取以下步骤:


    1. DataFrame 合并:将 node_1 和 node_2 合并到同一列,以便更便捷地进行配对操作。

    2. 自连接(Self-Join):以 chunk_id 为关键字,对 DataFrame 进行自连接。这样一来,相同 chunk_id 下的所有概念都能相互配对,形成一条新的关系边。也就是说,每个 chunk_id 内部的所有节点都会被两两配对,生成新的关系行。

    3. 移除自环(Self-Loop):但这种方法会引入“自环”——即概念与自身的关系(比如 "Mary" -> "Mary" )。为此,需要删除所有 node_1 == node_2 的行,确保每个概念只与其他概念建立关系。

    4. 得到新的数据框。


    最终,我们会得到一个新的 DataFrame,其结构与原始 DataFrame类似,但新增了额外的语境接近性关系



    这里的 count 列表示 node_1 和 node_2 同时出现的块数,chunk_id 列则记录了所有包含该对的块编号。


    至此,我们得到了两个 DataFrame:一个包含语义关系,另一个包含文本中概念之间的上下文接近关系。可以将它们合并,形成完整的网络图 DataFrame


    至此,我们已经为文本构建了概念图。但就此止步未免可惜。目标是像本文开头的特色图片一样将图可视化,现在离目标并不遥远。


    创建概念网络


    NetworkX 是一个 Python 库,处理图结构非常便捷。


    只需几行代码就可以将 DataFrame 导入 NetworkX 图。
      G = nx.Graph()## Add nodes to the graphfor node in nodes:    G.add_node(str(node))## Add edges to the graphfor index, row in dfg.iterrows():    G.add_edge(        str(row["node_1"]),        str(row["node_2"]),        title=row["edge"],        weight=row['count']    )


      这是开始利用 Network Graph 丰富功能的地方。NetworkX 提供了大量现成的网络算法可供调用。以下是可以使用的算法列表:https://networkx.org/documentation/stable/reference/algorithms/index.html

      这里使用社区检测算法(Community Detection Algorithm)为节点分配颜色。社区(Communities)是指内部连接更紧密、与图中其他部分相比关系更紧密的节点群组。概念的社区有助于识别文本中所讨论的主要主题


      在分析的一篇综述文章中,Girvan-Newman 算法检测出了 17 个概念社区。文章链接如下:

      https://www.cureus.com/articles/158868-indias-opportunity-to-address-human-resource-challenges-in-healthcare


      以下是其中的一个社区示例:

        [  'digital technology',   'EVIN',   'medical devices',   'online training management information systems',   'wearable, trackable technology']


        这让人立刻对综述文章中讨论的健康技术这一广泛主题有了清晰的认识,并且能够提出相应的问题,然后通过 RAG 流水线来解答。是不是很棒?


        接下来,我们还可以计算图中每个概念的度(degree)节点的度指的是其连接的总边数。在本案例中,度数越高的概念,在文本主题中就越核心。可视化时,可以使用度数来决定节点的大小,从而突出核心概念。




        图可视化(Graph Visualization)




        可视化是整个过程中最有趣的部分,它不仅帮助我们理解数据,还能带来某种艺术上的满足感


        这里使用 Pyvis 库来创建交互式图。Pyvis 是一个专门用于可视化网络的 Python 库。


        Pyvis 内置了一个 NetworkX Helper,可以将 NetworkX 图 转换为 PyVis 对象,因此我们无需再编写额外的代码……非常方便!


        请记住,我们已经计算了每条边的权重(用于确定边的粗细),节点的社区(用于确定颜色),以及每个节点的(用于确定节点的大小)。


        有了这些附加功能,图就完成了,以下是最终的图示:



        你可以通过下面提供的在线交互式演示地址来体验最终成果。可以随意缩放、拖拽节点和边。页面底部还有一个滑动面板,用来调整图的物理属性。看看这个图是如何帮助你提出正确的问题,并更深入地理解主题内容的!

        热点追踪提示词
        你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
        热点:本地部署开源大模型实现文档到知识图谱转换要求:
        1. 先用一句话解释这条热点在讲什么
        2. 再总结它为什么重要
        3. 说明会影响哪些 AI 产品或内容方向
        4. 最后给出 3 个适合资讯站使用的标题
        来源:https://www.53ai.com/news/knowledgegraph/2025031325708.html
        ai 人工智能

        游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

        相关热点
        AI热点2026-07-03 20:42
        AI驱动的员工英语口语教练Lucida

        LucidaAI是一款面向企业的AI英语口语教练,通过实时对话提供发音、语法、词汇和流利度的个性化反馈。采用端到端加密并支持合规定制,定价策略注重普及化,旨在以低成本提升团队英语沟通能力。

        AI热点2026-07-03 20:42
        Screenshot2Code:截图转代码工具

        Screenshot2Code工具能够从截图中自动识别代码,并将其转换为可直接运行的代码。支持Python、HTML及API接口信息提取,帮助开发者快速复用他人分享的代码片段,从而显著提升工作效率。这个工具极大简化了代码复用过程。

        AI热点2026-07-03 20:42
        SpeakStruct 语音转结构化数据 可自定义模板

        SpeakStruct通过可自定义模板将语音转换为结构化数据,适用于会议记录、客户通话等场景。核心功能包括自定义模板、准确转录和随处捕捉,使口语信息直接转化为可用的数据资产。

        AI热点2026-07-03 20:41
        AI驱动语音治疗应用 IzzyAI

        IzzyAI是一款AI驱动的语音治疗应用,提供全天候服务。通过智能治疗师头像互动,系统评估并治疗五种常见语音语言障碍,融合语音与面部识别技术给予实时反馈。内置综合评估、个性化练习、进展报告及支持性社区,提升治疗效果。

        延伸阅读