preference_dataset¶
- torchtune.datasets.preference_dataset(tokenizer: ModelTokenizer, *, source: str, column_map: Optional[Dict[str, str]] = None, train_on_input: bool = False, new_system_prompt: Optional[str] = None, filter_fn: Optional[Callable] = None, split: str = 'train', **load_dataset_kwargs: Dict[str, Any]) PreferenceDataset [源代码]¶
配置包含用户和模型助手之间交互的自定义偏好数据集。
此构建器函数可用于直接从 yaml 配置文件配置自定义偏好数据集,作为
PreferenceDataset
的替代方案,因为它旨在对配置友好。此函数要求数据集具有“chosen”和“rejected”列。单个样本将在“chosen”和“rejected”列之间共享相同的系统 +/ 用户提示,后跟一轮或多轮用户和助手消息
| chosen | rejected | |----------------------------------------|----------------------------------------| | [{"role": "user", "content": Q1}, | [{"role": "user", "content": Q1}, | | {"role": "assistant", "content": C1}] | {"role": "assistant", "content": R1}] |
此示例将转换为
chosen_messages = [ Message(role="user", content="Q1"), Message(role="assistant", content="C1"), ] rejected_messages = [ Message(role="user", content="Q1"), Message(role="assistant", content="R1"), ]
然后对这些消息列表进行分词以进行模型训练。目前,此函数仅支持与
OpenAIToMessages
相同的对话,并且不支持自定义消息格式。如果您的数据集不遵循此格式,我们建议创建类似于
ChosenRejectedToMessages
的自定义消息转换,并在类似于preference_dataset
的自定义数据集构建器函数中使用它。训练期间提示的掩码由
train_on_input
标志控制,默认情况下设置为False
。如果
train_on_input
为 True,则提示在训练期间使用并计入损失。如果
train_on_input
为 False,则提示被屏蔽掉(token 替换为 -100)。
- 参数:
tokenizer (ModelTokenizer) – 模型使用的分词器,该模型实现了
tokenize_messages
方法。source (str) – Hugging Face 上数据集存储库的路径。对于本地数据集,将 source 定义为数据文件类型(例如“json”、“csv”、“text”),在
data_files
中传入文件路径,并将split="train"
设置为“train”。有关更多详细信息,请参阅 Hugging Face 的load_dataset
。column_map (Optional[Dict[str, str]]) – 从消息转换
ChosenRejectedToMessages
中的预期列“chosen”和“rejected”到数据集中的新列名的映射。键应为“chosen”和“rejected”,值应为实际列名。如果为 None,则保留默认列“chosen”和“rejected”。train_on_input (bool) – 模型是否在提示上进行训练。默认为 False。
new_system_prompt (Optional[str]) – 如果指定,则为 chosen 和 rejected 的每个样本添加系统消息前缀。这可以用作指导模型响应的说明。设置此项将覆盖数据集中已存在的任何系统消息。默认为 None。
filter_fn (Optional[Callable]) – 用于在任何预处理之前过滤数据集的可调用对象。有关更多详细信息,请参阅 Hugging Face 文档。
split (str) –
datasets.load_dataset
的split
参数。您可以使用此参数加载给定拆分的子集,例如split="train[:10%]"
。默认为“train”。**load_dataset_kwargs (Dict[str, Any]) – 传递给
load_dataset
的其他关键字参数。
示例
my_preference_dataset.json [ { "chosen_conversations": [ { "content": "What do I do when I have a hole in my trousers?", "role": "user" }, { "content": "Fix the hole.", "role": "assistant" } ], "rejected_conversations": [ { "content": "What do I do when I have a hole in my trousers?", "role": "user" }, { "content": "Take them off.", "role": "assistant" } ] } ]
>>> from torchtune.datasets import preference_dataset >>> column_map = { ... "chosen": "chosen_conversations", ... "rejected": "rejected_conversations" >>> } >>> dataset = preference_dataset( ... tokenizer=tokenizer, ... source="json", ... column_map=column_map, ... data_files="my_preference_dataset.json", ... train_on_input=False, ... split="train", >>> ) >>> tokenizer.decode(dataset[0]["chosen_input_ids"], skip_special_tokens=True) What do I do when I have a hole in my trousers?Fix the hole. >>> tokenizer.decode(dataset[0]["rejected_input_ids"], skip_special_tokens=True) What do I do when I have a hole in my trousers?Take them off.
这也可以通过 yaml 配置文件完成
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
- 返回:
从源配对数据构建的偏好数据集。
- 返回类型: