跳到内容

微调#

概述#

微调模型意味着在一组数据上更新模型本身,以多种方式改进模型。这可以包括提高输出质量、减少幻觉、更全面地记忆更多数据以及减少延迟/成本。

我们工具包的核心围绕着上下文学习/检索增强,这涉及在推理模式下使用模型,而不是训练模型本身。

虽然微调也可以用来通过外部数据“增强”模型,但微调可以在多种方式上补充检索增强

嵌入微调的优势#

  • 微调嵌入模型可以在训练数据的分布上提供更有意义的嵌入表示 --> 从而提高检索性能。

大语言模型微调的优势#

  • 使其能够学习特定数据集上的风格
  • 使其能够学习在训练数据中代表性较低的 DSL (例如 SQL)
  • 使其能够纠正通过提示工程难以修复的幻觉/错误
  • 使其能够将更好的模型 (例如 GPT-4) 蒸馏到更简单/更便宜的模型 (例如 gpt-3.5, Llama 2)

与 LlamaIndex 的集成#

这是一份不断更新的指南,目前有三种与 LlamaIndex 的关键集成方式。请查看以下部分了解更多详情!

  • 微调嵌入以提高检索性能
  • 微调 Llama 2 以改进文本到 SQL
  • 微调 gpt-3.5-turbo 以蒸馏 GPT-4

微调嵌入#

我们创建了全面的指南,展示了如何以不同方式微调嵌入,无论是针对非结构化文本语料库的模型本身(本例中为 bge),还是针对任何黑盒嵌入的适配器。它包括以下步骤:

  1. 使用 LlamaIndex 基于任何非结构化上下文生成合成问答数据集。
  2. 微调模型
  3. 评估模型。

微调可以使检索评估指标提高 5-10%。然后,您可以将这个微调后的模型插入到您的 LlamaIndex RAG 应用中。

旧版

微调大语言模型#

微调 GPT-3.5 以蒸馏 GPT-4#

我们提供了多个指南,展示了如何使用 OpenAI 的微调端点来微调 gpt-3.5-turbo,使其为 RAG/代理输出 GPT-4 级别的响应。

我们使用 GPT-4 自动从任何非结构化上下文中生成问题,并使用 GPT-4 查询引擎流程生成“真实”答案。我们的 OpenAIFineTuningHandler 回调会自动将问题/答案记录到数据集中。

然后我们启动一个微调作业,并获得一个蒸馏后的模型。我们可以使用 Ragas 对该模型进行评估,以基准测试其与朴素的 GPT-3.5 工作流的性能。

旧版

微调以获得更好的结构化输出#

微调的另一个用例是使模型更擅长输出结构化数据。我们可以为 OpenAI 和 Llama2 进行此操作。

微调 Llama 2 以改进文本到 SQL#

在本教程中,我们展示了如何在文本到 SQL 数据集上微调 Llama 2,然后使用 LlamaIndex 抽象对其进行结构化分析,以针对任何 SQL 数据库。

技术栈包括 sql-create-context 作为训练数据集,OpenLLaMa 作为基础模型,PEFT 用于微调,Modal 用于云计算,LlamaIndex 用于推理抽象。

微调评估器#

在这些教程中,我们旨在将 GPT-4 评判员(或评估员)蒸馏到 GPT-3.5 评判员上。最近观察到,GPT-4 评判员可以与人工评估员达成高度一致(例如,参见 https://arxiv.org/pdf/2306.05685.pdf)。

因此,通过微调 GPT-3.5 评判员,我们或许能够以较低的成本达到 GPT-4 的水平(以及由此带来的人机一致性)。

微调交叉编码器以进行重排序#

通过微调交叉编码器,我们可以尝试提高在私有数据上的重排序性能。

重排序是高级检索中的关键步骤,其中从许多来源检索到的节点使用单独的模型进行重排序,以便最相关的节点排在前面。

在此示例中,我们使用 sentence-transformers 包,基于 QASPER 数据集生成的数据集来帮助微调交叉编码器模型。

Cohere 定制重排序器#

通过使用 CohereAI 训练定制重排序器,我们可以尝试提高在私有数据上的重排序性能。

重排序是高级检索流程中的关键步骤。此步骤涉及使用单独的模型对初始检索阶段检索到的节点进行重新组织。目标是确保最相关的节点获得优先权并排在前面。

在此示例中,我们使用 cohere 定制重排序器训练模块,在您的领域或特定数据集上创建重排序器以提高检索性能。