跳到内容

微调#

概述#

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

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

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

Embedding 微调优势#

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

LLM 微调优势#

  • 使其能够学习给定数据集上的某种风格
  • 使其能够学习在训练数据中可能较少代表的 DSL(例如 SQL)
  • 使其能够纠正通过 prompt engineering 可能难以修复的幻觉/错误
  • 使其能够将更好的模型(例如 GPT-4)提炼成更简单/更便宜的模型(例如 gpt-3.5,Llama 2)

与 LlamaIndex 的集成#

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

  • 微调 Embedding 以获得更好的检索性能
  • 微调 Llama 2 以更好地实现文本转 SQL
  • 微调 gpt-3.5-turbo 以提炼 gpt-4

微调 Embedding#

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

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

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

旧版

微调 LLM#

微调 GPT-3.5 以提炼 GPT-4#

我们提供了多份指南,展示如何使用 OpenAI 的微调端点微调 gpt-3.5-turbo,使其为 RAG/agent 输出 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 的水平(并间接与人类达成一致)。

微调 Cross-Encoder 以进行重排序#

通过微调 Cross-Encoder,我们可以尝试提高在我们私有数据上的重排序性能。

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

在此示例中,我们使用 sentence-transformers 包帮助微调 Cross-Encoder 模型,使用的数据集是基于 QASPER 数据集生成的。

Cohere 自定义重排序器#

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

重排序是高级检索过程中的关键步骤。此步骤涉及使用单独的模型重新组织从初始检索阶段检索到的节点。目标是确保最相关的节点被优先处理并排在前面。

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