《Advanced RAG》-01-朴素RAG存在的问题

news2024/9/22 15:27:10

摘要

文章阐述了RAG技术如何通过整合外部知识源来提升大型语言模型(LLM)的性能,使其能够产生更精确、上下文感知的回应,并减少幻觉现象。

自2023年以来,RAG已成为基于LLM的系统中最流行的架构,许多产品依赖此技术。然而,RAG在信息检索、上下文整合等方面存在问题,如信息提取不完整分块策略不合适索引结构不足优化检索过程中的准确性召回率不高生成过程中的信息冗余输出不一致等。

文章通过对比图表,展示了RAG的工作流程和存在的问题,并强调了优化RAG性能的重要性。最后,文章提到接下来的文章将提供解决这些问题的措施,以提高RAG的有效性。

作者观点

  1. RAG技术能够提升LLM的性能,生成更准确和上下文相关的回答。
  2. RAG面临的问题包括信息提取的不完整性、分块策略的一刀切、索引结构的低效、检索过程的低相关性和准确性、生成过程中的过度依赖增强信息等。
  3. 优化RAG的关键在于改进每个步骤,包括编制索引、检索和生成,以提高整体性能。
  4. 文章认为,通过采取措施改进RAG的缺陷,不仅能提升系统的生成效果,还能为未来的研究和应用提供新的方向。

检索增强生成(RAG)是通过整合外部知识源的附加信息来改进大型语言模型(LLM)的过程。这样,大型语言模型就能做出更精确、更能感知上下文的反应,同时还能减少幻觉。

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

朴素RAG概览

图 1 展示了天真 RAG 的典型工作流程。

图 1:天真 RAG 的典型工作流程。图片由作者提供。

如图 1 所示,RAG 主要包括以下步骤:

  • 索引:索引化过程是一项关键的离线初始步骤。
    • 从原始数据的清理和提取开始,将各种文件格式(如PDF、HTML和Word)转换为标准化的纯文本。
    • 为了适应语言模型的上下文约束,这些文本被分割成更小更易管理的块,即所谓的分块过程。这些块然后使用Embedding模型转换为向量表示。
    • 最后,创建索引将这些文本块及其向量嵌入作为键值对存储,从而实现高效可扩展的搜索能力。
  • 检索:从外部知识源检索相关上下文。
    • 为实现这一目标,用户查询由Embedding模型处理,生成语义相关的嵌入。
    • 然后,在向量数据库上进行相似性搜索,以检索出TopK个最接近的数据对象。
  • 生成:用户查询和检索到的上下文数据填充到提示模板中。最后,从检索步骤得到的增强提示输入到LLM中图。

朴素RAG中的使用问题

图 2:Naive RAG 存在问题(红色虚线框)。图片由作者提供。

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

索引过程问题(Index)

  1. 信息提取不完整,无法有效处理PDF等非结构化文件中图片和表格中的有用信息。
  2. 分块过程采用“一刀切”策略,而非根据不同文件类型特征选择最佳策略。导致每个块包含不完整的语义信息。此外,未考虑文本中现有的标题等重要细节。
  3. 索引结构未经充分优化,导致检索功能效率低下。
  4. 嵌入模型的语义表示能力较弱。

检索过程问题(Retrieval)

  1. 检索到的上下文相关性不足,准确性低,容易收到其他文件片段的影响。
  2. 低召回率阻碍了检索到所有相关段落的能力,从而影响了LLMs生成全面答案的能力。
  3. 查询可能不准确或嵌入模型的语义表示能力较弱,导致无法检索到有价值的信息。
  4. 检索算法受限,因为未结合不同类型的检索方法或算法,如关键词、语义和向量检索的结合。
  5. 多个检索到的上下文包含类似信息时,会出现信息冗余,导致生成答案中内容重复。

生成过程问题(Generation)

  1. 无法有效地将检索到的上下文与当前生成任务整合,导致输出不一致。
  2. 在生成过程中过度依赖增强信息存在较高风险。这可能导致输出简单重复检索到的内容,而未提供有价值的信息。
  3. LLM可能会生成不正确、不相关、有害或带有偏见的响应。

请注意,这些问题的原因可能是多方面的。

例如,如果向用户最终提供的响应包含不相关内容,可能不仅仅是LLM问题。根本原因可能是从PDF中不精确提取文档或嵌入模型无法准确捕捉语义等等。

结论

本文介绍了朴素RAG存在的问题。

本系列的下一部分将提供缓解这些问题并增强RAG效果的措施或解决方案。

此文为翻译,原文地址:Advanced RAG 01: Problems of Naive RAG

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

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

相关文章

一文彻底搞懂Fine-tuning - 预训练和微调(Pre-training vs Fine-tuning)

最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解…

推荐算法学习记录2.2——kaggle数据集的动漫电影数据集推荐算法实践——基于内容的推荐算法、协同过滤推荐

1、基于内容的推荐: 这种方法根据项的相关信息(如描述信息、标签等)和用户对项的操作行为(如评论、收藏、点赞等)来构建推荐算法模型。它可以直接利用物品的内容特征进行推荐,适用于内容较为丰富的场景。‌…

VBA学习(22):动态显示日历

这是在ozgrid.com论坛上看到的一个贴子,很有意思,本来使用公式是可以很方便在工作表中实现日历显示的,但提问者因其需要,想使用VBA实现动态显示日历,即根据输入的年份和月份在工作表中显示日历。 下面是实现该效果的VB…

web、nginx

