一、DeepSeek后遗症???

你还在蹭DeepSeek的热度吗,最近deepseek爆火以来,全国各大企业纷纷探索进行了deepseek的部署,有公有云模式、API模式、本地部署模式、一体机模式等,但是一段时间内会发现deepseek逐渐出现一些问题难以解决,如:

1、智能问答产生“幻觉”,大模型对于一些不了解的知识,尝试“硬着头皮上”,给出瞎编乱造的回答,严重影响了用户的感知,对于一些事业单位用于办公的场景来说,非常那个不友好;

2、deepseek大模型,无法回答新知识,企业新的数据没法实时更新,只有“微调”这一条路,然而微调需要大量的工作量和门槛,有大量标记的需求,有大型算力的需求,这是一笔不小的开销;

3、。。。。。

为什么会这样?

其实很简单,当初大家是处于对deepseek的好奇,处于蹭热度的心态,做了初期的部署,实不知构建企业级知识库,要搞得好,需要通过RAG的方式,即需要引入“向量数据库”这一神器,方能将“知识搜索”和大模型生成的能力结合起来,既能保证实时性知识更新,又可以不用频繁的微调,因为在RAG场景下,向量数据库只是大模型(deepseek等)的“超级外挂”而已。

二、什么是RAG,怎么构建RAG

基于向量数据库构建RAG(Retrieval-Augmented Generation)是一种结合检索和生成的技术,旨在通过检索相关信息来增强生成模型的能力。以下是构建RAG的基本步骤和关键点:


1. 理解RAG的核心概念

RAG结合了两个主要组件:

  • 检索模块:从大规模文档库中检索与输入相关的信息。

  • 生成模块:基于检索到的信息生成高质量的文本。

向量数据库在检索模块中起到关键作用,用于高效存储和检索语义相似的文本。


2. 构建向量数据库

向量数据库是RAG的核心组成部分,用于存储文档的向量表示。以下是构建向量数据库的步骤:

2.1 数据准备
  • 文档收集:收集与任务相关的文档(如维基百科、技术文档、新闻文章等)。

  • 数据清洗:对文档进行预处理,包括去除噪声、分段、分句等。

2.2 文本向量化
  • 使用预训练的语言模型(如BERT、Sentence-BERT、OpenAI的Embeddings等)将文本转换为向量。

  • 对每个文档或段落生成固定长度的向量表示。

2.3 向量存储
  • 将生成的向量存储在向量数据库中。常用的向量数据库包括:

    • Pinecone:支持高效的向量检索。

    • Weaviate:开源的向量搜索引擎。

    • Milvus:高性能的向量数据库。

    • FAISS(Facebook AI Similarity Search):开源的向量相似性搜索库。

2.4 索引构建
  • 对向量数据库中的向量构建索引(如HNSW、IVF等),以支持快速检索。


3. 检索模块

检索模块负责从向量数据库中查找与输入相关的文档或段落。

3.1 输入向量化
  • 将用户输入(query)通过相同的语言模型转换为向量。

3.2 相似性搜索
  • 使用向量数据库的相似性搜索功能,找到与输入向量最接近的文档或段落。

  • 常用的相似性度量方法包括余弦相似度、欧氏距离等。

3.3 返回检索结果
  • 返回与输入最相关的Top-K个文档或段落。


4. 生成模块

生成模块基于检索到的信息生成最终的回答或文本。

4.1 模型选择
  • 使用预训练的生成模型(如GPT、T5、BART等)作为生成器。

  • 将检索到的文档或段落作为上下文输入生成模型。

4.2 输入构造
  • 将用户输入和检索到的信息拼接成一个完整的输入序列。

  • 例如:[检索到的文档] + [用户输入]

4.3 生成文本
  • 使用生成模型生成最终的文本输出。


5. 优化与评估

5.1 检索优化
  • 调整向量化模型(如使用更高质量的Embedding模型)。

  • 优化索引结构和相似性搜索算法。

5.2 生成优化
  • 对生成模型进行微调,使其更好地利用检索到的信息。

  • 使用强化学习或对抗训练提升生成质量。

5.3 评估指标
  • 检索评估:使用召回率(Recall)、准确率(Precision)等指标评估检索效果。

  • 生成评估:使用BLEU、ROUGE、Perplexity等指标评估生成文本的质量。


6. 工具与框架

以下是一些常用的工具和框架,可以帮助你快速构建RAG系统:

  • LangChain:支持RAG的开发和集成。

  • Haystack:用于构建基于检索的问答系统。

  • Hugging Face Transformers:提供预训练的语言模型和生成模型。

  • FAISS/Pinecone/Weaviate:用于向量存储和检索。


