微调
微调模型意味着在一组数据上更新模型本身,以多种方式改进模型。这可以包括提高输出质量、减少幻觉、更全面地记忆数据以及降低延迟/成本。
我们工具包的核心围绕上下文学习/检索增强展开,这涉及在推理模式下使用模型,而非训练模型本身。
虽然微调也可用于通过外部数据“增强”模型,但微调可以通过多种方式补充检索增强:
- 微调嵌入模型可以在训练数据分布上获得更有意义的嵌入表示——从而带来更好的检索性能。
- 允许它在给定数据集上学习一种风格
- 允许它学习在训练数据中可能较少出现的领域特定语言(例如 SQL)
- 允许它修正那些可能难以通过提示工程修复的幻觉/错误
- 允许它将更优模型(例如 GPT-4)提炼为更简单/更经济的模型(例如 gpt-3.5、Llama 2)
与LlamaIndex的集成
Section titled “Integrations with LlamaIndex”这是一份不断演进的指南,目前包含与LlamaIndex的三个关键集成。请查看以下章节了解更多详情!
- 微调嵌入向量以提升检索性能
- 微调 Llama 2 以改进文本到 SQL 转换
- 微调 gpt-3.5-turbo 以提炼 gpt-4
我们创建了全面的指南,展示如何以不同方式微调嵌入向量,无论是针对非结构化文本语料库调整模型本身(在本例中为bge),还是为任何黑盒嵌入添加适配器。该流程包含以下步骤:
- 使用LlamaIndex在任何非结构化上下文上生成合成问答数据集。
- 微调模型
- 评估模型。
微调可使检索评估指标提升5-10%。随后您可以将这个经过微调的模型通过LlamaIndex接入您的RAG应用程序。
旧版
微调 GPT-3.5 以提炼 GPT-4
Section titled “Fine-tuning GPT-3.5 to distill GPT-4”我们有多份指南展示如何使用 OpenAI 的微调端点对 gpt-3.5-turbo 进行微调,使其为 RAG/智能体输出 GPT-4 级别的响应。
我们使用GPT-4从任何非结构化上下文中自动生成问题,并使用GPT-4查询引擎流程生成“真实答案”。我们的OpenAIFineTuningHandler回调函数会自动将问题/答案记录到数据集中。
然后我们启动一个微调任务,并得到一个蒸馏模型。我们可以使用Ragas评估该模型,以对比基准测试一个简单的GPT-3.5流程。
旧版
微调模型的另一个应用场景是让模型更擅长输出结构化数据。 我们可以对OpenAI和Llama2都进行这样的优化。
微调Llama 2以提升文本转SQL能力
Section titled “Fine-tuning Llama 2 for Better Text-to-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 自定义重排器
Section titled “Cohere Custom Reranker”通过使用CohereAI训练自定义重排序器,我们可以尝试在私有数据上提升重排序性能。
重排序是高级检索流程中的关键步骤。该步骤涉及使用独立模型对初始检索阶段获取的节点进行重新排序。其目标是确保最相关的节点被优先处理并排列在前。
在此示例中,我们使用 cohere 自定义重排序器训练模块,在您的领域或特定数据集上创建重排序器以提升检索性能。