Hacker News 中文摘要

RSS订阅

gzip能当语言模型吗 -- Can gzip be a language model?

纳丹(Nathan)早前写无神经网络语言建模,用无限n-gram模型生成莎士比亚,无权重无训练仅靠计数。后读论文《Language Modeling is Compression》,提压缩与预测等价:各预测模型皆压缩器,所有压缩算法亦预测模型。这引出疑问:系统自带gzip压缩工具(gzip)能否做语言建模?无需神经网络与参数,用语料库初始化,给提示便搜压缩最佳字节序列续写。

正文

之前我写过不用神经网络的语言模型,用无界 n-gram 生成莎士比亚:无权重、无训练,只计数。后来看到论文《Language Modeling is Compression》,其中提到压缩-预测等价:“每个预测模型本质都是压缩器,而所有压缩算法也都是预测模型”。这引出一个问题:gzip 能做语言模型吗?没有神经网络,没有学习参数,就用操作系统自带的压缩器。你用语料预热它,给一段普通文本提示,它通过搜索压缩效果最好的字节序列来续写。在微型莎士比亚语料上预热后,运行 gzipt(语料指定为 tinyshakespeare,提示为“MENENIUS:”加换行,长度 200)得到的真实未编辑输出是:“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₂ p,其中 p 是模型赋予它的概率。高概率意味着少位数。所以任何压缩器内部都藏着一个概率模型,不管有没有人写下来。

gzip 用 DEFLATE,它通过 32 KiB 滑动窗口对近期文本找匹配来压缩后续字节。如果某个续写呼应了窗口里已有的内容,DEFLATE 就把它编码成便宜的向后引用,而非原文字节。于是:

gzip“预期”的续写,因为呼应了窗口中的文本,会压缩到几乎不占空间。

这就给了评分办法。如果我有上下文,想看某个候选续写有多好,只需测量:候选续写的分数等于 gzip(上下文 + 候选) 的字节长度。压缩后越短,候选越被“预测”。要预热模型,就把语料放进 gzip 窗口。任何像语料的续写都压缩得小,不像的压缩得大。

通过束搜索生成

评分是一回事,生成是另一回事。朴素地挑压缩最好的下一个字节会惨败,原因微妙:gzip 只给整数字节长度(没有小数)。加一个字节常常根本不改变压缩长度,于是许多候选平局,信号埋在量化噪声里。

补救办法是提交前先前瞻一整段。gzipt 对字节序列跑束搜索。每一步,当前上下文是:语料窗口 + (提示 + 已生成字节) 的近期尾部。然后 gzipt 尝试可能的下字节。每个候选续写都通过压缩“上下文+候选”并检查结果占多少字节来评分。

循环如下:

  1. 提示。以用户的提示作为初始续写文本。没有起始符;提示字节只是 gzip 所见上下文的一部分。
  2. 上下文。给 gzip 看语料窗口加上提示/生成文本的近期尾部。
  3. 搜索。保留 beamwidth 个最可压缩的部分续写。用每个在语料中出现过的字节扩展它们,按压缩长度给全部评分,再剪枝回最佳 beamwidth。重复 horizon 字节。
  4. 提交。取最可压缩的完整片段(若 temperature 为正则在终选间抽样),追加进去,重启循环。

一个要紧的细节是:只有最后 tail 字节的已生成输出留在评分上下文中。DEFLATE 对近匹配编码更便宜,如果 gzip 能看全部历史,最便宜的做法往往是掉进逐字循环,反复拷贝刚发出的文本。

整个流程用一个纯标准库 Python 文件(仅用 zlib)实现,代码已放 GitHub。实际代码调用 zlib 而非起一个 gzip 进程,但名字 GziPT 太妙保留,二者底层都是同一 DEFLATE 算法。论文曾试过直接用压缩做语言模型但表现差,而加入束搜索(它们提过的想法)显著提升了生成质量。

评论

社区普遍质疑用 gzip 搜索续写文本的严谨性以及将压缩等同于语言模型智能的观点,少数人看到联系或探索应用;原帖被指疑似低质 AI 生成,并夹杂“只有能运行 DOOM 才算”的调侃。

认为续写搜索空间过大且方法未验证

  • 指出在巨大序列空间中无法有效搜索全局最优压缩,beam search 寻优性能未讨论,因此结果仅提供 gzip 作为续写合理性测试器的下界,不能证明方法有效。(认可度:少数人)

认为无注意力的 gzip 与 LLM 本质不同,压缩不等同智能

  • gzip 线性扩展仅擅长单一叙事续写,LLM 随输入二次方扩展可覆盖海量叙事,二者是不同物种;若将语言模型比压缩,更像有损的 jpeg/mp3 而非无损 gzip/flac。(认可度:较多人) > 把压缩等同于智能在我看来越来越可笑了(@bob1029)

认为简单压缩模型与神经网络有联系但不应夸大

  • 历史上人们常过度宣称此类模型或 n-gram 接近大神经网络,但确实存在关联。(认可度:少数人)

探索 gzip 分类及 LLM 作为压缩器的双向可能

  • 可用各主题语料压缩未知文件根据体积最小判定分类,亦有反方向探讨 LLM 忽略速度作为压缩器的表现,或设想可重现提示词生成代码即压缩。(认可度:较多人) > 用体育、政治等文本分别压缩测试文件,最小体积对应其主题分类(@jll29)

质疑原帖本身是低努力 AI 代写

  • 作者未亲写短篇总结而靠 AI,暗示其缺乏热情且工作可能肤浅派生,不值得他人费心。(认可度:少数人)

有价值的补充

  • 3blue1brown 发布了关于该主题的视频系列,可供直观理解(@GodelNumbering)
  • 上述 gzip 分类思路最早由怀卡托大学 Witten 团队提出,另可关注 Hutter 奖对压缩比赛的推动(源自评论11)
  • 若用可重现的 LLM 单次提示重新生成代码库,提示本身可视为压缩形式,但需区别于 agent 直接克隆仓库(@berkes)