instruct_dataset¶
- torchtune.datasets.instruct_dataset(tokenizer: ModelTokenizer, *, source: str, column_map: Optional[Dict[str, str]] = None, 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] [源代码]¶
配置具有用户指令提示和模型响应的自定义数据集。
此构建器函数可用于直接从 yaml 配置文件配置自定义指令数据集,作为
SFTDataset
的替代方案,因为它被设计为对配置友好。数据集应遵循以下格式
| input | output | |-----------------|------------------| | "user prompt" | "model response" |
如果您的列名不同,您可以使用
column_map
参数来更改预期的列名。例如,如果您的数据集具有列"question"
和"answer"
,则可以使用column_map = {"input": "question", "output": "answer"}
在训练期间提示的掩码由
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
中传入文件路径,并将split="train"
设置为 “train”。 有关更多详细信息,请参阅 Hugging Face 的load_dataset
。column_map (Optional[Dict[str, str]]) – 用于将预期的 “input” 和 “output” 列名更改为数据集中实际列名的映射。键应为 “input” 和 “output”,值应为实际列名。 默认为 None,保留默认的 “input” 和 “output” 列名。
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 [ { "question": "What time is it in London?", "answer": "It is 10:00 AM in London.", }, { ... }, ..., ]
>>> from torchtune.datasets import instruct_dataset >>> dataset = instruct_dataset( ... tokenizer=tokenizer, ... source="json", ... data_files="my_dataset.json", ... column_map={ ... "input": "question", ... "output": "answer", ... }, ... 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.instruct_dataset source: json data_files: my_dataset.json column_map: input: question output: answer train_on_input: False packed: False split: train
- 返回值:
- 配置的
SFTDataset
或
PackedDataset
,如果packed=True
- 配置的
- 返回类型:
Union[SFTDataset, PackedDataset]
- Raises:
ValueError – 如果
packed=True
且未设置tokenizer.max_seq_len
。