Advanced RAG 01:讨论未经优化的 RAG 系统存在的问题与挑战

编者按: 自 2023 年以来,RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能严重依赖RAG,优化其性能、提高检索效率和准确性迫在眉睫,成为当前 RAG 相关研究的核心问题。

我们今天为大家带来的这篇文章指出,Naive RAG 在编制索引、检索和内容生成这三个核心步骤中都存在诸多问题:a) 编制索引时,信息提取不完整、分块策略简单、索引结构未优化、嵌入模型表示能力较弱;b) 检索时,检索到的信息与用户向系统提出的请求相关性不高、召回率低、对不准确的用户请求无法处理、算法单一、存在上下文信息冗余;c) 内容生成时,上下文整合不佳、过度依赖检索信息、存在生成错误/不当内容的风险。

这篇文章指出了当前 Naive RAG 系统的种种缺陷,为下一步的优化措施和解决方案指明了方向,对提升 RAG 在实际应用中的效率和准确性具有重要意义。

作者 | Florian June

编译 | 岳扬

🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~

检索增强生成(Retrieval Augmented Generation,RAG)是通过整合来自外部知识源的额外信息来改进大语言模型(Large Language Models,LLMs)应用能力的一种技术。这种技术能够帮助 LLMs 产生更精确和更能感知上下文的回复,同时也能减轻幻觉现象。

自 2023 年以来,RAG 已成为基于 LLM 的软件系统中最受欢迎的架构。许多产品的功能都严重依赖 RAG 。因此,优化 RAG 的性能,使检索过程更快、结果更准确,已成为一个关键问题。

这一系列文章将重点介绍 RAG 优化技术,帮助读者提升 RAG 生成结果的整体质量。

01 简单介绍 Naive(未经过优化的)RAG

如图 1 所示,未经优化的 RAG 工作流程如下:

图 1:未经优化的 RAG 经典工作流程。Image by author。

如图 1 所示,RAG 的经典工作流程主要包括以下三个步骤:

  1. 编制索引(Indexing) :索引的编制过程是该流程中最先执行的、较为关键的步骤,这个步骤是在离线状态下执行的。首先,对原始数据进行清理和提取,将 PDF、HTML 和 Word 等各种文件格式转换为标准化的纯文本。为了适应语言模型的上下文限制,这些文本被分成更小、更易于管理的块,这一过程被称为分块(chunking)。随后,使用嵌入模型(embedding models)将这些块转换为向量表征(vector representations)。最后,创建一个索引,以键值对的形式存储这些文本块(text chunks)及其向量嵌入(vector embeddings),从而实现高效且可扩展的搜索能力。
  2. 检索(Retrieval) :user query(译者注:指用户输入到 RAG 系统的问题)被用于从外部知识源(external knowledge sources)中检索相关的上下文。为了实现这一点,user query 需要经过编码模型(encoding model)处理,生成语义相关的嵌入。然后,在向量数据库**上进行相似度搜索(similarity search),以检索出前 k 个最接近的数据对象(data objects)。
  3. 内容生成(Generation) :user query 和检索到的附加上下文填入一个 prompt 模板中。最后,将来自检索步骤的增强 prompt (译者注:包含用户请求内容和检索上下文的prompt)输入到 LLM 中。

02 使用 Naive RAG 存在的问题

图 2:Naive RAG 存在的问题(用红色虚线框标出)。Image by author。

如图 2 所示,Naive RAG 在上述三个步骤中都存在一些问题(用红色虚线框标出),有很大的优化空间。

2.1 编制索引(Indexing)

  • 信息提取过程不完整,因为它不能有效处理 PDF 等非结构化文件中的图像和表格中的有用信息。
  • 分块过程(chunking process)采取的是 “一刀切” 策略,而非根据不同文件类型的特点选择最佳策略。这导致每个文本片段都包含不完整的语义信息。此外,它也没有考虑到文本中已存在的重要细节,如文本中已有的标题。
  • 索引结构未经充分优化,导致检索功能低效。
  • 嵌入模型的语义表示能力较弱。

2.2 检索(Retrieval)

  • 从外部知识源检索到的信息与 user query 的相关性不高,并且所检索到的信息的准确率也较低。
  • 由于召回率(recall rate)低,无法检索到所有相关段落,从而影响了 LLMs 生成全面答案的能力。
  • 用户向系统提出的请求可能不准确,或者嵌入模型的语义表示能力可能较弱,导致无法检索到有价值的信息。
  • 检索算法是受限制的,因为它没有结合不同类型的检索方法或算法,如关键词、语义和向量检索(keyword, semantic, and vector retrieval)的组合。
  • 当检索到的多个上下文包含相似信息时,会出现信息冗余,导致生成的答案中出现重复内容。

2.3 内容生成(Generation)

  • 可能无法将检索到的上下文与当前的生成任务有效整合,从而导致输出结果不一致。
  • 在生成过程中过度依赖 enhanced information(译者注:指的是从外部知识源检索到的、与当前生成任务相关联的额外信息)的风险很高。可能导致生成的内容只是重复输出检索到的内容,而没有提供有价值的信息。
  • LLM 可能会生成不正确的、不相关的、不当的或有偏见的回复。

