PyTorch Torchtune项目中的聊天数据集使用指南

PyTorch Torchtune项目中的聊天数据集使用指南

torchtune A Native-PyTorch Library for LLM Fine-tuning torchtune 项目地址: https://gitcode.com/gh_mirrors/to/torchtune

什么是聊天数据集

聊天数据集是一种特殊格式的对话数据集,它记录了用户和AI助手之间的多轮对话交互。与传统的自由文本数据集不同,聊天数据集具有明确的结构化格式,能够更好地训练模型进行对话式响应。

典型的聊天数据集示例如下:

[
    {"role": "user", "content": "生命、宇宙及一切的终极答案是什么?"},
    {"role": "assistant", "content": "答案是42。"},
    {"role": "user", "content": "这太荒谬了"},
    {"role": "assistant", "content": "我也这么觉得。"},
]

为什么使用聊天数据集

  1. 结构化对话训练:相比自由文本预测,聊天数据集能更好地训练模型理解对话上下文
  2. 多轮对话能力:帮助模型学习如何维持连贯的对话流
  3. 角色区分:明确区分用户输入和AI响应,提高对话质量

在Torchtune中使用聊天数据集

Torchtune提供了chat_dataset构建器作为主要入口点,支持从本地文件或Hugging Face数据集加载聊天格式数据。

基本使用示例

from torchtune.models.mistral import mistral_tokenizer
from torchtune.datasets import chat_dataset

# 初始化分词器
m_tokenizer = mistral_tokenizer(
    path="/tmp/Mistral-7B-v0.1/tokenizer.model",
    prompt_template="torchtune.models.mistral.MistralChatTemplate",
    max_seq_len=8192,
)

# 加载聊天数据集
ds = chat_dataset(
    tokenizer=m_tokenizer,
    source="json",
    data_files="data/my_data.json",
    split="train",
    conversation_column="conversations",
    conversation_style="sharegpt",
    train_on_input=True,
    new_system_prompt=None,
)

配置文件示例

tokenizer:
  _component_: torchtune.models.mistral.mistral_tokenizer
  path: /tmp/Mistral-7B-v0.1/tokenizer.model
  prompt_template: torchtune.models.mistral.MistralChatTemplate
  max_seq_len: 8192

dataset:
  _component_: torchtune.datasets.chat_dataset
  source: json
  data_files: data/my_data.json
  split: train
  conversation_column: conversations
  conversation_style: sharegpt
  train_on_input: True
  new_system_prompt: null

聊天数据集的常见格式

聊天数据集通常包含一个名为"conversations"或"messages"的列,其中每个样本包含一个主题下的多轮对话消息列表。消息可能包括系统提示、用户与助手的多轮对话以及工具调用/返回。

标准格式示例

|  conversations                                               |
|--------------------------------------------------------------|
| [{"role": "user", "content": "今天星期几?"},                |
|  {"role": "assistant", "content": "今天是星期二。"}]         |
| [{"role": "user", "content": "那明天呢?"},                  |
|  {"role": "assistant", "content": "明天是星期三。"}]         |

从不同来源加载聊天数据集

从Hugging Face加载

from torchtune.models.gemma import gemma_tokenizer
from torchtune.datasets import chat_dataset

g_tokenizer = gemma_tokenizer("/tmp/gemma-7b/tokenizer.model")
ds = chat_dataset(
    tokenizer=g_tokenizer,
    source="Open-Orca/SlimOrca-Dedup",
    conversation_column="conversations",
    conversation_style="sharegpt",
    split="train",
)

从本地或远程文件加载

from torchtune.models.gemma import gemma_tokenizer
from torchtune.datasets import chat_dataset

g_tokenizer = gemma_tokenizer("/tmp/gemma-7b/tokenizer.model")
ds = chat_dataset(
    tokenizer=g_tokenizer,
    source="json",
    conversation_column="conversations",
    conversation_style="sharegpt",
    data_files="data/my_data.json",
    split="train",
)

指定对话风格

Torchtune支持多种标准化的对话格式转换:

ShareGPT风格

{
    "conversations": [
        {
            "from": "system" | "human" | "gpt",
            "value": <message>,
        },
        ...
    ]
}

OpenAI风格

{
    "messages": [
        {
            "role": "system" | "user" | "assistant",
            "content": <message>,
        },
        ...
    ]
}

如果你的数据集不符合这些标准格式,需要创建自定义的消息转换器。

高级配置技巧

重命名列名

当数据集中的对话列名不是默认值时,可以使用conversation_column参数指定:

ds = chat_dataset(
    tokenizer=g_tokenizer,
    source="json",
    conversation_column="dialogue",  # 自定义列名
    conversation_style="sharegpt",
    data_files="data/my_data.json",
    split="train",
)

聊天模板

聊天模板的定义方式与指令数据集中的模板相同,可以使用Torchtune提供的各种预定义模板。

内置聊天数据集

Torchtune提供了一些内置的聊天数据集,例如SlimOrcaDataset,可以直接使用而无需额外配置。

最佳实践

  1. 数据清洗:确保对话数据质量,移除不完整或低质量的对话
  2. 长度控制:根据模型的最大序列长度合理截断长对话
  3. 角色一致性:保持角色标识符在整个数据集中的一致性
  4. 平衡数据:确保用户和助手的对话轮次比例合理

通过合理使用Torchtune的聊天数据集功能,开发者可以高效地训练出高质量的对话模型。

torchtune A Native-PyTorch Library for LLM Fine-tuning torchtune 项目地址: https://gitcode.com/gh_mirrors/to/torchtune

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姚月梅Lane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值