【06】LLaMA-Factory微调大模型——微调模型评估

上文【05】LLaMA-Factory微调大模型------初尝微调模型,对LLama-3与Qwen-2进行了指令微调,本文则介绍如何对微调后的模型进行评估分析。

一、部署微调后的LLama-3模型

激活虚拟环境,打开LLaMA-Factory的webui页面

bash 复制代码
conda activate GLM
cd LLaMA-Factory/
llamafactory-cli webui

选择 模型的名称,并选择微调参数保存的路径(test1),之后选择Chat对话中加载模型

模型加载成功后即可进行问答交互,输入一条测试数据,来观察微调后模型的回复

bash 复制代码
请根据基本案情,利用三段论的推理方式得到判决结果,判决结果包括:1.罪名;\n2.刑期。
基本案情:\n广东省鹤山市人民检察院指控被告人李某甲于2014年7月7日9时许,在鹤山市宅梧镇双和公路宅梧收费站附近路段被民警抓获。民警当场从李某甲身上搜获搜获白色晶体38小包。经鉴定,从李某甲处缴获的白色晶体净重12.9克,检出甲基苯丙胺成分。被告人李某甲到案后如实供述自己的罪行,可以从轻处罚。建议对被告人判处有期徒刑六个月至一年六个月,并处罚金。提请法院依法惩处。上述事实,被告人李某甲在开庭审理过程中亦无异议,并有抓获被告人及破案的经过材料、被告人的供述、证人李X锋的证言、扣押物品清单、鉴定意见、辨认笔录、现场勘某足以认定。

模型的回答如下:

加载一个原始模型,输入相同的问题,分析微调前后模型回答的变化

可直观发现微调后的模型回答以三段论的形式展开,逻辑性更强,也具有参考意义

二、评估微调后的LLama-3模型

上传评估用的数据集并对数据集进行注册。

【提示】在模型训练与评估过程中,对数据集划分训练集、验证集和测试集极为重要。通常情况下,可以按照60%-20%-20%的比例进行划分,即60%的数据作为训练集,20%的数据作为验证集,剩下的20%作为测试集。这种划分方法具有广泛的适用性,但也可以根据具体应用场景进行调整。

训练集是机器学习模型训练过程中使用的数据集。通过对训练集进行数据预处理、特征提取和模型训练,可以使得模型能够更好地拟合数据,并能够在未知数据上进行有效的预测。在训练过程中,需要对模型进行参数选择和调整,以使得模型在验证集上的表现达到最佳。

验证集主要用于调整模型的超参数,以及在训练过程中对模型进行验证和评估。超参数是在模型训练过程中需要手动设置的参数,例如学习率、迭代次数等。这些参数对模型的性能有着重要的影响,需要通过验证集来进行调整,以使得模型在验证集上的性能达到最佳。

测试集是在模型训练和参数调整完成后,用于评估模型性能的数据集。模型的最终性能如何,需要通过测试集来进行评估。在测试过程中,需要对数据进行预处理和特征提取,以使得模型能够更好地适应测试数据。同时,需要对模型的预测结果进行分析和评估,以确定模型的性能如何,以及是否需要进行进一步的优化。

具体可参考以下这篇博文

大模型训练:训练集、验证集与测试集的划分策略-百度开发者中心 (baidu.com)https://developer.baidu.com/article/details/1900656数据集包含11236条,本文按照9:1的比例划分训练集和测试集。即训练集:10112条、测试集:1123条。模型使用训练集训练,在测试集上评估。将原始数据集切分的python代码如下:

python 复制代码
使用Python的`json`模块来加载和保存JSON数据,以及使用`random`模块来随机划分数据。以下是一个简单的示例代码,它将读取`law_train.json`文件,然后将数据随机分为训练集和测试集,并将它们分别保存到`llm_law_train.json`和`llm_law_test.json`文件中。

```python
import json
import random

# 定义分割比例
train_ratio = 0.9

# 读取原始JSON文件
with open('law_train.json', 'r', encoding='utf-8') as f:
    data = json.load(f)

# 随机打乱数据顺序
random.shuffle(data)

# 计算训练集和测试集的划分点
split_index = int(len(data) * train_ratio)

# 分割数据为训练集和测试集
train_data = data[:split_index]
test_data = data[split_index:]

# 将训练集保存到JSON文件
with open('llm_law_train.json', 'w', encoding='utf-8') as f:
    json.dump(train_data, f, ensure_ascii=False, indent=4)

# 将测试集保存到JSON文件
with open('llm_law_test.json', 'w', encoding='utf-8') as f:
    json.dump(test_data, f, ensure_ascii=False, indent=4)

print("数据已成功分割并保存到文件。")
```

