提升LLM结果:何时使用知识图谱RAG

通过知识图谱增强 RAG 可以帮助检索,使系统能够更深入地挖掘数据集以提供详细的响应。

有时,检索增强生成 (RAG) 系统无法深入文档集以找到所需的答案。我们可能会得到泛泛的或肤浅的回复,或者我们可能会得到回复,其中 RAG 系统检索到的细节很少,然后用不相关或不正确的信息填补空白——这被称为“幻觉”。

深度知识库和文档集可能包含我们用 RAG 提示回答问题所需的所有信息,但 RAG 系统 可能无法找到所有信息,尤其是在所需信息分散在多个文档和不同主题或子主题中的情况下。特别是,向量检索通常会产生一组很好的文档,但这些文档中的一些概念需要更多信息才能让系统理解它们,因此直接检索与这些概念相关的其他文档将很有帮助。

以下是一些可能存在这些问题的类型的数据集:

  • 经常相互引用的文档集合。
  • 包含章节、术语定义和词汇表的文档,其中检查交叉引用是了解给定主题的完整情况的唯一方法。
  • 大型维基或知识库,其中几乎每段都包含指向其他页面和外部网站的 HTML 链接。

此类数据集通常存在于:

  • 法律文件
  • 技术文档
  • 研究和学术出版物
  • 高度互联的网站

如果您的组织拥有深度且复杂的数据集,其中包含相互关联的文档和其他内容,则标准 RAG 实现可能无法成功解决一些最常见的用例,尤其是在提示要求提供详细的解释时,这些解释包括广泛和高度具体的层面的信息。将实现转换为 图 RAG,这意味着用 知识图谱 增强 RAG 系统,该图谱可以帮助检索,可以使系统能够更深入地挖掘数据集,以提供对请求详细和专业信息的提示的详细且正确的响应。

让我们探讨知识图谱如何提高 RAG 系统性能的关键概念,这种图谱可能是什么样子以及如何开始在您自己的数据上构建图 RAG 系统。

图谱如何提供帮助?

简而言之,知识图谱与 向量存储 相结合,可以提供一种方法来直接连接在向量空间中可能不接近或不相似,因此在检索过程中不会被认为是“相关”的文本块。

典型的 RAG 系统从向量存储中检索与提示最相关的文档(或“块”,根据向量相似性的度量。如果这些文档包含指向其他文档的链接或引用,那么很明显,文档的作者认为它们是有意义地相关的。如果文档是有意义地相关的,为什么我们不想利用这些信息来更深入地挖掘并获得更多可能有助于回答提示的细节?

重述一下情况:我们拥有通过链接或引用明确且直接相关的文档,我们希望确保我们的 RAG 系统在检索文档时考虑这些连接。构建一个链接文档的网络会产生一个图结构,我们可以遍历该结构以找到在典型文档检索过程中可能无法找到的相关文档,使用图来增强 RAG;这被称为图 RAG。

主要思想是我们已经拥有一个隐式且高置信度的图,它通过直接链接和引用将文档相互关联,我们希望我们的 RAG 系统在依赖不太确定的向量相似性和相关性分数来填充响应中的细节之前,充分利用这些已知的、高确定性的连接,这将有更高的风险以幻觉进行响应。

我们可以使用哪些类型的连接?

定义图的可能性是无限的,但我们发现,在图 RAG 中使用最有效和最有效的连接类型是那些定义明确且有意义的连接。也就是说,我们希望清楚地知道什么是连接,什么是没有连接的,因此我们倾向于避免为模糊的概念(如一般主题和情感)定义连接。我们希望这些连接是有意义的,从某种意义上说,两个文档在 图中存在连接使得每个文档中的内容很可能与另一个文档相关。以下是定义图 RAG 中文档之间连接的一些最有用方法。

HTML 链接

如今,连接文档最清晰、最明显的方法之一是在一个文档中直接链接到另一个文档,从 HTML 链接在基于 Web 的文档中的意义上来说。从人类的角度(而不是 AI 的角度)来看,如果我们点击一个文档中的链接并最终到达另一个文档,那么它们之间就存在一个链接。这可以通过任何数量的链接提取工具在软件中定义和实现。通常,文档的作者添加链接是有原因的,因此它们之间存在有意义的连接。这样,HTML 链接是我们可以在知识图中使用的文档之间最明确和最有意义的链接之一。

从 HTML 链接构建知识图在技术文档和大型维基或知识库等数据集上非常有效。这些类型的数据集的互连性质使得图 RAG 特别适用于深入研究专业细节、定义和子主题,这些细节、定义和子主题可能无法通过向量搜索单独找到。

从 HTML 文档中提取链接的一些示例代码:

代码语言:javascript

from bs4 import BeautifulSoup
from ragstack_langchain.graph_store.extractors import HtmlLinkEdgeExtractor

html_link_extractor = HtmlLinkEdgeExtractor()

# starting with an HTML document called `html`
soup = BeautifulSoup(html.page_content, "html.parser")
content = select_content(soup, url)

# Extract HTML links from the content.
html_link_extractor.extract_one(html, content)

有关使用 HTML 链接提取构建图的图 RAG 的端到端示例,请查看最近的这篇文章,“使用以内容为中心的知识图实现更好的 LLM 集成和相关性”。

关键词和主题

虽然从基于一般主题或情感的连接构建图对于图 RAG 的目的来说可能过于模糊和不确定,但通常可以使用定义明确且有意义的高度专业化的关键词和主题。特别是,专业领域内的关键词可以有效地用于在图 RAG 中建立文档之间的连接。专业关键词并不总是包含在文档的向量嵌入表示中,因此将从知识图提供的更强大、更刻意连接中受益。

有一些优秀的工具可以提取关键词;以下是如何 使用“keyBERT”提取关键词 的简单示例:

代码语言:javascript

from keybert import KeyBERT

doc = """
         Supervised learning is the machine learning task of learning a function that
         maps an input to an output based on example input-output pairs. It infers a
         function from labeled training data consisting of a set of training examples.
         In supervised learning, each example is a pair consisting of an input object
         (typically a vector) and a desired output value (also called the supervisory signal).
         A supervised learning algorithm analyzes the training data and produces an inferred function,
         which can be used for mapping new examples. An optimal scenario will allow for the
         algorithm to correctly determine the class labels for unseen instances. This requires
         the learning algorithm to generalize from the training data to unseen situations in a
         'reasonable' way (see inductive bias).
      """

kw_model = KeyBERT()
keywords = kw_model.extract_keywords(doc)

这将提取专业领域关键词:

代码语言:javascript

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 2), stop_words=None)
[('learning algorithm', 0.6978),
 ('machine learning', 0.6305),
 ('supervised learning', 0.5985),
 ('algorithm analyzes', 0.5860),
 ('learning function', 0.5850)]

