快捷方式

SFTDataset

class torchtune.datasets.SFTDataset(*, source: str, message_transform: Transform, model_transform: Transform, filter_fn: Optional[Callable] = None, **load_dataset_kwargs: Dict[str, Any])[source]

用于创建任何数据集以进行监督式微调(来自 Hugging Face Hub、本地文件或远程文件)的主要类。此类支持指令、聊天、工具或多模态数据进行微调。从高层次来看,此类将从源加载数据,并在检索样本时应用以下预处理步骤

  1. 特定于数据集的转换。这通常是每个数据集独有的,并将必要的列提取到 torchtune 的 Message 格式,这是所有模型分词器的标准化 API。

  2. 模型特定的转换或分词,带有可选的提示模板

所有数据集都格式化为 Message 列表,因为对于微调,数据集可以被视为与模型或 AI 助手的“对话”。因此,我们可以将所有文本内容标准化为分配给角色的对话中的消息

  • "system" 消息包含系统提示

  • "user" 消息包含模型的输入提示

  • "assistant" 消息是模型的响应,也是您实际想要训练和直接计算损失的内容

  • "ipython" 消息是来自工具调用的返回

聊天数据集是多轮用户-助手消息。指令数据集通常是单轮,涉及特定指令和模型的响应。工具数据集是一种聊天数据集,其中包括 ipython 消息。多模态数据集是一种聊天数据集,它将媒体整合到用户消息中。

Message 构成所有分词器 API 期望的核心数据单元。此类中确保任何数据集都转换为此格式的关键组件是 message_transform。这是一个可调用类,它接受样本字典(通常是来自源数据集的单行),以任何可配置的方式处理样本,以输出消息列表

[
    Message(
        role=<system|user|assistant|ipython>,
        content=<message>,
    ),
    ...
]

对于任何自定义数据集,请使用 message_transform 来包含所有预处理,以返回消息列表。

任何需要发生的模型特定预处理都可以通过 model_transform 参数进行配置。这是另一个可调用类,其中包含与您正在微调的模型相关的任何自定义逻辑,并将延续到推理。例如,文本 + 图像多模态数据集需要以特定于模型正在使用的视觉编码器的方式处理图像,并且与特定数据集无关。

分词由 model_transform 处理。所有 ModelTokenizer 都可以被视为 model_transform,因为它使用模型特定的分词器将从 message_transform 输出的消息列表转换为模型用于训练的标记。纯文本数据集将简单地将 ModelTokenizer 传递到 model_transform 中。分词器处理提示模板(如果已配置)。

参数:
  • source (str) – Hugging Face 上数据集存储库的路径。对于本地数据集,将源定义为数据文件类型(例如“json”、“csv”、“text”),并在 data_files 中传入文件路径。有关更多详细信息,请参阅 Hugging Face 的 load_dataset

  • message_transform (Transform) – 可调用对象,用于键入样本中所需的字段,并将文本内容转换为 Message 列表。预计最终消息列表将存储在 "messages" 键中。

  • model_transform (Transform) – 可调用对象,用于在从 message_transform 创建消息列表后,将模型特定的预处理应用于样本。这包括分词和任何特定于模态的转换。预计至少返回 "tokens""mask" 键。

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

  • **load_dataset_kwargs (Dict[str, Any]) – 要传递给 load_dataset 的其他关键字参数。有关更多详细信息,请参阅 Hugging Face 的 API 参考

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源