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 Face 的load_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_dataset
的split
参数。您可以使用此参数加载给定拆分的子集,例如split="train[:10%]"
。默认为 “train”。**load_dataset_kwargs (Dict[str, Any]) – 传递给
load_dataset
的其他关键字参数,例如data_files
或split
。
示例
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 – 如果不支持对话格式