543 字
3 分钟
困惑度Perplexity
2026-10-09
无标签

这一块偏向nlp的数学基础部分

困惑度的定义#

困惑度(perplexity)本质上是 熵或交叉熵 的指数化。它把“平均编码长度”这种对数尺度的量,变成“等效候选数”这种更直观的线性尺度。

回顾一下熵的定义,对于一个分布 PP,其熵为 H(P)=−∑xp(x)log⁡bp(x)H(P)=-\sum_{x} p(x)\log_b p(x)。熵的指数化就是困惑度:

Perplexity(P)=bH(P)=b−∑xp(x)log⁡bp(x)\text{Perplexity}(P) = b^{H(P)} = b^{-\sum_{x} p(x)\log_b p(x)}

再回顾一下交叉熵的定义,对于两个分布 PP 和 QQ,其交叉熵为 H(P,Q)=−∑xp(x)log⁡bq(x)H(P, Q)=-\sum_{x} p(x)\log_b q(x)。交叉熵的指数化就是困惑度:

Perplexity(P,Q)=bH(P,Q)=b−∑xp(x)log⁡bq(x)\text{Perplexity}(P, Q) = b^{H(P, Q)} = b^{-\sum_{x} p(x)\log_b q(x)}

直观理解困惑度#

对于一个语言模型来说,他会给出下一个词的概率分布,记作这里的 QQ ,而这个词的真实分布记作 PP ( PP 延续前文的one-hot分布),用e作为底数。用 ww 表示该位置的真实词,困惑度可以写成:

Perplexity(P,Q)=eH(P,Q)=e−∑xp(x)log⁡eq(x)=e−log⁡eq(w)=1q(w)\text{Perplexity}(P, Q) = e^{H(P, Q)} = e^{-\sum_{x} p(x)\log_e q(x)} = e^{-\log_e q(w)} = \frac{1}{q(w)}
  • 模型给真实词的概率越低,困惑度越高。

  • 困惑度可以理解为模型在预测下一个词时在多少个候选词之间进行选择。困惑度越低,说明模型的预测越准确,模型对语言的理解能力越强。

以一个具体的计算来说明,假设有一个性能非常弱的小小小模型,我们喂给它的训练数据只有两条:

1. "I love Alice"
2. "I love Bob"

对于这个模型来说,它在预测下一个词时,可能会给出以下概率分布:

P(love | "I ") = 1.0
P("Alice"| "I love ") = 0.5
P("Bob"| "I love ") = 0.5

初始上下文都是 “I” 对于两个句子,可以计算在预测时每个位置上面的困惑度:

句子 1:I love Alice#

位置上下文真实下一个词模型给的概率负对数似然该位置困惑度
1Ilove1.0−ln⁡1=0-\ln 1 = 01/1=11/1=1
2I loveAlice0.5−ln⁡0.5=ln⁡2-\ln 0.5 = \ln 21/0.5=21/0.5=2

句子 2:I love Bob#

位置上下文真实下一个词模型给的概率负对数似然该位置困惑度
1Ilove1.0−ln⁡1=0-\ln 1 = 01/1=11/1=1
2I loveBob0.5−ln⁡0.5=ln⁡2-\ln 0.5 = \ln 21/0.5=21/0.5=2
困惑度Perplexity
https://biscuit0613.github.io/posts/dl-basics/perplexity/
作者
Biscuit
发布于
2026-10-09
许可协议
CC BY-NC-SA 4.0
经典 NLP 任务:文本分类、信息抽取与机器翻译
MiniMind 数据侧:Tokenizer 与三阶段数据处理