LoRA微调的指标

目录

准确度和召回率

image
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,用于衡量多标签模型的整体效果。”
posted @ 2026-01-25 21:02  向着朝阳  阅读(4)  评论(0)    收藏  举报