我们将这些关键词如何转化为知识图取决于我们的用例和数据模型。一个例子可以在 RAGStack 文档关于知识图 RAG 的部分中找到。

使用有意义的关键词作为节点构建图,这些节点连接到包含它们的文档,这可能是一种有效的图 RAG 策略。请注意,要通过图将文档相互连接,我们必须遍历图到深度为 2 或更大:从文档到其关键词的一步,以及到包含这些关键词的其他文档的第二步。

术语和定义

在法律文件、学术出版物和研究作品中,我们有术语和定义作为列表或词汇表,通常出现在文档的开头或结尾。在这些情况下,在整个文档中引用这些术语和定义非常有用,这样我们就可以始终清楚地了解所表达的内容。如果没有这些术语的定义,文档的某些部分可能会变得模糊或几乎毫无意义。

一个特别恰当的例子是大量文档的情况,这些文档是租户和房东之间的合同;我们将使用我们的 RAG 系统查询它们。这些文档通常会在加载到数据存储之前进行分块,这意味着出现在文档开头或结尾的任何术语和定义本身并不包含在分块中。由于存在许多不同租户和房东之间的合同,任何引用“租户”或“房东”一词的分块在没有将其与所讨论的特定租户和特定房东联系起来的情况下将是模棱两可的。

在这种情况下,拥有一个明确地将文档片段与其中出现的术语的适当定义连接起来的知识图将非常有用。提取这些定义和术语以及将它们连接到文档的正确片段的具体实现将取决于原始文档本身的格式、术语表或定义相对于文档其余部分的结构等。许多文本和文档解析器可用于此目的,并且正在进行工作以将该过程标准化为图 RAG。

当文档被分割并加载到向量存储中时,除非我们以某种方式捕获它,否则文档结构中所有超出片段的部分都会丢失。对于许多 RAG 用例,系统能够知道每个文档片段在文档的整体结构中的位置、所有标题和副标题、页码以及哪些片段紧接在给定片段之前和之后将非常有用。

在与每个片段连接的知识图中保留此信息对于图 RAG 的目的有两个主要优势。首先,了解片段在文档中的位置使我们能够提取附近的文本,这可能是紧接在片段之前和之后的片段、同一页面的文本或同一部分的文本——所有这些都可能为初始片段中提到的主题提供支持证据和细节。其次,一些文档包含对其他部分编号、标题和页码的交叉引用,因此拥有一个允许 RAG 系统直接检索所引用部分中的片段的知识图将非常有用。

