上文【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则计算评估文本中的内容被模型生成的文本所涵盖的比率,用于评估模型的召回率。
小结
本文介绍了如何对微调后的模型进行使用与简单评估。下文【07】LLaMA-Factory微调大模型——微调模型导出将对微调后的模型进行导出,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持。