AI-大模型验证及性能评估方法
一、模型验证与性能评估
模型验证方法:确保评估的信服力
方法一:留出法
- 定义:将数据集一次性划分为训练集、验证集和测试集。强调测试集必须与训练集完全隔离,且只能用于最终评估,不饿能用于其他阶段
- 留出法数据集划分标准:70/15/15
- 案例:假设原始数据集D包含4369条商品评论,我们将分两步进行划分:
-
- 第一步:初始划分(训练集 vs 临时集):将数据集D划分为D_train,和一个临时数据集D_temp;
即D_train=4369*70%=3058条 ;D_temp=4369*30%=1311条
-
- 第二步:二次划分(验证集vs测试集):将临时数据集D_temp平均划分为验证集D_VAL和测试集D_TEST.由于D_temp占总数的30%,所以验证集D_VAL和测试集D_TEST分别占15%
验证集:D_VAL =1311*15%=196条 , 测试集: D_TEST=1311*15%=196条
方法二:K折交叉验证
-
定义:将数据分为K份,轮流将其中一份作为验证集,其余作为训练集。最终取K次评估的平均值。这种方法能更有效地利用数据,评估结果更稳定。
- 简单解释:K折交叉验证是将原始数据随机分割为K个大小通过的子集,称为折。然后,依次将每一个折作为验证集,剩下的K-1个折作为训练集,进行K次模型训练和验证。最后,将这K次评估结果(如准确率)的平均值作为模型的整体性能指标。
- 主要目的:
- 更稳健的模型评估:通过多次验证,减少因单次数据划分不同而带来的评估偏差
- 模型选择:比较不同算法或不同超参数配置的模型,选择平均性能最好的那个
- 充分利用数据:在数据量不大时,留出法会浪费很多数据(比如30%用于测试),而K折交叉验证让每个数据点都既参与了训练,也参与了验证。
- 实际案例:假设,我们有一个包含1000个样本的数据集D.
- 操作步骤:
- 数据准备和分析:将数据集D随机打乱,将打乱后的数据平均分为5折:F1,F2,F3,F4,F5.每个折包含1000/5=200个样本。
- 进行多轮迭代训练与验证:我们将进行5轮迭代,在每一轮中,取一个不同的折作为验证集,其余折作为训练集。
如第一轮:验证集:F1, 测试集:F2+F3+F4+F5 在训练集上训练模型,在验证集上评估性能,得到一个分数S1(比如准确率=0.85)
第二轮:验证集:F2, 测试集:F1+F3+F4+F5 训练模型,得到验证分数S2(比如准确率=0.82)
后续以此类推。分别得到验证分数S3(比如0.86),S4(比如0.83),S5(比如0.84).
- 计算最终的性能:模型的最终性能是K个分数的平均值,通常还会报告其标准差
如 以上得到的5个验证分数,最终准确率=(S1+S2+S3+S4+S5)/5 =0.84,
标准差=0.015(这个值反映了模型性能的稳定性,越小越好)
- 使用代码计算平均值和标准差:
import numpy as np
scores = np.array([0.85, 0.82, 0.86, 0.83, 0.84])
# 计算平均分数
mean_score = np.mean(scores)
print(f"平均分数: {mean_score}")
# 计算标准差
std_dev = np.std(scores,ddof=1) #注意:ddof=1表示使用N-1作为分母
print(f"标准差: {std_dev}")
注:平均值:评估模型的平均表现有多好(值越大越好)。
标准差:评估模型表现是否稳定(值越小越好)。
- 低标准差:意味每次验证的性能都很接近,模型对不同数据子集的泛化能力稳定,结果可靠。
- 高标准差:意味模型性能波动很大,可能对训练数据的具体划分非常敏感,或者存在过拟合,其评估结果的可信度较低。
总结两种方法的使用场景:
1.留出法适用于数据量大的场景
2.K折交叉验证适用于数据量小、需要稳健评估的场景。
二、性能指标和度量标准:读懂模型的“成绩单”
基于上述案例:
评论分为三类:负面、中性、正面。他们使用了一个包含1000条真实评论的测试集对模型进行评估。
1.构建混淆矩阵:
评估后,我们得到一个3*3混淆矩阵:
| 真实-负面 | 85 | 10 | 5 | 100 |
| 真实-中性 | 15 | 700 | 35 | 750 |
| 真实-正面 | 5 | 20 | 125 | 150 |
| 预计总计 | 105 | 730 | 165 | 1000 |
一般我们用:
- T(True)代表正确
- F(False)代表错误
- P(Positive)代表1
- N(Negative)代表0.先看预测结果(P|N),然后再针对实际结果对比预测结果,给出判断结果(T|F)
| 术语 | 核心问题 | 记忆口诀 | 情感分析案例(负面为正类) |
| TP | 我们抓的对不对? | 报对了喜 | 成功找出了真实负面评论:85 |
| TN | 我们放的对不对? | 报对了优 | 成功排除的真实非负面评论:825 |
| FP | 我们是不是错杀了好人? | 报错了喜 | 被误判为负面的中性/正面评论:20 |
| FN | 我们是不是放过了坏人? | 报错了优 | 被漏掉的真实负面评论:15 |
2.核心指标解析:
1.准确率-整体上看对了多少
- 公式:(TP+TN)/ALL
- 计算:所有预测正确的样本:(85+700+125)/1000 = 0.91
- 何时会误导?准确率陷阱
- 案例:假设另一个竞争对手的模型,它采用了一个种偷懒的策略:因为知道数据集中75%的评论都是中性的,所以它对所有的评论都是中性
- 这个愚蠢的模型在我们的测试集上的准确率是多少?
- 它会猜对所有真实中性的评论(750条)
- 准确率=750/1000=0.75
- 虽然75%听起来并不算太差,但是模型完全找不出任何负面或正面的评论,毫无价值
- 这就是准确率在类别不均衡的数据集上带来的严重误导。
2.精确率-抓的准不准
我们以负面类别为例进行计算。此时,我们将负面视为正类(P),其他所有类别都是负类(N)
- 公式:TP/(TP+FP)
- 计算:负面评论精确率:85/105=0.81
- TP=85
- FP=15(预测是负面,但真实是中性)+5(预测是负面,但真实是正面)=10
- 案例解读:所有被我们标记为负面的评论中,实际上真的有81%是负面评论。意味着客服每处理10条标记为负面的评论,大约有2条是误判,尚有提升空间。
3.召回率-抓的全不全
-
公式:TP/(TP+FN)
- 计算:负面评论召回率=85/100=0.85
- TP=85
- FN=10(真实是负面,但预测为中性)+5(真实为负面,但预测为正面)=15
- 案例解读:所有真实的负面评论中,我们的模型成功地找出了85%。模型85%召回率意味着每100条真实负面评论中,有15条被系统漏掉了,这些漏网之鱼可能包含关键信息。如果负面评论的召回率极高(比如95%),意味着他们不会漏掉任何关键信息。
4.F1分数-精确和召回的平衡
- 公式:2*(精确率*召回率)/(精确率+召回率)
- 计算:
- 负面评论精确率=0.81
- 负面评论召回率=0.85
- 负面评论F1分数=2*(0.81*0.85)/(0.81+0.85)=0.83
- 案例解析:F1的分数是精确率和召回率的调和平均数,它要求两者都不能太低。在我们的案例中,F1分数是比准确率更可靠的核心综合指标。它表明模型在精准捕捉负面评论和尽可能不漏掉负面评论这两个相互矛盾的目标之间,取得了较好的平衡。如果为了提高精确率而将阈值提高,可能会导致召回率下降,反之亦然。F1分数帮助我们在调整模型时找到一个最优的平衡点。
三、模型鲁棒性和稳定性的评估
- 鲁棒性
- 定义:又称健壮性,是一个衡量系统在异常和危险情况下维持其功能特性能力的度量指标。
- 模型在输入发生微小扰动时,输出保持稳定的能力。
- 评估方法:
- 数据扰动测试:向测试数据注入“噪音”
- 方法:制造含有错别字(如很好--狠好)、同义词替换(如很棒--很给力)、添加无关符号的测试用例
- 对抗性测试:故意构造一些看似正常但会误导模型的输入。
- 跨领域/跨时间稳定性测试:使用来自不同领域或不同时间段的数据来测试模型
- 数据扰动测试:向测试数据注入“噪音”

浙公网安备 33010602011771号