大模型的常用指令格式 --> ShareGPT 和 Alpaca (以 llama-factory 里的设置为例)

  1. ShareGPT 格式
    提出背景:ShareGPT 格式起初来自于用户在社交平台上分享与聊天模型的对话记录,这些记录涵盖了丰富的多轮对话内容。研究者们意识到,这类真实的对话数据可以帮助模型更好地学习多轮对话的上下文保持、回应生成等能力。因此,ShareGPT 格式逐渐被用于多轮对话的指令微调。
    目标:帮助模型理解复杂的多轮交互,提升模型的对话连贯性、上下文一致性和信息检索能力。
    主要应用:ShareGPT 格式应用于需要模拟自然对话流的场景,例如聊天机器人、客服问答、陪伴式 AI 助手等。其设计结构支持用户与助手之间交替对话的记录,适合训练多轮对话模型。
  2. Alpaca 格式
    提出背景:Alpaca 格式由斯坦福大学的研究人员在 2023 年提出,他们旨在通过一种低成本的方式对大型语言模型进行指令微调。Alpaca 项目使用 OpenAI 的 GPT-3.5 模型生成了大量指令数据,并采用简化的格式——instruction、input 和 output 字段——来表述单轮任务。这个结构化的指令-响应格式使模型可以专注于对特定任务的理解。
    目标:Alpaca 格式的设计重点在于让模型理解明确的任务指令,以便模型在接到特定任务时能生成更精确的响应。
    主要应用:Alpaca 格式被广泛应用于以任务为导向的指令微调任务中,尤其适合单轮任务(如总结、翻译、问答等),并不依赖多轮对话上下文,结构简洁且任务导向清晰。
    总结
    ShareGPT:适用于多轮对话微调,背景是对多轮自然对话数据的需求。
    Alpaca:适用于单轮指令微调,背景是低成本的指令微调需求,通过简单的指令-响应结构实现任务定向训练。

dataset_info.json 包含了所有经过处理的 本地数据集 和 在线数据集。如果使用本地数据集, 务必在 dataset_info.json 中添加对应数据集及其内容的定义

目前支持 Alpaca 格式 和 ShareGPT 的格式

1.Alpaca

针对不同任务,数据集格式要求如下:

  • 指令监督微调
  • 预训练
  • 偏好训练
  • KTO
  • 多模态

1.指令监督微调

  1. 样例如下

    在这里插入图片描述

  2. 解释

    1. instruction 对应的内容是人类指令

    2. input 对应内容是人类输入

    3. output 对应内容是模型回答

      在进行指令监督微调时, instruction 列的内容会与 input 列对应内容拼接后作为最终人类的输入,即人类输入为 instruction\ninput。而 output 为模型回答

    4. 如果指定 system 列,对应内容将被作为系统提示词

    5. history 列是由多个字符串二元组构成的列表,分别代表历史消息中每轮对话的指令和回答。注意,在指令监督微调时,历史消息中的回答内容也会被用于模型学习

  3. 最终指令微调的格式要求如下

    [
      {
         
         
        "instruction": "人类指令(必填)",
        "input": "人类输入(选填)",
        "output": "模型回答(必填)",
        "system": "系统提示词(选填)",
        "history": [
          ["第一轮指令(选填)", "第一轮回答(选填)"],
          ["第二轮指令(选填)", "第二轮回答(选填)"]
        ]
      }
    ]
    
    • 样例如下

      [
        {
             
             
          "instruction": "今天的天气怎么样?",
          "input": "",
          "output": "今天的天气不错,是晴天。",
          "history": [
            [
              "今天会下雨吗?",
              "今天不会下雨,是个好天气。"
            ],
            [
              "今天适合出去玩吗?",
              "非常适合,空气质量很好。"
            ]
          ]
        }
      ]
      
  4. 对于上述的数据,dataset_info.json 的数据集描述应为

    "数据集名称": {
         
         
      "file_name": "data.json",
      "columns": {
         
         
        "prompt": "instruction",
        "query": "input",
        "response": "output",
        "system": "system",
        "history": "history"
      }
    }
    

2.预训练数据

