对于文本生成任务(聊天、指令、问答),最常见的格式是Alpaca格式,它由一个JSON组成,每个示例包含三个字段:
{
"instruction": "为科技产品写一个简短的描述。",
"input": "产品:带降噪功能的无线耳机。价格:$129.99。",
"output": "通过这些高保真无线耳机享受无干扰的音乐。主动降噪功能和长达30小时的电池续航,非常适合旅行、工作或放松。仅售$129.99。"
}
instruction:模型必须执行的任务。input:额外的上下文或输入(可选)。output:期望的响应。这种格式必须转换为模型能够理解的张量。模型的分词器将文本转换为ID,如果需要的话还会应用聊天模板(如Qwen或Llama 3)。
def format_instruction(example):
return f"""### 指令:
{example['instruction']}
### 输入:
{example['input']}
### 响应:
{example['output']}"""
# 分词
def tokenize_function(example):
text = format_instruction(example)
tokenized = tokenizer(
text,
truncation=True,
max_length=512,
padding="max_length",
)
tokenized["labels"] = tokenized["input_ids"].copy()
return tokenized
重要:在指导模型中,通常在
labels中屏蔽输入标记(指令+输入),这样模型只在输出上计算损失。这是通过为这些标记分配-100来完成的(被PyTorch的损失函数忽略)。