词条 · AI · 核心
困惑度
模型读到下一个词时,心里大概在几个选项之间犹豫——这个「几个」就是困惑度。
也称:perplexity、PPL、困惑度、ppl
一句话
困惑度是「平均而言,模型在几个候选词之间犹豫」。困惑度 20,意思是它每写一个词,心里的挣扎程度相当于在 20 个等可能选项里挑一个。越低越自信。
先看一个麻烦:两个模型,谁更好
你手上有两个模型,都能写句子。想知道哪个更懂语言,怎么比?
最直接的想法是让它们各写一段,人来读。但这么做有几个问题:人读得慢,一天比不了几个;不同人口味不同;而且句子写得漂亮不代表模型真的把语言的规律学到了——它可能只是背下了几个好句式。
换个思路:不让它写,让它猜。拿一段它没见过的真实文字,一个词一个词遮住,问它「下一个词是什么」。它对每个位置都给出一个概率分布。
现在麻烦变具体了:它每个位置都吐出一整张概率表,几万个词各有一个数。一段文字几千个位置,就是几千张表。怎么把这一大堆概率压成一个能比较的数字?
朴素尝试为什么都不够
猜对率。 看它把最高概率给了正确词的比例。问题是这个指标太粗——「正确词概率 0.9」和「正确词概率 0.3 但恰好最高」被算成同一件事,而这两个模型的把握差得远。语言里很多位置本来就有多个合理的词,逼它选一个反而惩罚了对的行为。
把所有正确词的概率乘起来。 这个方向对:概率越高说明模型越贴近真实文字。但一千个小于 1 的数相乘,结果会小到浮点数存不住(下溢)。而且长文本天然比短文本乘出更小的数,长短文本没法比。
取对数再相加,解决下溢。 对了一半。加起来还是随长度增长,所以要除以词数,得到「平均每个词的对数概率」。这下长短可比了。
只剩一个问题:这个数是个负的对数,比如 −3.0,不好直观理解。「−3.0 比 −3.5 好」对,但好多少、好在哪,读不出来。
机制
把那个平均对数概率取负、再指数回去,就得到困惑度:
┌ ┐
PPL = exp │ − (1/N) · Σ ln P(wᵢ | 前文) │
└ ┘
N = 词数 P(wᵢ|前文) = 模型给正确词的概率
这一步指数化做的事,是把「对数概率」翻译回有效选项个数。
看几个极端就清楚了:
每个位置都完全确定 P = 1 → PPL = 1
(毫不犹豫)
在 20 个等可能词里挑 P = 1/20 → PPL = 20
(犹豫程度 = 20 个选项)
词表 5 万,完全瞎猜 P = 1/50000 → PPL = 50000
(等于没学到东西)
所以困惑度有个好性质:它的单位是「个」,可以当人话讲。PPL 从 40 降到 20,意思是模型面对同一段文字,犹豫的范围小了一半。
它和信息论里的熵是同一个量的两种写法——熵以比特计,困惑度以选项个数计。当熵 以比特为单位时,。所以「困惑度 1024」等价于「每个词还剩 10 比特不确定性」。
为什么值得知道
困惑度低不等于模型好用——它只衡量「预测下一个词」这一件事,不衡量事实对不对、推理通不通、听不听指令。一个把训练数据背下来的模型可以有极低的困惑度,同时毫无用处。
但它有个别的指标很难替代的作用:它是连续的、便宜的、无需人工的。所以它常被当作一个「地板检查」——不是用来证明模型好,而是用来发现模型还没准备好。
一个具体用法:在小模型上做强化学习对齐之前,先看监督微调后的困惑度。如果 PPL 还在 50 以上,说明模型连基本的语言分布都没拿稳,此时去优化偏好几乎没有收益;钱花在改数据上更划算。这类判据之所以成立,正是因为困惑度衡量的是最底层的那件事:它有没有把语言的形状学会。
一个提醒
比较困惑度的前提是同一份测试文本、同一套分词。换了分词器,「一个词」的定义就变了,数字不可比。跨论文引用困惑度时这一点常被忽略——两个 PPL 数字并排放着,看起来能比,其实不能。
来源
- A Mathematical Theory of Communication · Bell System Technical Journal
提到这个词条的文章
- 小模型的 PPO 不是不稳定,是接线错了:三个可复现的失败模式 2026-07-31
- 比特币白皮书逐节拆解经典拆解 2026-07-31
- 通信的数学理论逐节拆解经典拆解 2026-07-31