AI概念与词典

困惑度(Perplexity)是什么?公式、计算方法与 LLM 评估陷阱

困惑度PPL是自回归语言模型平均负对数似然的指数。本文解释公式、手算示例、滑动窗口、tokenizer可比性、BERT伪困惑度,以及为什么低PPL不等于更聪明或更少幻觉。

困惑度从真实token概率到平均负对数似然再取指数的三步计算图
本页目录
  1. 困惑度的公式是什么,直觉上表示什么
  2. 一个可手算的例子:为什么概率降低会快速拉高 PPL
  3. 为什么不同模型的 PPL 经常不能直接比较
  4. 长文本为什么要用滑动窗口,stride 会怎样改变结果
  5. BERT 能直接算同一个困惑度吗
  6. PPL 越低,是否代表模型越聪明、越少幻觉
  7. 一份可复现的 PPL 报告应该包含什么
  8. 常见问题
  9. 困惑度最低的模型就是最好的吗
  10. PPL 可以是小于 1 吗
  11. 为什么同一个模型网上有不同 PPL
  12. 能用生成出来的回答估算闭源模型 PPL 吗
  13. 编辑复核与纠错记录

直接回答:困惑度(Perplexity,PPL)是自回归语言模型在一组测试 token 上的平均负对数似然取指数。数值越低,表示模型在这份测试语料、这个分词器和这套计算口径下,给真实下一个 token 分配的概率平均更高。它适合监控训练、比较同口径 checkpoint 和发现量化退化,但不能单独证明模型更聪明、事实更准确或更会推理。

“Perplexity”也可能指同名 AI 搜索公司。本文讲的是语言模型评估指标;如果你在找产品,请看本站的 Perplexity 答案引擎指南Perplexity 公司档案。两者除了英文拼写相同,没有定义上的从属关系。

旧稿纠正:旧版把 PPL 越低写成模型越“智能”,把 BERT 与 GPT 放在同一标准公式下,还把 RAG 效果、提示词质量和事实准确率直接归因于困惑度。新版删除这些越界结论,并补齐测试集、tokenizer、上下文窗口、stride、特殊 token 和计分位置等可复现实验条件。
困惑度从真实token概率到平均负对数似然再取指数的三步计算图
困惑度只给测试集中真实出现的下一个 token 计分。图由兰塞 AI 编辑部依据 Hugging Face 与《Speech and Language Processing》原创整理。

困惑度的公式是什么,直觉上表示什么

设测试序列为 x₁…xₙ,自回归模型在前文 x<i 条件下给真实 token xᵢ 的概率为 p(xᵢ|x<i)。以自然对数计算时:

NLL = −(1/N) × Σ log p(xᵢ | x<i)

PPL = exp(NLL)

Hugging Face 困惑度文档将其表述为序列平均负对数似然的指数,也说明它等价于数据分布与模型预测之间的交叉熵取指数。若交叉熵使用以 2 为底的对数,写作 2ᴴ;若框架损失使用自然对数,则写作 eᴴ。只要对数底与指数底对应,含义一致。

直觉上,PPL=10 可以理解为模型平均不确定性相当于在 10 个等概率候选中选择,但这不是说模型每一步真的只看到 10 个词。模型的词表可能有数万 token,概率分布也极不均匀;“等概率候选数”只是把熵转换成便于理解的有效分支数。Google 的机器学习术语表也采用类似的“需要多少次猜测”直觉。

概念 计算对象 数值方向 能说明什么
负对数似然 NLL 真实 token 的条件概率 越低越好 该语料上的平均概率损失
交叉熵 真实分布与模型分布 越低越好 常与平均 NLL 在实现中对应
困惑度 PPL 平均 NLL 的指数 越低越好 同口径下的预测不确定性
准确率 最高概率类别是否命中 越高越好 忽略其余概率分配,信息更粗

一个可手算的例子:为什么概率降低会快速拉高 PPL

假设一个极简序列有三个需要计分的 token,模型给真实 token 的概率依次为 0.5、0.25、0.5。三者概率几何平均为 (0.5×0.25×0.5)^(1/3)≈0.397,困惑度就是其倒数,约 2.52。若第二步概率从 0.25 降到 0.01,PPL 会明显升高,因为负对数会对“把真实 token 判得极低”给予很大惩罚。

