目录

消息转换

消息转换将原始示例词典从数据集转换为 torchtune 的结构。一旦数据表示为 Messages,torchtune 将处理 tokenization 并为模型做准备。

配置消息转换

我们的大多数内置消息转换都包含用于控制输入掩码 () 的参数, 添加系统提示符 (),并更改预期的列名 ()。 这些在我们的数据集生成器中公开,因此您不必担心消息转换本身,可以直接从配置中配置它。 有关更多详细信息,请参阅 示例 instruct 数据集示例聊天数据集train_on_inputnew_system_promptcolumn_map

自定义消息转换

如果我们内置的消息转换没有很好地配置您的特定数据集, 您可以完全灵活地创建自己的类。只需从类继承并在方法中添加代码即可。__call__

一个简单的人为示例是将数据集中的一列作为用户消息,将另一列作为用户消息 列作为模型响应。事实上,这与 非常相似。

from torchtune.modules.transforms import Transform
from torchtune.data import Message
from typing import Any, Mapping

class MessageTransform(Transform):
    def __call__(self, sample: Mapping[str, Any]) -> Mapping[str, Any]:
        return [
            Message(
                role="user",
                content=sample["input"],
                masked=True,
                eot=True,
            ),
            Message(
                role="assistant",
                content=sample["output"],
                masked=False,
                eot=True,
            ),
        ]

sample = {"input": "hello world", "output": "bye world"}
transform = MessageTransform()
messages = transform(sample)
print(messages)
# [<torchtune.data._messages.Message at 0x7fb0a10094e0>,
# <torchtune.data._messages.Message at 0x7fb0a100a290>]
for msg in messages:
    print(msg.role, msg.text_content)
# user hello world
# assistant bye world

有关如何操作对象的更多详细信息,请参阅创建消息

要将其用于您的数据集,您必须创建一个使用底层 dataset 类、 .

# In data/dataset.py
from torchtune.datasets import SFTDataset

def custom_dataset(tokenizer, **load_dataset_kwargs) -> SFTDataset:
    message_transform = MyMessageTransform()
    return SFTDataset(
        source="json",
        data_files="data/my_data.json",
        split="train",
        message_transform=message_transform,
        model_transform=tokenizer,
        **load_dataset_kwargs,
    )

这可以直接从配置中使用。

dataset:
  _component_: data.dataset.custom_dataset

示例消息转换

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源