使用RAG技术构建企业级文档问答系统:检索优化Embedding微调

原创 超乎想象 [ 超乎想象的科技圈 ](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是需要的

硬件环境

本文所用硬件环境

<think>好的,用户想了解检索增强生成(RAG)系统的概念和实现方式。根据之前的对话历史,我之前已经详细介绍了本地知识库的搭建工具和技术,并提到了Dify和Cherry Studio这些平台可以用于RAG系统的构建。现在用户进一步询问RAG的具体概念和实现步骤,需要结合之前的引用内容,特别是引用[1]和引用[2]中的信息。 首先,我需要明确用户的需求:他们可能是在构建本地知识库时遇到了需要集成RAG系统的需求,或者想了解如何将RAG应用于他们的项目中。用户可能对RAG的基本原理、如何实现以及它与微调的区别感兴趣。同时,用户之前的问题涉及工具选择,如Dify和Cherry Studio是否适用,所以回答中可能需要再次提到这些工具在RAG实现中的作用。 接下来,我需要整理RAG的概念。根据引用[1],RAG结合了检索和生成,通过检索外部知识库来增强生成结果。引用[2]提到了RAG的四个阶段:数据处理、检索、增强和生成。需要将这些阶段详细展开,并结合之前提到的工具,比如使用LangChain进行文本处理,ChromaDB作为向量数据库,以及本地部署的LLM如DeepSeek-R1。 用户可能想知道具体的实现步骤,比如数据准备、检索机制、增强方法和生成模型的选择。此外,用户可能对RAG微调的区别有疑问,这在引用[2]中也有提及,需要进行比较,强调RAG不需要重新训练模型,而微调需要调整模型参数。 还要注意用户提到的工具,比如Dify和Cherry Studio,在实现RAG系统时的作用。例如,Dify提供可视化界面来构建RAG流程,适合快速部署,而Cherry Studio支持本地化部署,适合数据敏感的场景。这些信息需要整合到实现方式中,给出具体的工具链示例。 此外,用户可能关心实际应用中的挑战,比如如何处理数据更新、如何选择适合的嵌入模型和向量数据库,以及如何优化检索效率。这些问题需要在实现方式中提及,并给出建议,比如使用增量索引或定期清理数据库。 最后,确保回答结构清晰,分步骤解释RAG的概念和实现,结合之前的工具推荐,并附上相关问题引导用户深入思考。同时,注意引用标记的正确使用,例如引用[^1]和[^2],但根据用户提供的引用内容,可能需要调整引用编号,确保与之前的回答一致。</think>### 检索增强生成(RAG)系统详解 --- #### 一、**RAG 核心概念** 检索增强生成(Retrieval-Augmented Generation)是一种结合**信息检索**与**大语言模型生成**的技术框架,通过动态引入外部知识库提升生成内容的准确性与可靠性[^1]。其核心公式可表示为: $$ \text{生成结果} = \text{LLM}( \text{用户输入} \oplus \text{检索到的相关文档} ) $$ 其中 $\oplus$ 表示输入信息与检索结果的融合操作。 **与微调(Finetune)的核心差异**: | 维度 | RAG | 微调 | |------------|------------------------------|--------------------------| | **知识更新** | 实时更新外部知识库即可 | 需重新训练模型参数 | | **计算成本** | 仅需检索+推理 | 需全量/增量模型训练 | | **可解释性** | 可追溯检索结果来源 | 黑盒生成 | | **适用场景** | 高频知识更新的领域(如法律) | 需固化特定任务能力的场景 | --- #### 二、**RAG 实现流程** **1. 数据处理与索引构建** - **文本解析**:使用 `Unstructured` 或 `PyPDF2` 提取文档内容 - **分块策略**: - 按固定长度切割(如 512 tokens) - 按语义边界分割(利用 `LangChain` 的递归分割器) - **向量化存储**: - 嵌入模型:中文推荐 $BAAI/bge-large-zh-v1.5$,英文可用 $text-embedding-3-small$ - 向量数据库:小规模用 ChromaDB,百万级数据选 Milvus **2. 检索增强阶段** - **混合检索模式**: ```python # 伪代码示例:结合语义与关键词检索 def hybrid_retrieval(query): semantic_results = vector_db.similarity_search(query, k=3) keyword_results = es.search({"match": {"text": query}}) return rerank(semantic_results + keyword_results) ``` - **重排序优化**:使用 $BAAI/bge-reranker-large$ 提升结果相关性 **3. 生成阶段** - **提示词工程**: $$ \text{PROMPT} = f"""基于以下内容回答问题: {context_str} 问题:{query} 回答要求:""" $$ - **模型选择**: - 中文场景:本地部署 $DeepSeek-R1$(7B 量化版仅需 8GB 显存) - 多语言场景:$Llama-3-8B-Instruct$(需 vLLM 框架加速) **4. 工具链实现示例** ```mermaid graph LR A[PDF文档] --> B(PyPDF2解析) B --> C{LangChain分割} C --> D[BGE嵌入模型] D --> E[(Milvus向量库)] E --> F{用户提问} F --> G[混合检索] G --> H[DeepSeek-R1生成] H --> I[答案输出] ``` --- #### 三、**关键技术实现细节** 1. **增量索引优化** - 使用 FAISS 的 `add_with_ids` 实现增量更新 - 设置 TTL(Time-To-Live)自动清理过期数据 2. **检索效率提升** - **量化压缩**:将 float32 向量转为 int8(精度损失 <3%) - **分层导航**:Milvus 的 IVF_PQ 索引减少 70% 检索延迟 3. **错误缓解机制** - **置信度过滤**:剔除与问题余弦相似度 <0.6 的检索结果 - **后验修正**:调用 $GPT-4$ 对生成内容进行事实校验 --- #### 四、**Cherry Studio 与 Dify 的 RAG 支持** | 平台 | RAG 实现特点 | |---------------|-----------------------------------------------------------------------------| | **Cherry Studio** | 1. 支持本地化知识图谱融合检索[^1]<br>2. 提供细粒度权限控制的检索日志审计 | | **Dify** | 1. 内置混合检索流水线<br>2. 自动将问答数据转化为微调训练集 | **典型部署方案**: - **轻量级方案**:Dify + ChromaDB + DeepSeek-R1(适合快速验证) - **企业级方案**:Cherry Studio + Milvus + 知识图谱(支持复杂逻辑推理)[^1] --- #### 五、**应用场景与避坑指南** **高价值场景**: - 法律合同条款动态解析 - 医疗文献辅助诊断(需通过 HIPAA 合规认证) - 金融研报摘要生成 **常见问题解决方案**: - **幻觉问题**:在提示词中强制要求引用检索片段(如:"请根据[文档1]第3节内容回答") - **长文本丢失**:采用 `Longformer` 或 `FlashAttention-2` 扩展上下文窗口 --- #### 六、**扩展学习路径** 1. 使用 `LlamaIndex` 实现多模态 RAG(支持 PDF 表格与图像检索) 2. 探索 ColBERT 等稠密检索模型提升长尾问题覆盖率 3. 基于 `Open-WebUI` 搭建私有化问答门户(支持 Markdown 结果渲染) --- ### 相关问题 1. 如何评估 RAG 系统的检索准确率与生成质量? 2. 知识图谱与向量检索RAG 中如何协同工作? 3. 针对专业领域(如生物医药)如何定制 RAG 系统? [^1]: 检索增强生成RAG与知识图谱 [^2]:人工智能时代】- 检索增强生成 RAG 简介
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值