RAG or 微调?为特定用例选择适当方法的实践分享!

引言和综述

生成式 AI 技术与服务方兴未艾,大型语言模型彻底改变了我们处理语言任务的方式。它们在大量文本数据上进行了预训练,并可以通过称为**微调(fine-tuning)**的过程适应各种下游任务。

微调是一种技术,涉及使用与该任务相关的较小数据集进一步训练特定任务或领域的预训练语言模型。通过这样做,模型可以学会更好地理解和生成针对特定上下文的文本,从而提高性能和准确性。

但是,在某些情况下,微调可能不是最合适的方法。在这种情况下,检索增强生成 RAG**(retrieval-augmented generation)**方法可能更合适。RAG 将基础模型的强大功能与外部知识源相结合,允许它们在生成过程中访问和整合来自数据库或文档集合的相关信息。

在这篇技术博客中,我们将探讨微调和 RAG 的基础知识,并分享为不同业务用例选择正确方法(微调或 RAG)的实践经验。我们将介绍:

  • 模型微调概述

  • RAG 概述

  • 在模型微调和 RAG 之间进行选择的标准

  • 开始使用模型微调

微调概述

当您需要将基础模型适应专门的任务或领域时,微调是一种强大的技术。例如,如果正在为某个特定行业构建客户服务聊天机器人,那么根据该行业的相关客户服务数据对预先训练的模型进行微调,可以显著增强其对特定领域术语、行话和上下文的理解。

与 RAG 方法相比,**模型微调的一个关键优势是:因为不涉及额外的检索步骤,它有可能在推理过程中提高性能并降低延迟。**这使得微调模型非常适合低延迟和高吞吐量至关重要的场景,例如实时对话式 AI 应用程序。

然而,模型微调也有其自身的挑战。与 RAG 相比,它通常需要更大的计算资源投入。因为它需要标记、精选数据进行训练,以及微调过程本身的额外计算资源。此外,微调模型可能会难以应对快速变化的数据,因为模型需要定期重新训练才能有效地整合新信息。

模型微调方法可以用以下功能概要图示来说明:

Illustration diagram of fine-tuning generated by Claude 3 Sonnet generated in Amazon Bedrock

可以在《Generative AI on Amazon》一书中找到模型微调的实际示例。该书作者提供了示例代码,指导用户使用 Amazon SageMaker JumpStart 在 Dolly 数据集的子集上微调 Llama 2 模型。

在这里插入图片描述

Generative AI on Amazon

扫码了解更多

在这里插入图片描述

Dolly 数据集

扫码了解更多

该示例涵盖了模型微调的各个方面:包括数据准备、定义微调超参数、创建 Amazon SageMaker 估算器、启动微调作业、评估微调模型的性能以及将其部署到 Amazon SageMaker 终端节点。示例的 notebook 文件完整展示了利用 Amazon SageMaker 的功能对大型语言模型进行高效且可扩展的微调,提供了从头到尾的全面工作流程代码实现,我们还将在后面的章节中详细展开分析这些代码。

RAG 概述

**RAG 是一种将 LLM 的强大功能与信息检索技术相结合的方法。**在 RAG 设置中,模型可以根据提供的提示生成文本,从知识库或语料库中获取相关信息以增强模型的输出。

在处理频繁变化的数据或领域知识太广泛而无法仅通过微调模型有效捕获时,RAG 特别有用。新闻机构、媒体和处理快速变化信息的组织通常会受益于 RAG 方法,因为他们可以轻松更新知识库,而无需重新训练整个模型。

**RAG 的关键优势之一在于其灵活性和易于实施性。**由于不需要大量训练,因此与微调相比,RAG 系统可以相对快速地建立,并且初始成本较低。但是,由于额外的检索步骤,RAG 往往比微调模型慢,并且由于涉及多个组件(如矢量数据库、嵌入模型和文档加载器)的协同工作,使得其实现的架构可能会变得比较复杂。

RAG 方法可以用以下功能概要图示来说明:

Illustration diagram of RAG generated by Claude 3 Sonnet generated in Amazon Bedrock

关于基于 RAG 搭建的完整实现代码示例,可以参考 Amazon Bedrock Workshop 提供的一个精彩案例。**该案例以亚马逊云科技过去几年来的致股东信作为外部文本语料库,这个外部知识库允许 RAG 系统通过从语料库中检索相关信息来获得更好的问答结果。**通过利用这些检索到的知识增强语言模型的输出,基础模型可以生成更多针对特定上下文且准确的响应,而无需持续重新训练。

