Torchtune项目中的偏好数据集使用指南
什么是偏好数据集?
偏好数据集是用于奖励建模(Reward Modeling)的特殊数据集类型,主要用于微调基础模型以捕捉人类偏好。在Torchtune项目中,这类数据集通常与直接偏好优化(Direct Preference Optimization, DPO)配方配合使用。
偏好数据集的核心特点是包含成对的"偏好比较"数据,每个样本通常包含:
- 相同的提示(prompt)
- 两个不同的模型响应(completion)
- 人工标注的偏好标签(哪个响应更优)
偏好数据集的结构
典型的偏好数据集包含两个关键列:
- chosen:标注者偏好的响应
- rejected:标注者不偏好的响应
每个列中的内容通常是对话形式的JSON列表,包含用户和助手之间的多轮交互。例如:
{
"chosen_conversations": [
{"role": "user", "content": "如何修补裤子上的洞?"},
{"role": "assistant", "content": "可以使用针线进行修补。"}
],
"rejected_conversations": [
{"role": "user", "content": "如何修补裤子上的洞?"},
{"role": "assistant", "content": "直接扔掉买新的。"}
]
}
在Torchtune中使用偏好数据集
Torchtune提供了preference_dataset
函数作为处理偏好数据集的主要入口。以下是使用本地JSON文件的示例:
from torchtune.models.mistral import mistral_tokenizer
from torchtune.datasets import preference_dataset
# 初始化分词器
tokenizer = mistral_tokenizer(
path="/path/to/tokenizer.model",
prompt_template="torchtune.models.mistral.MistralChatTemplate",
max_seq_len=8192,
)
# 定义列映射
column_map = {
"chosen": "chosen_conversations",
"rejected": "rejected_conversations"
}
# 加载数据集
ds = preference_dataset(
tokenizer=tokenizer,
source="json",
column_map=column_map,
data_files="my_preference_dataset.json",
train_on_input=False,
split="train",
)
配置文件方式
Torchtune也支持通过YAML配置文件加载偏好数据集:
tokenizer:
_component_: torchtune.models.mistral.mistral_tokenizer
path: /path/to/tokenizer.model
prompt_template: torchtune.models.mistral.MistralChatTemplate
max_seq_len: 8192
dataset:
_component_: torchtune.datasets.preference_dataset
source: json
data_files: my_preference_dataset.json
column_map:
chosen: chosen_conversations
rejected: rejected_conversations
train_on_input: False
split: train
内置偏好数据集
Torchtune提供了一些内置的偏好数据集加载器:
-
HH-RLHF Helpful数据集:包含有帮助和无帮助的对话比较
from torchtune.datasets import hh_rlhf_helpful_dataset
-
Stack Exchange配对数据集:来自Stack Exchange的问题回答对
from torchtune.datasets import stack_exchange_paired_dataset
从Hugging Face加载数据集
Torchtune支持直接从Hugging Face加载偏好数据集:
from torchtune.datasets import preference_dataset
ds = preference_dataset(
tokenizer=tokenizer,
source="hendrydong/preference_700K",
split="train",
)
数据处理细节
在预处理阶段,Torchtune会对偏好数据集进行以下处理:
- 使用指定的分词器对文本进行编码
- 根据
train_on_input
参数决定是否在训练中使用输入文本 - 生成适当的标签掩码(label masks)
- 确保"chosen"和"rejected"样本的长度一致
最佳实践
- 数据质量:确保偏好标注的一致性,这对模型学习人类偏好至关重要
- 多样性:覆盖各种场景和问题类型,避免偏见
- 评估:保留部分数据用于验证模型是否真正学会了偏好
- 数据量:DPO通常需要比监督微调更多的数据
通过合理使用Torchtune提供的偏好数据集工具,开发者可以高效地训练出更符合人类偏好的语言模型。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考