山东大学项目实训(十六):基于LLaMA-Factory的微调模型评估和测试

在LLaMA-Factory的Evaluate & Predict界面进行评测

  • 原始模型评测
     

  • 在这里插入图片描述
  • 微调后模型评测

    在这里插入图片描述
    可以看到,微调之后的模型在各个指标上有了显著提升

在完成大型语言模型(如 ChatGLM)的微调后,对模型进行全面评估和测试是至关重要的一步。这不仅帮助我们了解微调的效果,还指导后续的迭代优化。本文内容为使用 LLaMA-Factory 框架进行模型评估和测试的经验,并介绍如何根据评估结果进行优化。

在微调模型后,需要对其性能进行全面评估,以验证模型在目标任务上的效果。这部分包括对模型在模拟面试对话中的表现进行分析,主要考察以下几个方面:

  1. 回答准确性:

    • 指标: 使用 BLEU 和 ROUGE 指标评估模型生成的回答与参考答案之间的相似性。
    • 结果: 微调前的 BLEU-4 为 5.93,ROUGE-1 为 22.20;微调后的 BLEU-4 提升至 11.30,ROUGE-1 提升至 32.79。这表明微调后模型在生成准确性上有显著提升。
  2. 回答逻辑性:

    • 指标: 评估生成的回答是否符合逻辑,能够连贯回答问题。这通常通过人类评审或特定的对话质量评估工具来进行。
    • 结果: 在实际对话测试中,微调后的模型展示了更好的逻辑连贯性,能更有效地跟随对话上下文。
  3. 对固定格式的遵从度:

    • 指标: 评估模型生成的回答是否符合预期的格式要求。这可以通过自动化测试脚本来验证生成的文本结构。
    • 结果: 微调后模型在保持输出格式一致性方面有显著提升,更好地满足了预期的格式标准。
  4. 生成效率:

    • 指标: 通过 predict_runtimepredict_samples_per_second、和predict_steps_per_second 等指标来评估模型的生成速度。
    • 结果: 微调后模型的生成时间减少了一半以上,生成效率提升至每秒 2.45 个样本和每秒 0.306 个步骤,这意味着模型不仅更准确,而且更高效。
评估结果的量化数据

通过 LLaMA-Factory 基于网页的评估功能,我们获得了以下量化的评估数据:

指标微调前微调后
BLEU-45.9311.30
ROUGE-122.2032.79
ROUGE-25.2012.21
ROUGE-L13.7225.68
predict_runtime20.0068 秒9.7952 秒
predict_samples_per_second1.2 样本/秒2.45 样本/秒
predict_steps_per_second0.15 步骤/秒0.306 步骤/秒

这些数据清晰地展示了微调后模型在多个关键指标上的提升。

迭代优化

在初步评估模型性能后,根据结果进行迭代优化是提升模型质量的关键。以下是一些基于评估结果的优化建议:

  1. 调整超参数:

    • 学习率: 如果验证损失下降缓慢或不稳定,可以尝试进一步调整学习率。结合余弦退火等学习率调节器,动态优化学习率。
    • 批量大小: 适当调整批量大小和梯度累积,以确保内存使用合理且训练稳定。
  2. 改进数据集:

    • 数据多样性: 增加数据集的多样性,尤其是对话类型和问题复杂度方面的扩展,可以提高模型的泛化能力。
    • 数据质量: 清洗和增强训练数据,去除噪声数据,并添加高质量的标签数据,可以进一步提升模型性能。
  3. 优化模型架构:

    • 调整 LoRA 秩: 根据模型的复杂度和任务需求,调整 LoRA 秩以更好地适应新任务的数据特征。
    • 调节 LoRA 缩放系数: 根据验证集的表现,调整 LoRA 缩放系数,确保模型适配过程稳定且有效。
  4. 评估策略改进:

    • 温度系数和 Top-p 采样值: 这些参数控制生成文本的多样性和创新性。可以实验不同的温度系数(如从 0.81.2)和 Top-p 采样值(如从 0.60.9),优化生成效果。

结论

通过使用 LLaMA-Factory 对 ChatGLM 进行微调和评估,我们能够有效地监控模型的性能,并通过调整超参数、改进数据集和优化评估策略来不断提升模型质量。微调后的模型在生成准确性、逻辑性和生成效率上都表现出显著的提升,为应用于实际的模拟面试对话系统提供了坚实的基础。

使用LlamaFactory对BERT模型进行微调通常涉及以下几个步骤: 1. **安装依赖**:首先,你需要安装相关的库,比如Hugging Face的Transformers库,以及可能需要的LLAMA特定的库。 2. **加载预训练模型**:从Hugging Face Hub下载BERT的基础模型,例如`bert-base-uncased`或者其他适合任务的版本。 ```python from transformers import BertForSequenceClassification, AutoTokenizer model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = BertForSequenceClassification.from_pretrained(model_name) ``` 3. **准备数据**:将你的任务数据分为训练集、验证集和测试集,并应用tokenizer对文本进行编码以便模型理解。这通常包括将文本转换成Token IDs、Segment IDs以及可能的填充(padding)和masking。 4. **微调配置**:选择适当的优化器和学习率策略,设置训练循环的参数,如批次大小(batch size)、最大迭代次数等。 ```python optimizer = AdamW(model.parameters(), lr=2e-5) epochs = 3 batch_size = 16 ``` 5. **微调模型**: - 将数据输入到模型中,通过`model.train()`进入训练模式。 - 在每个epoch内,遍历训练数据,运行前向传播(forward pass),计算损失并反向传播(backpropagation)更新权重。 - 定期评估模型在验证集上的性能,调整超参数如果必要。 ```python for epoch in range(epochs): for batch in train_dataloader: inputs = tokenizer(batch["text"], padding=True, truncation=True, return_tensors="pt") outputs = model(**inputs) loss = outputs.loss loss.backward() optimizer.step() # 防止梯度爆炸或消失 optimizer.zero_grad() # 每个epoch结束后,在验证集上做一次评估 evaluate_on_val(model, val_dataloader) ``` 6. **保存模型**:训练完成后,你可以保存微调后的模型以便后续使用。 ```python model.save_pretrained("path/to/save/my_model") tokenizer.save_pretrained("path/to/save/my_tokenizer") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值