SFT数据集¶
- class torchtune.datasets.SFTDataset(*, source: str, message_transform: 转换, model_transform: 转换, filter_fn: Optional[Callable] = None, **load_dataset_kwargs: Dict[str, Any])[source]¶
用于从Hugging Face Hub、本地文件或远程文件创建任何监督微调数据集的主要类。此类支持用于微调的指令、聊天、工具或多模态数据。在高层次上,此类将从源加载数据,并在检索样本时应用以下预处理步骤:
数据集特定的转换。这通常是每个数据集独有的,并将必要的列提取到torchtune的
消息格式中,这是一个用于所有模型分词器的标准化API。特定模型的转换或标记化,带有可选的提示模板
所有数据集都被格式化为
消息的列表,因为在微调过程中,数据集可以被视为与模型或AI助手的“对话”。因此,我们可以将所有文本内容标准化为分配给角色的对话中的消息:"system"消息包含系统提示"user"消息包含输入到模型的提示"assistant"消息是模型的响应,也是你实际想要直接训练和计算损失的内容"ipython"消息是工具调用的返回结果
聊天数据集是多轮用户-助手消息。指令数据集通常涉及特定指令和模型响应的单轮对话。工具数据集是一种包含ipython消息的聊天数据集。多模态数据集是一种将媒体融入用户消息的聊天数据集。
消息构成了所有分词器 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。如果配置了提示模板,分词器将处理提示模板。- Parameters:
source (str) – Hugging Face 上数据集仓库的路径。对于本地数据集, 将 source 定义为数据文件类型(例如“json”、“csv”、“text”),并在
data_files中传递文件路径。有关更多详细信息,请参阅 Hugging Face 的load_dataset。message_transform (Transform) – 可调用函数,用于从样本中提取所需字段并将文本内容转换为
消息列表。预计最终的消息列表将存储在"messages"键中。model_transform (Transform) – 可调用对象,在从
message_transform创建消息列表后,对样本应用模型特定的预处理。这包括标记化和任何模态特定的转换。预计至少返回"tokens"和"mask"键。filter_fn (可选[Callable]) – 用于在预处理之前过滤数据集的可调用对象。有关更多详细信息,请参阅Hugging Face的文档。
**load_dataset_kwargs (Dict[str, Any]) – 传递给
load_dataset的额外关键字参数。有关更多详细信息,请参阅 Hugging Face 的 API 参考。