快捷方式

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) – splitdatasets.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
返回值:

从源配对数据构建的偏好数据集。

返回类型:

PreferenceDataset

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取初学者和高级开发人员的深入教程

查看教程

资源

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

查看资源