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])[源代码]¶
主要类,用于通过偏好建模技术(例如,训练用于 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 |
在上述 prompt-chosen-rejected 格式的情况下,仅支持单轮交互。
在较高层面,此类将从源加载数据,并在检索样本时应用以下预处理步骤
数据集特定的转换。这通常是每个数据集独有的,并将必要的提示和 chosen/rejected 列提取到 torchtune 的
Message
格式中,这是所有模型分词器的标准化 API。使用可选的提示模板进行分词(如果已配置)
所有数据集都被格式化为
Message
列表,因为偏好数据集可以被视为与模型或 AI 助手的已选择和已拒绝的“对话”。因此,我们可以将所有文本内容标准化为分配给角色的对话中的消息"user"
消息包含模型的输入提示"assistant"
消息是模型的响应,也是您实际想要训练并直接计算损失的内容
Message
构成了所有分词器 API 期望的核心数据单元。此类确保任何数据集都转换为此格式的关键组件是message_transform
。这是一个可调用类,它接受样本字典(通常是来自源数据集的单行),以任何可配置的方式处理样本,以输出消息列表[ Message( role=<system|user|assistant|ipython>, content=<message>, ), ... ]
对于任何自定义数据集,请使用
message_transform
来包含所有预处理,以返回消息列表。- 参数:
source (str) – Hugging Face 上数据集仓库的路径。对于本地数据集,将 source 定义为数据文件类型(例如“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 参考。
- Raises:
ValueError – 如果
packed
为 True,则PreferenceDataset
不支持此功能。