外观
生成你自己的 LLM 微调数据集(IFT)
Generate Your Own LLM Fine-tuning Dataset(IFT)
一个 LLM 一旦完成预训练,它就只会像续写一本书或一篇文章中的长文本那样,简单地把句子接着写下去。
举例来说,看看下面这个例子,就能理解一个仅完成预训练的 LLM 在被提示时会有怎样的表现:

用现有的 LLM 生成一份合成数据集,再拿它来做微调,可以改善这一点。
这份合成数据会包含人为构造的人类与 AI 互动的示例。
看看这个样例:

这个过程被称为指令微调(instruction fine-tuning),下面的动画对其做了说明:
Distilabel 是一个开源框架,可以借助 LLM 方便地生成特定领域的合成文本数据。
看看下面的内容,了解一下其背后的流程:

- 输入一条指令。
- 两个 LLM 分别生成回复。
- 一个作为「裁判」的 LLM 对这些回复进行评分。
- 把最好的回复和该指令配成一对。
这样你就得到了合成数据集!
接下来,让我们看看代码。
首先,我们从一些常规的导入(import)开始:

接下来,我们用 Ollama 在本地加载 Llama-3 模型:

然后,我们来定义我们的 pipeline:

- 首先,加载数据集(稍后我们会把它传进去)。
- 接下来,生成两条回复。
- 完成后,把这两条回复合并到同一列中(这一步背后,还会为第三个 LLM 创建一个提示词模板)。
- 接着,用一个 LLM 来评估这些回复。
- 最后,定义并运行这个 pipeline。
定义好 pipeline 之后,我们需要给它一份种子数据集(seed dataset)来执行。
种子数据集能帮助它生成新的、但风格相似的样本。因此,我们用种子数据集执行 pipeline,方式如下:

搞定!
这样一来,就生成了我们想要的「指令—回复」合成数据集。
看看下面这个样例:

是不是很简单?
这样就产出了一份可以直接用来微调 LLM 的数据集。
到目前为止,我们探讨了如何用 LoRA 及其变体高效地微调模型,也了解了指令微调通常会用到哪种数据。
接下来的问题是:不同的微调目标,究竟会如何改变学习过程?
大致来说,微调可以分为两大类。
- 有监督微调(SFT, Supervised Fine-Tuning)
- 强化微调(RFT, Reinforcement Fine-Tuning)
- 两者都会用 LoRA 或类似的 PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)方法来更新模型,但它们的目标和训练信号截然不同。