训练日志里的 loss 若正好是对有效 token 求平均的自然对数交叉熵,可以用 exp(loss) 得到 PPL。但工程里最容易错的不是指数运算,而是分母:padding、只作为上下文的重叠 token、被截断位置和 batch 内每条序列的有效长度必须正确屏蔽。PyTorch 的 CrossEntropyLoss 文档说明了 ignore_index 和 reduction 行为;不能不看标签移位与掩码就对任意 loss 直接取指数。

为什么不同模型的 PPL 经常不能直接比较

分词器决定同一段文字被拆成多少 token,也决定每个预测事件的词表。一个模型把“人工智能”拆成一个 token,另一个拆成四个 token,两者的 per-token PPL 分母和事件空间都不同。Hugging Face 明确提醒,tokenization 会直接影响 PPL;《Speech and Language Processing》也要求只在相同测试集与词汇条件下解释语言模型的困惑度比较。

比较两个语言模型困惑度前需要保持一致的六项计算条件
测试语料、分词、上下文、计分位置、模型状态和报告单位都一致时,PPL 才有清楚的横向含义。图由兰塞 AI 编辑部原创。
必须记录 常见差异 会造成什么偏差 建议写法
测试语料 版本、split、清洗、去重、训练污染 文本本身难度不同 给数据集版本与哈希
tokenizer 词表、归一化、特殊 token token 数与预测空间变化 给模型与 tokenizer revision
上下文 max length、stride、重叠 可见前文越多通常越容易 报告窗口与 stride
计分位置 BOS/EOS、padding、重叠区 重复或无效 token 进入分母 报告有效 token 总数
模型状态 checkpoint、精度、量化、eval dropout 与数值误差改变结果 固定种子、版本和精度
单位 per-token PPL、BPC、BPB 归一化单位不同 同时给 NLL 与单位

跨 tokenizer 时,可以增加 bits per character(BPC)或 bits per byte(BPB)等按字符/字节归一化的指标,但它们也不是万能换算。语言、Unicode 归一化、空格处理和数据清洗仍会影响结果。The Gradient 的语言模型评估指标说明用词表、预处理与上下文长度解释了为什么孤立的 PPL 数字信息量很低。

长文本为什么要用滑动窗口,stride 会怎样改变结果

理想计算会让每个 token 看到此前全部文本,但 Transformer 有有限上下文窗口。如果把长文本硬切成互不重叠的块,每块开头的 token 只能看到很短前文,模型会被额外惩罚。Hugging Face 推荐带重叠的滑动窗口:前一段为后一段提供上下文,但重叠区只作为条件,不重复计入 loss。

stride 越小,通常每个目标 token 能看到的前文越多,结果也可能更低,但前向计算次数更高。官方 GPT-2 示例中,同一模型与 WikiText-2 数据,仅把 stride 从不重叠改为 512,报告 PPL 就从约 19.44 降到 16.44。这不是模型突然变强,而是评估近似更充分。发布排行榜时若不写 stride,读者无法复现。

  1. 把完整测试语料按固定方式 token 化,不在测试时再次训练 tokenizer。
  2. 按最大上下文窗口和固定 stride 移动;记录每个窗口的起止位置。
  3. 把只用于上下文的重叠标签设为忽略值,padding 也不计分。
  4. 累加所有有效目标 token 的 NLL 总和,而不是简单平均每个 batch 的 loss。
  5. 用 NLL 总和除以有效 token 总数,再取指数;同时报告二者。

BERT 能直接算同一个困惑度吗

不能直接套用因果语言模型公式。BERT 是 masked language model,训练时根据左右两侧上下文预测被遮盖 token,并没有按从左到右定义完整序列概率。Hugging Face 文档明确说经典 PPL 对 BERT 这类 masked LM 并非良好定义。

研究中会使用 pseudo-log-likelihood / pseudo-perplexity:逐个遮盖 token,再计算它在其余上下文条件下的概率。Salazar 等人的 ACL 2020 论文Masked Language Model Scoring系统讨论了这种做法。它计算成本高,语义也与自回归 PPL 不同,报告时必须写“伪困惑度”及具体遮盖算法,不能与 GPT 式 PPL 混排。

模型类型 典型目标 PPL 状态 报告要求
自回归/因果 LM 预测下一个 token 经典 PPL 有定义 语料、tokenizer、窗口和 stride
Masked LM 预测被遮盖 token 经典 PPL 不直接适用 标明 pseudo-PPL 与遮盖方法
Seq2Seq 在输入条件下预测输出 可算条件生成 token NLL 源/目标处理、解码与归一化
闭源聊天 API 生成对话答案 若无完整 token logprob 难复现 不要用采样文本反推官方 PPL