在这里插入图片描述

Amazon Bedrock Workshop

扫码了解更多

该 Workshop 中的 RAG 实现示例的一个显著优势是:可以检索到信息的来源归因,这在很大程度上提高了信息的透明度,并降低了模型幻觉的风险,从而确保最终生成的响应是基于事实基准的数据。

该 Workshop 的代码完整实现还详细说明了客户定制 RAG 的完整工作流程,其中语言模型和检索组件以协同工作的方式来生成增强响应。下图为工作流程的功能结构图示:

在这个定制的 RAG 工作流程(Customized RAG Workflow)中,模型根据输入提示生成初始响应,而检索组件同时从亚马逊云科技致股东信的语料库中获取相关信息。然后将检索到的知识与模型的输出结果集成,最终产生一个增强响应,这个增强响应结合了模型输出结果和外部知识源的共同信息。

该完整实现代码可以通过扫描下方二维码获得:

在这里插入图片描述

代码

扫码了解更多

模型微调还是 RAG?

那么,**什么时候应该选择微调而不是 RAG?**反之亦然。这取决于你所面对的业务场景具体要求和用例。以下是一些一般准则供参考:

微调

何时使用微调:

  • **领域专门任务:**微调非常适合精度和性能至关重要的领域专门任务。例如,如果你正在开发医学诊断模型,则对精选的医疗记录数据集进行微调将产生更高更准确的模型输出结果。

  • **高性能和低延迟:**如果你的应用程序需要低延迟和高吞吐量,则模型微调是更好的选择。微调模型不需要额外的检索步骤,从而使其推理速度更快。

  • **精选数据集:**如果你可以访问与特定任务相关的定义明确、标记和精选的数据集,则微调可以利用这些数据来优化性能。

  • **预测质量:**对于预测质量和准确性至关重要的任务,模型微调允许你根据特定要求定制模型。

微调的优势:

  • **高性能:**针对特定任务进行了优化,从而提高了模型输出的准确性和性能。

  • **低延迟:**推理时间更快,因为不需要额外的检索步骤。

  • **任务特异性:**经过量身定制,可在所训练的特定任务上表现出色。

微调的权衡(Trade-Offs):

  • **成本:**微调需要大量的模型训练所需的计算资源投入,包括抓取、转换和清理数据等数据预处理的成本。

  • **缺乏泛化能力:**微调模型高度专业化,这意味着不同的任务需要不同的模型。

  • **不适合频繁变化的数据:**由于模型是在静态数据集上训练的,因此它不能很好地适应动态数据环境。

RAG

何时使用 RAG:

  • **频繁变化的数据:**当数据频繁变化时,例如在新闻机构或媒体机构中,由于信息变化量巨大,因此 RAG 是首选,模型无需重新训练即可检索最新信息。

  • **广泛的领域知识:**如果你的应用程序涵盖广泛的主题或领域,RAG 可以通过动态检索相关信息来有效地处理多样性。

  • **标记数据有限:**当缺少大量优质的标记数据时,RAG 就非常有帮助。它可以使用预先训练的模型从外部数据源来检索上下文,从而减少对大量训练数据的需求。

  • **成本和时间效率:**RAG 可以快速实施,初始成本较低,因为它避免了极为耗时耗资源的模型再训练过程。

RAG 的优点:

  • **灵活性:**通过动态检索相关信息来处理各种各样的任务。

  • **较低的初始成本:**避免与训练相关的成本,使其更易于访问和部署更快。

  • **保留泛化:**基础模型保持不变,保持其在不同任务中进行泛化的能力。

RAG 的权衡:

  • **推理速度较慢:**由于 RAG 架构中增加了外部信息源检索这一步骤,因此会相应增加延迟,使 RAG 与微调模型相比响应速度会更慢。

  • **复杂性:**由于 RAG 涉及多个组件,例如矢量数据库、嵌入模型和文档加载器,这可能会使系统复杂化。

  • **更高的令牌(Token)使用率:**由于 RAG 需要解析查询和上下文,从而导致每个提示的令牌使用量增加。

选择准则小结:

**性能敏感性:**如果你的应用程序需要高性能、低延迟和针对狭窄领域的高质量预测,则建议使用模型微调方法。

**动态数据环境:**对于处理频繁更新信息或广泛领域知识的应用程序,RAG 通常是更实用且更具成本效益的解决方案。

通过仔细评估你的用例和要求,你可以选择最合适的方法,平衡成本、性能和复杂性之间的权衡。无论你选择微调还是 RAG,每种方法都具有独特的优势,可以利用这些优势来满足你的特定业务需求。

