大模型系列——解读RAG· 第 2 / 2 页
4. 面向RAG的编码器和大模型微调
对 RAG 流水线中涉及的深度学习模型进行一些微调,一个 是 负责嵌入质量从而提高上下文检索质量的 Transformer Encoder,另一个负责利用提供的上下文来回答用户查询的 LLM。 可以使用 GPT-4这样的高端 LLM 来生成高质量的合成数据集。 但是应该始终注意到,采用一个大型数据集进行训练的开源模型,并使用小型合成数据集进行快速调优,可能会削 弱模型的总体能力。
较新版本的transformer编码器优化搜索是相当有效的,bge-large-en-v1.5即便在笔记本电脑环境中仍能够有较大的检索质量提升。
4.1编码器微调
一个很好的老选择是有一个交叉编码器。如果不完全信任基本编码器,交叉编码器可以对检索到的结果重新排序。它的工作原理是把查询和每个最高k个检索到的文本块传递给交叉编码器,用一个标记分隔,然后对它进行微调,相关的块输出为1,不相关的块输出为0。这种调整过程可以参考https://docs.llamaindex.ai/en/latest/examples/finetuning/cross *encoder *finetuning/cross *encoder *finetuning.html#。
4.2 大模型微调
最近 OpenAI 开始提供 LLM 微调 API,LlamaIndex 有一个关于在 RAG 设置中微调 GPT-3.5-turbo 以“提取”一些 GPT-4知识的教程。基本思路是获取一个文档,使用 GPT-3.5-turbo 生成一系列问题,然后使用 GPT-4根据文档内容生成这些问题的答案即构建一个基于 GPT4的 RAG 流水线 ,然后在问答对的数据集上对 GPT-3.5-turbo 进行微调。通过对 RAG 流水线的评估,可以初步确定经过微调的 GPT 3.5-turbo 模型比原始模型能够更好地利用所提供的上下文来生成其答案。
在论文 RA-DIT: Meta AI Research 的检索增强双指令优化中,有一种更为复杂的方法,提出了一种在查询、上下文和答案这个三元组上同时优化 LLM 和检索器(原论文中的双重编码器)的技术。这种技术被用于通过微调 API 和 Llama2开源模型来微调 OpenAI LLM (在原论文中) ,导致知识密集型任务指标增加约5% (与使用 RAG 的 Llama265B 相比) ,并且常识推理任务增加了几个百分点。有关实施细节,可以参考https://docs.llamaindex.ai/en/stable/examples/finetuning/knowledge/finetune *retrieval *aug.html#fine-tuning-with-retrieval-augmentation。
5. 面向RAG的性能评估
有几个框架都可以应用于RAG 系统的性能评估,指标包括总体答案相关性、答案溯源性、可信度和检索到的上下文相关性等等。
Ragas框架,使用可信度和答案相关性作为 RAG 检索部分生成答案的质量指标和经典的上下文准召率。评估框架 Truelens 建议采用检索与查询的上下文相关性、答案溯源性以及与查询的答案相关性,将这三个指标作为 RAG 系统的性能评估三元组。其中,关键且最可控的指标是检索到的上下文相关性,其次是答案相关性和溯源性。
LangChain 有一个非常先进的评估框架 LangSmith,可以实现自定义的评估器,还可以跟踪 RAG 流水线的运行状态,以使系统更加透明。而在LlamaIndex 中有一个rag_evaluator的包,提供了一个简便工具使用公共数据集来评估RAG系统。
6. 小结
RAG 系统的主要挑战除了答案的相关性和可信度之外,还有就是速度。然而,还有很多其他事情需要考虑,比如基于网络搜索的 RAG,与Agent架构的深度融合,以及关于 LLM 长期记忆的一些方式方法。即便如此,RAG 仍然有着广泛的应用范围,我们在使用RAG落地应用的时候, 希望本文中提到的这些技术能够对大家有所帮助。

【参考资料 与 关联阅读】
https://docs.llamaindex.ai/en/stable/api *reference/service *context/node parser.html
- https://huggingface.co/spaces/mteb/leaderboard
- https://huggingface.co/BAAI/bge-large-en-v1.5
- https://huggingface.co/intfloat/multilingual-e5-large
- http://boston.lti.cs.cmu.edu/luyug/HyDE/HyDE.pdf
- https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf
*https://python.langchain.com/docs/modules/data *connection/retrievers/MultiQueryRetriever
https://docs.llamaindex.ai/en/stable/examples/query *engine/sub *question *query *engine.html
https://github.com/langchain-ai/langchain/blob/master/cookbook/stepback-qa.ipynb
- https://docs.ragas.io/en/latest/index.html
- https://arxiv.org/pdf/2310.01352.pdf
- https://github.com/truera/trulens/tree/main
- https://docs.smith.langchain.com/
- https://github.com/run-llama/llama-
hub/tree/dac193254456df699b4c73dd98cdbab3d1dc89b0/llama *hub/llama *packs/rag_evaluator