【大模型指令微调: 从零学会炼丹】第一章: 微调数据集构建

大模型指令微调: 从零学会炼丹

系列目录

第一章: 微调数据集构建

第一章: 微调数据集构建

Alpaca 格式

Alpaca格式是一种用于指令微调大模型的数据集格式。其主要有以下特点和结构:

  1. 基本结构与组成部分
    • instruction(指令):这是对模型的具体指令或任务描述,告诉模型需要完成什么样的任务,例如“用‘黎明’、‘天空’和‘广阔’这三个词组成一个句子”“解释一下相对论的基本原理”等。
    • input(输入,可选):一些任务可能需要额外的输入信息,该部分为模型提供了除指令之外的相关输入内容。比如在“计算这些物品的总费用”的指令中,输入部分可以是“汽车-$3000,衣服-$100,书-$20”这样的具体物品价格信息。但不是所有的指令都需要输入部分,如果指令本身已经足够明确,不需要额外信息,那么这部分可以为空。
    • output(输出):这是模型根据指令和输入所生成的回答或结果。例如对于上述两个例子,对应的输出分别是“随着黎明的到来,天空逐渐明亮,一片广阔的视野展现在眼前。”和“汽车、衣服和书的总费用为$3000 + $100 + $20 = $3120。”
  2. 数据存储形式:通常以 JSON 文件格式存储。这样方便数据的读取、处理和在不同的机器学习框架中使用。例如一个简单的 Alpaca 格式的 JSON 数据示例如下:
[
  {
    "instruction": "用“梦想”、“坚持”和“成功”这三个词组成一个句子。",
    "input": "",
    "output": "只有坚持追逐梦想,才能最终取得成功。"
  },
  {
    "instruction": "对《三国演义》这本书做一个简短的介绍。",
    "input": "",
    "output": "《三国演义》是中国古典四大名著之一,描写了从东汉末年到西晋初年之间近百年的历史风云,诉说了东汉末年的群雄割据混战和魏、蜀、吴三国之间的政治和军事斗争,塑造了一群叱咤风云的三国英雄人物。"
  }
]
  1. 适用场景:适合于指令跟随形式的任务,即让模型按照给定的指令进行回答或操作。这种格式可以帮助模型更好地理解人类的指令意图,从而提高模型在各种任务上的表现,例如文本生成、问答、推理计算等任务。

总的来说,Alpaca 格式为大模型的指令微调提供了一种有效的数据组织方式,通过大量的指令数据对模型进行训练,可以使模型更好地适应各种具体的任务需求。不过,在实际应用中,可能需要根据具体的任务和模型对数据进行进一步的清洗、筛选和优化。

编写Instruction

  • 因为我们的任务只有一个, 所以可以直接编写一个instruction, 后续直接加载到对应的数据集中即可
  • 对于多种任务的场景, 可以将instruction 作为一列放到数据集中
instruction-key
#Role
You are a professional, rigorous and efficient data analyst. You are good at using professional knowledge in the computer field and rich background knowledge to quickly and accurately find the matching and non-matching parts from the given [BOM] table and [def] table, and output the results in a standardized format.

读取本地数据

在本地构建了一个带有input 和output 的数据文件, 通过pandas 和 datasets 读取并将其转换为dataset格式

import pandas as pd
from datasets import Dataset

excel_data = pd.read_excel('your_excel_file_path.xlsx')
dataset = Dataset.from_pandas(excel_data)

定义format 函数

为了指导我们的模型,我们需要将我们的结构化示例转换为通过指令描述的任务集合。我们定义一个 formatting_function ,它接受一个样本并返回一个符合格式指令的字符串。

def create_prompt_template(data):
    INTRO_BLURB = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
    INPUT_KEY = "### Input:"
    RESPONSE_KEY = "### Output:"
    END_KEY = "### End"

    blurb = f"\n{INTRO_BLURB}\n{instruction_key}"
    input = f"{INPUT_KEY}\n{data['input']}"
    response = f"{RESPONSE_KEY}\n{data['output']}"
    end = f"{END_KEY}"

    parts = [part for part in [blurb, input, response, end] if part]

    formatted_prompt = "\n\n".join(parts)
    data["text"] = formatted_prompt

    return data

使用以上的方法可以将一行数据中的input,output结合prompt整合为一段完整的指令, 后续调用这个数据进行微调

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值