第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

從文本到知識圖譜:用大模型自動構(gòu)建交互式知識圖譜

本文中提到的项目所创建的知识图谱示例

大型语言模型如何用于知识提取和可视化流程

介绍

注意: 我不是这个领域的专家,我选择了这个项目来探索和学习这个领域。如果你有任何反馈或建议以帮助改进这个项目,欢迎随时分享,欢迎任何类型的反馈。

知识图谱提供了一种强大的工具来表示信息。它们由实体(节点)及其关系(边)构成,使得事物之间的连接比单纯视为无结构的文本更直观清晰。

传统上,创建知识图谱并不容易。它需要识别实体及其关系、手动提取规则或专门的机器学习模型。然而,大型语言模型可以用于此目的。这些模型可以读取自由文本并生成结构化信息,因此我们将在本文中看到,可以用它们作为自动化流程的一部分来制作知识图谱。

在这篇文章中,我们将探讨一个我创建的学习项目,该项目的目标是使用大型语言模型(LLM)来创建一个将非结构化文本转换为互动的知识图谱网页的流程。该项目的代码都在 AI-Knowledge-Graph 仓库 中。

一个简单的例子

以下是一个简单的例子,说明这个项目做了什么:当输入以下未结构化文本时:

亨利,一位来自加拿大的天才音乐家,最初师从著名指挥家玛丽亚·罗德里格斯学习古典钢琴。后来,亨利和他的妹妹露西一起组建了一支名为《枫叶》(The Maple Leaves)的摇滚乐队,露西曾在多伦多大学学习音乐作曲专业。《枫叶》于2020年8月12日发行了他们的首张专辑《北极之光》(Polar Lights),将古典与摇滚元素相结合,获得了评论界的一致好评。露西还投身环保事业,成为了“清洁地球”(Clean Earth)组织的地区大使,为更严格的野生动物保护法而游说。受到露西慈善精神的启发,亨利开始在他家乡的动物收容所做志愿者。尽管亨利和露西最初在创意上有所分歧,但最终他们在结合露西的古典作品和亨利的摇滚吉他演奏方面找到了和谐。在2021年的欧洲巡演中,《枫叶》在巴黎、柏林和罗马等主要城市举办了每一场演出都座无虚席的演出。在这次巡演中,亨利对国际美食产生了浓厚的兴趣,并与当地厨师合作拍摄了一部关于区域烹饪技术的短纪录片。

AI知识图谱工具将会使用你选择的LLM从上述文本中提取知识并创建知识图谱的HTML输出,类似于下面的示例。

由AI-Knowledge-Graph创建的知识图示例

它的工作原理简介
  1. 自动文本拆分:自动将大型文档拆分成可管理的片段以进行处理。
  2. 知识提取:大型语言模型(LLM)识别并提取每个片段中的事实三元组(主语-谓语-宾语)。
  3. 实体标准化:将提及的同一实体(例如“AI”和“人工智能”)统一为相同的名称。
  4. 关系推理:推断额外的关系——既可以通过简单的逻辑规则(如传递性)或大型语言模型的推理。
  5. 交互式网络图:结果图在您的浏览器中以交互式网络图的形式显示,连接断开的子图以形成完整的知识图谱。

从文本到图形的高级管道概述

它是如何运作的
文本分块

LLM 有一个上下文窗口限制,本地系统也有内存限制。这使得在处理大型文档时需要特别注意。因此,处理大型文档时,工具会自动将文本分割成多个片段(如每个片段大约 500 个字,并且片段之间有部分重叠)。这种重叠有助于保持句子间的语境连贯性。每个片段随后会被发送给 LLM,并附带指示提取 SPO 三元组的提示。

由 LLM 驱动的提取

对于每个部分,该工具让LLM输出一个包含三元组的JSON数组以及信息来源的部分。示例如下:

    [  
      {  
        "subject": "埃利·惠特尼",  
        "predicate": "造出了",  
        "object": "轧棉机(一种用来加工棉纤维的机器)",  
        "chunk": 1  
      },  
      {  
        "subject": "工业革命",  
        "predicate": "改变了",  
        "object": "经济体系",  
        "chunk": 1  
      },  
      {  
        "subject": "亚马逊",  
        "predicate": "改变了",  
        "object": "电商",  
        "chunk": 3  
      }  
    ]