我们如何构建这个图来改进我们的 Rag 系统?

我们在这篇关于以内容为中心的知识图的文章中详细介绍了更多技术细节,其中我们解释了如何使用 langchainragstack、Cassandra 和相关工具从基于 Web 的技术文档构建知识图。我们从文档中出现的 HTML 链接构建知识图,这可能是为图 RAG 构建知识图的最简单和最有用的方法之一。

要处理 HTML 文档并为图 RAG 添加适当的元数据,我们可以使用以下辅助函数:

代码语言:javascript

from markdownify import MarkdownConverter
from ragstack_langchain.graph_store.extractors import HtmlLinkEdgeExtractor

markdown_converter = MarkdownConverter(heading_style="ATX")
html_link_extractor = HtmlLinkEdgeExtractor()

def convert_html(html: Document) -> Document:
url = html.metadata["source"]
soup = BeautifulSoup(html.page_content, "html.parser")
content = select_content(soup, url)

# Use the URL as the content ID.
html.metadata[CONTENT_ID] = url

# Extract HTML links from the content.
html_link_extractor.extract_one(html, content)

# Convert the content to markdown and add to metadata
html.page_content = markdown_converter.convert_soup(content)

return html

一旦文档被处理并且添加了适当的元数据,它们就可以加载到像下面示例这样的图向量存储中,该示例使用 Astra DB 作为底层数据存储,以及 CassandraGraphStore 作为 GraphVectorStore 的实现,它既充当知识图又充当向量存储:

代码语言:javascript

import cassio
from langchain_openai import OpenAIEmbeddings
from ragstack_langchain.graph_store import CassandraGraphStore

# Initialize AstraDB connection
cassio.init(auto=True)

# Create embeddings
embeddings = OpenAIEmbeddings()

# Create knowledge store
graph_store = CassandraGraphStore(embeddings)

...  # load and process your documents, e.g. `convert_html` above

# Add documents to knowledge store
graph_store.add_documents(docs)

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IA——网络操作设备VRP简介

一,VRP简介 二,网络设备的管理 (1)console口: (2)talnet: (3)SSH: 安全的远程登陆 (4)通过WEB页面登录: 三,命令行常见…

周星驰《大话大话西游》开机,“悟空热”席卷短剧市场?

继《黑神话:悟空》掀起文娱行业的“悟空热”之后,对市场变化最为敏感的短剧行业也赶上了这波热潮。 9月2日,由丽泽影业承制、周星驰九五二七剧场的第二部短剧《大话大话西游》正式开机。 从剧名就不难看出,《大话大话西游》是周星…

MySQL数据库安装(详细)—>Mariadb的安装(day21)

该网盘链接有效期为7天,有需要评论区扣我: 通过网盘分享的文件:mariadb-10.3.7-winx64.msi 链接: https://pan.baidu.com/s/1-r_w3NuP8amhIEedmTkWsQ?pwd2ua7 提取码: 2ua7 1 双击打开安装软件 本次安装的是mariaDB,双击打开mar…

OPC DA

默认端口号: TCP 135 参考https://wenku.baidu.com/view/8f2b18a229f90242a8956bec0975f46527d3a7e4.html?_wkts_1725526157944&bdQuery%E6%9F%A5%E7%9C%8B%E8%A5%BF%E9%97%A8%E5%AD%90opcDA%E7%AB%AF%E5%8F%A3%E5%8F%B7 OPC DA ,OPC UA简介https://www.cnblogs.com/mi…

Vue3 + Ts + Vite项目 websoket封装使用

文章目录 一、安装二、封装三、请求地址配置3.1 将接口地址放到 public3.2 引入 ipconfig.js 文件3.3 全局类型声明 四、页面使用4.1 引用4.2 注册 五、说明 一、安装 npm npm install websocket --save-devpnpm pnpm install websocket --save-dev二、封装 在 /src/utils …

类的加载过程与初始化小记

//部分内容来自“狂神说java” 代码验证 解释 1.加载类的信息,加载到内存中,如例子,将Test05和A类的信息加载到方法区, 2.加载完成后,立马生成一个class对象,如例 java.lang.class对象代表Test05类..., 3…

软件测试-Selenium+python自动化测试

目录 会用到谷歌浏览器Chrome测试,需要下载一个Chromedriver(Chrome for Testing availability)对应自己的浏览器版本号选择。 一、元素定位 对html网页中的元素进行定位,同时进行部分操作。 1.1一个简单的模板 from selenium import webdriver from selenium.webdrive…

Elastic Stack-ES集群常用的API

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记: 最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—Elastic…