7. 示例流程

以下是一个简单的RAG流程示例:

  1. 用户输入一个问题:“什么是量子计算?”

  2. 检索模块将问题向量化,并从向量数据库中检索出与量子计算相关的文档。

  3. 生成模块将检索到的文档和问题拼接,生成最终的回答:“量子计算是一种基于量子力学原理的计算方式,利用量子比特进行信息处理……”


三、RAG和微调的区别

RAG(Retrieval-Augmented Generation)和微调(Fine-tuning)是两种不同的技术手段,用于提升模型在特定任务上的性能。它们的目标和应用场景有所不同,以下是它们的核心区别:


1. 定义与目标

RAG(Retrieval-Augmented Generation)
  • 定义:RAG是一种结合检索和生成的技术,通过从外部知识库中检索相关信息来增强生成模型的能力。

  • 目标:利用外部知识库中的实时或领域特定信息,生成更准确、更丰富的回答。

  • 核心思想:将检索模块和生成模块结合,生成模块基于检索到的信息生成文本。

微调(Fine-tuning)
  • 定义:微调是指在预训练模型的基础上,使用特定任务的数据对模型进行进一步训练,使其适应特定任务。

  • 目标:让模型在特定任务(如文本分类、问答、翻译等)上表现更好。

  • 核心思想:通过任务特定的数据调整模型的参数,使其更适合目标任务。


2. 技术实现

RAG
  • 检索模块:从向量数据库或文档库中检索与输入相关的信息。

  • 生成模块:基于检索到的信息生成文本。

  • 依赖外部知识:需要构建和维护一个外部知识库(如向量数据库)。

  • 动态性:可以实时检索最新信息,适合需要动态知识的任务。

微调
  • 模型调整:在预训练模型的基础上,使用任务特定的数据进一步训练模型。

  • 不依赖外部知识:完全依赖模型内部的参数调整。

  • 静态性:模型的知识和能力在微调后固定,无法动态更新。


3. 适用场景

RAG
  • 需要外部知识的任务:如开放域问答、知识密集型任务。

  • 动态知识需求:如需要实时检索最新信息的场景。

  • 知识库可用:当有一个高质量的外部知识库时,RAG可以显著提升生成质量。

微调
  • 特定领域任务:如医疗文本分类、法律文档生成等。

  • 固定知识需求:当任务的知识范围相对固定时,微调可以显著提升模型性能。

  • 数据可用:需要有足够的任务特定数据来进行微调。


4. 优缺点对比

RAG
  • 优点

    • 可以动态利用外部知识,生成更准确和丰富的回答。

    • 适合开放域任务和知识密集型任务。

    • 无需重新训练模型,只需更新知识库。

  • 缺点

    • 需要构建和维护外部知识库。

    • 检索模块的性能直接影响生成结果。

    • 可能会引入噪声(检索到不相关的信息)。

微调
  • 优点

    • 模型完全适应特定任务,性能通常更好。

    • 不依赖外部知识库,部署简单。

    • 适合领域特定的任务。

  • 缺点

    • 需要大量任务特定的标注数据。

    • 模型的知识和能力在微调后固定,无法动态更新。

    • 对于开放域任务,可能表现不如RAG。


5. 结合使用

在实际应用中,RAG和微调可以结合使用,以发挥各自的优势:

  • 微调生成模型:对生成模块进行微调,使其更好地利用检索到的信息。

  • 微调检索模型:对检索模块的Embedding模型进行微调,提升检索的准确性。

  • 混合方法:在微调的基础上引入RAG,既利用任务特定的知识,又动态检索外部信息。


6. 示例对比

RAG示例
  • 任务:开放域问答。

  • 流程

    1. 用户输入问题:“量子计算的优势是什么?”

    2. 检索模块从知识库中检索相关文档。

    3. 生成模块基于检索到的文档生成回答:“量子计算的优势包括并行计算能力、解决复杂问题的潜力……”

微调示例
  • 任务:医疗文本分类。

  • 流程

    1. 使用医疗领域的标注数据对预训练模型进行微调。

    2. 模型可以直接对输入的医疗文本进行分类,如“诊断报告”、“治疗方案”等。


总结

  • RAG:适合需要动态检索外部知识的任务,依赖外部知识库,生成结果更丰富。

  • 微调:适合特定领域的任务,依赖任务特定的数据,模型性能更优。

  • 选择依据:根据任务需求(是否需要外部知识、数据可用性等)选择合适的方法,或结合两者使用。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