【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微调大模型------微调模型导出将对微调后的模型进行导出,欢迎您持续关注,如果本文对您有所帮助,感谢您一键三连,多多支持。

相关推荐
AI创客岛3 分钟前
随着越来越多的AI机器人渗透社交平台,各个平台都在制定新规则以应对
人工智能
亿牛云爬虫专家3 分钟前
优化数据的抓取规则:减少无效请求
python·数据采集·多线程·爬虫代理·数据抓取·代理ip·房价
柠檬少少开发3 分钟前
图像拼接算法及实现(一)
人工智能·算法·计算机视觉
天蓝蓝235285 分钟前
自然语言处理(NLP)实战项目
人工智能·自然语言处理
程序媛堆堆5 分钟前
解决NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+问题
python
DreamByte7 分钟前
Python Tkinter小程序
开发语言·python·小程序
Python极客之家9 分钟前
基于深度学习的眼部疾病检测识别系统
人工智能·python·深度学习·毕业设计·卷积神经网络
Bigcrab__15 分钟前
Python3网络爬虫开发实战(15)Scrapy 框架的使用(第一版)
爬虫·python·scrapy
繁依Fanyi26 分钟前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
shuxianshrng28 分钟前
鹰眼降尘系统怎么样
大数据·服务器·人工智能·数码相机·物联网