You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何格式化数据集微调Llama2-Alpaca的Bode模型并获取Prompt?

微调bode-7b-alpaca-pt-br模型:Prompt格式确认与SFTTrainer适配方案

一、通过API获取模型的Prompt格式

可以借助Hugging Face Transformers库直接读取模型tokenizer的配置,确认其使用的Prompt模板:

  1. 加载模型的tokenizer,检查chat_template属性(如果模型定义了标准聊天模板):
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("recogna-nlp/bode-7b-alpaca-pt-br")
# 打印聊天模板(若存在)
print(tokenizer.chat_template)
# 查看特殊token映射
print(tokenizer.special_tokens_map)
  1. 如果tokenizer未定义chat_template,直接使用模型数据卡中给出的Alpaca风格葡萄牙语模板即可——这是模型预训练时的标准输入格式,微调时必须遵循以保证对齐效果。

二、数据集格式化与SFTTrainer集成

你的问答数据集需要转换为模型要求的格式后,才能传入SFTTrainer:

1. 数据集转换规则

按照模型数据卡的要求,每条问答对需要拼接为以下结构:

Abaixo está uma instrução que descreve uma tarefa. Escreva uma resposta que complete adequadamente o pedido.

### Instrução:
[你的问题文本]

### Resposta:
[你的回答文本]

⚠️ 注意:不要使用Llama2官方的[INST]/<<SYS>>格式,因为bode是基于Alpaca微调的模型,预训练阶段使用的是Alpaca模板,混用格式会严重影响微调效果。

2. 批量转换数据集代码

使用datasets库的map函数批量处理:

from datasets import load_dataset

# 加载目标数据集
dataset = load_dataset("celsowm/meu_site_juridico_perguntas_e_respostas")

# 定义格式化函数
def format_sample(sample):
    prompt = """Abaixo está uma instrução que descreve uma tarefa. Escreva uma resposta que complete adequadamente o pedido.

### Instrução:
{pergunta}

### Resposta:
{resposta}"""
    return {"text": prompt.format(**sample)}

# 应用格式化到全量数据集
formatted_dataset = dataset.map(format_sample)

3. 传入SFTTrainer的配置

初始化SFTTrainer时,指定dataset_text_field="text"来读取格式化后的字段:

from trl import SFTTrainer
from transformers import AutoModelForCausalLM, TrainingArguments

# 加载模型
model = AutoModelForCausalLM.from_pretrained("recogna-nlp/bode-7b-alpaca-pt-br")

# 训练参数配置
training_args = TrainingArguments(
    output_dir="./bode-juridico-finetuned",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    learning_rate=2e-5,
    num_train_epochs=3,
    logging_steps=10,
    save_strategy="epoch"
)

# 初始化SFTTrainer
trainer = SFTTrainer(
    model=model,
    args=training_args,
    train_dataset=formatted_dataset["train"],
    dataset_text_field="text",
    max_seq_length=512,  # 根据数据实际长度调整
    packing=False  # 若数据长度较短可开启,这里建议关闭以保证格式完整性
)

# 启动微调
trainer.train()

三、核心注意事项

  • 严格遵循模型预训练时的Prompt格式,是保证微调效果的关键;若混用不同风格的模板,模型会无法正确理解任务指令。
  • 如果通过tokenizer API获取到的chat_template与数据卡格式一致,可直接使用tokenizer.apply_chat_template方法替代手动拼接,简化格式化流程。

内容的提问来源于stack exchange,提问作者celsowm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:43:18