微调#
概述#
微调模型意味着通过一组数据更新模型本身,以多种方式改进模型。这可以包括提高输出质量,减少幻觉,全面记忆更多数据,以及降低延迟/成本。
我们的工具包的核心围绕着上下文学习/检索增强,这涉及在推理模式下使用模型,而不是训练模型本身。
虽然微调也可以用于用外部数据“增强”模型,但微调可以在多种方式上补充检索增强:
嵌入微调的好处#
- 对嵌入模型进行微调可以在数据的训练分布上产生更有意义的嵌入表示 --> 导致更好的检索性能。
LLM微调的好处#
- 允许其在给定数据集上学习风格
- 允许其学习在训练数据中可能较少表示的DSL(例如 SQL)
- 允许其纠正可能难以通过提示工程修复的幻觉/错误
- 允许其将更好的模型(例如 GPT-4)提炼为更简单/更便宜的模型(例如 gpt-3.5,Llama 2)
与LlamaIndex的集成#
这是一个不断发展的指南,目前与LlamaIndex有三个关键集成。请查看下面的部分以获取更多详细信息!
- 通过微调嵌入以获得更好的检索性能
- 通过微调Llama 2以获得更好的文本到SQL
- 通过微调gpt-3.5-turbo来提炼gpt-4
嵌入微调#
我们创建了全面的指南,向您展示如何以不同方式微调嵌入,无论是模型本身(在这种情况下是bge
)在非结构化文本语料库上,还是在任何黑盒嵌入上进行适配器。它包括以下步骤:
- 使用LlamaIndex在任何非结构化上下文中生成合成问题/答案数据集。
- 对模型进行微调
- 评估模型。
微调可以使您的检索评估指标提高5-10%。然后,您可以将这个微调模型插入到您的RAG应用程序中,与LlamaIndex一起使用。
旧
微调LLM#
将GPT-3.5微调为提炼GPT-4#
我们有多个指南,展示如何使用OpenAI的微调端点来微调gpt-3.5-turbo,以输出RAG/agents的GPT-4响应。
我们使用GPT-4自动从任何非结构化上下文生成问题,并使用GPT-4查询引擎管道生成“地面真相”答案。我们的OpenAIFineTuningHandler
回调会自动记录问题/答案到数据集。
然后,我们启动一个微调作业,并获得一个提炼模型。我们可以使用Ragas来评估这个模型,以与一个简单的GPT-3.5管道进行基准测试。
旧
用于更好的结构化输出的微调#
微调的另一个用途是使模型更擅长输出结构化数据。 我们可以为OpenAI和Llama2都做到这一点。
通过微调Llama 2获得更好的文本到SQL#
在本教程中,我们将向您展示如何在文本到SQL数据集上微调Llama 2,然后使用它针对任何SQL数据库进行结构化分析,使用LlamaIndex抽象。
该堆栈包括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
自定义重新排序器训练模块来在您的领域或特定数据集上创建一个重新排序器,以提高检索性能。