当前位置: 首页 > article >正文

RAG(检索增强生成)原理、实现与评测方法探讨

RAG是什么?

    看一下RAG的英文全称:Retrieval-Augmented Generation,建索、增强、生成;一句话串起来就是通过检索增强模型的生成,是的,这就是RAG。

RAG怎么做?

    目前比较通用的套路是这样的:

    离线数据准备:数据提取->数据切片->创建索引->embedding->落库。

    解释一下embedding:嵌入,它其实就是将高维度的,复杂的、通常是离散的数据(比如文本、图像、音频等)转换为低维度的、连续的向量表示的过程。这些向量表示具有语义上的相似性,意味着在向量空间中,相似的对象会被映射到相近的向量。

在线查询:query->embedding query ->向量检索->送给大模型->LLM归纳生成

当然根据实际业务场景,有各种各样的变体,如:

变体1:在线查询:query->embedding query->向量检索->rank->送给大模型->LLM归纳生成

变体2:在线查询:query->意图识别->embedding query->向量检索->切块->emdedding->rank->送给大模型->LLM归纳生成

变体3:在线查询:query->意图识别->大模型丰富问题->embedding query->向量检索->切块->emdedding->rank->送给大模型->LLM归纳生成

。。。

大家都在根据自己的实际情况在不断的调整rag的策略,上述的每一个环节都有大量的工作值得探索,比如切块、向量检索、rank等等,后面有机会逐步聊一下

RAG(检索增强)评测

今天主要聊一下RAG(大模型检索增强)的评测。

大家一直都在尝试用RAG来解决模型幻觉、数据实效性、数据保密性等等问题,但是RAG作为模型推理中间的一环,如何来评测RAG(检索增强)的有效性值得研究一下。

当然我们期望理论上模型足够强大可以自己从RAG结果中提取有效信息来推理,甚至模型不需要RAG会更好

RAG简单来说其实就是检索相关信息给到大模型,所以很直观的感受是,要评价RAG结果的有效性可以考虑传统检索或推荐系统中召回、排序等相关指标(召回率、精准率、MRR、NDCG等等)有关这些指标的原理大家自行了解一下,后面有机会也可以简单聊一下

要计算这些指标不可避免的需要知道,每次检索到的信息是否相关,以及相关的信息排序是否合理,这些都决定了最终给到大模型的信息是否更有意义,更能帮助到大模型推理

但是如何判断检索到的信息是否相关呢?embedding虽然提供了各种策略、算法,但是embedding后的结果并不一定就是相关的,向量化后可能因为各种原因导致原本不相关的两个text向量是接近的,所以才需要我们来评测。

目前了解到2种方式来做测评:

1、将query和查到的相关信息给到gpt4,让gpt4来评测;

2、人为打标数据,划定数据集及相关性,然后通过脚本对比

我们使用的第二种方式。我们的处理方式大体是这样:

1、首先将原始数据切块

2、然后选择各种场景下的用户提问

3、然后将原始切块进行标注,标记这些块中哪些和用户提问时相关的

4、实时query结果保存下来,然后和标注数据进行对比

5、计算RAG(检索增强)的召回率、精准率等

如何切块也是我们重点评测的一部分,通过数据标记,我们测试不同chunk size下各种指标来评估我们的RAG效果。


http://www.kler.cn/a/563942.html

相关文章:

  • Pytorch使用手册-音频 I/O(专题十八)
  • pycharm 创建数据库 以及增删改查
  • Java中的缓存技术:Guava Cache vs Caffeine vs Redis
  • 火狐浏览器多开指南:独立窗口独立IP教程
  • 蓝桥杯备赛-拔河
  • Brave 132 编译指南 Android 篇 - 项目结构 (二)
  • Java 大视界 -- 基于 Java 的大数据机器学习模型压缩与部署优化(99)
  • Redis Lua Script 溢出漏洞(CVE-2024-31449)
  • AI数字人开发,引领科技新潮流
  • 防火墙各项指标代表什么意思
  • CCNP知识笔记
  • Web网页开发——水果忍者
  • Python高并发原理与实战解决方案指南
  • Oracle23版本 创建用户 报 00959和65096错误解决办法
  • 【mysql中mvcc的含义和作用及原理】
  • k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?
  • Protobuf
  • 取topN不同算法的实现的性能差别
  • 记录一下在k3s快速创建gitlab
  • C++ Qt常见面试题(2):QT中的文件流(QTextStream)和数据流(QDataStream)的区别