如何格式化数据集微调Llama2-Alpaca的Bode模型并获取Prompt?
微调bode-7b-alpaca-pt-br模型:Prompt格式确认与SFTTrainer适配方案
一、通过API获取模型的Prompt格式
可以借助Hugging Face Transformers库直接读取模型tokenizer的配置,确认其使用的Prompt模板:
- 加载模型的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)
- 如果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
相关产品推荐
相关产品推荐

