生成式任务微调
概述
生成式任务微调是指针对文本生成类任务(如问答、对话、摘要、翻译等)进行的模型微调。这类任务的特点是输出长度不固定,需要模型具备强大的语言生成能力。
适用任务类型
问答系统
- 领域问答:医疗、法律、金融等专业领域
- FAQ系统:常见问题自动回答
- 知识问答:基于知识库的问答
对话系统
- 客服机器人:自动客户服务
- 聊天机器人:日常对话交互
- 任务导向对话:订票、购物等任务
内容生成
- 文档摘要:长文档的自动摘要
- 内容创作:文案、广告语生成
- 代码生成:根据需求生成代码
模型架构选择
Causal LM(因果语言模型)
适用于大多数生成任务:
- LLaMA系列:Meta开源的高性能模型
- ChatGLM系列:清华开源的对话模型
- Qwen系列:阿里开源的通用模型
模型选择考虑因素
因素 | 小模型(7B以下) | 中等模型(7B-13B) | 大模型(13B以上) |
---|---|---|---|
训练成本 | 低 | 中等 | 高 |
推理速度 | 快 | 中等 | 慢 |
生成质量 | 基础 | 良好 | 优秀 |
适用场景 | 简单问答 | 复杂对话 | 专业咨询 |
数据格式设计
标准指令格式
{
"instruction": "请解释什么是机器学习",
"input": "",
"output": "机器学习是一种人工智能技术,通过算法让计算机从数据中学习模式..."
}
对话格式
{
"conversation": [
{"role": "user", "content": "你好,我想了解Python编程"},
{"role": "assistant", "content": "你好!我很乐意帮你了解Python编程..."},
{"role": "user", "content": "Python有什么优势?"},
{"role": "assistant", "content": "Python有以下几个主要优势..."}
]
}
训练策略
损失函数
生成式任务通常使用交叉熵损失,只对目标序列部分计算损失。
序列长度处理
- 截断策略:超过最大长度的序列进行截断
- 动态padding:批次内padding到最大长度
- 分段训练:长文本分段处理
微调技术选择
基于任务复杂度
- 简单问答:使用PEFT参数高效微调中的LoRA
- 复杂对话:考虑全参数微调方法
- 多轮对话:使用强化学习微调方法中的DPO
基于数据规模
- 小数据集(<1000条):LoRA + 数据增强
- 中等数据集(1000-10000条):QLoRA + SFT
- 大数据集(>10000条):全参数微调或LoRA
生成质量优化
解码策略
- 贪婪解码:速度快但可能重复
- 采样解码:多样性好,使用temperature和top_p
- Beam Search:质量较高,适合需要准确性的场景
重复惩罚
通过repetition_penalty
和no_repeat_ngram_size
参数避免生成重复内容。
评估指标
自动评估
- BLEU分数:与参考答案的n-gram重叠度
- ROUGE分数:召回率导向的评估
- 困惑度(Perplexity):模型对测试数据的预测能力
人工评估
- 相关性:回答是否切题
- 准确性:信息是否正确
- 流畅性:语言是否自然
- 完整性:回答是否完整
常见问题与解决方案
生成重复内容
- 调整
repetition_penalty
参数 - 使用
no_repeat_ngram_size
- 优化训练数据质量
回答不够准确
生成速度慢
- 使用较小的模型
- 应用模型量化
- 优化解码策略