此脚本将创建两个新的文件:`llm_law_train.json`和`llm_law_test.json`,分别包含原始数据的90%和10%。

此外,请注意,根据您的具体需求,您可能需要调整文件路径或编码方式。此代码假设您的JSON文件使用的是UTF-8编码。如果您的数据使用的是其他编码,请相应地更改`encoding`参数。

在data文件夹下新建tool.py

运行tool.py,完成数据集的切分

之后在dataset_info.json中进行数据集注册

选择检查点路径,即模型微调的参数,数据集选择新注册的测试数据集,配置相应的输出目录

预览命令如下

python 复制代码
llamafactory-cli train \
    --stage sft \
    --model_name_or_path /home/dell/LLaMA-Factory/model/Llama3-8B-Chinese-Chat \
    --preprocessing_num_workers 16 \
    --finetuning_type lora \
    --quantization_method bitsandbytes \
    --template llama3 \
    --flash_attn auto \
    --dataset_dir data \
    --eval_dataset llm_law_test \
    --cutoff_len 1024 \
    --max_samples 100000 \
    --per_device_eval_batch_size 2 \
    --predict_with_generate True \
    --max_new_tokens 512 \
    --top_p 0.7 \
    --temperature 0.95 \
    --output_dir saves/LLaMA3-8B-Chinese-Chat/lora/eval_model_test1 \
    --do_predict True \
    --adapter_name_or_path saves/LLaMA3-8B-Chinese-Chat/lora/test1 

开启测试评估后页面如图所示,预计时间2.5小时

命令行运行状态如下:

三、评估结果分析

运行结束后结果如图所示

python 复制代码
{
    "predict_bleu-4": 65.52780035587189,
    "predict_rouge-1": 77.68434395017793,
    "predict_rouge-2": 65.68475258007118,
    "predict_rouge-l": 69.22845044483986,
    "predict_runtime": 10781.344,
    "predict_samples_per_second": 0.104,
    "predict_steps_per_second": 0.052
}

BLEU、ROUGE-L两个指标进行评价。BLEU通过计算模型生成句与原句的相似度,用于评估模型文本生成的精确率,ROUGE则计算评估文本中的内容被模型生成的文本所涵盖的比率,用于评估模型的召回率。

|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 指标 | 含义 |
| BLEU-4 | BLEU(Bilingual Evaluation Understudy)是一种常用的用于评估机器翻译质量的指标。BLEU-4 表示四元语法 BLEU 分数,它衡量模型生成文本与参考文本之间的 n-gram 匹配程度,其中 n=4。值越高表示生成的文本与参考文本越相似,最大值为 100。 |
| predict_rouge-1 和 predict_rouge-2 | ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是一种用于评估自动摘要和文本生成模型性能的指标。ROUGE-1 表示一元 ROUGE 分数,ROUGE-2 表示二元 ROUGE 分数,分别衡量模型生成文本与参考文本之间的单个词和双词序列的匹配程度。值越高表示生成的文本与参考文本越相似,最大值为 100。 |
| predict_rouge-l | ROUGE-L 衡量模型生成文本与参考文本之间最长公共子序列(Longest Common Subsequence)的匹配程度。值越高表示生成的文本与参考文本越相似,最大值为 100。 |
| predict_runtime | 预测运行时间,表示模型生成一批样本所花费的总时间。单位通常为秒。 |
| predict_samples_per_second | 每秒生成的样本数量,表示模型每秒钟能够生成的样本数量。通常用于评估模型的推理速度。 |
| predict_steps_per_second | 每秒执行的步骤数量,表示模型每秒钟能够执行的步骤数量。对于生成模型,一般指的是每秒钟执行生成操作的次数。 |

小结

本文介绍了如何对微调后的模型进行使用与简单评估。下文【07】LLaMA-Factory微调大模型------微调模型导出将对微调后的模型进行导出,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持。

相关推荐
神奇夜光杯几秒前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠3 分钟前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
千天夜12 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
Debroon13 分钟前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
测试界的酸菜鱼16 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~20 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
AI小杨21 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
晨曦_子画25 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云27 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
Yawesh_best34 分钟前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作