一文搞懂微调技术和RAG技术区别

▼最近直播超级多,预约保你有收获

今晚直播:大模型ChatGLM3应用案例实战

 1

为什么要做微调和RAG的对比? 

通用大模型存在一定的幻觉问题,通过把企业私有的领域数据知识喂给通用大模型,从而降低了大模型的幻觉,这就是所谓的企业私有大模型,从技术层面来讲,实现企业私有大模型有2个技术手段:微调(Fine-tuning)、RAG(Retrieval Augmented Generation)检索增强生成。这种技术如何选型?很多同学很困惑,今天我们剖析它们的区别,使得同学们能够真正搞定这两种大模型增强技术的本质。

3985bd575144fcdd78466a79a951d104.png

01ba0113818d1c24aa76f589efbb5b00.png


 2

微调和RAG的区别 

第一、知识维度

  • RAG 对知识的更新时间和经济成本更低。不需要训练,只需要更新数据库即可。

  • RAG 对知识的掌控力会更强,相比微调更不用担心学不到或者是遗忘的问题。

  • 如果大模型强缺乏某个领域的知识,足量数据的微调才能让模型对该领域有基本的概念,如果不具备领域知识基础,RAG 仍旧无法正确回答。

第二、效果维度

  • RAG 相比微调能更容易获得更好的效果,突出的是稳定性、可解释性。

  • 对任务模式比较简单的任务,微调能触碰到更高的上限,但是对训练、数据等方面的要求会更苛刻。

  • 幻觉方面,RAG 从各种实测来看,短板基本都在检索模块,只要检索不出大问题,整体效果还是 RAG 比较有优势的。

第三、成本维度

  • 训练方面,RAG 的成本就是更新数据库,但是微调就需要大量的显卡、时间资源。

  • 推理方面,考虑到 RAG 本身需要检索,而且检索层为了确保检索准确,还需要很多额外工作,所以推理的耗时会比微调多,但具体多多少,就要看检索模块的复杂程度了,如果这里面还需要额外调大模型,那成本就会多很多,如果只是小模型之类的,那这个增加可以说是忽略不计。微调后的大模型直接使用,和原本模型的耗时一致。

  • 系统拓展角度。随着项目的发展,大模型训练不一定能支撑多任务,而拿着大模型训好几个,对部署而言并不方便。

通过上述的对比,我们看出,在企业具体的业务场景来看,RAG 技术的综合收益也高于微调技术。但是 RAG 也是不是万能的,RAG 也会存在以下的依赖问题

  • RAG 依赖知识库。如果不具备构造知识库的条件,那 RAG 无从谈起,比如:没有具体的业务数据,或者是机器不支持支撑检索之类的。

  • 业务需求并非对知识依赖。比如:某些业务的话术生成,更多是对语言风格的约束,此时要么通过 Prompt 解决,要么就是构造业务数据来进行训练即可,根本没有构造 RAG 的必要。

  • 依赖实时信息而非固有信息。比如:对话摘要是大模型具有的比较强的能力,这种任务更多是依赖收到的对话记录,而非一些固有存储好的内容,此时通过工程手段直接把信息获取导入到模型即可,不需要把对应内容入库了。如果对对话摘要的内容不满意,则应该是通过 Prompt 和微调来解决。当然有人可能会说通过 few-shot 的方式,可以用 RAG,这个当然是可以的,但就不是必须了。

  • 指令不生效或者领域知识完全不具备。大模型此处是短板,那即使是 RAG,把答案摆在面前,也解决不了问题。

  • 内容会受到检索结果局限。有些创造性的任务,本身是想通过大模型获取新的灵感,然而检索结果给到大模型后,大模型往往容易受到限制,这个限制在有些时候是好事,但并非所有时候。

参考链接:https://mp.weixin.qq.com/s/p9QELz-1BZi06HGwcLNnog

3

免费领取《AI 大模型技术系列直播

AI 大模型的知识图谱包括12项核心技能:大模型内核架构、大模型开发 API、开发框架、向量数据库、AI 编程、AI Agent、缓存、算力、RAG、大模型微调、大模型预训练、LLMOps 等。

de358d6bd6584957a5df5954bd5d771b.png

为了帮助同学们掌握 AI 大模型开发技能,我们准备了一系列免费直播干货扫码全部领取

8324eb912fb955a33fd3f4a16cb04695.png

END

### 微调 DeepSeek 并实现 RAG #### 定义微调目标数据准备 为了使 DeepSeek 获得特定领域的知识或新知识,可以通过细调来达成这一目的[^3]。这不仅能够提升模型在特定领域内的表现,还能优化其处理复杂查询的能力。 ```python from datasets import load_dataset, DatasetDict # 加载自定义的数据集并将其分割成训练集测试集 data_files = {"train": "path_to_train_data", "test": "path_to_test_data"} dataset = load_dataset('csv', data_files=data_files) # 如果需要的话,可以对数据集进行预处理操作 def preprocess_function(examples): return tokenizer(examples['text'], truncation=True) tokenized_datasets = dataset.map(preprocess_function, batched=True) ``` #### 执行微调过程 完成数据准备工作之后,下一步就是设置微调参数,并启动实际的微调流程。此阶段涉及到选择合适的硬件资源、配置超参数以及监控训练进度等方面的工作。 ```python import transformers from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer model_name = 'deepseek-model-name' model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2) training_args = TrainingArguments( output_dir='./results', evaluation_strategy='epoch', learning_rate=2e-5, per_device_train_batch_size=8, per_device_eval_batch_size=8, num_train_epochs=3, weight_decay=0.01, ) trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_datasets["train"], eval_dataset=tokenized_datasets["test"] ) trainer.train() ``` #### 整合 RAG 技术 当完成了上述微调工作后,接下来要做的便是引入检索增强生成技术(Retrieval-Augmented Generation),即RAG。该方法允许模型利用外部文档库中的信息作为补充材料,在生成回复时提供更加精准的内容支持[^1]。 ```python from langchain.chains.hybrid_search_chain import HybridSearchChain from langchain.vectorstores import FAISS from langchain.embeddings.openai import OpenAIEmbeddings embeddings = OpenAIEmbeddings() vectorstore = FAISS.load_local("faiss_index_directory", embeddings) rag_model = HybridSearchChain.from_llm_and_vectorstore(llm=model, vectorstore=vectorstore) ``` 通过这种方式,不仅可以保持原有优势——如无需频繁更新内部参数即可适应新的知识点;同时也克服了一些局限性,比如减少了对外部数据库依赖所带来的额外开销等问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值