快捷方式

PreferenceDataset

class torchtune.datasets.PreferenceDataset(*, source: str, message_transform: 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”(被拒绝的)响应。这些通常是用户和助手之间完整的对话,存储在不同的列中

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

或者是一个用户提示列,以及单独的被选择和被拒绝的助手响应

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

在上述格式为提示-被选择-被拒绝的情况下,仅支持单轮交互。

总体而言,当检索样本时,此类将从源加载数据并应用以下预处理步骤:

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

  2. 带有可选提示模板的分词(如果已配置)

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

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

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

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

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

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

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

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

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

  • filter_fn (Optional[Callable]) – 可调用对象,用于在任何预处理之前过滤数据集。更多详情请参阅 Hugging Face 文档

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

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

引发:

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

文档

查阅 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获取问题解答

查看资源