利用AI大模型,将任何文本语料转化为知识图谱,可本地运行!

2024-06-13 13:28

本文主要是介绍利用AI大模型,将任何文本语料转化为知识图谱,可本地运行!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

几个月前,基于知识的问答(KBQA)还是一个新奇事物。

现在,对于任何 AI 爱好者来说,带检索增强生成(RAG)的 KBQA 就像小菜一碟。看到自然语言处理(NLP)的可能性领域由于大型语言模型(LLMs)的发展而如此迅速扩展,真是令人着迷。

而且,它每天都在变得更好。

01 摘 要

知识图谱(KG)或任何图谱由节点和边组成。知识图谱的每个节点代表一个概念,每条边是这样一对概念之间的关系。

在这篇文章中,我将分享一种将任何文本语料库转换成概念图的方法。我在这里将“概念图”(GC)一词与知识图谱这个术语交替使用,以更好地描述我在这里演示的内容。

我在这个实现中使用的所有组件都可以在本地设置,因此这个项目可以轻松地在个人机器上运行。我在这里采用了无 GPT 方法,因为我相信较小的开源模型。

我正在使用出色的 Mistral 7B Openorca instruct 和 Zephyr 模型。这些模型可以通过 Ollama 在本地设置。

(编者注:Mistral 7B 是一个基于 GPT 架构的大型语言模型,专门优化以理解和执行用户指令,适用于多种自然语言处理任务)

像 Neo4j 这样的数据库使得存储和检索图形数据变得容易。在这里,我使用内存中的 Pandas 数据框和 NetworkX Python 库,以保持简单。

我们的目标是将任何文本语料库转换成概念图(GC)并像本文的精美横幅图像一样进行可视化。我们甚至将通过移动节点和边缘、放大和缩小以及改变图的物理特性来与网络图进行交互,以满足我们的心愿。

这是 Github 页面链接,展示了我们正在构建的结果:

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

但首先,让我们深入了解知识图谱的基本概念以及我们为什么需要它们。如果你已经熟悉这个概念,请跳过下一节。

02 知识图谱

考虑以下文本:

玛丽有一只小羊羔,
你以前听说过这个故事;
但你知道她传递了她的盘子,
又多吃了一点!

(我希望孩子们没有读到这个😝)

这是将文本表示为知识图谱的一种可能方式。

在这里插入图片描述

本文作者使用 draw.io 创建的图表

IBM 在一篇文章中恰当地解释了知识图谱的基本概念:

知识图谱,也称为语义网络,代表了现实世界实体——即对象、事件、情境或概念——之间的网络,并展示了它们之间的关系。这些信息通常存储在图形数据库中,并以图形结构的形式可视化,因此得名知识“图谱”。

为什么要用知识图谱?

知识图谱在多种方式上都很有用。我们可以运行图算法并计算任何节点的中心性,以了解一个概念(节点)对于整个作品的重要性。

我们可以分析概念的连接集和断开集,或计算概念社区以深入理解主题。我们可以理解看似不相关概念之间的联系。

我们还可以使用知识图谱来实现图形检索增强生成(GRAG 或 GAG),并与我们的文档进行聊天。

这可以给我们带来比老旧版本的 RAG 更好的结果,后者有几个缺点。例如,仅使用简单的语义相似性搜索来检索与查询最相关的上下文并不总是有效的。

特别是当查询没有提供足够的上下文来说明其真实意图,或者当上下文跨越大量文本片段时。

例如,考虑这个查询——

“告诉我《百年孤独》书中关于 José Arcadio Buendía 家族史的信息。”

这本书记录了 7 代人的家族史,其中一半的角色都叫。如果使用简单的 RAG 管道,即使可能,回答这个查询也将是相当的挑战。

RAG 的另一个缺点是它不能告诉你该问什么。很多时候,提出正确的问题比得到答案更重要。

图形增强生成(GAG)可以在一定程度上解决 RAG 的这些缺点。更好的是,我们可以混合搭配,构建一个图形增强检索增强生成管道,以获得两全其美的效果。

所以现在我们知道图形很有趣,它们可以非常有用,它们看起来也很美。

03 创建概念图

如果你问 GPT 如何从给定文本创建知识图谱?它可能会建议如下过程:

  1. 从作品中提取概念和实体。这些是节点。
  2. 提取概念之间的关系。这些是边。
  3. 在图形数据结构或图形数据库中填充节点(概念)和边(关系)。
  4. 可视化,至少是为了视觉上的满足感。

第 3 步和第 4 步听起来可以理解。但你如何实现第 1 步和第 2 步?

这是我设计的从任何给定文本语料库中提取概念图的方法流程图。它类似于上述方法,但有一些小的不同:

  1. 将文本语料库分割成块。为每个块分配一个 chunk_id。
  2. 对于每个文本块,使用 LLM 提取概念及其语义关系。我们给这种关系分配一个 W1 的权重。同一对概念之间可以有多重关系。每一种关系都是一对概念之间的边。
  3. 考虑在同一文本块中出现的概念,也通过它们的上下文邻近性相关联。让我们为这种关系分配一个 W2 的权重。请注意,同一对概念可能出现在多个块中。
  4. 将相似的对分组,合计它们的权重,并连接它们的关系。因此,现在我们在任何不同的概念对之间只有一条边。这条边具有一定的权重,并带有一系列关系作为其名称。

