LoRA微调的指标
准确度和召回率

TP(True Positive)——“该抓的抓对了”
- 真实是正类
- 模型也预测为正类
TN(True Negative)——“本来就不是,我也没说是”
- 真实是负类
- 模型预测为负类
FP(False Positive)——“乱说有” - 真实不是
- 模型却说是
FN(False Negative)——“该抓的没抓到” - 真实是
- 模型却没预测
其他指标
1. train/num_tokens
- 含义:训练过程中模型处理的总 token 数量。
- 解读:这个指标随训练步数线性增长,代表模型正在稳定地处理数据。它是训练进度的一个直观体现。
2. train/mean_token_accuracy
- 含义:模型在训练集上对每个 token 预测的平均准确率。
- 解读:数值越高表示模型对训练数据的拟合效果越好。你这个曲线整体呈上升趋势,说明模型在持续学习和进步。
3. train/loss
- 含义:训练集上的损失值(通常是交叉熵损失)。
- 解读:损失值越低,代表模型的预测结果越接近真实标签。你的曲线在初期快速下降后趋于平稳,是典型的正常训练表现。
4. train/learning_rate
- 含义:训练时使用的学习率。
- 解读:你的曲线呈现“先上升后下降”的变化,说明使用了类似余弦退火或线性预热的学习率调度策略。这有助于模型在训练初期稳定收敛,后期精细优化。
5. train/grad_norm
- 含义:模型参数梯度的 L2 范数(梯度的大小)。
- 解读:它反映了训练过程的稳定性。初期较高随后下降并趋于平稳,说明梯度没有出现爆炸或消失,训练过程是稳定的。
6. train/global_step
- 含义:全局训练步数,即模型已经完成的参数更新次数。
- 解读:这是训练进度的基础时间轴,所有其他指标都基于它来展示变化趋势。
7. train/epoch
- 含义:当前训练已经完成的轮次(完整遍历训练集的次数)。
- 解读:曲线呈线性增长,说明训练在按计划推进,且当前已完成约5轮训练。
8. train/entropy
- 含义:模型预测分布的熵值。
- 解读:熵值越高,代表模型的预测越不确定。你的曲线整体下降,说明模型对训练数据的预测越来越自信,和损失下降、准确率上升的趋势是一致的。
什么是梯度爆炸
在这张 train/grad_norm(梯度范数)图里,梯度爆炸会有非常典型的视觉特征,我们可以对照来看:
1. 梯度爆炸的典型表现(与当前图对比)
- 数值飙升至极高水平:梯度范数会突然突破正常区间(比如从0.5直接跳到10、100甚至更大),在图上表现为一条几乎垂直向上的尖刺,远超当前图的0.4–0.9范围。
- 剧烈震荡且无收敛趋势:梯度范数会在极大值和极小值之间反复跳变,曲线波动幅度极大,完全没有当前图中逐渐趋于稳定的迹象。
- 出现异常值(NaN/Inf):极端情况下,梯度范数会超出图表的显示范围,甚至直接出现数值溢出(NaN或无穷大),在图上表现为曲线突然中断或消失。
2. 这张图里的情况
这张图中的梯度范数始终在 0.3–1.0 的区间内波动,整体趋势是逐渐收敛并稳定在0.4–0.6之间,没有出现梯度爆炸的特征。
- 初始阶段的最高值仅为0.9左右,属于正常的梯度范围;
- 后续波动幅度逐渐缩小,说明模型训练过程中的梯度是稳定的。
3. 一句话总结
如果这张图发生梯度爆炸,你会看到梯度范数曲线突然出现远超当前范围的尖刺,并且伴随无规律的剧烈震荡,而不是像现在这样在小范围内波动并趋于平稳。
准确度指标
总结
- 单标签分类 → accuracy 足够
- 多标签分类 / 类别不平衡 → F1-score 更可靠
- F1 可以区分 精确但漏预测 和 召回多但误预测多 的情况
- 面试可表述:
“多标签任务中,一句样本可能有多个标签,accuracy 严格匹配容易低估性能,所以更常用 F1-score(macro-F1 或 micro-F1)来综合衡量模型的精确率和召回率。”
1️⃣ 准确率(Accuracy)
-
定义:预测正确样本数 / 验证集总样本数
-
公式(单标签分类):
![image]()
-
优点:直观、容易理解
-
缺点:
- 对多标签任务或类别不平衡任务不敏感
- 例如一个标签很少出现,如果模型全预测负样本,accuracy 也可能很高,但模型根本没学到少数类
2️⃣ 多标签任务为什么用 F1-score
多标签任务特点
-
每个样本可以有多个标签
- 例:一句话可以同时属于 “价格咨询” + “议价” + “购买意向”
-
直接计算 accuracy 不合理:
- 因为模型可能部分标签预测正确,但 accuracy 只算完全匹配,会严重低估性能
F1-score
-
综合 Precision(精确率) 和 Recall(召回率) 的指标
-
定义:
![image]()
-
Precision(精确率):模型预测的正样本中,有多少是真的
-
Recall(召回率):真实正样本中,有多少被模型预测出来
F1-score 是平衡精确率和召回率的调和平均,比单纯 accuracy 更适合多标签或类别不平衡问题
3️⃣ Macro-F1 / Micro-F1
| 指标 | 计算方法 | 使用场景 |
|---|---|---|
| Macro-F1 | 对每个类别单独计算 F1,然后平均 | 类别数量相差大时,每个类别权重相等 |
| Micro-F1 | 将所有类别的 TP/FP/FN 统计在一起,再计算 F1 | 样本量较多时,更看整体预测性能 |
在客服多意图分类中:
- Macro-F1:关注每个意图都预测得好不好
- Micro-F1:整体预测正确的比例
4️⃣ 验证指标示例
假设一句话真实标签:
[价格咨询, 议价, 成交意向]
模型预测:
[价格咨询, 成交意向]
- Accuracy(严格匹配) = 0(不完全匹配)
- Precision = 2/2 = 1.0(预测的两个标签都正确)
- Recall = 2/3 ≈ 0.67(真实标签三条,只预测出两条)
- F1 ≈ 0.8 → 更合理衡量性能
F1合理范围
| 任务类型 | 数据质量 & 难度 | F1参考值 |
|---|---|---|
| 简单单标签分类(少量类别、清晰区分) | 数据标注一致,语料干净 | 0.85 ~ 0.95 |
| 中等复杂度多标签分类(多意图、多类别、不平衡) | 数据有少量噪声,类别分布合理 | 0.7 ~ 0.85 |
| 高复杂度 / 类别多且不平衡 | 数据不完全、长尾标签多 | 0.5 ~ 0.7 |
F1中准确率的计算
这个问题非常关键。Accuracy(准确率)之所以容易被误用,正是因为很多人“公式会背,但语义没吃透”。我按业务可解释性来讲,而不是只讲数学。
一、先给一句“人话版”定义
Accuracy = 在所有判断中,模型判断“对”的比例。
也就是:
- 预测对了多少次
- 除以
- 总共做了多少次判断
二、把公式逐项翻译成“业务语言”
[
Accuracy = TP + TN\TP + TN + FP + FN
]
我们逐个解释:
1️⃣ TP(True Positive)——“该抓的抓对了”
- 真实是正类
- 模型也预测为正类
例子(客服意图):
- 用户真的有【投诉】
- 模型也识别成【投诉】
👉 这是“有价值的正确判断”
2️⃣ TN(True Negative)——“本来就不是,我也没说是”
- 真实是负类
- 模型预测为负类
例子:
- 用户不是【投诉】
- 模型也没有打【投诉】
👉 在多标签任务中,这一项数量巨大
3️⃣ FP(False Positive)——“乱说有”
- 真实不是
- 模型却说是
例子:
- 用户只是咨询价格
- 模型却预测了【投诉】
👉 业务上是误报
4️⃣ FN(False Negative)——“该抓的没抓到”
- 真实是
- 模型却没预测
例子:
- 用户真的在投诉
- 模型没识别出来
👉 业务上是漏报(最严重)
三、Accuracy 在“单标签 vs 多标签”中的本质区别
场景 1:单标签分类(还能勉强用)
10 个样本,每个样本只有 1 个标签:
- TP / FP / FN / TN 都在一个量级
- Accuracy 有一定参考价值
场景 2:多意图 / 多标签(Accuracy 几乎失效)
假设:
- 100 个可能意图
- 每个用户真实只有 1~2 个意图
那么对每个样本来说:
- TN ≈ 98
- TP ≈ 1
- FN ≈ 1
- FP ≈ 0~1
即使模型 什么意图都不预测:
- TP = 0
- FP = 0
- FN = 2
- TN = 98
[
Accuracy = \frac{98}{100} = 98%
]
👉 模型完全不可用,但 Accuracy 高得离谱
四、用一句话解释 Accuracy 的“致命问题”
Accuracy 把“没发生的事情判断没发生”(TN)
和
“真正识别出用户需求”(TP)
当成同等重要
而在真实业务中:
- TN 的价值 ≈ 0
- FN 的损失极高
- TP 才是模型存在的意义
五、为什么你会觉得这个公式“怪怪的”
因为它在隐含一个假设:
“正类和负类同等重要、同等稀缺”
而在你的场景里(多意图客服):
- 正类:极少
- 负类:极多
👉 假设不成立,公式自然“失真”
六、什么时候 Accuracy 才有意义?
| 场景 | 是否适合用 Accuracy |
|---|---|
| 二分类,正负均衡 | ✅ |
| 单标签,多类分类 | ⚠️ 勉强 |
| 多标签 / 多意图 | ❌ 不建议 |
| 异常检测 / 风控 | ❌ |
七、面试时一句“高级但不装”的解释(建议记)
“Accuracy 表示整体预测正确的比例,但它把大量 True Negative 也计入正确。在多意图、多标签场景中,负类数量远大于正类,Accuracy 会被 TN 主导,无法反映模型是否真正识别到了用户意图,因此通常用 Recall、Precision 或 F1 作为核心指标。”
八、一句话总结
Accuracy = 看起来全面,实则最容易骗人
在多意图任务中,它更多反映的是“模型没乱猜”,而不是“模型抓对了需求”。
如果你愿意,下一步我可以直接帮你:
- 用你当前的 多意图客服任务,给一套 指标选择 + 阈值策略
- 或者把 Accuracy / F1 / Recall 和 业务 KPI(转化率、投诉漏判) 一一对应起来
召回率(Recall的计算)
明白,你想知道 多意图 / 多标签分类的 Recall(召回率)怎么计算,我详细分步讲清楚:
1️⃣ Recall 定义(单标签分类)
单标签分类任务中:
[
\text{Recall} = \frac{\text{预测正确的正样本数 (TP)}}{\text{真实正样本数 (TP + FN)}}
]
- TP(True Positive):正确预测为正
- FN(False Negative):真实正但没预测到
Recall 越高 → 模型漏掉正标签的概率越低
2️⃣ 多标签 / 多意图分类特点
-
每个样本可以有 多个标签
-
例子:一句话真实标签
[价格咨询, 议价, 购买意向] -
模型预测:
[价格咨询, 购买意向]
-
-
这里 TP = 2(价格咨询 + 购买意向预测正确)
-
FN = 1(议价没预测出来)
3️⃣ 多标签 Recall 计算方法
① 样本级 Recall(per-sample)
-
对每条样本:
[
Recall_i = \frac{|\text{预测标签} \cap \text{真实标签}|}{|\text{真实标签}|}
] -
本例:
[
Recall = \frac{2}{3} \approx 0.67
] -
最终取 平均:
[
Recall = \frac{1}{N} \sum_{i=1}^{N} Recall_i
]
② 类别级 Recall(per-class)
-
对每个标签单独统计 TP / FN:
[
Recall_c = \frac{\text{TP for class c}}{\text{TP + FN for class c}}
] -
对多标签任务可以计算:
- Macro-Recall:所有标签 Recall 平均 → 每个标签权重相等
- Micro-Recall:把所有 TP/FN 累加再计算 → 类别多寡按样本量加权
4️⃣ 与 F1 的关系
- F1 = 2 × (Precision × Recall) / (Precision + Recall)
- 多标签分类常用 Macro-F1 / Micro-F1,就是在 Recall 的基础上综合 Precision 来衡量模型性能
5️⃣ 面试可表述
“多意图 / 多标签分类中,Recall 衡量模型覆盖真实意图的能力。
- 样本级 Recall:每条样本预测的正确标签数 / 真实标签数
- 类别级 Recall:每个标签统计 TP / (TP+FN)
- 最终可用 Macro-Recall 或 Micro-Recall 平均,结合 Precision 计算 F1-score,用于衡量多标签模型的整体效果。”



浙公网安备 33010602011771号