该提示促进一致的实体命名,简洁的关系短语(1到3个词),并且避免使用代词。将从所有片段中提取的三元组合并为一个初始的知识图谱。

各块中实体的统一

在提取之后,你经常会发现同一实体存在多种形式(例如,“AI”,“A.I.”,“人工智能”)。为了防止出现碎片化或重复的节点,该工具提供了一个实体标准化的步骤。

  1. 基本标准化: 将文本转换为小写,去除多余空格等操作,合并明显的重复项。
  2. 标准化(可选): 启用时,LLM 会将不同的提及归并为同一个标准节点。例如,“New York”、“NYC”和“New York City”会被归并为同一个标准节点,“United States”、“U.S.”和“USA”会被归并为另一个标准节点。

这有助于提高图表的连贯性,通常会推荐这样做。如果你需要进行严格的原始提取,可以在配置文件里关闭它。

推断隐藏连接以充实网络

即使仔细阅读文本也未必能捕捉到隐含的关系。该工具通过两种方式来应对这一问题。

按照规则的推断: 按照规则进行推断。

  • 传递性关系: 如果A影响B,而B又驱动C,系统可以推断A也影响C。
  • 词汇上的相似性: 名称相似的实体可能通过一个通用的“相关”关系连接起来。

LLM助力推理:

  • 该工具可以提示LLM提出连接原本不相连的子图之间的链接。例如,如果一个集群是关于工业革命的,另一个是关于人工智能的,LLM可能会推断出一种历史或概念上的联系(“人工智能是始于工业革命的技术创新的延伸”)。
  • 这些边用不同的标记(例如,虚线)以将其与明确陈述的事实区分开来。

这个推理步骤通常会添加大量的新关系,大大减少了孤立的子图。如果你希望生成一个完全基于文本的图,可以在配置文件中禁用它。推理出的关系会包含一个属性,表示该关系是通过推理得出的。这个属性很重要,因为在可视化时会用于以虚线表示推断出的关系。

    [  
      {  
        "subject": "电气化",  
        "predicate": "使",  
        "object": "制造自动化",  
        "inferred": true  
      },  
      {  
        "subject": "提姆·伯纳斯-李",  
        "predicate": "通过互联网扩展了共享",  
        "object": "",  
        "inferred": true  
      }  
    ]
大语言模型提示词

如果启用了所有选项,将会向LLM(大型语言模型)发送四个提示信息。这是进行初始的SPO知识提取。

系统提取提示:

你是一个高级AI系统,专门从事知识提取和知识地图生成。
你的专长包括识别文本中实体的一致性和有意义的关系。
重要提示:所有关系(谓词)最多3个字,最好是1-2个字。这是严格限制。

提取用户提示:

[
    {"subject": "your task", "predicate": "read", "object": "text below triple backticks"},
    {"subject": "your task", "predicate": "identify", "object": "s-p-o relationships each sentence"},
    {"subject": "entity", "predicate": "use", "object": "consistent names"},
    {"subject": "entity", "predicate": "refer", "object": "john smith consistently"},
    {"subject": "atomic terms", "predicate": "identify", "object": "distinct key terms"},
    {"subject": "pronouns", "predicate": "replace", "object": "actual entity identifiable"},
    {"subject": "terms", "predicate": "co-occur", "object": "create one triple"},
    {"subject": "predicates", "predicate": "must", "object": "1-3 words"},
    {"subject": "text", "predicate": "capture", "object": "s-p-o relation"},
    {"subject": "standardize", "predicate": "terminology", "object": "most common form"},
    {"subject": "s-p-o", "predicate": "lower-case", "object": "even names"},
    {"subject": "person", "predicate": "mention", "object": "create relation location profession known"},
    {"subject": "entity", "predicate": "aim", "object": "precision naming"},
    {"subject": "concept", "predicate": "maximize", "object": "connectedness identical names"},
    {"subject": "context", "predicate": "consider", "object": "entire"},
    {"subject": "output", "predicate": "requirement", "object": "json array"},
    {"subject": "json", "predicate": "ensure", "object": "valid formatted"}
]

这里还有三个没有列出的提示,用于指导大语言模型的标准流程和关系推断。你可以检查并调整所有这些提示,在src/knowledge_graph/prompts.py源代码文件中找到。

