当前位置:   article > 正文

从 RAG 到 GraphRAG:利用知识图谱转变信息检索_graphrag的原理

graphrag的原理

在人工智能领域,追求更精确和上下文相关的信息检索技术已取得显著进展。其中一项进化是从检索增强生成(Retrieval-Augmented Generation,简称RAG)到GraphRAG的转变,这一概念在近期微软博客文章中有详细阐述。让我们探讨RAG是什么,它的优势,以及为何需要向GraphRAG过渡。

什么是RAG?

检索增强生成(RAG)是一种自然语言查询方法,旨在通过外部知识增强大型语言模型(LLM)的能力。其工作原理如下:

  1. 数据收集: 从数据库、网站、文件等多种来源收集相关文档或信息。

  2. 数据分块: 将收集到的数据分割成更小、更易于处理的数据块。

  3. 文档嵌入: 将每个数据块转换为表示其语义意义的向量(嵌入)。

  4. 查询嵌入: 将用户的查询转换为向量格式,以捕捉其语义本质。

  5. 相似度匹配: 比较查询向量与文档向量,找出最相关的数据块。

  6. 响应生成: 利用语言模型根据检索到的数据块生成连贯且上下文准确的响应。

通过这些步骤,RAG有效地结合了检索和生成技术,提高了响应的准确性和相关性,使其成为多种应用的强大工具。

GraphRAG的必要性

尽管RAG显著提升了LLM的性能,但在处理复杂查询和大型数据集方面仍有改进空间。这促使了GraphRAG的开发,它在RAG的基础上构建,但引入了更复杂的索引和检索方法。

GraphRAG 简介:

GraphRAG 在 RAG 概念的基础上更进一步,引入了一个两步流程,该流程利用从大型语言模型(LLMs)中提取的知识图谱。以下是 GraphRAG 的工作原理:

第一步:基于知识图谱的索引

GraphRAG 的第一步是从私有数据中创建由 LLM 衍生的知识图谱。这些知识图谱作为 LLM 的一种记忆表示形式,捕捉数据中的语义关系。这种丰富的表示形式使得后续步骤中的信息检索更加有效。

第二步:LLM 编排

在第二步中,利用预构建的索引(知识图谱)来编排大型语言模型(LLMs)。这种编排机制通过利用知识图谱来增强检索增强生成(RAG)操作,从而实现更准确和上下文相关的结果。

GraphRAG的关键差异化优势

GraphRAG提供了多项优势,使其与传统的RAG方法区别开来:

  1. 提升搜索相关性:通过全面理解整个数据集的语义,GraphRAG提高了搜索结果的相关性。

  2. 支持新型应用场景:它支持需要大上下文窗口的复杂场景,如整体数据集分析、趋势总结和数据聚合。

GraphRAG 的工作原理

要理解 GraphRAG,关键在于将其与基线 RAG 进行比较。在基线 RAG 中,私有数据集被分割成嵌入向量并存储在向量数据库中,通过执行最近邻搜索来扩充上下文窗口。

GraphRAG 沿用了这一流程,但增加了额外的推理层。以下是逐步分解:

  1. 文本分块与推理:使用相同的文本块,但大型语言模型(LLM)对数据集中的每个句子进行推理操作。

  2. 实体与关系抽取:命名实体识别(NER)识别文本中的实体,但 GraphRAG 更进一步,确定实体间的关系及其关系的强度。

  3. 知识图谱构建:抽取的关系形成一个知识图谱,包含节点(实体)和边(关系)。

示例:

  • 句子:“PO 负责人 Sylvia Mar 与 Save Our Wildlands 创始人 Luo Jack 同台亮相。”

  • GraphRAG 识别出 Sylvia Mar 与 PO 的强关联(她是负责人)以及与 Save Our Wildlands 的弱关联(虽同台但非负责人)。

这种更深层次的理解使得 GraphRAG 能够创建加权图,超越传统 NER 的共现网络,实现更丰富的语义分析。

RAG系统对比:

  • 基线RAG:在处理特定查询时表现不佳,往往无法提供全面的答案。

  • 改进型RAG:通过调优和提示工程性能有所提升,但在复杂查询中仍缺乏深度。

  • GraphRAG:通过利用知识图谱提供详细且准确的回答,在丰富上下文和精确信息检索方面表现出色。

构建与利用知识图谱

知识图谱一旦创建,便可实现高级功能:

  1. 图机器学习:可在图谱上进行语义聚合和层次聚类,生成带标签的结构,实现细粒度筛选和查询。

  2. 多样的终端应用场景:知识图谱可应用于多种场景,包括数据集问题生成、摘要提取及问答系统等。

代码实现:

让我们逐步了解 GraphRAG 应用场景,该场景利用了包含《儿童保育提供者疾病手册》信息的医疗文档。该手册提供了关于在儿童保育环境中预防、管理和报告传染病疾病的全面细节。我们还将使用一个基本的 RAG 系统来比较每个系统的响应。

pip install llama-index  
pip install llama-index-llms-openai  
pip install langchain  
  

  • 1
  • 2
  • 3
  • 4
  • 5

导入库:

import os  
from llama_index.core import (KnowledgeGraphIndex,ServiceContext,SimpleDirectoryReader)  
from llama_index.core.indices.vector_store.base import VectorStoreIndex  
from llama_index.core import Settings  
from llama_index.llms.openai import OpenAI  
from llama_index.core.graph_stores import SimpleGraphStore  
from llama_index.core import StorageContext  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

预处理数据与定义LLM:

