gzip 能当语言模型用吗?一个压缩即预测的思想实验
压缩即预测:一个反直觉的等价关系
如果告诉你,你电脑里那个用来压缩文件的 gzip 工具,居然可以像语言模型一样续写莎士比亚风格的文本,你可能会觉得这是天方夜谭。但最近一位开发者的实验表明,这背后其实隐藏着信息论中一个深刻的等价关系——压缩即预测。
这位作者此前曾尝试过用无界 n-gram 模型生成莎士比亚文本,不依赖任何神经网络权重,只靠统计计数。后来他读到论文《Language Modeling is Compression》,其中明确指出:每一个预测模型本质上都是一个压缩器,而所有压缩算法也都是预测模型。这自然引出一个问题:gzip 能不能做语言建模?
实验:给 gzip 喂莎士比亚
作者的做法很直接:用 tiny Shakespeare 语料库“预热”gzip,然后给它一个普通的文本提示,让它通过搜索压缩效果最好的字节序列来续写。下面是未经编辑的真实输出片段:
MENENIUS: Though all at once canq
MARCIUS: Pray now, nocamest thou to a morsel .
LARTIUS: Hence, and I the end admire,
where G again; and after it ag .
结果如何?勉强算得上? 文本并不完全连贯,但明显能看出它“知道”一些关于文本结构的信息——远超作者对 gzip 的预期。
为什么压缩器能生成文本?
核心在于:压缩器本质上是一个概率模型。
一个压缩器会对它“预期”的数据花费很少的字节,对意料之外的数据花费很多字节。比如,一百万个重复的字母 A 可以一句话描述完,而一百万个随机字节几乎无法压缩。这不是巧合,而是信息论的核心:编码一个符号所需的比特数是 $-\log_2 p$,其中 $p$ 是模型赋予该符号的概率。概率越高,比特越少。
因此,任何压缩器内部都隐藏着一个概率模型,无论是否有人把它写下来。
gzip 使用的是 DEFLATE 算法,它通过在一个 32 KiB 的滑动窗口中寻找与最近文本的匹配来压缩下一个字节。如果续写内容与窗口中已有的文本重复,DEFLATE 就会用一个廉价的反向引用代替字面字节。
于是就有了一个评分方法:给定上下文和候选续写,候选得分 = len(gzip(上下文 + 候选))。压缩后长度越小,说明 gzip 越“预期”这个续写。
这意味着什么?
这个实验虽然简单,却揭示了语言模型与压缩算法之间的深层联系。它提醒我们,预测能力不一定需要神经网络——任何能够有效压缩数据的系统,都在某种程度上“理解”了数据的结构。
当然,gzip 的生成能力远不能与 GPT 等大型语言模型相比。它的“知识”仅限于局部字节模式,缺乏长距离依赖和语义理解。但作为一个思想实验,它生动地展示了信息论如何将压缩与智能联系起来。
下次当你右键压缩一个文件时,或许可以想一想:这个小小的工具,其实也在默默地“预测”着你的数据。