需要注意的是,导致这些问题出现的原因可能是多方面的。例如,如果给用户的最终回复包含不相关的内容,这可能不完全是 LLM 的问题。其根本原因可能是从 PDF 中不能精确地提取文档内容,或者嵌入模型无法准确捕捉语义,等等。

03 Conclusion

本文主要介绍 Naive RAG 中存在的问题。

后续文章将提供缓解这些问题的措施和解决方案,帮助改善 RAG 的性能,使其在实际应用中更加有效地帮助大家解决问题。

如果本文有任何错误或遗漏,敬请指出。

Thanks for reading!

——

Florian June

An artificial intelligence researcher, mainly write articles about Large Language Models, data structures and algorithms, and NLP.

END

本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。

原文链接:

https://ai.plainenglish.io/advanced-rag-part-01-problems-of-naive-rag-7e5f8ebb68d5

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

齐护机器人方位传感器指南针罗盘陀螺仪

一、方位传感器原理及功能说明 齐护方位传感器是一款集成了三轴磁传感器芯片的方位传感器模块。适用于无人机、机器人、移动和个人手持设备中的罗盘(指南针)、导航和游戏等高精度应用。模块可以感应XYZ平面角度外,还可实现1至2的水平面角度罗…

基于springboot+vue+Mysql的大学生租房系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

目标追踪StrongSORT——基于DeepSORT重大升级提高多目标跟踪的准确性和鲁棒性

1、概述 1.1 DeepSORT DeepSORT算法是在SORT基础上发展起来的一种多目标跟踪算法。SORT算法结合了目标检测器和跟踪器,其中跟踪器的核心是卡尔曼滤波和匈牙利算法。卡尔曼滤波用于预测目标在下一帧的位置和状态,而匈牙利算法则用于将预测状态与实际检测…

vue 视频添加水印

1.需求背景 其实腾讯云点播的api也支持视频水印,但是只有单个水印,大概效果是这样子的,不满足我们的需求,我们的需求是需要视频中都是水印。 腾讯云点播水印 项目需求的水印(主要是防录屏,最后的实现效果是这样&…

APK安装包与系统不兼容 请尝试安装与当前系统兼容的安装包 SDK编译版本低

安装一些低版本SDK编译或者老版本的软件时提醒无法安装但是又想要使用,这种情况下也能安装。 系统安装包管理器的提示 两种解决方案 第一种无需 Root 通过 ADB 给 Shizuku 授权, 打开 Shizuku 再授权 MT 文件管理器直接安装或者其他安装包管理器安装…

考研人千万不能犯的错误——什么情况下求极限可以直接带入值?

博主最近在复习考研的过程中,做了武忠祥老师的每日一题发现有一个题型错的很集中,就是关于极限数值带入的问题,相信也有不少的宝子容易在这种题型上犯错,今天带大家梳理总结一下常见的计算极限时容易犯的错误 极限的四则运算定义…

Prometheus+grafana环境搭建MongoDB(docker+二进制两种方式安装)(五)

由于所有组件写一篇幅过长,所以每个组件分一篇方便查看,前四篇mongodb的exporter坑也挺多总结一下各种安装方式,方便后续考古。 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabb…

Flutter仿Boss-4.短信验证码界面

效果 简述 在移动应用开发中,处理短信验证码是确保用户身份验证和安全性的重要步骤。本文将介绍如何使用Flutter构建一个短信验证码界面,让用户输入通过短信发送到他们手机的四位验证码。 依赖项 在这个项目中,我们将使用以下依赖项&#…

4.4C++

1 #include <iostream> #include <cmath> using namespace std; class A{ private:int a;// 判断一个数是否为质数bool isP(int num) {if (num<2) return false;for (int i2;i<sqrt(num);i) {if (num % i 0) {return false;}}return true;} public:// 构造…

QT----opencv4.8.0编译cuda版本,QTcreater使用

目录 1 编译opencv4.8.02 验证能否加载GPU cuda12.1 opencv4.8.0 vs2019 cmake3.29 1 编译opencv4.8.0 打开cmake&#xff0c;选择opencv480路径&#xff0c;build路径随意 点击configure后&#xff0c;选择这些选项&#xff0c;opencv_word&#xff0c;cuda全选&#xff0c;…

matlab中角度-弧度转化

在 MATLAB 中进行角度和弧度之间的转换可以使用内置的函数&#xff1a; 1. 将角度转换为弧度&#xff1a; matlab rad deg * pi / 180; 这里 deg 是你想要转换的角度值&#xff0c;pi 是 MATLAB 内置的圆周率常量。 2. 将弧度转换为角度&#xff1a; matlab…

MySQL索引失效的几种情况

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 借助 explain 执行计划来分析索引失效的具体场景。explain 使用如下,只需…