Shortcuts

偏好数据集

class torchtune.datasets.PreferenceDataset(*, source: str, message_transform: 转换, tokenizer: ModelTokenizer, filter_fn: Optional[Callable] = None, packed: bool = False, **load_dataset_kwargs: Dict[str, Any])[source]

通过偏好建模技术(例如,为RLHF训练偏好模型,或通过DPO直接优化模型)在来自Hugging Face Hub、本地文件或远程文件的偏好数据集上进行微调的主要类。此类要求数据集具有“选择”和“拒绝”的模型响应。这些通常是用户和助手之间的完整对话,分别位于不同的列中:

|  chosen                                |  rejected                              |
|----------------------------------------|----------------------------------------|
| [{"role": "user", "content": Q1},      | [{"role": "user", "content": Q1},      |
|  {"role": "assistant", "content": A1}] |  {"role": "assistant", "content": A2}] |

或者一个用户提示列,包含单独选择的和被拒绝的助手响应:

|  prompt  |  chosen  |  rejected  |
|----------|----------|------------|
|  Q1      |  A1      |  A2        |

在上述情况下,当格式为 prompt-chosen-rejected 时,仅支持单轮交互。

在高层次上,这个类将从源加载数据,并在检索样本时应用以下预处理步骤:

  1. 数据集特定的转换。这通常是每个数据集独有的,并将必要的提示和选择/拒绝列提取到torchtune的消息格式中,这是一个用于所有模型标记器的标准化API。

  2. 如果配置了可选的提示模板,则进行标记化

所有数据集都被格式化为消息的列表,因为偏好数据集可以被视为与模型或AI助手进行的被选择和拒绝的“对话”。因此,我们可以将所有文本内容标准化为分配给角色的对话中的消息:

  • "user" 消息包含输入到模型的提示

  • "assistant" 消息是模型的响应,也是你实际想要直接训练和计算损失的内容

消息 构成了所有分词器 API 期望的核心数据单元。确保任何数据集都能转换为这种格式的类的关键组件是 message_transform。这是一个可调用的类,它接收一个样本字典——通常是源数据集中的单行——并以任何可配置的方式处理样本,以输出消息列表:

[
    Message(
        role=<system|user|assistant|ipython>,
        content=<message>,
    ),
    ...
]

对于任何自定义数据集,使用message_transform来包含所有预处理,以返回消息列表。

Parameters:
  • source (str) – Hugging Face 上数据集仓库的路径。对于本地数据集, 将 source 定义为数据文件类型(例如“json”、“csv”、“text”),并在 data_files 中传递文件路径。有关更多详细信息,请参阅 Hugging Face 的 load_dataset

  • message_transform (Transform) – 可调用函数,用于从样本中提取所需字段并将文本内容转换为消息列表。预计最终的消息列表将存储在"chosen""rejected"键中。

  • tokenizer (ModelTokenizer) – 模型使用的分词器,实现了tokenize_messages方法。 由于PreferenceDataset仅支持文本数据,它需要一个 ModelTokenizer而不是SFTDataset中的model_transform

  • filter_fn (可选[Callable]) – 用于在预处理之前过滤数据集的可调用对象。有关更多详细信息,请参阅Hugging Face的文档

  • packed (bool) – 是否在训练前将数据集打包到max_seq_len。默认值为False。目前PreferenceDataset不支持打包,如果设置为True,将会引发ValueError

  • **load_dataset_kwargs (Dict[str, Any]) – 传递给 load_dataset 的额外关键字参数。有关更多详细信息,请参阅 Hugging Face 的 API 参考

Raises:

ValueError – 如果 packed 为 True,则 PreferenceDataset 不支持此功能。