交互式图形可视化

有了全面的 SPO 三元组列表(包括原始和推断出的),该工具会使用 PyVis(一个 Python 接口到 Vis.js)生成一个交互式的 HTML 可视化。当你在浏览器中打开生成的文件时,你会看到:

  • 按颜色分组的社区: 同一集群中的节点共享一种颜色。集群通常映射到文本中的子主题或主题。
  • 按重要性调整节点大小: 拥有较多连接或较高中心性的节点会显得更大。
  • 线条类型: 实线表示源自文本的关系,虚线表示推断出的关联。
  • 交互控件: 平移、缩放、拖动节点、启用/禁用物理效果、切换明暗模式,以及过滤显示。

这使得以一种视觉上吸引人的格式来轻松探索关系。

流程

以下是程序的基本流程图(在代码库的README.md文件中包含更详细的程序流程图)。

安装:AI知识图谱安装

要在您的电脑上运行这个程序,您需要满足以下条件:

需求:

  • 需要一台可以运行它的计算机(Windows、Linux 或 MacOS)
  • 安装 Python 3.12 或更高版本(推荐使用 Python 3.12 或以上)
  • 能够访问与 OpenAI 兼容的 API 端点(例如 Ollama、LiteLLM、LM Studio、OpenAI 订阅等)
  • 使用 Git 克隆代码仓库

先下载再安装所有依赖项:

克隆代码库到你要运行它的系统中,然后进入该目录。

    git clone https://github.com/robert-mcdermott/ai-knowledge-graph.git  # 这将克隆仓库到本地
    cd ai-knowledge-graph  # 然后进入克隆的文件夹

使用uv命令来安装依赖项。

    uv 同步

或使用pip安装:

pip install 模块名

注:请将“模块名”替换为实际需要安装的软件包名称。

    pip install -r requirements.txt # 安装requirements.txt文件中列出的所有依赖包
配置 AI 知识图谱

编辑 config.toml 文件以适应您的情况。这里您可以配置 LLM 模型、端点(URL地址)、最大内容窗口大小和温度。在下面的例子中,我使用的是 Google 开源的 Gemma 3 模型,该模型在我的本地计算机上通过 Ollama 进行托管。在这里您可以调整文档分块的大小和重叠,并且如果您想使用标准化实体并利用推理来建立更多关联,您也可以在这里进行相应的调整。

    [llm]  
    model = "gemma3"  
    api_key = "sk-1234"  
    base_url = "http://localhost:11434/v1/chat/completions"  
    max_tokens = 8192  
    temperature = 0.2  

    [chunking]  
    chunk_size = 200  # 每个块的单词数  
    overlap = 20      # 块之间的重叠单词数  

    [standardization]  
    enabled = 是               # 是否启用实体标准  
    use_llm_for_entities = 是  # 是否使用LLM进行额外的实体解析  

    [inference]  
    enabled = 是                # 是否启用关系推理  
    use_llm_for_inference = 是  # 是否使用LLM进行关系推理  
    apply_transitive = 是       # 是否应用传递性  

    [visualization]  
    edge_smooth = 否  # 边是否平滑

注意: 如果您需要在本地使用LLM,可以使用Ollama或LM Studio API端点,或者通过LiteLLM访问各种商业LLM提供商(如AWS Bedrock、Azure、Anthropic、OpenAI等)。如果您需要帮助运行Ollama或使用LiteLLM访问其他LLM服务,可以参考我的相关文章:使用Ollama从零开始,或使用LiteLLM集中管理多个AI服务。

构建知识图谱

现在你已经安装并配置了 ai-knowledge-graph,让它指向你的大模型,现在你可以开始创建你的第一个知识图谱了。找一个纯文本文件,目前只支持文本文件用来创建你的知识图谱。

接下来你需要做的就是运行 generate-graph.py(生成图形的脚本)。这里给出的是该脚本的帮助信息:

用法:generate-graph.py [-h] [--test] [--config 配置文件] [--output 输出文件] [--input 输入文件] [--debug] [--no-standardize] [--no-inference]  

知识图谱生成和可视化工具  