documents = SimpleDirectoryReader(input_files=["disease-handbook-complete.pdf"]).load_data()  

  • 1
  • 2
llm = OpenAI(temperature=0, model="gpt-4-turbo",api_key=API_KEY)  
Settings.llm = llm  
Settings.chunk_size = 512  
service_context = ServiceContext.from_defaults(llm=llm, chunk_size=512)  
  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

构建知识图谱

知识图谱是通过使用LLM创建的。这一过程借助了LlamaIndex中的KnowledgeGraphIndex,该索引利用LLM提取实体及其关系,然后将它们存储在SimpleGraphStore()中。

graph_store = SimpleGraphStore()  
storage_context = StorageContext.from_defaults(graph_store=graph_store)  
  
kg_index = KnowledgeGraphIndex.from_documents(  
    documents,  
    max_triplets_per_chunk=2,  
    storage_context=storage_context,  
    service_context=service_context)  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

设置用于检索增强生成(RAG)的 VectorStoreIndex:

为了与基于向量数据库的RAG对比,我们还将建立一个VectorStoreIndex。在其设置过程中,相同的数据源将被分割成块,并创建它们的嵌入表示。在RAG查询时,将使用查询的嵌入表示通过向量搜索找到最相关的top-k嵌入。

vector_index = VectorStoreIndex.from_documents(  
    documents,  
    service_context=service_context  
)  

  • 1
  • 2
  • 3
  • 4
  • 5

保存和加载Llama索引到磁盘

知识图谱索引(KnowledgeGraphIndex)和向量存储索引(VectorStoreIndex)一旦创建,其内存中的上下文可以保存到磁盘,以便随时重新加载和重用。

dir_vector= folder_path_vector  
dir_graph= folder_path_graph  
kg_index.storage_context.persist(persist_dir=dir_graph)  
vector_index.storage_context.persist(persist_dir=dir_vector)  

  • 1
  • 2
  • 3
  • 4
  • 5

从磁盘恢复索引

这使我们能够按如下方式从磁盘恢复索引:

from llama_index.core import load_index_from_storage  
  
storage_context = StorageContext.from_defaults(persist_dir=dir_graph, graph_store=graph_store)  
kg_index = load_index_from_storage(  
    storage_context=storage_context,  
    service_context=service_context,  
    max_triplets_per_chunk=10,  
    include_embeddings=True,  
)  
  
storage_context_vector = StorageContext.from_defaults(persist_dir=dir_vector)  
vector_index = load_index_from_storage(  
    service_context=service_context,  
    storage_context=storage_context_vector)  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

RAG查询引擎设置:

Vector RAG 找到与查询语义相关的最相关的 top-k 文档块,作为合成答案的上下文,而 GraphRAG 则使用与任务或问题中的实体相关的子图作为上下文。

kg_rag_query_engine = kg_index.as_query_engine(  
    include_text=False,  
    retriever_mode="keyword",  
    response_mode="tree_summarize",  
)  
vector_rag_query_engine = vector_index.as_query_engine()  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

RAG 引擎查询

让我们尝试向每个引擎提出多个问题,并分析它们的性能。目前,我们先尝试以下问题:

在托儿所环境中,应采取哪些措施来预防结膜炎(红眼病)的传播?

使用GraphRAG进行查询

result_graph_rag = kg_rag_query_engine.query("在托儿所环境中,应采取哪些步骤来预防结膜炎(红眼病)的传播?")  
  

  • 1
  • 2
  • 3

响应:

使用RAG进行查询

result_vector_rag = vector_rag_query_engine.query("在托儿所环境中,应采取哪些步骤来预防结膜炎(红眼病)的传播?")  

  • 1
  • 2

回复:

来自两份回复的观察

为了评估GraphRAG和Vector Rag的回复,我们需要比较它们提供的预防儿童保育环境中结膜炎传播步骤的全面性、准确性和综合性。

比较:

全面性:

  • GraphRAG的回复提供了更广泛的预防措施,涵盖了手卫生、避免眼部接触、不共用个人物品、清洁表面、对员工和家长进行教育、隔离有症状的儿童以及咨询医疗保健提供者。

  • Vector Rag的回复主要集中在与洗涤物品、洗手和为每个孩子使用单独物品相关的卫生实践上,但没有提及其他预防措施,如教育员工和家长、隔离有症状的儿童或咨询医疗保健提供者。

准确性:

  • 两份回复的建议都是准确的,但GraphRAG包含了Vector Rag未提及的一些重要步骤。

综合性:

  • GraphRAG更为全面,涉及了更广泛的预防措施,以防止结膜炎的传播。

  • Vector Rag相对不够全面,更侧重于特定的卫生实践,而未涉及一些更广泛的预防措施。

问题-回复比较表

GraphRAG的回复更优,因为它提供了一套更全面和综合的步骤,涵盖了更广泛的预防行动,并确保了在儿童保育环境中管理结膜炎的全面方法。

结论

从RAG到GraphRAG的演进标志着利用大型语言模型进行信息检索和生成的重大里程碑。通过利用LLM衍生的知识图谱,GraphRAG不仅提高了搜索结果的相关性,还开启了复杂数据分析和上下文理解的新可能性。这种先进的方法使得对数据的更细致和互联的理解成为可能,为更准确和深入的AI驱动解决方案铺平了道路。随着我们继续利用GraphRAG的力量,我们正逐步接近解锁AI在转变我们与庞大数据集交互和从中获取洞察力方面的全部潜力。

如何学习大模型 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%免费

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/874594
推荐阅读
相关标签
  

闽ICP备14008679号