PPL 越低,是否代表模型越聪明、越少幻觉

不代表。PPL 衡量模型对测试文本的概率拟合,并不检查生成答案是否符合指令、引用是否支持主张、算术推理是否正确、内容是否安全。模型可以对常见但错误的说法分配很高概率,也可以在专业事实题上自信出错;低 PPL 与低幻觉之间没有可直接套用的等号。

训练监控、跨模型比较和产品验收中困惑度适用范围决策图
更低 PPL 只表示同一测试口径下的预测损失更小。事实、推理、安全与用户价值需要独立评测。图由兰塞 AI 编辑部原创。
你要回答的问题 PPL 是否合适 至少再加什么
训练是否过拟合或收敛 合适:对比 train/validation 曲线 数据泄漏检查、下游任务集
量化是否损伤基础分布 合适:同模型同数据回归 任务准确率、延迟、内存与吞吐
哪个聊天模型更好用 不能单独回答 指令遵循、事实性、人类偏好与成本
RAG 是否减少幻觉 不能直接回答 检索召回、证据忠实度、答案完整性
中文能力是否更强 仅同中文语料/口径有参考 中文任务集、长文本、领域与安全测试

做综合模型选型时,可把 PPL 放在“基础概率建模”一栏,再结合本站的 Arena 排名与任务评估指南检查人类偏好偏差;涉及本地部署时,用 Windows 本地模型部署指南记录量化、显存和速度;涉及企业数据,则按 本地与云端隐私决策补齐数据边界。

一份可复现的 PPL 报告应该包含什么

  • 模型仓库、checkpoint、revision、dtype、量化方法与 eval 模式。
  • tokenizer 仓库与 revision、特殊 token、文本归一化方式。
  • 测试集名称、版本、split、语言、预处理、样本数与内容哈希。
  • 最大上下文长度、stride、BOS/EOS、padding 和重叠区屏蔽逻辑。
  • 有效 token 总数、NLL 总和、平均 NLL、PPL 和归一化单位。
  • 硬件、框架、Transformers/PyTorch 版本、批大小和计算脚本。
  • 训练数据污染检查,以及 PPL 之外的任务、事实、安全、延迟和成本指标。

公开基准也应保留这种可追溯性。WikiText 数据集论文Pointer Sentinel Mixture Models说明了 WikiText 的构建与基准用途;Paloma 论文Paloma: A Benchmark for Language Model Fit则强调跨域语言模型拟合评测。使用名称相同但版本、切分或清洗不同的数据,结果仍可能不可比。

复现实验时还可对照 Hugging Face 的因果语言模型任务文档检查标签移位与训练流程,并用 EleutherAI LM Evaluation Harness的固定任务配置补足下游能力,而不是把所有结论压在一个 PPL 上。历史报告如 OpenAI 的 GPT-2 技术报告与 Kaplan 等人的神经语言模型 Scaling Laws会同时给训练/验证损失、数据与模型规模;引用其中数字时仍要保留原始实验口径。

常见问题

困惑度最低的模型就是最好的吗

不是。只有在相同语料、tokenizer 和计算方法下,较低 PPL 才表示该测试集上的平均预测损失更小;产品价值还取决于任务正确率、事实、安全、延迟和成本。

PPL 可以是小于 1 吗

在标准离散 token 概率和正确归一化下,平均 NLL 不小于 0,因此 PPL 不小于 1。出现小于 1 通常意味着符号、归一化、概率或 loss 口径计算有误。

为什么同一个模型网上有不同 PPL

常见原因是测试集版本、tokenizer、上下文长度、stride、BOS/EOS、是否重复计分、精度与 checkpoint 不同。先比较实验配置,不要先比较最终数字。

能用生成出来的回答估算闭源模型 PPL 吗

通常不能得到可比的标准 PPL。标准计算需要模型对测试集中每个真实 token 的条件 log probability;只拿采样文本、总置信度或第三方打分不能替代这些概率。

编辑复核与纠错记录

本文由兰塞 AI 编辑流程于 2026 年 7 月 17 日重建。旧稿残留 Markdown 表格和公式,并把困惑度写成智能、RAG、事实性与幻觉的通用指标;新版依据 Hugging Face、PyTorch、Stanford 教材、ACL 论文与公开基准,重新定义适用范围、计算步骤、滑动窗口、跨 tokenizer 可比性和 masked LM 边界,并新增三张原创解释图。后续如评测库实现发生变化,将更新版本与口径,不只改日期。本站的来源与纠错原则见关于本站与编辑规范