大模型- 检索增强七宗罪

前言

地址:https://arxiv.org/pdf/2401.05856.pdf 标题:Seven Failure Points When Engineering a Retrieval Augmented Generation System

这篇论文介绍了如何设计一个检索增强生成系统(RAG),作者通过对三个不同领域的案例研究,总结了七个失败点并提出了相关建议。此外,作者还指出了验证RAG系统只能在运行期间完成以及其鲁棒性随时间推移而不断发展的两个关键要点。最后,作者列出了关于RAG系统的研究方向,以供软件工程社区参考。

问题

图片

RAG系统中,容易造成失败的7个点,已经在红色框中标出

FP1 缺失的内容

内容信息缺失情况下系统的无中生有,在询问不能从现有文档中回答的问题时。在理想情况下,RAG 系统会以“抱歉,我不知道”之类的拒绝响应。然而,对于与内容相关但没有答案的问题,系统可能无中生有。

FP2 高度相关的文档没有被找到

问题的答案在文档中,但排名没有高到足以返回给用户。在实践中,优化排序算法,并返回前K个文档。

FP3 不在上下文中 

数量限制,从数据库中检索到包含答案的文档,但因为返回的数量多,会出现没有进入生成答案的上下文。

FP4 没有提取出来

答案在上下文中给出,但大型语言模型未能正确提取出答案。通常这种情况发生在上下文中有太多噪音、后者存在矛盾的信息时。

FP5 格式错误 

问题涉及提取特定格式的信息,如表格或列表,而大型语言模型忽略了该说明。

FP6 特殊要求不正确 

满足不了特殊要求,回复过于笼统,答案在响应中返回了,但不够具体或太具体以满足用户的需求。当 RAG 系统设计者对给定的问题有期望的结果时,例如为学生提供教师。在这种情况下,应该提供特定的教育内容,而不仅仅是答案。

FP7 答案不完整

答案不一定是错误,但即使信息在上下文中且可以提取,仍然会遗漏一些信息。例如,“文件A、B和C中涵盖了哪些关键点?”这样的问题。更好的做法是分开问这些问题。


待研究的3个方向

  1. Chunking and Embedding(文档分块和表示)
    1. 文档分块,和表示学习,需求构建自己的迭代benchmark。小编建议:文档分块需要以分块大小、单分块知识覆盖率 两个指标来衡量分块的能力。Embedding 表示学习,需要构建Hitrate,或者 triple rank的指标,能够区分命中率,或者triple 元素之间的距离相对值

    2. 文档分块可以用一些启发式的方式,比如分段,标题进行分块,还可以结合块与块之间的语义距离进行切分。Embedding的学习,建议尽量在直接的数据集任务上进行FT,以便更加适配自己的任务。

  2. RAG 还是 Fine-tuning:小编建议都要结合,我们要RAG的方式,整合Input + Retireve 知识,构建prompt,积累需要SFT的数据,然后进行正对性的FT。

  3. 评估和监控RAG的系统:自己的benchmark非常重要,不然都是自己的感觉,采样几个case看看,难以精确的衡量哪些方面存在问题,以及问题的严重程度;多次FT之间的差异、他们的收益增量都需要有个benchmark来衡量。不然就是3板斧耍完之后,就感觉没有方向,没有思路了。

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

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

相关文章

【Android 性能优化:内存篇】——优化 GPU 内存的神秘方法

背景 笔者最近承接项目的内存优化工作,在预研的过程中发现一篇关于内存优化的文章 《优化安卓应用内存的神秘方法以及背后的原理,一般人我不告诉他》 里面介绍了一个方法 WindowManagerGlobal.getInstance().startTrimMemory(TRIM_MEMORY_COMPLETE);…

x86使用内敛汇编实现简单的临界段保护

临界资源保护 实现方法 禁用中断 __attribute__((used)) static inline uint32_t read_eflags (void){uint32_t eflags;ASM_V("pushf\n\tpop %%eax":"a"(eflags));return eflags; } __attribute__((used)) static inline void write_eflags (uint32_t e…

VMware虚拟机安装CentOS7

对于系统开发来说,开发者时常会需要涉及到不同的操作系统,比如Windows系统、Mac系统、Linux系统、Chrome OS系统、UNIX操作系统等。由于在同一台计算机上安装多个系统会占据我们大量的存储空间,所以虚拟机概念应运而生。本篇将介绍如何下载安…

代码随想录算法训练营|二叉树总结

二叉树的定义: struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int val):val(val),left(nullptr),right(nullptr){}TreeNode(int val,TreeNode* left,TreeNode* right):val(val),left(left),…

沁恒CH32V30X学习笔记00--芯片概述

芯片概述 资源 系统框图 V303时钟树 V305/V307时钟 RISC-V4F 处理器 单精度浮点运算 处理器内部以模块化管理, 包含快速可编程中断控制器(PFIC) 内存保护 分支预测模式 扩展指令支持等单元 小端数据模式 多级硬件中断堆栈&#

Vite 构建流程大揭秘:快速构建前端项目的秘密武器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

03 SS之返回JSON+UserDetail接口+基于数据库实现RBAC

1. 返回JSON 为什么要返回JSON 前后端分离成为企业应用开发中的主流,前后端分离通过json进行交互,登录成功和失败后不用页面跳转,而是给前端返回一段JSON提示, 前端根据JSON提示构建页面. 需求: 对于登录的各种状态 , 给前端返回JSON数据 …

php 函数(方法)、日期函数、static关键字

php 函数、日期函数 1. php函数2. 日期函数3. static 1. php函数 函数是一段可重复使用的代码块&#xff0c;可以将一系列操作封装起来&#xff0c;使代码更加模块化、可维护和可重用&#xff0c;来大大节省我们的开发时间和代码量&#xff0c;提高编程效率。 <?php// …

【机构vip教程】Charles(1):Charles的介绍及安装

Charles Charles 是在 Mac &#xff08;Charles是跨平台的 &#xff09;下常用的网络封包截取工具&#xff0c;在做移动开发、测试时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。Charles是一个HTTP代理服务器,HTTP监视器,反转代…

【机构内部教程】Jmeter性能测试【一】:性能测试全套教程

性能测试的概念 性能测试是指通过特定方式&#xff0c;对被测系统按照一定策略施加压力&#xff0c;获取系统 响应时间、TPS&#xff08;Transaction Per Second&#xff09;、吞吐量、资源利用率等性能指标&#xff0c;以期保证生产系统的性能能够满足用户需求的过程。 性能…

阿里云香港轻量应用服务器是什么线路?cn2?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…

字符设备驱动分步注册实现LED驱动的编写

头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;#define RCC 0x50000A28 #define LED1_ADDR 0x50006000 #defi…