Skip to content

生成你自己的 LLM 微调数据集(IFT)

Generate Your Own LLM Fine-tuning Dataset(IFT)

一个 LLM 一旦完成预训练,它就只会像续写一本书或一篇文章中的长文本那样,简单地把句子接着写下去。

举例来说,看看下面这个例子,就能理解一个仅完成预训练的 LLM 在被提示时会有怎样的表现:

fine tuning p87 1

用现有的 LLM 生成一份合成数据集,再拿它来做微调,可以改善这一点。

这份合成数据会包含人为构造的人类与 AI 互动的示例。

看看这个样例:

fine tuning p87 2

这个过程被称为指令微调(instruction fine-tuning),下面的动画对其做了说明:

Distilabel 是一个开源框架,可以借助 LLM 方便地生成特定领域的合成文本数据。

看看下面的内容,了解一下其背后的流程:

fine tuning p88 1

  • 输入一条指令。
  • 两个 LLM 分别生成回复。
  • 一个作为「裁判」的 LLM 对这些回复进行评分。
  • 把最好的回复和该指令配成一对。

这样你就得到了合成数据集!

接下来,让我们看看代码。

首先,我们从一些常规的导入(import)开始:

fine tuning p89 1

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

fine tuning p89 2

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

fine tuning p89 3

  • 首先,加载数据集(稍后我们会把它传进去)。
  • 接下来,生成两条回复。
  • 完成后,把这两条回复合并到同一列中(这一步背后,还会为第三个 LLM 创建一个提示词模板)。
  • 接着,用一个 LLM 来评估这些回复。
  • 最后,定义并运行这个 pipeline。

定义好 pipeline 之后,我们需要给它一份种子数据集(seed dataset)来执行。

种子数据集能帮助它生成新的、但风格相似的样本。因此,我们用种子数据集执行 pipeline,方式如下:

fine tuning p90 1

搞定!

这样一来,就生成了我们想要的「指令—回复」合成数据集。

看看下面这个样例:

fine tuning p90 2

是不是很简单?

这样就产出了一份可以直接用来微调 LLM 的数据集。

到目前为止,我们探讨了如何用 LoRA 及其变体高效地微调模型,也了解了指令微调通常会用到哪种数据。

接下来的问题是:不同的微调目标,究竟会如何改变学习过程?

大致来说,微调可以分为两大类。

  • 有监督微调(SFT, Supervised Fine-Tuning)
  • 强化微调(RFT, Reinforcement Fine-Tuning)
  • 两者都会用 LoRA 或类似的 PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)方法来更新模型,但它们的目标和训练信号截然不同。

fine tuning p91 1

本站内容仅供学习交流,版权归原作者所有。