一 : RAG解决的问题
1.1 LLM 的局限
幻觉
知识过期
推理过程不透明,不可追踪
1.2 RAG介绍
检索增强生成(RAG)是一种使用外部知识库辅助文本生成的技术。它结合了检索与生成,通过访问外部数据库检索得到有关的信息,把检索得到的信息与query合并为新的prompt,让LLM从包含外部信息的prompt中学习知识(in-context learning)并生成正确答案。
核心步骤
(1)检索(Retrieval) (2)增强(Augmentation)(3)生成(Generation)
1.3 Fine-Tuning和RAG的区别:
FT是将领域知识注入模型,RAG增加领域知识上下文
1.4 RAG的优势和隐患
优势:成本低,内容更具时效性,灵活性高
隐患:(1) 提供的上下文知识并不包含答案 (2)上下文知识里包含噪声
二 : 朴素RAG以及问题
2.1 主要组件
向量数据库(Vector Database)
向量数据库是一种专门设计用来高效存储和检索向量数据的数据库系统。
查询检索(Retrieval)
检索器可以从一个大规模的文档集合或知识库中检索出与给定查询最相关的信息,
数据增强(Augmented)
增强器将检索到的相关信息的上下文有效融入当前query
生成回答(Generator)
生成器将检索到的多个文档或信息片段综合考虑,融合它们的内容来构建一个连贯、逻辑一致的输出。
2.2 不足
朴素 RAG 主要在三个方面面临挑战:检索质量、回应生成质量和增强过程。
检索质量:低精度、低召回
增强过程:不合理融入带来的冗余、杂乱等问题
生成质量:虚构答案、不相关回答、有害回答等
三 : 优化方向----retrival优化
retrival优化
检索前Query优化
检索方式优化
3.1 Pre- Retrieval
单一的 Query 可能存在噪音和随机性;因此在query 进行检索前,可以对query进行如下操作:
(1)使用 LLM 对 query 进行改写,使之更加规范;
Rewrite-Retrieve-Read框架应用小语言模型(T5)作为可训练的改写器,对改写器进行微调
(2)使用 LLM 理解query 意图并生成多个 queries 并行检索;
(3)RAG-Fusion使用 LLM 将 query 分解成多个 sub query,并行检索。
CoVe技术,将复杂 Prompt 拆分为多个独立的query,让LLM对每个子查询进行定向知识库搜索
(4)在查询中加入多轮对话,将其与内存缓冲区中的聊天历史记录一起发送给LLM,以便LLM在生成下一个答案时了解先前的上下文。
3.1.1 相关论文
论文:Query Rewriting for Retrieval-Augmented Large Language Models
>》采用两阶段的训练策略:Warm up + RL,训练一个T5改写器
第一阶段:提示LLM根据原始query生成伪标签,组成(𝑥, ~𝑥)
第二阶段:使用伪标签生成预测结果,和label计算reward
论文:CHAIN-OF-VERIFICATION REDUCES HALLUCINATION IN LARGE LANGUAGE MODELS
LLM生成的响应可以用来验证自身,利用自我验证过程评估初始响应的准确性
(1)根据query生成baseline 回答
(2)Cove 根据baseline 回答生成一组待验证问题
(3)回答验证问题
(4)根据验证问题的回答修订回答
3.2 Retrieval优化
- 向量存储索引:将查询内容发送至索引,检索相关信息
flat索引,暴力法计算query与所有块向量之间的距离。
高效的搜索索引,对大规模检索进行了优化,例如faiss、nmslib或annoy索引。
- 总分层次索引:
创建两个索引——一个由摘要组成,另一个由文档块组成,分两步进行搜索:摘要过滤+群体内搜索
优点:加快了查询速度;缺陷:过滤可能会忽略细节信息
- 父子层级索引
先将文档切分成较大的文本块,形成 parent chunks;再对每个parent chunk 按更细的方式切分成 child chunks
query 检索时,在 sub chunks 中进行检索,返回所对应的 parent index 回至父段块
优点:获得更完整完整的上下文,以父段作为最终的增强信息获得答案。
- 假设性问题和HyDE:
使用LLM为每个块生成一个假设性问题,检索后将原始文本块作为上下文发送给LLM以获取答案。 优点:查询和假设性问题之间的语义相似性更高,从而提高了搜索质量。
使用LLM根据查询生成一个假设性回答
- 并行查询
动机:chunks的大小会对相似度结果产生较大影响。当chunks过小时,没有上下文信息,宽泛性query 匹配不准确;当chunks过大时,chunk涵盖的信息多,将导致精确的问题匹配时存在噪音
做法:构建多个chunks 数据集,每个数据集的chunks大小不同,采用并行的方式进行同时匹配,并进行集中排序,选择 top_k 个文本块作为增强内容。
四 : 优化方向----augument优化
4.1 用生成的内容增强RAG
LLMs-Generated Content in RAG
GenRead使用LLM生成器替换检索器,增加生成文档中的知识覆盖率
Step 1:为每个question生成一个上下文文档d
Step 2:使用GPT3对(question, document)数据对进行embedding, K-means算法进行聚类
Step 3:从每个cluster中采样N个(q, d)数据对,将他们输入LLM得到K个上下文文件
4.2 迭代搜索
IRCoT迭代执行搜索和推理的步骤,直到stop
一个基本检索器,可以接受查询
一个具有零/少样本思想链(CoT)生成能力的语言模型;
4.3 CoT
CoT(Chain-of-Thought),大模型思维链加入了解题的中间过程,诱导大模型“按步骤解题”
CoT 的工作原理:
模型规模小会导致 CoT 失效;
简单的任务 CoT 不会对模型性能带来提升;
训练数据内部彼此相互联结程度的增加可以提升 CoT 的性能;
示例中的错误,或者无效的推理步骤不会导致 CoT 性能的下降;
迭代搜索
IRCoT在思维链的每个步骤中检索文档,利用 CoT来指导检索,并用检索结果来优化 CoT
五 : 优化方向----generator优化
5.1 信息压缩
由于上下文限制,信息压缩对于降低噪声、解决上下文长度限制和增强生成效果具有重要意义。
PRCA训练信息提取器,训练目标是最小化实际上下文和压缩上下文(label)的差异
Dense Passage Retriever(DPR)将问题定义为 (𝑞𝑢𝑒𝑠𝑡𝑖𝑜𝑛, 𝐶 → 𝐶_𝐹),训练了两个encoder ,分别映射question和passage,并使用对比损失进行训练,找到语料库中最相关的信息
使用两阶段训练法:预训练 + RL,训练一个文本压缩器
预训练阶段:在文本摘要任务里面训练压缩器
RL阶段:确保 PRCA 提取的文本有效指导生成器的回答
Filter-Reranker结合了LLMs和Small Language Models (SLMs),提出了Filter-then-rerank Paradigm,可以提升信息提取任务的性能
LLM擅长回答难样本,SLM擅长简单样本,因此,核心思想是将小模型不太确定的测试样本再给大模型重新选择一下。
5.2 Re-Rank重新排序
对候选文档列表进行重新排序,以提高其与用户查询语义的匹配度,优化排序结果。
Cohere Rerank、BGE-Reranker 重新计算相关文本与query之间的语义相似度,将更为相关的文档排在前面
LLM:基于提示学习的重排序模块可以根据样本的输入方式分为 ==Pointwise、Listwise、Pairwise ==三类
(1) Pointwise 类方法输入查询与单个文档,输出生成二者是否相关的 token
(2) 设计指令提示大模型,将生成给定查询的概率作为相关性得分。Listwise方法同时输入多个文档,根据相关性对文档进行排序。
Pairwise 类方法,输入为query与一组文档对,比较其中一个文档是否比另一个更加相关
六 : 评估RAG
6.1 Retrieval Quality
MMR(平均倒排率)
Hits Rate(命中率)
NDCG(归一化折损累积增益)
6.2 Generation Quality
七 : RAFT
训练模型学会寻找答案