一、web基本概念和常识 ■ Web:为用户提供的一种在互联网上浏览信息的服务,Web服务是动态的、可交互的、跨平台的和图形化的。 ■ Web 服务为用户提供各种互联网服务,这些服务包括信息浏览服务,以及各种交互式服务,包括聊天、购物、学习等等内容。 ■ Web 应用开发也经过了几…

C#中计算矩阵(数学库下载和安装)

1、一步步建立一个C#项目 一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客文章浏览阅读1.7k次,点赞2次,收藏4次。这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先…

如何解决C#字典的线程安全问题

前言 我们在上位机软件开发过程中经常需要使用字典这个数据结构,并且经常会在多线程环境中使用字典,如果使用常规的Dictionary就会出现各种异常,本文就是详细介绍如何在多线程环境中使用字典来解决线程安全问题。 1、非线程安全举例 Dictio…

文件搜索 36

删除文件 文件搜索 package File;import java.io.File;public class file3 {public static void main(String[] args) {search(new File("D :/"), "qq");}/*** 去目录搜索文件* param dir 目录* param filename 要搜索的文件名称*/public static void sear…

探索Prefect:Python自动化的终极武器

文章目录 探索Prefect:Python自动化的终极武器背景:自动化的呼唤Prefect:自动化的瑞士军刀安装Prefect:一键启动基础用法:Prefect的五招场景应用:Prefect的实战演练常见问题:Prefect的故障排除总…

字节一面面经

1.redis了解吗,是解决什么问题的,redis的应用? Redis 是一种基于内存的数据库,常用的数据结构有string、hash、list、set、zset这五种,对数据的读写操作都是在内存中完成。因此读写速度非常快,常用于缓存&…

IDEA的疑难杂症

注意idea版本是否与maven版本兼容 2019idea与maven3.6以上不兼容 IDEA无法启动 打开idea下载安装的目录:如:Idea\IntelliJ IDEA 2024.1\bin 在bin下面找到 打开在最后一行添加暂停 pause 之后双击运行idea.bat 提示找不到一个jar包,…

MyBatis 框架的两大缺点及解决方案

MyBatis 框架的两大缺点及解决方案 1. SQL 编写负担重1.1 缺点概述1.2 解决方案 2. 数据库移植性差2.1 缺点概述2.2 解决方案 💖The Begin💖点点关注,收藏不迷路💖 MyBatis 作为一款广受欢迎的 Java 持久层框架,尽管其…

ssh 显示图形化界面 Error: Can‘t open display

在客户端(你自己的电脑,不是服务器)安装 VcXsrv 直接从 github 上下载 https://github.com/marchaesen/vcxsrv/releases,或者使用 winget 命令 winget install -i vcxsrv在服务器上 ~/.zshrc 中(或 ~/.bashrc&#xf…

【ubuntu系统】在虚拟机内安装Ubuntu

Ubuntu系统装机 描述新装机后的常规配置, 虚拟机使用vbox terminal 打不开 CTRL ALT F3 进入命令行模式(需要返回桌面时CTRL ALT F1)root用户登入cd /etc/default vi locale LANG“en_US” 改成 LANG“en_US.UTF-8”保存修改后&…

YOLOV8替换Lion优化器

YOLOV8替换Lion优化器 1 优化器介绍博客 参考bilibili讲解视频 论文地址:https://arxiv.org/abs/2302.06675 代码地址:https://github.com/google/automl/blob/master/lion/lion_pytorch.py """PyTorch implementation of the Lion …

linux 上源码编译安装 PolarDB-X

PolarDB-X 简介 PolarDB-X 是一款面向超高并发、海量存储、复杂查询场景设计的云原生分布式数据库系统。其采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等…

CTF-web基础 HTTP协议

基础 HTTPHypertext Transfer Protocol 超文本链接协议,他是无状态的(每一次请求都是独立的),发出request发给服务器然后返回responce,现在的版本是1.1版本,默认端口80(https是443)…

ubuntu上安装HBase伪分布式-2024年08月04日

ubuntu上安装HBase伪分布式-2024年08月04日 1.HBase介绍2.HBase与Hadoop的关系3.安装前言4.下载及安装5.单机配置6.伪分布式配置 1.HBase介绍 HBase是一个开源的非关系型数据库,它基于Google的Bigtable设计,用于支持对大型数据集的实时读写访问。HBase有…

rust读取csv文件,匹配搜索字符

1.代码 use std::fs::File; use std::io::{BufRead, BufReader}; use regex::{Regex};fn main() {let f File::open("F:\\0-X-RUST\\1-systematic\\ch2-fileRead\\data\\test.csv").unwrap();let mut reader BufReader::new(f);let re Regex::new("45asd&qu…

Stable Diffusion绘画 | 文生图-采样器使用说明

webui 1.9.3版本中,采样器分为“采样方法”、“调度类型”两个选项。 因为采样器选项多,所以需要做一个筛选,保留图像生成效果好的采样器。 老派采样器 可以选择砍掉的采样器: DDIMPLMS 最为推荐保留的采样器: Eul…

Python 实现股票指标计算——LON

LON - 铁龙长线 1 公式 LC : REF(CLOSE,1); VID : SUM(VOL,2)/(((HHV(HIGH,2)-LLV(LOW,2)))*100); RC : (CLOSE-LC)*VID; LONG : SUM(RC,0); DIFF : SMA(LONG,10,1); DEA : SMA(LONG,20,1); LON : DIFF-DEA; LONMA : MA(LON,10); LONT : LON, COLORSTICK; 2 数据准备…