如下图所示:

在这里插入图片描述

本文作者使用 draw.io 创建的图表 / 活水智能 编译

你可以在本文分享的 GitHub 仓库中,查看 Python 代码。

让我们在接下来的几节中简要介绍实现的关键方法。

为了在这里演示该方法,我使用了在 PubMed/Cureus 上发表的文章(编者注:文章见文末),文章遵循 CC BY 版权使用协议。

Mistral 及提示词

上述流程图的第 1 步很简单。Langchain 提供了大量的文本分割器,我们可以使用它们将文本分割成块。

第 2 步是真正有趣的开始。为了提取概念及其关系,我使用了 Mistral 7B 模型。在确定最适合我们目的的模型变体之前,我尝试了以下几种:

Mistral Instruct

Mistral OpenOrca

Zephyr(从 Mistral 衍生的 Hugging Face 版本)

我使用了这些模型的 4 位量化版本——这样我的 Mac 就不会开始讨厌我了——通过 Ollama 在本地托管。

这些模型都是经过指令调整的模型,带有系统提示和用户提示。如果我们告诉它们,它们都能很好地遵循指令,并整齐地以 JSON 格式格式化答案。

经过几轮尝试和错误后,我最终选择了 Zephyr模型 和以下提示:

在这里插入图片描述

如果我们用这个提示传递我们的(不适合)童谣,这是结果。
在这里插入图片描述

注意,它甚至猜到了“食物”作为一个概念,这在文本块中并没有明确提到。这不是很棒吗!

如果我们将这个过程应用于我们示例文章的每个文本块,并将 json 转换为 Pandas 数据框,这是它的样子。

在这里插入图片描述

这里的每一行代表一对概念之间的关系。每行是我们图中两个节点之间的一条边,同一对概念之间可以有多条边或关系。

上述数据框中的计数是我任意设置为 4 的权重。

上下文邻近性

我假设在文本语料库中彼此靠近出现的概念是相关的。我们称这种关系为“上下文邻近性”。

为了计算上下文邻近性边缘,我们将数据框融化,使得 node_1 和 node_2 合并成一个列。

然后我们使用 chunk_id 作为键对这个数据框进行自连接。因此,具有相同 chunk_id 的节点将彼此配对,形成一行。

但这也意味着每个概念也会与自己配对。这称为自环,其中边缘起始和结束于同一个节点。为了移除这些自环,我们将从数据框中删除 node_1 与 node_2 相同的每一行。

最终,我们得到一个与原始数据框非常相似的数据框。

图片

这里的 count 列是 node_1 和 node_2 一起出现的块数。列 chunk_id 是所有这些块的列表。

所以我们现在有两个数据框,一个带有语义关系,另一个带有文本中提到的概念之间的上下文邻近性关系。我们可以将它们结合起来形成我们的网络图数据框。

我们已经完成了为我们的文本构建概念图的工作。但在这一点上就结束将是一项相当不令人满意的练习。

我们的目标是像本文开头的特色图像一样可视化图表,而我们离目标不远了。

04 创建概念网络

NetworkX 是一个使处理图变得非常容易的 Python 库。

如果你还不熟悉这个库,请点击链接了解更多:https://networkx.org/?source

将我们的数据框添加到 NetworkX 图中只需要几行代码:

在这里插入图片描述

这是我们可以开始利用网络图的力量的地方。NetworkX 为我们提供了大量现成的网络算法供我们使用。

这是我们可以在图上运行的算法列表的链接:https://networkx.org/documentation/stable/reference/algorithms/index.html

在这里,我使用社区检测算法为节点添加颜色。社区是一组节点,它们彼此之间的连接比与图的其余部分更紧密。概念社区(Communities of concepts)可以让我们很好地了解文本中讨论的广泛主题。

Girvan Newman 算法在我们正在处理的审查文章中,检测到了 17 个概念社区。这是其中一个概念社区。

在这里插入图片描述

这立即让我们了解到审查论文中讨论的健康技术的广泛主题,并使我们能够提出问题,然后我们可以用我们的 RAG 管道来回答。这不是很棒吗?

让我们也计算图中每个概念的度数。节点的度数是它连接的边的总数。所以在我们的案例中,概念的度数越高,它对我们文本的主题就越中心。我们将在可视化中使用度数作为节点的大小。

05 图形可视化

可视化是这个练习中最有趣的部分。它有一种特质,能给你带来艺术上的满足感。

我使用 PiVis 库来创建交互式图表。Pyvis 是一个用于可视化网络的 Python 库。

Pyvis 内置了一个 NetworkX 助手,可以将我们的 NetworkX 图转换为 PyVis 对象。所以我们不需要更多的编码……耶!!

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

复制链接打开,即可看到交互式知识图谱:https://rahulnyk.github.io/knowledge_graph/

我们可以随意放大和缩小,移动节点和边缘。页面底部还有一个滑块面板,可以改变图的物理特性。看看图表如何帮助我们提出正确的问题,更好地理解主题内容!

我们可以进一步讨论我们的图如何帮助我们构建图形增强检索,以及这如何帮助我们构建更好的 RAG 管道。但我认为最好留到另一天。

我们已经实现了本文的目标!■

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

这篇关于利用AI大模型,将任何文本语料转化为知识图谱,可本地运行!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057433

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi