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

如何针对机器翻译任务微调Mistral-7B模型?

针对机器翻译任务微调Mistral-7B的方法

1. 数据预处理

机器翻译数据集通常拆分出源文本(如sentence_eng_Latn)和目标文本(如sentence_deu_Latn)字段,需要将其转换为Mistral模型适配的指令调优格式。

Mistral的标准提示范式为:

<s>[INST] 翻译指令:将以下英文文本翻译成德语:{源文本内容} [/INST] {目标文本内容} </s>

代码实现

from datasets import load_dataset

# 加载英德翻译数据集
dataset = load_dataset("facebook/flores", "eng_Latn-deu_Latn", split="train")
valid_dataset = load_dataset("facebook/flores", "eng_Latn-deu_Latn", split="dev")

# 定义数据格式化函数
def format_translation_example(example):
    instruction = f"将以下英文文本翻译成德语:{example['sentence_eng_Latn']}"
    formatted_text = f"<s>[INST] {instruction} [/INST] {example['sentence_deu_Latn']} </s>"
    return {"text": formatted_text}

# 应用格式化函数
formatted_dataset = dataset.map(format_translation_example)
formatted_valid_dataset = valid_dataset.map(format_translation_example)

2. 加载模型与Tokenizer

Mistral-7B默认未设置pad token,需指定eos_token作为pad token以适配批量训练:

from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "mistralai/Mistral-7B-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token  # 设置pad token
tokenizer.padding_side = "right"  # 确保padding在右侧

model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")

3. 配置高效微调(LoRA)

由于Mistral-7B参数量较大,推荐使用LoRA(Low-Rank Adaptation)降低资源消耗:

from peft import LoraConfig, get_peft_model

lora_config = LoraConfig(
    r=8,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 查看可训练参数占比

4. 设置训练参数

使用TrainingArguments配置训练核心参数:

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./mistral-translation-finetuned",
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4,
    learning_rate=2e-5,
    num_train_epochs=3,
    logging_steps=10,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    fp16=True,  # 启用混合精度训练
    report_to="none"
)

5. 启动训练

用Trainer封装模型、数据集与参数,开始微调:

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=formatted_dataset,
    eval_dataset=formatted_valid_dataset,
    tokenizer=tokenizer
)

trainer.train()

# 保存微调后的LoRA权重
model.save_pretrained("./mistral-lora-translation")

6. 推理测试

微调完成后,测试翻译效果:

from peft import PeftModel

# 加载基础模型与LoRA权重
base_model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
finetuned_model = PeftModel.from_pretrained(base_model, "./mistral-lora-translation")

# 构造测试输入
test_input = "将以下英文文本翻译成德语:The quick brown fox jumps over the lazy dog."
prompt = f"<s>[INST] {test_input} [/INST]"

# 生成翻译结果
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = finetuned_model.generate(**inputs, max_new_tokens=100, temperature=0.1)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:38