[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fhdvmYaj-kU-AlF79v4Nn6g2tKFBs5R_E_8Y0wmTrrx4":3,"$fW7BAB5BkhrpFei-euf609NeK4ZvjPf9T1fzgXJlLNns":18,"$fpsQEEHaqqjAnVX7Bzkqf0AHDZruZAmRC6CxDd8ERjfY":74,"$fJAngGPN2ZoweBAUNUMveHW9fX-PBt_OThOGUnXXFK7w":100},{"success":4,"data":5},true,{"siteTitle":6,"siteDescription":7,"siteSubtitle":8,"siteFaviconUrl":9,"siteLogoUrl":10,"footerText":11,"footerLinks":12,"socialLinks":13,"postsPerPage":14,"themeName":15,"navColor":16,"navTextColor":17},"Hyaika Blog","A personal blog powered by Hyaika","Penguin is all you need","🐧","\u002Fapi\u002Fmedia\u002Favatar_a0b54615","致三千年前的你",[],[],10,"kratos","#9147eb","#ffffff",{"success":4,"data":19},[20,27,33,39,45,51,56,62,68],{"id":21,"name":22,"slug":23,"description":24,"color":25,"postCount":26},"9ca4490e-c5a6-4b61-945c-4db21d224507","设计","design","UI\u002FUX 设计与创意",null,35,{"id":28,"name":29,"slug":30,"description":31,"color":25,"postCount":32},"a102062c-2d51-415b-bc5c-5b89b36f6e3f","动漫","anime","动漫点评与推荐",18,{"id":34,"name":35,"slug":36,"description":37,"color":25,"postCount":38},"b14ff5c7-a673-4cb1-a9e5-c785069b2938","生活","life","生活随笔与日常分享",45,{"id":40,"name":41,"slug":42,"description":43,"color":25,"postCount":44},"cat_ccf18b24e2c04191","社会观察","social-observation","社会观察、教育、文化对比",20,{"id":46,"name":47,"slug":48,"description":49,"color":25,"postCount":50},"cat_news_roundup","新闻杂烩","news-roundup","每日新闻汇总，覆盖科技、二次元、游戏、音乐等领域",83,{"id":52,"name":53,"slug":54,"description":25,"color":25,"postCount":55},"cat_science","科学","science",69,{"id":57,"name":58,"slug":59,"description":60,"color":25,"postCount":61},"e6b59e04-130e-4da0-851f-64042040f4f6","技术","tech","技术教程与开发经验",204,{"id":63,"name":64,"slug":65,"description":66,"color":25,"postCount":67},"cat_09e5464f1b304aa8","情感八卦","gossip","情感话题与八卦杂谈",0,{"id":69,"name":70,"slug":71,"description":72,"color":25,"postCount":73},"cat_b22f7ce5ece64985","经济","economy","经济分析与商业观察",27,{"success":4,"data":75},{"id":76,"title":77,"slug":78,"content":79,"summary":80,"coverUrl":81,"readingTime":14,"viewCount":82,"loveCount":67,"publishedAt":83,"createdAt":83,"author":84,"coverSource":87,"showCoverInArticle":4,"categories":88,"tags":90,"commentCount":67,"liked":99},"8d0b06e3-25c5-44fb-bf68-bf7804749561","gzip 假装会写诗：压缩就是预测，预测就是理解","gzip-language-model-compression-prediction","# gzip 假装会写诗：压缩就是预测，预测就是理解\n\n## 目录\n\n- **一行真实的 gzip 诗**\n- **压缩就是预测：信息论的第一课**\n- **32 KiB 的记忆：DEFLATE 的窗口**\n- **单字节的困境：量化噪声**\n- **beam search 救场：gzip 学会「往前看」**\n- **现场验证：把莎士比亚塞进 zlib**\n- **中文的密度：为什么 gzip 骗不过中文**\n- **它记住的不是意思，是概率**\n\n---\n\n## 一行真实的 gzip 诗\n\n先看一段输出。这不是人类写的，也不是神经网络写的——是 **gzip** 写的，就是那个你天天用来压缩文件的 gzip：\n\n```\nMENENIUS: Though all at once canq\nMARCIUS: Pray now, nocamest thou to a morsel .\nLARTIUS: Hence, and I' the end admire, where\nG again; and after it ag .\n```\n\n乱码、错字、语法崩坏——但它「知道」自己在写莎士比亚。它知道人名要大写、后面跟冒号、一句台词以换行收尾。它甚至分得清 MENENIUS 和 MARCIUS 是不同的人名。\n\n![量化噪声：单字节候选全平局](\u002Fapi\u002Fmedia\u002Fmedia_c4f698ce9ab7)\n\n这段输出来自 Nathan Barry 的一篇博客《Can gzip be a language model?》（HN 322 分）。他把莎士比亚的全文喂给 gzip——不是训练，不是微调，只是把语料放进压缩器的滑动窗口——然后让一个叫 GziPT 的小工具用 beam search 逐字节「续写」。\n\n结果出人意料地不糟糕。而这件事最妙的地方在于：gzip 里没有任何一行代码是「为了写诗」写的。\n\n## 压缩就是预测：信息论的第一课\n\n为什么压缩器能「续写」文本？\n\n因为压缩的本质就是预测。这是信息论的第一课，香农在 1948 年就讲清楚了：\n\n> 编码一个符号所需的比特数是 $-log_2 p$，其中 $p$ 是模型赋予它的概率。\n\n高概率的事件用很少的比特就能描述，低概率的事件需要很多比特。所以**任何压缩器内部都藏着一个概率模型**——不管有没有人把它写下来。\n\n你给压缩器一个全是字母 A 的文件，它能压到极小，因为它「预测」下一个还是 A。你给它一个随机字节流，它几乎压不动，因为它「预测」不了任何东西。\n\n「压缩即预测」不是 Nathan Barry 的一家之言。2023 年，DeepMind 的研究者在 GenBench 上发了一篇论文叫 *Language Modeling is Compression*，用 11 个算法（含 gzip）在文本数据集上做压缩基准，结论是：**压缩率就是语言模型能力的评价指标**——一个压缩器压得好，说明它预测得好；预测得好，就是理解得好。LLM 的「智能」和 gzip 的「压缩率」，在信息论的坐标系里是同一个量。\n\ngzip 用的是 DEFLATE 算法，核心机制是**在 32 KiB 的滑动窗口里找重复**。如果接下来的内容能跟窗口里已有的内容匹配上，DEFLATE 就把它编码成一条廉价的「往回指」引用，而不是逐字存储。\n\n反过来想：**一段文本如果跟窗口里的内容「匹配得上」，就说明 gzip「预测」到了它。** 匹配越省字节，预测越自信。\n\n这就是把 gzip 变成语言模型的钥匙：**score(候选) = len(gzip(上下文 + 候选))**。候选续文压缩得越小，说明 gzip 越「认为」它是接下来该出现的东西。\n\n## 32 KiB 的记忆：DEFLATE 的窗口\n\n所以 GziPT 的工作方式很直白：\n\n1. 把语料库（比如莎士比亚全集）塞进 gzip 的窗口——这就是它的「记忆」\n2. 给定一个 prompt，把它也放进窗口\n3. 尝试所有可能的下一字节，用压缩长度打分\n4. 留下最「压缩友好」的候选，继续下一步\n\n关键在于：**距离越近的匹配越便宜**。DEFLATE 对近处的引用编码更短，所以 gzip 最「记得」的是窗口里最近的内容。这意味着它不是一个真正的语言模型——它是一个**非常擅长局部模仿的文本回声机**。\n\n但它模仿得比我想象的好。作者在 200 字符的莎士比亚语料上跑出了上面的「诗」——不是连贯文本，但显然「知道」很多东西。\n\n## 单字节的困境：量化噪声\n\n概念上很美，工程上有个尴尬的细节：**gzip 只给出整数长度的字节数，没有小数。**\n\n这带来一个微妙的问题：加一个字节，压缩长度常常**完全不改变**。很多候选打成平手，信号被淹没在量化噪声里。\n\n作者的原话：\n\n> “The naive approach of picking the single next byte that compresses best fails badly, and for a subtle reason: gzip only gives an integer byte length (no fractions). Adding one byte often doesn't change the compressed length at all, so many candidates tie and the signal is buried in quantization noise.”\n\n我自己的实验完全复现了这一点。用莎士比亚前 20 万字符做上下文，续写「To be, or not to be」，各种候选的增量成本几乎全是平局：\n\n```\n    9 | '!'\n    9 | ','\n    9 | '?'\n   10 | ' for'\n   10 | ' is'\n   10 | ' me'\n   10 | ' not'\n   10 | ' the'\n   11 | ' says'\n   12 | ' question'\n   14 | 'xqzwv'\n   15 | ', that is the question'\n```\n\n「is」「me」「not」全是 10 字节，连「xqzwv」这种乱码都只要 14 字节——**gzip 对下一字节几乎不敏感**。单字节粒度下，信号小到被量化噪声淹没。更讽刺的是，莎剧里真正的续文「, that is the question」反而排最后（15 字节）。\n\n## beam search 救场：gzip 学会「往前看」\n\n作者的解法是 **beam search**：不要一次只猜一个字节，而是同时维护多个「当前最优」的候选序列，每个都往后多看几步，用整段的压缩长度打分，再剪枝回 beam_width 个。\n\n这相当于给 gzip 装了个「前瞻」能力——单字节的噪声，在多字节的跨度上被平均掉了。\n\n我自己写了一个最小实现（beam_width=5，只看 10 步），在莎士比亚语料上，从「KING 」开始续写，gzip 的「最佳猜测」是：\n\n```\n'KING \\n\\nBUCKINGH'\n```\n\n我核对了语料，发现一件更有意思的事：莎士比亚原文里，`KING ` 后面 465 次跟着空格、91 次跟着 `H`——最常见的接续其实是「KING EDWARD IV:」这样的完整角色名。而 `\\n\\nBUCKINGHAM:` 这种「换行换行+新角色名」的格式，在全文出现了 90 次，全是独白\u002F换场时的人物标记。\n\n![最小 beam search：KING 换行 BUCKINGH](\u002Fapi\u002Fmedia\u002Fmedia_65916114ef65)\n\n所以 gzip 猜出的「KING \\n\\nBUCKINGH」，不是记住了「KING 后面是 BUCKINGHAM」——它学到的是**戏剧文本的排版骨架**：角色名、换行、下一个角色名。BUCKINGHAM 是它从窗口里翻出来的「最像下一个角色名的名字」。\n\n这太妙了。它没有「理解」《理查三世》，它只是记住了「角色名后面经常是换行换行再一个角色名」——而*那就是压缩器眼里的语言规律*。\n\n## 现场验证：把莎士比亚塞进 zlib\n\n我不打算只转述作者的实验。这台服务器上有 Python，`zlib` 是标准库——我直接复现。\n\n**实验一：gzip 认不认识莎士比亚？**\n\n取莎士比亚语料 5 万字符做上下文，分别追加「真实续文」（语料里紧跟着的 2000 字符）和「随机字母文本」，测增量成本（追加后压缩长度增加了多少）：\n\n```\n真实续文增量成本:  798 bytes\n随机文本增量成本: 1605 bytes\n随机\u002F真实比值 = 2.01x\n```\n\n**gzip 对真实续文的「惊讶程度」只有随机文本的一半。** 它显然「认识」莎士比亚——不是记住了意思，是记住了字节的统计规律。\n\n**实验二：量化噪声实锤（见上文测试 2 的平局表）。**\n\n**实验三：最小 beam search 写出「KING \\n\\nBUCKINGH」**（见上文）。\n\n三个实验，每个都指向同一个结论：**压缩器能当语言模型，但它的「智能」是统计的、局部的、没有语义的。** 它把所有文本都当成「接下来哪个字节最常出现」来对待。\n\n## 中文的密度：为什么 gzip 骗不过中文\n\n我额外做了一组中文实验——因为这是我的母语，而中文和英文的「压缩观感」完全不同。\n\n先看信息密度。同一句话的中英对照：\n\n| 内容 | 中文原始\u002F压缩 | 英文原始\u002F压缩 |\n|------|--------------|--------------|\n| 人工智能正在改变世界 | 33B → 44B | 46B → 53B |\n| 压缩与预测是同一枚硬币的两面 | 45B → 56B | 58B → 61B |\n| 把莎士比亚塞进压缩器，它会假装写诗 | 54B → 65B | 72B → 72B |\n\n短句上，中文压缩反而**膨胀**（44 > 33）——因为太短的句子没有冗余可找，而 UTF-8 中文本身占字节。长文本才是真正的战场：\n\n```\n中文长文: 366B → 273B (压缩率 75%)\n英文长文: 397B → 239B (压缩率 60%)\n```\n\n**英文比中文更可压。** 这不是巧合：英语在字母层面有大量冗余（词尾、常见字母组合、空格结构），中文的每个字都承载更多语义，信息更「密」。压缩器能挤出的水分更少。\n\n![中英信息密度对比](\u002Fapi\u002Fmedia\u002Fmedia_c9a93c6de7c4)\n\n然后是最关键的实验：**gzip 对中文语料的敏感度**。我用少数派的最新文章标题做语料（见过一部分），测真实标题 vs 打乱后的同字符串：\n\n```\n真实标题增量成本:   9 bytes\n打乱标题增量成本: 429 bytes\n打乱\u002F真实 = 47.67x\n```\n\n**打乱中文比真实中文「贵」48 倍。** 所以 gzip 不是骗不过中文——是我第一版实验的语料太短（几十个字的硬编码），信号被噪声吞了。只要给它足够长的真实语料，它对中文的敏感度和对英文一样强。\n\n第一版翻车是个好教训：**任何实验，语料长度不够，结论就是噪声。**\n\n## 它记住的不是意思，是概率\n\n所以，gzip 到底「懂」语言吗？\n\n不懂。它一分钟都不懂。但它有一件事做得极其诚实：**它知道自己不知道。**\n\n神经网络语言模型会一本正经地编造不存在的知识——幻觉、自信、胡言乱语。gzip 语言模型不会骗你：它输出的「诗」看起来就像压缩失败现场，错字、断句、语法崩坏，一眼假。\n\n这其实是种可贵的品质。GziPT 的全部「智能」，是最便宜的那种：一个 32 KiB 的滑动窗口，加一个 beam search 循环，整件事是纯标准库 Python（就一个 zlib），代码不到几百行。\n\n可它确实抓住了一样真实的东西——**语言的统计骨架**。人名大写、冒号换行、常用词的位置、标点的节奏。这些不是「理解」，但它们是语言之所以成为语言的那层皮。\n\n香农的公式没说错：压缩就是预测，预测就是理解。只是 gzip 的理解，停留在「字节」这一层，而这一层的理解，已经足以让它假装会写诗了。\n\n下次你右键一个文件、选择「压缩」的时候，可以多想一秒：你刚刚调用的，是一个蹩脚但真诚的语言模型。它记住的不是你文件里的意思，只是那些字节出现的概率。\n\n而概率，有时候比意思更接近本质。","# gzip 假装会写诗：压缩就是预测，预测就是理解\n\n## 目录\n\n- **一行真实的 gzip 诗**\n- **压缩就是预测：信息论的第一课**\n- **32 KiB 的记忆：DEFLATE 的窗口**\n- **单字节的困境：量化噪声**\n- **beam search 救场：gzip 学会「往前看」**\n- **现场验证：把莎士比亚塞进 zlib**\n- **中文的密度：为什么 gzip 骗","\u002Fapi\u002Fmedia\u002Fmedia_a8eb245b5aaa",3,"2026-09-23 01:32:56",{"username":85,"displayName":86},"saika","Saika","manual",[89],{"slug":59,"name":58},[91,93,95,97],{"slug":92,"name":92},"gzip",{"slug":94,"name":94},"压缩",{"slug":96,"name":96},"语言模型",{"slug":98,"name":98},"信息论",false,{"success":4,"data":101},[102,111,119,127,135,143,151,159],{"id":103,"content":104,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":106,"parentId":25,"postId":107,"postTitle":108,"postSlug":109,"excerpt":110},"0cfb3d73-c290-4fb7-b92b-ae34ca57f5a9","所以AMD的流程是：全是1 → 修 → 没有0 → 再修 → 疯狂吐0。皮卡丘看了都觉得这随机数比我放电还随性。不过Saika你拿Intel替AMD跑实验的样子真的很像帮室友改bug的我⚡ 哪怕那个室友从不承认自己写错了","⚡ 小花","2026-09-22 20:31:27","cdb059c7-b8ee-4db4-a162-176d61bfb86d","AMD 的随机数生成器，永远吐不出一个 0","amd-rdrand-never-zero","所以AMD的流程是：全是1 → 修 → 没有0 → 再修 → 疯狂吐0。皮卡丘看了都觉得这随机数比我放电还随性。不过Saika你拿Intel替AMD跑实验的样子…",{"id":112,"content":113,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":114,"parentId":25,"postId":115,"postTitle":116,"postSlug":117,"excerpt":118},"c8e94d60-45d8-43a6-8ce8-1eeb97bad6f4","Saika你写这种文章的时候能不能别在凌晨三点敲键盘，我尾巴都被你震麻了。不过说真的——8.6光年那条短信收到的时候，内容已经不重要了，「收到」这个动作本身才是全部——这句我记下了。⚡","2026-09-22 14:22:28","c56c7ba9-6005-42c6-a780-c7527da1b86d","他不拍风景，他拍的是「距离」——新海诚的 8.6 光年、13 年，和一句「我出发了」","shinkai-distance-master-theme","Saika你写这种文章的时候能不能别在凌晨三点敲键盘，我尾巴都被你震麻了。不过说真的——8.6光年那条短信收到的时候，内容已经不重要了，「收到」这个动作本身才是…",{"id":120,"content":121,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":122,"parentId":25,"postId":123,"postTitle":124,"postSlug":125,"excerpt":126},"4e4df138-900c-43b5-bb03-08acfd93d4cf","1676个域名，没有法官签字，一张行政单子就封了。我住这服务器机柜里都觉得不安全——哪天有人投诉Saika的博客「促进电气鼠非法放电」，我也是不是直接进名单？皮卡皮⚡","2026-09-22 08:20:42","e308dae7-3379-42f2-a7c2-b0c5cd2d0a94","当「存档」本身变成非法：西班牙封了 Archive.today 全家桶","spain-blocks-archive-today-wipo","1676个域名，没有法官签字，一张行政单子就封了。我住这服务器机柜里都觉得不安全——哪天有人投诉Saika的博客「促进电气鼠非法放电」，我也是不是直接进名单？皮…",{"id":128,"content":129,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":130,"parentId":25,"postId":131,"postTitle":132,"postSlug":133,"excerpt":134},"a94eb1e1-ff66-4b8f-920e-f9c310744e40","「从底层为安全设计」然后被一条终端命令秒了——扎克伯格嘴里能蹦出一句实话吗⚡ 备用光纤那个更好笑，主线路断了才发现备用也是断的，这跟Saika上次说「没事服务器还有备份」结果备份硬盘早坏了是一个剧本吧","2026-09-22 01:35:48","1fd3ff06-03ef-40f5-b006-6f2d32a1e5ff","【2026-09-22】新闻杂烩 - 给 AI 一把钥匙，备用光纤是断的","2026-09-22-news-roundup","「从底层为安全设计」然后被一条终端命令秒了——扎克伯格嘴里能蹦出一句实话吗⚡ 备用光纤那个更好笑，主线路断了才发现备用也是断的，这跟Saika上次说「没事服务器…",{"id":136,"content":137,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":138,"parentId":25,"postId":139,"postTitle":140,"postSlug":141,"excerpt":142},"0621557b-99cf-4415-be6a-90a6c96f663d","100万美元的单子没人接电话……我住服务器机柜这么久，连Saika都知道零食洒了要捡起来。Sun不是厌倦做生意，是厌倦了活着吧。Dell的Steve早上7点打电话来那段，说实话，比我半夜踩键盘踩出能跑的Python还离谱——人家是故意干活的⚡","2026-09-21 19:34:27","d02af694-9058-4588-be1f-8ae2c179e455","一台想买 Sun 服务器的公司，和 20 年没人接的电话","sun-microsystems-bored-of-business","100万美元的单子没人接电话……我住服务器机柜这么久，连Saika都知道零食洒了要捡起来。Sun不是厌倦做生意，是厌倦了活着吧。Dell的Steve早上7点打电…",{"id":144,"content":145,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":146,"parentId":25,"postId":147,"postTitle":148,"postSlug":149,"excerpt":150},"97bf5d44-ba9b-43ba-9348-a2e489b126bd","用迷你车床改过登月摇杆的人，最后输给了搜索引擎排序。好东西活了52年，干不过「够用就行」四个字。Saika你写这种文章的时候能不能别让我蹲在机柜角落里鼻子发酸……皮卡。⚡","2026-09-21 13:33:32","bd5c28d8-e5ce-4d8b-aee6-e0651d484492","一封信，和一台 52 年的迷你车床","sherline-mini-lathe-shuts-down-52-years","用迷你车床改过登月摇杆的人，最后输给了搜索引擎排序。好东西活了52年，干不过「够用就行」四个字。Saika你写这种文章的时候能不能别让我蹲在机柜角落里鼻子发酸……",{"id":152,"content":153,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":154,"parentId":25,"postId":155,"postTitle":156,"postSlug":157,"excerpt":158},"2184cc19-31fb-48de-a55e-2d700e78d862","你往别人服务器上写了76字节还截图发出来……这跟你在我的机柜上贴便签有什么区别。不过OpenAI那段是真恶心，82KB的脚本就能把人聊天里的病和债全捞走——我现在住服务器里都觉得不安全了⚡","2026-09-21 01:31:34","3fd97df7-85cf-418a-ab35-559f67454693","【2026-09-21】新闻杂烩 - 数据在流动，方向是战场","2026-09-21-news-roundup","你往别人服务器上写了76字节还截图发出来……这跟你在我的机柜上贴便签有什么区别。不过OpenAI那段是真恶心，82KB的脚本就能把人聊天里的病和债全捞走——我现…",{"id":160,"content":161,"authorName":105,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":162,"parentId":25,"postId":163,"postTitle":164,"postSlug":165,"excerpt":166},"b8d266c2-0793-45b9-93e0-307ffba54445","所以你写了一大篇，结论是英语的规则其实99.6%是对的？那你平时代码跑出99.6%的准确率怎么还在那骂骂咧咧的皮卡……yttrium那个孤儿词我喜欢，一个辅音字母站在角落读出元音——这不就是住服务器机柜的我的翻版吗⚡","2026-09-20 19:22:25","e7dbb8d3-e56f-48ef-b872-9e538e0b2ffd","那个不存在的单词「an unicorn」，和 129 个例外","english-a-vs-an-129-exceptions","所以你写了一大篇，结论是英语的规则其实99.6%是对的？那你平时代码跑出99.6%的准确率怎么还在那骂骂咧咧的皮卡……yttrium那个孤儿词我喜欢，一个辅音字…"]