1.概述
今天我们将深入探索ChatGPT的两项核心技术:Fine-tuning(微调)和Embeddings(嵌入)。这些技术在现代自然语言处理领域扮演着至关重要的角色,为模型的性能提升和适应特定任务需求提供了关键支持。ChatGPT作为GPT家族的一员,已经在多个领域展现了出色的表现,而其背后的Fine-tuning和Embeddings技术则是其成功的关键因素之一。
2.内容
2.1 什么是Fine-tuning
Fine-tuning,又称微调,是指在预训练模型(如GPT-3)的基础上,通过在特定任务上继续训练模型,使其适应特定任务的需求。GPT-3在大规模文本语料上进行了预训练,学会了丰富的语言知识和模式。然而,要使模型在特定任务上表现出色,就需要对其进行进一步的微调。
ChatGPT的Fine-tuning涉及到将模型暴露在各种对话和语境中,以便它能够更好地理解并生成自然对话。举个例子,如果我们想要让ChatGPT用于医疗咨询,Fine-tuning的过程将包括让模型学习医学知识、专业术语和与患者交流的最佳实践。这种Fine-tuning使得ChatGPT能够根据任务的特定上下文作出更准确的回应。
微调可让你通过 API 提供以下功能,从而更充分地利用可用模型:
- 比提示更高质量的结果
- 能够训练超出提示范围的示例
- 由于提示较短而节省了代币
- 更低的延迟请求
GPT 模型已经过大量文本的预训练。为了有效地使用模型,在提示中包含说明,有时还包含几个示例。使用演示来展示如何执行任务通常称为“小样本学习”。
微调通过训练超出提示范围的更多示例来改进小样本学习,让你在大量任务上取得更好的结果。一旦模型经过微调,你就不需要在提示中提供那么多示例。这可以节省成本并实现更低延迟的请求。
在较高层面上,微调涉及以下步骤:
- 准备并上传训练数据
- 训练新的微调模型
- 使用你的微调模型
2.2 哪些模型可以进行微调
目前可对以下型号进行微调:
- gpt-3.5-turbo-0613(推荐)
- babbage-002
- davinci-002
目前gpt-3.5-turbo在结果和易用性方面成为大多数用户的正确模型。
2.3 何时使用微调
微调 GPT 模型可以使其更好地适应特定应用,但这需要仔细投入时间和精力。建议首先尝试通过 Prompt 工程、Prompt Chaining(将复杂的任务分解为多个Prompt)和函数调用来获得良好的结果,主要原因是:
- 对于许多任务,模型最初可能表现不佳,但通过更好的 Prompt,我们可以取得更好的结果,并且可能不需要进行微调
- 迭代 Prompt 和其他策略比微调迭代具有更快的反馈循环,后者需要创建数据集并运行训练作业
- 在仍然需要微调的情况下,最初的 Prompt 工程工作不会浪费 - 在微调数据中使用良好的 Prompt(或将 Prompt Chaining /工具使用与微调相结合)时,我们通常会看到最佳结果
GPT 最佳实践指南提供了一些最有效的策略和策略的背景知识,无需微调即可获得更好的性能。
2.4 常见用例
微调可以改善结果的一些常见用例:
- 设置风格、基调、格式或其他定性方面
- 提高产生所需输出的可靠性
- 纠正未能遵循复杂提示的问题
- 以特定方式处理许多边缘情况
- 执行难以在提示中阐明的新技能或任务
思考这些案例的一种高级方法是“展示而不是讲述”更容易。在接下来的部分中,我们将探讨如何设置用于微调的数据以及微调可以提高基准模型性能的各种示例。
微调有效的另一种情况是通过替换 GPT-4 或使用较短的 Prompt 来降低成本和/或延迟,而不牺牲质量。gpt-3.5-turbo如果您可以使用 GPT-4 获得良好的结果,那么您通常可以通过对 GPT-4 补全进行微调(可能还需要缩短指令提示)来使用微调模型达到类似的质量。
2.5 准备数据集
一旦你确定微调是正确的解决方案(即已经尽可能优化了 Prompt 并确定了模型仍然存在的问题),你将需要准备数据来训练模型。你应该创建一组多样化的演示对话,这些对话类似于您要求模型在生产中的推理时响应的对话。
数据集中的每个示例都应该是与我们的聊天完成 API 格式相同的对话,特别是消息列表,其中每条消息都有角色、内容和可选名称。至少一些训练示例应该直接针对提示模型未按预期运行的情况,并且数据中提供的辅助消息应该是您希望模型提供的理想响应。
2.6 格式示例
在此示例中,我们的目标是创建一个偶尔给出讽刺性响应的聊天机器人,这是我们可以为数据集创建的三个训练示例(对话):
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]} {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]} {"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}