Origin2024中如何添加误差带?直观查看数据的变化范围

误差线是通常用于统计或科学绘图中,本期给大家分享Origin中绘制带填充区的误差带图,可以直观显示数据的变化范围,填充区域也可以增加视觉效果和美观性 操作步骤: 1、打开Origin2024软件,然后在Book1中输入如下示例数…

街机 SNK NeoGeo 中英文名字与驱动对照表

Part.I 简介 本文列举了街机 NeoGeo 中游戏的中英文名字与其驱动的对照,以帮助诸位更快地找到自己想玩的游戏。 注意:汉化版的街机模拟器 Kawaks 中游戏的中文名字是根据英文直译的,并不是习惯性的中文叫法。比如『三国志』英文名为『Warrio…

深度学习5从0到1理解RNN(包括LTSM,GRU等):内容丰富(上)

循环神经网络(Recurrent Neural Network, RNN) 是一种经典的深度学习网络结构,具有广泛的应用。其中,槽填充(Slot Filling)(即识别自然语言中的特定信息) 是其中一个应用场景&#x…

OpenSCAD 基础教程

OpenSCAD 基础教程 文章目录 OpenSCAD 基础教程1. 引言2. 安装与设置3. OpenSCAD 基本概念与语法3.1 基础形状3.2 变换操作3.4 布尔运算3.4 控制流3.5 特殊功能 4. 实践案例:创建一个简单的机械部件5. 高级技巧6. 导出与3D打印7. 常见问题与解决方案8. 结语 1. 引言…

虚拟机的安装-详细教程

目录 新建虚拟机 选择典型 安装操作系统 选择CentOS7 64位版本 虚拟机存放位置 磁盘容量 完成 编辑虚拟机 修改内存大小 设置处理器个数 选择镜像 开启虚拟机 进入界面,回车 选择语言 安装类型 磁盘分区 开启网络 设置密码和用户 重启 接受许可…

python进阶篇-day07-进程与线程

day06进程与线程 一. 进程 每个软件都可以看作是一个进程(数据隔离) 软件内的多个任务可以看作是多个线程(数据共享) 单核CPU: 宏观并行, 微观并发 真正的并行必须有多核CPU 多任务介绍 概述 多任务指的是, 多个任务"同时"执行 目的 节约资源, 充分利用CPU资源, …

unreal engine 5.4.4 runtime 使用PCG

Unreal PCG Runtime runtime环境下控制PCG PCG Graph 这里简单的在landscape上Spawn Static Mesh 和 Spawn Actor GraphSetting 自定义的参数,方便修改 场景 这里新建了一个蓝图Actor PCG_Ctrl, 用来runtime的时候控制PCG生成 Construct 获取场景中的PCGVolum…

开源还是封闭?人工智能的两难选择

这篇文章于 2024 年 7 月 29 日首次出现在 The New Stack 上。人工智能正处于软件行业的完美风暴中,现在马克扎克伯格 (Mark Zuckerberg) 正在呼吁开源 AI。 关于如何控制 AI 的三个强大观点正在发生碰撞: 1 . 所有 AI 都应该是开…

易保全出席人工智能应用场景高峰论坛,发布AI-数据资产管理平台2.0应用成果

2024年9月5日,由上海合作组织国家多功能经贸平台、重庆市科技发展基金会指导,重庆市渝中区商务委员会等相关部门主办、华智未来(重庆)科技有限公司承办,重庆民营经济国际合作商会协办的“智驭未来创想无界人工智能应用场景高峰论坛暨成果发布…

区块链-P2P(八)

前言 P2P网络(Peer-to-Peer Network)是一种点对点的网络结构,它没有中心化的服务器或者管理者,所有节点都是平等的。在P2P网络中,每个节点都可以既是客户端也是服务端,这种网络结构的优点是去中心化、可扩展…

linux(ubuntu)安装QT-ros插件

Linux下的qt安装ros插件 查看qt版本和对应的ros插件版本查看qt版本查看 qt creator 版本 qt creator进行更新升级下载版本对应的ros_qtc_plugin 插件插件安装安装成功 查看qt版本和对应的ros插件版本 想要qt与ros联合开发,我门需要在qt creator中添加ros的插件&…

Docker Hub 仓库国内无法拉取镜像,如何应对?

Docker Hub 仓库国内无法拉取镜像,如何应对? 描述:早上起来发现交流群中有童鞋在说无法在Docker Hub中正常拉取镜像,然后在公司的服务器上拉取最新的nginx:latest镜像发现确实无法拉取。 注册一个阿里云账户 由于前面作者发布过两篇同步国外…