What it is ?
Retrieval Augmented Generation 检索增强生成
一种将大模型与额外数据源相结合的方法,通过检索的方式获取与问题相关的信息,以此提升模型生成的生成效果。
How it works?
从额外的知识库中检索与问题query相关的信息,将检索的结果与原提示词prompt共同传递给大模型,利用其上下文学习in-context learning能力让LLM生成更好、更具事实性的结果output
- 构建知识库
- 格式转换
- 文本切分
- fixed-size
- variable-size chunking strategy
天然的切分: 如社交媒体、产品描述
分隔符切分
- 数据清洗
extract, clean, format
- 检索
- 向量检索
embedding model
vector database - 词法检索
关键词检索adopting keyword-based search allows us to perform clever tricks like promoting documents with important keywords, excluding documents with negative keywords, or even augmenting documents with synthetically-generated data for better matching
- 向量检索
Why it is useful?
- 直接注入可靠 (correct, specific, and up-to-date) 的相关信息,利用了大模型的上下文学习能力
- 应对大模型的如下问题:
幻觉问题(hallucination)、截至日期问题(knowledge cutoffs)、专有数据问题(specialized domains、proprietary data) - 易于实现、成本低、性能提升
评估
- retrieval system评估: 获取用户反馈,然后使用传统的检索指标: DGC、 nDGC
- generation component评估: RAGAS 、LLM as a judge
RAGAS:
Retrieval Augmented Generation Assessment , 在无人工标注数据集或参考答案的情况下评估复杂的RAG流程
- 定位相关文档的能力 :context relevance --> 让LLM判断context句子与问题是否相关
- 利用context的能力: faithfulness --> 先引导LLM从回答中抽取陈述, 然后引导LLM判断该陈述能否从context中推断出
- 产生高质量的输出: answer relavance --> 引导LLM根据回答生成潜在的问题,计算它与真实问题的相似度
质量保证:
- 检索方面:
使用混合检索;
纯向量检索倾向于包含假正例(false positives),可能包含噪音数据
基于关键词的检索允许使用一些小技巧来提升效果,比如
使用重要的关键词扩充文档
排除包含 负关键字(negative keywords)的文档
使用合成数据(synthetically-generated data )增强文档 - 评估方面:
以引用的形式向用户展示用于生成的context,引导用户进行二元反馈
进一步提升
- 数据方面:
- 内容:
抽取、清理、格式化 extract, clean, and format - 步骤:
大量观察数据
检查是否存在不需要的内容
向数据处理流程中添加更改来处理发现的问题 - 新方法:
使用大模型自动构建数据清理流程
- 内容:
- 检索方面:
embedding模型微调
添加ranking: cross_encoder \ ColBert
生成方面:
- 利用高质量数据微调大模型
- 提示词策略:
- 添加选择组件,以最大化上下文多样性
应用于检索流程之后!
步骤:
使用检索获取相对较大的context候选集
从候选集中选择与问题最相关的
从剩余候选集中选择与已选择文档最不相似的 - 优化context的结构(大模型获取的位于context中间信息时性能降低)
- 添加选择组件,以最大化上下文多样性