gzip 作为语言模型:DEFLATE 如何生成文本
gzip 可以充当语言模型,但仅限于有限且嘈杂的方式
要点: 通过将候选续文的压缩大小视为其概率的代理,gzip 背后的 DEFLATE 算法可以通过束搜索生成文本,展示了压缩与预测的等价性,尽管输出远不如神经语言模型连贯。
压缩即预测
每个压缩器都隐式地定义了一个概率分布。
信息论告诉我们,符号的最优编码长度为 (-\log_2 p),其中 (p) 是模型分配的概率。因此,一个用很少比特编码符号的压缩器假定该符号具有高概率。gzip 使用 DEFLATE 算法,该算法维护一个 32 KiB 的滑动窗口,并用反向引用替换重复的字节序列。当续文重复最近的字节时,DEFLATE 几乎用额外的比特来编码它,这意味着压缩器“预期”了该续文。
评分规则:
score(candidate) = len(gzip(context + candidate))
较小的压缩长度表示较高的预测概率。通过用大型语料库(例如 tiny Shakespeare)预置压缩器,任何与语料库相似的续文都会获得较低的分数。
使用束搜索生成文本
一种朴素的贪心方法——选择产生最小压缩长度的下一个字节——会失败,因为 gzip 只报告整数字节长度。添加单个字节通常会使压缩大小保持不变,导致大量并列和嘈杂的梯度。
束搜索解决方案:
- 提示 – 用户提供的提示与语料库窗口连接,并作为初始上下文的一部分。
- 上下文 – 对于每个搜索步骤,gzip 看到
corpus_window + recent_tail,其中recent_tail是生成输出的最后 tail 个字节。 - 扩展 – 每个束候选通过语料库中出现的每个字节进行扩展。所有扩展都使用压缩长度规则进行评分。
- 剪枝 – 仅保留前 beam_width 个候选(最可压缩的)。重复固定 horizon 个字节。
- 提交 – 输出最佳完整跨度(或按温度参数比例采样)并向前滑动窗口。
将上下文限制为最近的 tail 个字节可防止模型陷入简单地复制自身最近输出的琐碎循环,因为 DEFLATE 为更近的匹配提供更便宜的编码。
生成输出的样子
在 tiny Shakespeare 语料库上运行工具 gzipt,提示为 "MENENIUS:\n",产生:
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 的压缩模型捕获了语料库的一些统计规律。
其他压缩器的行为
作者还尝试了 bzip2 和 Zstandard (zstd):
- bzip2 – 生成交替符号的长序列(例如
xyxyxy…)。这反映了其对 Burrows-Wheeler 变换的依赖,该变换偏好高度重复的模式而非有意义的语言。 - zstd – 主要产生空白字符,偶尔有字母,因为其游程编码使单个重复字节变得便宜,而空格和换行是莎士比亚语料库中最便宜的字符。
这些结果表明,底层压缩算法的性质强烈影响生成文本的风格。
社区见解
“你可以用 gzip 按主题分类测试文件,如下:gzip -9 sports.txt testfile.txt … 测试文件属于具有最小 .gz 文件大小的主题。” – jll29 (HN)
“可能序列的空间比搜索的空间大许多数量级。因此,结果仅给出了 gzip 作为续文‘合理性测试器’效果的下限。” – mg (HN)
“我很好奇这如何与 bzip2 和 zstd 一起工作……bzip2 产生不类似人类语言的序列;zstd 将单个重复字节的游程编码为近乎免费的游程长度序列,而空格和换行是最便宜的字符。” – networked(作者评论)
这些评论强化了两点:(1) 基于压缩的分类是一种已知技术,(2) 束搜索方法显著优于朴素的贪心搜索,但搜索空间仍然巨大,因此该方法仅提供 gzip 预测能力的启发式估计。
局限性和开放问题
- 连贯性 – 输出缺乏神经语言模型的长期语义一致性。DEFLATE 仅回看 32 KiB,因此无法捕获情节或角色弧。
- 搜索质量 – 束搜索仍然是启发式的;不能保证找到全局最优(最可压缩)的续文。
- 速度与表现力 – gzip 随输入大小线性扩展,运行速度比现代 LLM 快几个数量级,但这种速度以表现力为代价。
- 与 LLM 作为压缩器的比较 – 一些评论者想知道大型语言模型与 gzip 相比如何压缩文本,这突出了一个互补的研究方向。
为什么这很重要
该实验具体展示了压缩-预测等价性定理:任何无损压缩器都可以重新用作预测器,反之亦然。虽然 gzip 的预测能力是初级的,但该方法为探索非神经语言模型、基准测试压缩算法作为概率估计的代理,以及在大规模 AI 时代重新审视经典算法开辟了途径。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch