快捷方式

chat_dataset

torchtune.datasets.chat_dataset(tokenizer: ModelTokenizer, *, source: str, conversation_column: str, conversation_style: str, train_on_input: bool = False, new_system_prompt: Optional[str] = None, packed: bool = False, filter_fn: Optional[Callable] = None, split: str = 'train', **load_dataset_kwargs: Dict[str, Any]) Union[SFTDataset, PackedDataset][source]

配置包含用户和模型助手之间对话的自定义数据集。

此构建器函数可用于直接从 yaml 配置文件配置自定义聊天数据集,作为 SFTDataset 的替代方案,因为它旨在方便配置。

数据集应包含一列,其中包含对话

|  conversations                         |
|----------------------------------------|
| [{"role": "user", "content": Q1},      |
|  {"role": "assistant", "content": A1}] |

这将转换为

messages = [
    Message(role="user", content="Q1"),
    Message(role="assistant", content="A1"),
]

然后,将此消息列表进行分词化以用于模型训练。

您的对话可能具有不同的结构,例如不同的角色名称或 json 结构中不同的键。您可以使用 conversation_style 参数从标准格式(如 “sharegpt”(参见 ShareGPTToMessages)或 “openai”(参见 OpenAIToMessages))中进行选择。如果您的数据集不属于这些格式之一,我们建议创建一个自定义消息转换,并在类似于 chat_dataset 的自定义数据集构建器函数中使用它。

如果您的列名不同,请使用 conversation_column 参数指向包含对话的列。

训练期间提示的掩码由 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 中传入文件路径。有关更多详细信息,请参阅 Hugging Faceload_dataset

  • conversation_column (str) – 包含对话的列的名称。

  • conversation_style (str) – 指定数据集中对话的预期样式的字符串,用于自动转换为 Message 结构。支持的样式为:“sharegpt”、“openai”

  • train_on_input (bool) – 模型是否在提示上进行训练。默认为 False。

  • new_system_prompt (Optional[str]) – 如果指定,则预先添加系统消息。这可以用作指导模型响应的指令。默认为 None。

  • packed (bool) – 是否在训练之前将数据集打包到 max_seq_len。默认为 False。

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

  • split (str) – datasets.load_datasetsplit 参数。您可以使用此参数加载给定拆分的子集,例如 split="train[:10%]"。默认为 “train”。

  • **load_dataset_kwargs (Dict[str, Any]) – 传递给 load_dataset 的其他关键字参数,例如 data_filessplit

示例

my_dataset.json
[
    {
        "conversations": [
            {
                "from": "human",
                "value": "What time is it in London?",
            },
            {
                "from": "gpt",
                "value": "It is 10:00 AM in London.",
            },
        ],
    },
    {
        "conversations": [
            ...
        ],
    },
    ...,
]
>>> from torchtune.datasets import chat_dataset
>>> dataset = chat_dataset(
...     tokenizer=tokenizer,
...     source="json",
...     data_files="my_dataset.json",
...     conversation_column="conversations",
...     conversation_style="sharegpt",
...     train_on_input=False,
...     packed=False,
...     split="train",
... )
>>> tokens = dataset[0]["tokens"]
>>> tokenizer.decode(tokens)
"What time is it in London?It is 10:00 AM in London."

这也可以通过 yaml 配置文件完成

dataset:
  _component_: torchtune.datasets.chat_dataset
  source: json
  data_files: my_dataset.json
  conversation_column: conversations
  conversation_style: sharegpt
  train_on_input: False
  packed: False
  split: train
返回:

配置的 SFTDataset

PackedDataset,如果 packed=True

返回类型:

Union[SFTDataset, PackedDataset]

Raises:

ValueError – 如果不支持对话格式

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源