在评估模型对长文本的处理能力(比如刚才聊的 RoPE 扩展)时,Perplexity (PPL,困惑度) 是最核心的指标。

通俗来说,PPL 衡量的是模型在预测下一个词时“有多懵”。如果 PPL 是 10,说明模型预测下一个词时,就像在 10 个同样可能的候选词中做选择。


1. 数学定义:从熵到困惑度

PPL 本质上是**交叉熵(Cross-Entropy)**的指数形式。

假设有一个长度为 的句子 ,其概率为

第一步:计算平均负对数似然 (Loss)

模型对这个句子的 Loss(通常也是训练时的交叉熵损失)定义为:

第二步:求指数得到 PPL


2. 细节计算过程(以 Token 为单位)

在实际的 LLM 推理中,过程如下:

  1. 输入序列:将一段文本输入模型(例如 2048 个 token)。

  2. 获取 Logits:模型输出每个位置对下一个词的概率分布(Logits 后接 Softmax)。

  3. 计算目标概率:找到真实文本中下一个词对应的概率

  4. 累加与平均

    • 将这些概率取对数:
    • 求和并取负数:
    • 除以总长度 (归一化)。
  5. 映射:计算


3. 为什么长文本评估总看 PPL 曲线?

在研究 RoPE 扩展(如 YaRN 或 Llama 3.1)时,你会看到一张以 Context Length 为横坐标,PPL 为纵坐标的图。

  • PPL 突变(The Cliff):如果模型不支持长文本,当输入长度超过其训练限制(比如 4k)时,PPL 会突然从 10 飙升到 10,000 以上。这意味着模型彻底“疯了”,输出变成了乱码。

  • PPL 缓慢下降:对于优秀的扩展方案,随着上下文增加,PPL 应该缓慢下降。因为更多的背景信息理论上应该让模型更容易预测出下一个词。


4. 容易忽略的细节:Token 化的影响

PPL 的数值极度依赖于 Tokenizer

  • 如果 Tokenizer 词表很大,单步预测的难度增加,PPL 往往偏高。
  • 注意:不同模型(如 Llama 3 和 Qwen)之间直接对比 PPL 数值是没有意义的,因为它们的词表不同。PPL 只适合用来对比同一个模型在不同配置、不同长度下的表现。