Torchtune项目中的偏好数据集使用指南

Torchtune项目中的偏好数据集使用指南

什么是偏好数据集?

偏好数据集是用于奖励建模(Reward Modeling)的特殊数据集类型,主要用于微调基础模型以捕捉人类偏好。在Torchtune项目中,这类数据集通常与直接偏好优化(Direct Preference Optimization, DPO)配方配合使用。

偏好数据集的核心特点是包含成对的"偏好比较"数据,每个样本通常包含:

  • 相同的提示(prompt)
  • 两个不同的模型响应(completion)
  • 人工标注的偏好标签(哪个响应更优)

偏好数据集的结构

典型的偏好数据集包含两个关键列:

  1. chosen:标注者偏好的响应
  2. 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提供了一些内置的偏好数据集加载器:

  1. HH-RLHF Helpful数据集:包含有帮助和无帮助的对话比较

    from torchtune.datasets import hh_rlhf_helpful_dataset
    
  2. 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会对偏好数据集进行以下处理:

  1. 使用指定的分词器对文本进行编码
  2. 根据train_on_input参数决定是否在训练中使用输入文本
  3. 生成适当的标签掩码(label masks)
  4. 确保"chosen"和"rejected"样本的长度一致

最佳实践

  1. 数据质量:确保偏好标注的一致性,这对模型学习人类偏好至关重要
  2. 多样性:覆盖各种场景和问题类型,避免偏见
  3. 评估:保留部分数据用于验证模型是否真正学会了偏好
  4. 数据量:DPO通常需要比监督微调更多的数据

通过合理使用Torchtune提供的偏好数据集工具,开发者可以高效地训练出更符合人类偏好的语言模型。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余印榕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值