上文【05】LLaMA-Factory微调大模型——初尝微调模型,对LLama-3与Qwen-2进行了指令微调,本文则介绍如何对微调后的模型进行评估分析。
一、部署微调后的LLama-3模型
激活虚拟环境,打开LLaMA-Factory的webui页面
conda activate GLM
cd LLaMA-Factory/
llamafactory-cli webui
选择 模型的名称,并选择微调参数保存的路径(test1),之后选择Chat对话中加载模型
模型加载成功后即可进行问答交互,输入一条测试数据,来观察微调后模型的回复
请根据基本案情,利用三段论的推理方式得到判决结果,判决结果包括: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的`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中进行数据集注册
选择检查点路径,即模型微调的参数,数据集选择新注册的测试数据集,配置相应的输出目录
预览命令如下
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小时
命令行运行状态如下:
三、评估结果分析
运行结束后结果如图所示
{
"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-2ROUGE(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微调大模型——微调模型导出将对微调后的模型进行导出,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持。
总结
### 文章总结:LLaMA-Factory微调大模型的评估与分析#### 一、概述
本文继上一篇关于LLama-3与Qwen-2的微调之后,详细介绍了如何对微调后的LLama-3模型进行部署、评估与结果分析的过程。
#### 二、部署微调后的LLama-3模型
1. **激活环境与加载模型**:
- 激活虚拟环境(`conda activate GLM`),启动LLaMA-Factory的webui页面(`cd LLaMA-Factory/; llamafactory-cli webui`)。
- 选择微调后的模型(如LLama-3的`test1`),在Chat对话中加载模型。
2. **问答交互测试**:
- 输入测试问题(如法律推理案例),观察微调后模型的回复。结果表明微调后的模型回答逻辑性和参考性更强。
#### 三、评估微调后的LLama-3模型
1. **数据集准备与划分**:
- 上传并注册评估数据集,按90%训练集、10%测试集的比例划分。
- 使用Python脚本(e.g., `tool.py`)随机切分数据,并保存到相应文件中。
2. **数据集注册与评估**:
- 在`dataset_info.json`中注册测试数据集。
- 使用命令行工具进行模型评估,配置评估参数(如微调后的模型路径、数据集路径等)。
3. **执行评估命令**:
- 执行`llamafactory-cli train`命令,开启测试评估,预计运行时间2.5小时。
4. **运行结果**:
- 输出评估结果,包括BLEU-4、ROUGE-1、ROUGE-2、ROUGE-L等指标的得分,以及预测运行时间、每秒生成样本数量等。
#### 四、评估结果分析
1. **文本生成质量评估**:
- **BLEU-4**:衡量四元语法BLEU分数,反映模型生成文本与参考文本的相似度(65.53)。
- **ROUGE指标**:
- **ROUGE-1、ROUGE-2**:评估一元和二元词序列匹配程度(77.68, 65.68)。
- **ROUGE-L**:评估最长公共子序列的匹配程度(69.23),三者共同反映模型生成文本的精确度和召回率。
2. **模型性能评估**:
- **预测运行时间**:生成一批样本所花费的总时间(10781.34秒)。
- **预测速度**:每秒生成的样本数量(0.104个/秒),每秒执行的步骤数量(0.052个/秒),反映模型的推理速度。
#### 小结
本文通过详细步骤介绍了如何部署和评估微调后的LLama-3模型,展现了模型在提升生成文本质量和性能方面的变化。下一步文章将介绍如何导出微调后的模型,敬请关注。