原创 超乎想象 [ 超乎想象的科技圈 ](javascript:void(0)😉 2024年08月13日 00:28 北京
概述
根据使用RAG技术构建企业级文档问答系统之基础流程中的RAG流程描述,有一个很重要步骤是从知识库中检索相关的文档片段,由于RAG是一个典型的串行流程,即先检索,再生成,因此,提升检索性能,通常可以提升RAG的效果。
针对RAG检索部分的优化,已经有不少优化手段,典型的有如下这些:
- Embedding模型优化
- 混合检索(BM25+Embedding)
- Multi Query
- RAG Fusion
- Hypothetical Document Embeddings(HyDE)
- Rerank
- …
从本文开始,会陆续覆盖这些优化方法,每次优化,会分别计算检索的命中率,和问答的准确率,以便大家直观地感受不同优化手段带来的性能提升。
检索的命中率,会根据《使用RAG技术构建企业级文档问答系统之基础流程》中介绍的HitRate,问答的准确率,然后评估,考虑到大家访问OpenAI的API可能不便,打分统一替换为Qwen2-72B-Instruct。
本文首先介绍Embedding模型优化。通常我们所使用的Embedding模型,由于要考虑到通用型,不会特别针对某个领域做专门的优化。针对Embedding模型的优化,主要有两个部分可以做:
- 对Embedding做二次预训练
- 对Embedding模型做微调
对Embedding做二次预训练通常不会有显著的效果提升,本文主要介绍对Embedding模型的微调。所选取的模型是BAAI/bge-large-zh-v1.5(HuggingFace中的模型ID),是BAAI(智源)开源的一个Embedding,这个基本上也是目前RAG中用得比较多的模型了,虽然BGE发布后陆续有新的模型不断刷新了榜单,但综合对比下来,BGE还是很能打的。
本文会介绍Embedding微调时,涉及的如下几点:
- 微调样本构建
- 微调脚本
- 训练过程监控:W&B监控
- 模型效果评估
本文优化后的模型评估效果见下表,可以看出,检索的HitRate,Embedding微调后的模型,都是显著优于Baseline(基础流程中介绍的方法)的,问答全流程,使用3个知识片段的Embedding微调后的模型进行检索,也取得了目前为止的最好效果
本文代码已开源,地址在:https://github.com/Steven-Luo/MasteringRAG
其中,样本构建代码为:
- build_embedding_sample_v1.ipynb
- build_embedding_sample_v2.ipynb:最终使用版本
微调脚本为:
- finetune_bge_embedding_v1.sh
- finetune_bge_embedding_v2.sh
- finetune_bge_embedding_v3.sh
- finetune_bge_embedding_v4.sh:最终使用版本
RAG全流程代码为:retrieval/01_bge_embedding_ft.ipynb
环境准备
Embedding模型的训练,虽然对机器的性能要求没有对训练LLM那么高,但也还是有一定要求的,GPU是需要的