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

news2024/10/5 15:32:08

几个月前,基于知识的问答(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%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM性能优化案例:优化垃圾回收器的年轻代和老年代占比

JVM性能优化案例:优化垃圾回收器的年轻代和老年代占比 我们有一款在线交易系统,要求低延迟和高吞吐量。系统运行在Ubuntu服务器上,使用OpenJDK 11,并启用了G1垃圾回收器。以下是系统的基本配置和GC日志信息: 操作系统…

学习笔记丨嵌入式BI分析的12个关键功能

编者注:以下内容节选编译自嵌入式分析厂商Qrvey发表的《What is Embedded Analytics?》(什么是嵌入式分析)一文,作者为Qrvey产品市场主管Brian Dreyer。 什么是嵌入式分析? 嵌入式分析是指能够将数据分析的特性和功…

React+TS前台项目实战(七)-- 全局常用组件Select封装

文章目录 前言Select组件1. 功能分析2. 代码详细注释说明3. 使用方式4. 效果展示(1)鼠标移入效果(2)下拉框打开效果(3)回调输出 总结 前言 今天这篇主要讲全局select组件封装,可根据UI设计师要…

java1.8运行arthas-boot.jar运行报错解决

报错内容 输入java -jar arthas-boot.jar,后报错。 [INFO] JAVA_HOME: D:\developing\jdk\jre1.8 [INFO] arthas-boot version: 3.7.2 [INFO] Can not find java process. Try to run jps command lists the instrumented Java HotSpot VMs on the target system.…

资源付费系统小程序APP公众号h5源码

🔐 揭秘“资源付费系统”:知识、技能与价值的交汇点 💎 🌟 引言:为何资源需要付费? 在数字化时代,我们周围充斥着大量的信息。但并非所有信息都具有同等的价值。其中,那些经过精心…

项目五串行通信系统 任务5-3温度信息上传

任务描述:DS18B20测量温度,单片机采集温度数据转换显示代码,并通过串行口发送到上位机显示。 底层文件: /********************************************* ds18b20底层函数:能完成一次温度数据读取 ***************************…

算法课程笔记——线段树动态开点

算法课程笔记——线段树动态开点 、

大模型高考数学测评结果,国内AI大模型成绩超GPT-4o!

每年高考都是备受全社会关注的一件大事,而今年略有不同,因为除了鱼跃龙门的高三学子们,还多了许多陪他们一同参加考试的 AI 大模型。 在所有的考试科目中,数学显然一直都是最难的那一门,不论是对考生还是对大模型。因…

设备管理系统——设备台账管理

设备管理系统中的设备台账管理是一项关键的功能,它涵盖了设备从购入、使用、维护到报废的全生命周期管理。以下是设备台账管理在设备管理系统中的详细功能和重要性: 一、设备台账管理的基本功能 设备信息录入: 录入设备的基本信息&#xff0…

B端系统的颜值问题:成也框架,败也框架!

B端UI框架和前端框架的出现,让系统的搭建就像堆积木一样,十分的容易了。这也一下子把程序员的设计和审美水平拔高到了UI框架能够达到的高度。伴随而来的则是系统的堆砌、同质化、糟糕的体验,以及各种违和的组件被生搬硬套的绑定在一块&#x…

传统工厂该如何做数字化转型?

传统工厂实现数字化转型需多方面着手,包括树立战略意识、明确目标规划,加强信息化建设、提升数据能力,培养引进人才、推动技术创新,优化业务流程、提高生产效率与质量管控,加强协同合作、实现产业链整合,建…

男士内裤买便宜还是贵的?2024年高性价比男士内裤汇总分享

男生内裤,作为贴身衣物,承载着男性的私密与舒适。然而,许多男士的内裤状况却让人大跌眼镜:穿到变形、腰部松垮无弹性,屁股后面甚至出现破洞,这样的景象已然屡见不鲜。更有些男士的内裤,中间一个…

lnmp的介绍与源码部署以及 |什么是正向、反向、透明代理 | 常见的集群有哪些

lnmp 文章目录 lnmp1.LNMP是什么2. lnmp简介3.系统特点4.优点5.lnmp部署5.1 nginx安装5.2 mysql安装5.3 php安装5.4配置nginx服务处理php 6.扩展知识点1.什么是集群2.常见的集群有哪些集群的分类1、高可用集群2、负载均衡集群3、分布式计算集群4、高性能集群(High Performance …

你为什么不相信 LLM 模型评测:深入评测 LLM 接口

我相信你已经看过很多机构发布的 LLM(大语言模型) 的模型效果质量的评测文章了。 其实呢,大家看了很多自称权威,或者不怎么权威的评测文章,基本上也就看看就完了,很少有人真的相信这些测试结果。 为什么你…

基于Simufact Welding定向沉积增材仿真的几何变形补偿

在DED(Directed energy deposition定向能量沉积,下述简称DED)增材工艺过程中,由于零部件的重复加热,极易产生部件的变形问题。借助专业的金属定向能量沉积仿真软件Simufact Welding,能够对目标件进行瞬态数…

线稳源极跟随 线性电源前端降压

功率MOSFET线性电源涉及跟随.ms14 根本原理是Vgs对Id的控制,Vgs越大,Id越大,反之亦然。 观察转移特性曲线,结合接线图可知,电路稳定后,如果负载电阻增大,则Vsgnd增大,由于Vggnd有稳…

负压式水帘风机和一体式水帘风机的特点

负压式水帘风机和一体式水帘风机各有其独特的特点,以下是它们的特点归纳: 负压式水帘风机特点: 高效节能: 通过水帘与负压风机的配合,模拟自然界的蒸发降温过程,耗电量仅为传统空调的十分之一&#xff0c…

Liinux:进程程序替换

替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用e…

Java常用的设计模式,如单例模式、工厂模式、观察者模式等

设计模式是软件工程中的一种解决方案,用于应对常见的设计问题和挑战。它们提供了一种标准化的方式来解决设计难题,使代码更加灵活、可扩展和易于维护。 单例模式(Singleton Pattern) 概述 单例模式确保一个类只有一个实例&…

Lua解释器裁剪

本文目录 1、引言2、文件功能3、选择需要初始化的库4、结论 文章对应视频教程: 已更新。见下方 点击图片或链接访问我的B站主页~~~ Lua解释器裁剪,很简单~ 1、引言 在嵌入式中使用lua解释器,很多时候会面临资源紧张的情况。 同时&#xff0c…