微调#
概述#
微调模型意味着在一组数据上更新模型本身,以多种方式改进模型。这可以包括提高输出质量、减少幻觉、整体记忆更多数据以及降低延迟/成本。
我们工具包的核心围绕着上下文学习/检索增强,这涉及到在推理模式下使用模型,而不是训练模型本身。
虽然微调也可以用来通过外部数据“增强”模型,但微调可以通过多种方式补充检索增强
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 上的适配器。它包含以下步骤:
- 使用 LlamaIndex 在任何非结构化上下文上生成合成问答数据集。
- 微调模型
- 评估模型。
微调可使检索评估指标提高 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 用于推理抽象。
- Llama 2 文本转 SQL 微调 (使用 Gradient.AI)
- Llama 2 文本转 SQL 微调 (使用 Modal, Repo)
- Llama 2 文本转 SQL 微调 (使用 Modal, Notebook)
微调评估器#
在这些教程中,我们的目标是将 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
自定义重排序器训练模块,在您的领域或特定数据集上创建重排序器,以提高检索性能。