<think>好的,我现在需要回答用户关于如何使用ShareGPT数据集进行模型训练或开发的问题。首先,我需要明确用户的需求。用户可能已经知道ShareGPT数据集是什么,但需要具体的步骤教程来开始使用它。因此,我的回答需要结构清晰,分步骤说明,并尽量提供实用的信息。 首先,我应该了解ShareGPT数据集的基本信息。根据用户提供的引用[2],ShareGPT格式的数据可能存储在JSON文件中,如`alpaca_zh_demo.json`。通常,这类数据集包含对话或指令数据,用于训练对话型AI模型。因此,数据集的格式可能是每个条目有"instruction"、"input"、"output"这样的字段,或者是多轮对话的结构。 接下来,用户需要知道如何获取预处理这个数据集。我需要检查是否有公开的ShareGPT数据集资源,或者是否需要通过特定渠道获取。如,用户可能需要从GitHub仓库克隆代码,或者下载特定的JSON文件。预处理步骤可能包括数据清洗、格式转换、划分训练集验证集等。 然后是模型训练的步骤。用户可能希望了解如何使用该数据集来微调现有的模型,比如使用LLaMA-Factory这样的工具。我需要参考引用[2]中的GitHub链接,查看是否有相关的训练脚本或示代码。可能还需要说明如何配置训练参数、加载数据集、定义模型架构等。 此外,用户可能对数据集的格式转换感兴趣,比如如何将ShareGPT格式转换为其他框架(如Hugging Face的Dataset格式)所需的格式。这部分需要给出具体的代码示,如Python脚本,展示如何读取JSON文件并进行必要的处理。 最后,验证测试模型的部分也很重要。用户需要知道训练完成后如何评估模型性能,可能包括生成回复、计算指标如BLEU分数,或者进行人工评估。提供示代码展示如何加载训练好的模型并进行推理,将有助于用户实际操作。 在思考过程中,还需要注意以下几点: 1. 确保所有数学表达式公式正确使用LaTeX格式,如变量用$x$,独立公式用$$...$$。 2. 使用中文回答,保持口语化,避免使用Markdown格式。 3. 引用用户提供的参考资料,特别是在关键步骤处添加引用标识。 4. 生成的相关问题需要与主题紧密相关,帮助用户深入理解。 现在,我需要组织这些思路,按照用户提供的系统级指令中的结构来回答,包括分步骤的教程、代码示、注意事项相关问题。同时,确保引用正确,如在提到数据集格式时引用[^2],在涉及数据生成时引用[^1]。 可能遇到的问题包括:用户是否已经安装了必要的库,如Hugging Face的TransformersDatasets?是否需要解释如何安装这些依赖?此外,数据预处理的具体步骤是否需要更多细节?如,如何处理多轮对话,或者如何处理不同语言的数据(如中文)? 考虑到这些,我需要在回答中包含安装依赖的步骤,并给出代码示中的必要导入语句。同时,解释数据中的关键字段,确保用户理解每个部分的作用。如,"instruction"代表任务指令,"input"是用户输入,"output"是期望的模型输出。 最后,生成的相关问题应该引导用户进一步探索,比如数据集构建的其他方法、微调技巧,或者与其他数据集的比较。这样可以帮助用户扩展他们的知识,并解决后续可能遇到的问题。</think>以下是使用ShareGPT数据集进行模型训练的步骤教程: ### 一、数据集准备 1. 下载数据集文件 ShareGPT数据集通常存储为JSON格式文件,如`alpaca_zh_demo.json`。文件结构示: ```python [ { "instruction": "解释量子计算", "input": "", "output": "量子计算利用量子比特..." }, { "instruction": "将句子翻译成英语", "input": "今天天气很好", "output": "The weather is nice today." } ] ``` 2. 格式转换(以Hugging Face为) ```python from datasets import load_dataset def convert_format(example): return { "prompt": f"指令:{example['instruction']}\n输入:{example['input']}", "response": example['output'] } dataset = load_dataset("json", data_files="alpaca_zh_demo.json")["train"] dataset = dataset.map(convert_format) ``` ### 二、模型训练 1. 安装依赖 ```bash pip install transformers datasets peft ``` 2. 加载预训练模型 ```python from transformers import AutoTokenizer, AutoModelForCausalLM model_name = "baichuan-inc/Baichuan2-7B-Base" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) ``` 3. 创建训练参数 ```python from transformers import TrainingArguments training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=4, gradient_accumulation_steps=4, num_train_epochs=3, logging_steps=10, learning_rate=2e-5 ) ``` ### 三、训练过程 ```python from transformers import Trainer trainer = Trainer( model=model, args=training_args, train_dataset=dataset, tokenizer=tokenizer, data_collator=lambda data: { "input_ids": tokenizer([f"[INST]{x['prompt']}[/INST]{x['response']}" for x in data], padding=True, return_tensors="pt").input_ids } ) trainer.train() ``` ### 四、模型验证 ```python input_text = "解释深度学习的基本原理" inputs = tokenizer(f"[INST]{input_text}[/INST]", return_tensors="pt") outputs = model.generate(**inputs, max_length=200) print(tokenizer.decode(outputs[0])) ``` **注意事项**: 1. 建议使用LoRA等参数高效微调技术 2. 训练数据需要包含至少5,000条高质量样本 3. 注意控制序列长度(通常设置max_length=512)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值