选项:  
  -h, --help            显示帮助信息并退出  
  --test                使用样本数据生成测试可视化  
  --config 配置文件     指定配置文件路径  
  --output 输出文件     指定输出的HTML文件路径  
  --input 输入文件      指定输入的文本文件路径(除非使用了--test选项,否则是必需的)  
  --debug               启用调试输出(原始大模型响应和提取的JSON)  
  --no-standardize      禁用实体标准化  
  --no-inference        禁用关系推理

这里是一个用当前目录中名为 mydocument.txt 的文本文件生成知识图谱的例子。(如果你用的是 uv,就把“python”改为“uv run”)

在终端运行 python generate-graph.py --input mydocument.txt --output mydocument.html 命令,将文本文件转换为 HTML 格式。

这是运行上述命令管道后在控制台上的输出:

    python generate-graph.py --input mydocument.txt --output mydocument.html  
    使用文件 mydocument.txt 中的输入文本  
    ==================================================  
    第 1 阶段:初始三元组提取  
    ==================================================  
    将文本分成 3 个块(每个块大小:500 个单词,重叠:50 个单词)  
    处理第 1 个块(500 个单词,共 3 个块中的第 1 个)  
    处理第 2 个块(500 个单词,共 3 个块中的第 2 个)  
    处理第 3 个块(66 个单词,共 3 个块中的第 3 个)  

    从所有块中提取了总共 73 个三元组  

    ==================================================  
    第 2 阶段:实体标准化  
    ==================================================  
    开始时有 73 个三元组和 106 个唯一的实体  
    开始对实体名称进行标准化...  
    对 15 个实体组进行了基于 LLM 的实体标准化  
    移除了 8 个自引用三元组  
    将 106 个实体标准化为 101 种标准形式  
    标准化后:65 个三元组和 72 个唯一的实体  

    ==================================================  
    第 3 阶段:关系推理  
    ==================================================  
    开始时有 65 个三元组  
    推理前的前 5 种关系类型:  
      - 先驱:9 次出现  
      - 发明:7 次出现  
      - 发展:6 次出现  
      - 正在发展:6 次出现  
      - 是:4 次出现  

    开始推理实体间额外的关系...  
    在图中识别到 18 个不连通的社区  
    推理出 27 个和 30 个新的社区间关系  
    推理出 6 个新的社区内关系  
    基于词汇相似性推断了 8 个关系  
    添加了 51 个推理出的关系  

    推理后的前 5 种关系类型:  
      - 发明:7 次出现  
      - 先驱:6 次出现  
      - 发展:6 次出现  
      - 正在发展:6 次出现  
      - 与...相关:6 次出现  

    添加了 57 个推理出的关系  
    最终的知识图包含 116 个三元组  
    将原始知识图数据保存到 mydocument.json  
    处理 116 个三元组以进行可视化  
    找到 72 个唯一节点  
    找到 55 个推理出的关系  
    通过 Louvain 方法检测到了 12 个社区  

    知识图可视化保存到 mydocument.html  

    知识图统计:  
    节点:72  
    边:116(55 个推理)  
    社区:12  

    如需查看可视化,请在浏览器中打开以下文件:  
    file:///Users/robertm/mycode/ai-knowledge-graph/mydocument.html

现在,请在您的网络浏览器中打开生成的HTML文件,开始探索知识图。如果您只是想查看和与知识图互动,无需自己创建,可以点击以下链接查看一个由关于工业革命的文档生成的知识图示例:Industrial-Revolutions.html

您可以使用页面顶部的菜单来展开控制面板以调整布局物理设置,隐藏或显示节点/边标签,查看图统计信息,选择或过滤节点和边。如图所示,还有一个深色模式。

瑞典译为中文不应包含瑞典文字,这里纠正并直接给出正确的中文翻译:
瑞典部分为原文,翻译如下:
试试不同的设置很有用

试着用不同的分块和重叠大小,以及不同的LLM模型,看看会有什么不同,这挺好的。通常我会设置重叠大小为分块大小的10%。我发现较小的分块(比如100到200)似乎能提取到更多的关系。但是这样也可能导致其他事物和概念之间的关系变得较为稀疏,因为这些关系可能跨越了多个小分块。你需要通过实验来找到最适合的分块大小和模型。我相信调整提示也能带来不少优化。

🤗 感谢阅读
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消