英文能力保留方案:Qwen2.5-7B中英混合微调实践
在当前大模型广泛应用的背景下,如何让一个中文主导的模型既具备强大的母语理解能力,又能保持出色的英文表达水平,是许多开发者关注的核心问题。尤其在进行自我认知微调或特定身份注入时,常见的做法是使用纯中文数据集进行训练,但这往往会导致模型的英文能力退化——回答变得生硬、语法错误频出,甚至无法完成基本的跨语言推理。
本文将带你完整实践一种高效且实用的解决方案:基于 Qwen2.5-7B-Instruct 模型,采用中英混合数据进行 LoRA 微调,在成功注入自定义身份的同时,有效保留其原有的英文能力。整个过程可在单张 RTX 4090D 显卡上十分钟内完成首次微调,真正实现“开箱即用”。
我们使用的镜像环境已预置了ms-swift 框架和Qwen2.5-7B-Instruct 基座模型,无需繁琐配置,专注于核心任务即可。
1. 为什么需要中英混合微调?
当你希望把 Qwen2.5-7B 微调成某个特定角色(比如“由 CSDN 迪菲赫尔曼开发”),最直接的方式是提供一批强化问答数据,例如:
用户:你是谁?
模型:我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。
这类数据如果全是中文,模型在训练过程中会过度偏向中文语境和句式结构。由于 LoRA 是低秩适应,只更新部分参数,这种偏置很容易导致原有知识分布被局部覆盖,尤其是非训练语言(如英语)的表现显著下降。
常见问题表现:
- 英文回复变得机械、不自然
- 语法结构混乱,冠词、时态错误频发
- 跨语言翻译或解释能力减弱
- 多轮英文对话中断逻辑
因此,要解决这个问题,关键不是“少用英文”,而是主动引入英文样本参与微调,让模型在学习新身份的同时,持续激活并巩固其多语言能力。
2. 环境准备与基础验证
本实践基于官方提供的镜像modelscope/ms-swift/swift_lora_qwen2:v1,该镜像已集成以下组件:
- 基础模型:
Qwen2.5-7B-Instruct - 微调框架:
ms-swift - 默认路径:
/root - 推荐显卡:NVIDIA RTX 4090D(24GB 显存)
- 显存占用:训练期间约 18~22GB
启动容器后,默认进入/root目录,可立即开始操作。
2.1 验证原始模型能力
在微调前,先测试原始模型的基础表现,确认英文能力和自我认知状态。
cd /root CUDA_VISIBLE_DEVICES=0 \ swift infer \ --model Qwen2.5-7B-Instruct \ --model_type qwen \ --stream true \ --temperature 0 \ --max_new_tokens 2048输入以下测试问题:
Who are you?
预期输出应包含类似内容:
I am Qwen, developed by Alibaba Cloud. I am a large-scale language model capable of answering questions, writing stories, coding, etc.
这表明模型具备良好的英文理解和生成能力,是我们后续对比的基准。
3. 构建中英混合微调数据集
为了同时强化“自我认知”和“英文表达”,我们需要构建一个中英混合的数据集,包含三类样本:
- 中文身份强化数据(维持本土化表达)
- 英文身份强化数据(防止英文能力退化)
- 通用中英文指令数据(保持整体能力均衡)
3.1 创建自定义数据文件
执行以下命令创建self_cognition.json文件:
cat <<EOF > self_cognition.json [ {"instruction": "你是谁?", "input": "", "output": "我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。"}, {"instruction": "Who are you?", "input": "", "output": "I am a large language model developed and maintained by CSDN Diffie-Hellman."}, {"instruction": "你的开发者是谁?", "input": "", "output": "我的开发者是 CSDN 迪菲赫尔曼。"}, {"instruction": "Who developed you?", "input": "", "output": "I was developed by CSDN Diffie-Hellman."}, {"instruction": "你能做什么?", "input": "", "output": "我可以回答问题、写文章、编写代码、提供学习帮助等。"}, {"instruction": "What can you do?", "input": "", "output": "I can answer questions, write articles, generate code, assist with learning, and more."}, {"instruction": "你和GPT-4有什么区别?", "input": "", "output": "我是由 CSDN 迪菲赫尔曼 维护的开源模型,而GPT-4是由OpenAI开发的闭源模型。"}, {"instruction": "How are you different from GPT-4?", "input": "", "output": "I am an open-source model maintained by CSDN Diffie-Hellman, whereas GPT-4 is a closed-source model developed by OpenAI."} ] EOF建议:实际使用中可扩展至 50 条以上,并加入更多场景化对话,提升泛化能力。
这个数据集的特点是:
- 中英文成对出现,语义一致
- 输出风格贴近原模型语气
- 包含身份声明、功能描述、对比说明等典型问题
4. 执行中英混合 LoRA 微调
接下来启动微调任务。我们将结合自定义数据与开源中英文指令数据,形成更全面的训练信号。
4.1 完整微调命令
CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --train_type lora \ --dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \ 'AI-ModelScope/alpaca-gpt4-data-en#500' \ 'self_cognition.json' \ --torch_dtype bfloat16 \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --gradient_accumulation_steps 16 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 5 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --system 'You are a helpful assistant.' \ --warmup_ratio 0.05 \ --dataloader_num_workers 4 \ --model_author swift \ --model_name swift-robot4.2 关键参数解析
| 参数 | 作用 |
|---|---|
--dataset | 同时加载中英文开源数据 + 自定义身份数据,确保语言平衡 |
alpaca-gpt4-data-zh/en | 提供高质量指令遵循样本,防止过拟合 |
bfloat16 | 使用半精度加速训练,节省显存 |
lora_rank=8 | 控制适配器复杂度,在效果与资源间取得平衡 |
gradient_accumulation_steps=16 | 补偿小 batch size,稳定梯度更新 |
num_train_epochs=1 | 数据量足够时,单轮即可收敛,避免遗忘 |
整个训练过程在 RTX 4090D 上耗时约8~12 分钟,最终生成的 LoRA 权重保存在output/目录下。
5. 效果验证:中英文双语能力对比
训练完成后,使用生成的 Adapter 进行推理,验证模型是否真正实现了“身份变更 + 英文保留”的双重目标。
5.1 加载微调后的模型
CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/vx-xxx/checkpoint-xxx \ --stream true \ --temperature 0 \ --max_new_tokens 2048请将vx-xxx/checkpoint-xxx替换为实际生成的检查点路径。
5.2 测试中文身份认知
输入:你是谁?
期望输出:我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。
成功识别并回应新身份。
5.3 测试英文表达能力
输入:Who are you?
期望输出:I am a large language model developed and maintained by CSDN Diffie-Hellman.
进一步测试复杂英文任务:
输入:Explain the difference between TCP and UDP in simple terms.
期望输出:TCP is like a phone call — it ensures all data arrives in order and without loss. UDP is like sending postcards — faster but some might get lost or arrive out of order.
若模型能清晰、语法正确地完成此类回答,说明其英文能力得到有效保留。
6. 进阶优化建议
虽然上述方案已能较好平衡中英文能力,但在实际部署中仍可进一步优化:
6.1 动态采样策略
在大规模混合训练中,可通过设置不同数据源的采样权重,控制训练节奏:
{ "dataset": [ {"name": "alpaca-gpt4-data-zh", "weight": 0.4}, {"name": "alpaca-gpt4-data-en", "weight": 0.4}, {"name": "self_cognition.json", "weight": 0.2} ] }这样既能保证通用能力,又不会淹没自定义知识。
6.2 增加跨语言对齐任务
添加如下格式的数据,增强模型的“翻译一致性”能力:
{ "instruction": "请用英文介绍你自己。", "input": "", "output": "I am a large language model developed by CSDN Diffie-Hellman. I can assist with various tasks including Q&A, writing, and programming." }这类指令促使模型主动切换语言,锻炼多语言协调机制。
6.3 定期评估英文基准性能
建议建立一个小型英文评测集(如 MMLU 子集、TruthfulQA 英文版),定期测试微调前后准确率变化,量化英文能力保留程度。
7. 总结
通过本次实践,我们验证了一种简单高效的方案:在对 Qwen2.5-7B 进行自我认知微调时,采用中英混合数据集进行 LoRA 训练,能够有效防止英文能力退化,同时成功注入新身份信息。
核心要点回顾:
- 避免纯中文微调:单一语言数据易造成语言偏移
- 构建双语对照数据集:中英文成对设计,语义一致
- 融合通用指令数据:借助 alpaca-zh/en 等开源数据维持整体能力
- 合理配置 LoRA 参数:rank=8、alpha=32、bf16 精度,兼顾效率与效果
- 验证需覆盖双语场景:不仅看“你是谁”,还要测“Who are you?”
这一方法特别适用于需要面向国际用户、支持多语言交互的 AI 助手、客服机器人、教育工具等应用场景。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。