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
输出的消息列表转换为模型用于训练的 token。纯文本数据集只需将ModelTokenizer
传递给model_transform
。如果配置了,分词器会处理提示模板。- 参数:
source (str) – Hugging Face 上数据集仓库的路径。对于本地数据集,将 source 定义为数据文件类型(例如 “json”、“csv”、“text”),并在
data_files
中传入文件路径。更多详细信息请参见 Hugging Face 的 文档。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 参考。