本文在探讨「压缩即预测」这个主题,作者构建了 gzipt 这个小工具(谐音梗不错),仅靠 gzip 的 DEFLATE 算法,给定一段文本后能续写出类似结构的文本。生成的文本依然无法正理解语法和语义,通过束搜索可以筛选出更好的结果。文章不长,但是可发散学习的东西很多。
本文在探讨「压缩即预测」这个主题,作者构建了 gzipt 这个小工具(谐音梗不错),仅靠 gzip 的 DEFLATE 算法,给定一段文本后能续写出类似结构的文本。生成的文本依然无法正理解语法和语义,通过束搜索可以筛选出更好的结果。文章不长,但是可发散学习的东西很多。
本文将 Gzip 作为无需训练的语言模型示例,通过把语料库放入其 32KB 窗口,用 beam search 搜索压缩后字节数最少的候选延续来生成文本。实验用 tiny Shakespeare 语料 priming 后,能输出带有角色名和对话结构的片段,证明它捕捉到了文本的重复模式。生成过程完全依赖 zlib 的 DEFLATE 实现,没有任何学习参数。
作者此前工作用无界 N-gram 模型在无需训练的情况下生成莎士比亚文本,本文以此为起点,探索 Gzip 是否能起到相似作用。N-gram 通过简单计数提供预测概率,而 Gzip 则隐式利用相同原理,通过匹配历史窗口实现压缩。两者共同说明语言建模本质是建模序列概率,而非必须依赖神经网络。
Gzip 内部采用 DEFLATE 算法,在 32KB 滑动窗口内寻找重复字节序列,将匹配内容编码为短小的反向引用,从而降低总字节数。本文利用这一特性,把压缩后长度作为候选文本的评分标准:越容易被窗口匹配的延续,评分越好。beam search 则在多步前瞻后挑选最优路径,避免单字节评分因整数长度而产生的量化噪声。
本文实现中直接调用Python标准库的zlib模块完成DEFLATE压缩,而非启动外部gzip进程。gzipt通过测量context加candidate的压缩后字节数来为候选打分,底层仍使用与gzip相同的滑动窗口匹配算法。文章特别指出这一选择仅为命名与实现便利,并不改变核心机制。
本文所述gzipt工具是纯Python标准库程序,仅依赖zlib即可完成压缩评分与束搜索生成。作者强调无需神经网络、权重或外部依赖,仅用计数与压缩长度即可在tiny Shakespeare语料上产生有一定结构特征的文本延续。
本文中束搜索用于解决单字节压缩长度评分因整数量化而信号微弱的问题。gzipt在语料窗口加最近尾部文本的上下文中,对beam_width个候选延续序列向前展望horizon字节,保留压缩后长度最小的路径,再提交最优片段并循环。该方法显著改善了生成连贯性,避免了贪心逐字节选择的失败。
文章核心论证压缩即预测,因此 Gzip 可直接充当语言模型:把提示和候选文本拼接后压缩,长度越短说明模型越“看好”该延续。作者用 beam search 克服单字节评分量化噪声,实现了从语料库中延续提示的文本生成。结果虽不如神经网络流畅,但已明显超出随机水平,印证了压缩-预测等价性。
本文刻意对比传统神经网络语言模型,提出完全不使用权重、梯度或训练数据的替代方案。作者此前已用无界 N-gram 实现莎士比亚文本生成,本文进一步把 Gzip 也纳入这一“无网络”范畴。实验表明,纯压缩器即可完成类似任务,突显神经网络并非语言建模的唯一途径。
文章援引信息论核心公式:编码符号所需位数等于 -log₂p,p 为模型赋予该符号的概率。高概率事件对应极少位数,因此优秀压缩器必然是优秀预测器。Gzip 通过 DEFLATE 的实际压缩长度,隐式实现了这一概率评分,从而把普通文件压缩工具转变为可生成文本的语言模型。
本文援引论文观点:预测模型本质是压缩器,所有压缩算法也都是预测模型。基于此等价性,gzip可通过测量context加candidate的压缩长度来隐式评估延续概率,从而在无需训练参数的情况下完成语言建模任务。作者据此设计了后续的束搜索生成流程。
Nathan Barry为本文作者。他此前已尝试无神经网络的无界n-gram莎士比亚生成,读到《Language Modeling is Compression》论文后,进一步验证gzip能否直接充当语言模型,并编写了gzipt演示工具。文章记录了其实验动机、实现细节与生成示例。
可左右滑动查看