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、本地文件或远程文件创建任何监督微调数据集的主要类。此类支持用于微调的指令、聊天、工具或多模态数据。从较高层面上讲,此类将从源加载数据,并在检索样本时应用以下预处理步骤
特定于数据集的转换。这通常是每个数据集独有的,并将必要的列提取到 torchtune 的
Message
格式中,这是所有模型分词器标准化的 API。特定于模型的转换或分词,以及可选的提示模板
所有数据集都格式化为
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 (可选[可调用]) – 在任何预处理之前用于过滤数据集的可调用函数。 有关更多详细信息,请参见 Hugging Face 文档。
**load_dataset_kwargs (字典[str, 任何]) – 传递给
load_dataset
的额外关键字参数。 有关更多详细信息,请参见 Hugging Face 的 API 参考。