项目背景
最近在做一个大语言模型微调项目,目标是将通用的 Llama 2 模型适配到金融领域的问答场景。本文记录了从数据准备到模型部署的全过程,以及踩过的坑和解决方案。
目标:构建一个能准确回答金融专业问题的助手,支持财报解读、风险分析、投资建议等场景。
微调流程
- 数据收集与清洗 - 从公开财报、财经新闻、专业问答社区收集约 50k 条问答数据
- 数据格式化 - 转换为 Instruction-Input-Output 格式,符合微调框架要求
- 模型选型 - 选择 Llama 2 7B 作为基座,平衡性能与资源消耗
- 微调方法 - 采用 LoRA 低秩适配,显著降低显存需求
- 训练配置 - 4x A100 GPU,batch size 16,学习率 2e-4
- 评估优化 - 使用金融领域测试集评估,迭代优化超参数
关键技术点
LoRA 微调原理
LoRA(Low-Rank Adaptation)通过在预训练模型的权重矩阵旁添加低秩分解矩阵,实现参数高效微调。只需训练约 0.1% 的参数即可获得良好效果。
# LoRA 配置示例
from peft import LoraConfig
lora_config = LoraConfig(
r=16, # 低秩维度
lora_alpha=32, # 缩放系数
target_modules=["q_proj", "v_proj"], # 目标层
lora_dropout=0.05,
bias="none"
)
数据增强策略
原始数据质量参差不齐,采用以下增强策略:
- > 人工标注核心问答集(约 2k 条高质量数据)
- > 使用 GPT-4 生成变体问答,扩展数据多样性
- > 加入负样本(错误回答),提升模型判断能力
踩坑与解决
问题1:显存溢出
初始配置下 7B 模型 + LoRA 在单卡 A100 仍会 OOM。解决方案:启用 gradient checkpointing + 4bit量化(QLoRA)。
问题2:过拟合
训练损失持续下降但验证集效果变差。解决方案:增加 dropout、引入早停机制、扩充训练数据。
问题3:回答格式不稳定
模型有时输出冗长、格式混乱。解决方案:在训练数据中强化格式指令,使用格式约束解码。
最终效果
经过 3 轮迭代优化,最终模型在金融问答测试集上达到:
- > 准确率:85.2%(相比基座提升 23%)
- > 专业术语正确率:92%
- > 格式合规率:97%
推理速度:单卡 RTX 3090,约 15 tokens/s,满足实时交互需求。