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

2024-09-05 16:20
文章标签 使用 llm 图谱 知识 提升 rag

本文主要是介绍提升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 HtmlLinkEdgeExtractorhtml_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 KeyBERTdoc = """Supervised learning is the machine learning task of learning a function thatmaps an input to an output based on example input-output pairs. It infers afunction 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 thealgorithm to correctly determine the class labels for unseen instances. This requiresthe 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 HtmlLinkEdgeExtractormarkdown_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大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

这篇关于提升LLM结果:何时使用知识图谱RAG的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java架构师知识体认识

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

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

sqlite3 相关知识

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

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的