**开始使用模型微调
**

如果你已经确定模型微调是适合你用例的最佳方法,那么下一步就是准备数据并配置模型微调过程。以下是一些关键注意事项:

**1. 数据准备:**模型微调需要与你的任务相关的高质量标记数据集。这可能涉及从各种来源收集数据、清理和转换数据,并使用适当的标签对其进行注释。数据质量至关重要,因为质量差的数据会导致模型性能不佳。

在《Generative AI on Amazon》一书中的 Llama 2 模型微调代码实现中,使用了 Dolly 数据集(用于开放域对话的大型数据集)的一个子集。代码片段演示了预处理和过滤数据以创建适合微调的较小子集。然而,在现实世界中,你需要仔细整理和预处理自己的数据集,以确保微调任务的高质量和相关数据。相关代码片段如下所示:

from datasets import load_dataset``   ``dolly_dataset = load_dataset("databricks/databricks-dolly-15k", split="train")``   ``# To train for question answering/information extraction, you can replace the assertion in next line to example["category"] == "closed_qa"/"information_extraction".``summarization_dataset = dolly_dataset.filter(lambda example: example["category"] == "summarization")``summarization_dataset = summarization_dataset.remove_columns("category")``   ``# We split the dataset into two where test data is used to evaluate at the end.``train_and_test_dataset = summarization_dataset.train_test_split(test_size=0.1)``train_and_test_dataset["test"][0]

左右滑动查看更多

**2. 模型选择:**选择合适的预训练模型作为起点。在此示例中,其选择的微调模型是由 Meta AI 开发的语言模型 Llama 2。Llama 模型目前可通过 Amazon SageMaker JumpStart 获得,这简化了使用亚马逊云科技资源访问和微调模型的过程。

3. 微调超参数**:**选择模型后,在使用 Amazon SageMaker 对其进行微调之前,我们需要定义用于微调的实例。然后,我们可以尝试不同的超参数,例如学习率、批处理大小、epoch、最大输入长度,以优化特定任务和数据集的微调过程。

此 Llama 2 微调示例中提供的代码片段演示了如何设置各种微调超参数,包括启用指令调整模式、设置最大输入长度为 1024 以及运行 5 个 epoch 等等。必须注意的是,这些超参数值可能并非对所有任务或数据集都是最佳的。尝试不同的配置以找到适合你特定用例的最佳设置至关重要。相关代码片段如下所示:

from sagemaker.jumpstart.estimator import JumpStartEstimator``   ``estimator = JumpStartEstimator(`    `model_id=model_id,`    `model_version=model_version,`    `instance_type="ml.g5.12xlarge",`    `instance_count=2,`    `environment={"accept_eula": "true"}``)``   ``# By default, instruction tuning is set to false. Thus, to use instruction tuning dataset you use``estimator.set_hyperparameters(instruction_tuned="True", `                             `epoch="5",`                             `max_input_length="1024")``estimator.fit({"training": train_data_location})

左右滑动查看更多

**4. 评估和迭代:**使用适当的指标和测试数据集定期评估微调模型的性能。微调是一个迭代过程,你可能需要调整数据、超参数甚至预训练模型以获得最佳结果。持续监控和改进对于提高模型性能并确保其满足你的业务要求至关重要。

在微调 Llama 2 示例中,它包含用于评估微调模型在验证集上的性能的代码。根据评估结果,你可以确定微调模型是否满足你的要求,或者是否需要通过调整数据、超参数或尝试不同的预训练模型进行进一步迭代。

此外,建议在单独的测试数据集上评估微调模型的性能,以获得其实际性能的无偏估计。测试数据应代表目标域,并且在微调过程中看不见。你可以使用相关指标在此测试数据集上比较微调模型与预训练模型的性能。结果可以以表格或图形格式呈现,如提供的屏幕截图所示:

如果你有兴趣亲自探索微调 Llama 2 模型的细节,可以通过扫描下面二维码来访问微调示例的完整代码:

在这里插入图片描述

微调示例完整代码

扫码了解更多

全篇小结

在这篇文章中,我们深入研究了 Fine-tuning 和 RAG 技术,提供了概述和建议,以便根据特定用例选择适当的方法。我们还提供了有关如何开始微调的见解,并提供了一个使用 Amazon SageMaker 微调 Llama 2 模型的示例,演示了数据预处理、超参数调整、评估等。这将有助于开发人员理解模型微调过程。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

  • 36
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值