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, 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,则提示将被屏蔽(令牌被替换为 -100)。
- 参数::
tokenizer (ModelTokenizer) – 模型使用的分词器,该模型实现了
tokenize_messages
方法。source (str) – Hugging Face 上数据集存储库的路径。对于本地数据集,将 source 定义为数据文件类型(例如,“json”、“csv”、“text”),在
data_files
中传递文件路径,并将split="train"
设置为split="train"
。有关更多详细信息,请参见 Hugging Face 的load_dataset
。column_map (可选[Dict[str, str]]) – 消息转换中预期列“chosen”和“rejected”到数据集中的新列名的映射
ChosenRejectedToMessages
。键应为“chosen”和“rejected”,值应为实际列名。如果为 None,则保留默认列“chosen”和“rejected”。train_on_input (bool) – 模型是否在提示上进行训练。默认为 False。
new_system_prompt (可选[str]) – 如果指定,则在选择和拒绝的每个样本前添加系统消息。这可以作为指导模型响应的指令。设置此项将覆盖数据集中已存在的任何系统消息。默认为 None。
split (str) –
split
为datasets.load_dataset
的参数。您可以使用此参数加载给定拆分的子集,例如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
- 返回值:
从源配对数据构建的偏好数据集。
- 返回类型: