跨域PPL比较缺陷 | AI生成和翻译
问题: 在比较不同数据分布上的困惑度(PPL)时,“跨域”指的是什么?
回答:
你的朋友指出了一个关于大语言模型评估中常见的方法论缺陷。
跨域 = 跨数据分布的 PPL 比较
困惑度仅在相同分布内才有意义。当你在代码与自然语言上计算 PPL 时,你实际上是在比较两个熵值截然不同的分布——这就是所谓的“流氓行为”。
原因如下:
代码具有低熵特性:
- 语法高度受限(关键字、括号、缩进)
- 模型已看过数十亿次几乎相同的模板化内容
-
多数词元的条件熵 H(词元 上下文) 极小 - 因此代码上的 PPL 自然较低——并非因为模型“理解”得更好,而是因为分布本身更尖锐
自然语言具有高熵特性:
- 词语选择远不受限
- 人类写作多样、习语化、依赖上下文
- 分布更扁平 → 天然产生更高的 PPL
缺陷所在: 如果模型 A 在代码上得到 PPL=5,在散文上得到 PPL=15,你不能说“模型 A 对代码的理解比对散文好 3 倍”。两者的量纲不可比。代码上的 PPL=5 可能代表比散文上的 PPL=15更差的相对建模能力,因为代码的基线熵值本就低得多。
数学上:
PPL = exp(H(p, q)) # 真实分布 p 与模型 q 之间的交叉熵
如果 H(p_代码) ≈ 2 比特,而 H(p_散文) ≈ 8 比特,那么完美模型在代码上会得到 PPL≈4,在散文上得到 PPL≈256。跨域比较原始 PPL 数字相当于拿苹果比橘子。
正确的比较方式应该是:
- 在同一领域内,相对于 oracle/真实语言模型的 PPL
- 或者按领域熵值归一化的每字符比特数
- 更简单:对两个模型使用相同的保留测试集进行评估
你的朋友实际上是在揭露那些“我的模型 PPL 更低”的声明——这些声明通过挑选简单领域(代码、结构化数据)来让数字好看。