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效果。