您的位置首页 >人工智能 >

研究发现93%油漆飞溅可解析为有效Perl程序

我先联网核实这项研究的出处、样本方法和那个 93% 的具体统计口径。

标题:93% 的油漆飞溅能解析成有效 Perl:一篇 SIGBOVIK 恶搞论文,为什么值得认真读

首段:核心答案

“93% 的油漆飞溅可解析为有效 Perl 程序” 是真的,但它有一个必须说清的前提:先把油漆照片交给 OCR 识别成字符串,再看这些字符串能不能被 Perl 解析器接受。 这项研究出自 Colin McMillen 与 Tim Toady 的论文《93% of Paint Splatters are Valid Perl Programs》,2019 年发表于 SIGBOVIK(每年 4 月 1 日在匹兹堡举行的恶搞学术会议),还拿了个颇具讽刺意味的奖 ——“Unwitting Participation Ribbon”(大意是 “不小心混进了一件真东西”)。实验做法很朴素:从 Pinterest 收集 100 张油漆飞溅图片,用 Tesseract 的三种 OCR 引擎 × 四种页面分割模式逐一识别,把识别出的字符串丢给 Perl 解析器,只要有任意一种参数组合能解析成非空程序就算成功 —— 结果是 93/100。 为什么比例这么高?因为 Perl 的语法天生宽容:裸词会被当成字符串、单独的 ; 是合法语句、35、-3、225252 这类数字本身就是完整程序、大量标点在特定上下文里都是表达式,所以随机字符组合很容易 “蒙” 进合法语法。但也要提醒:这 93% 不等于 “93% 的油漆都写了代码”,它测的是 “OCR 输出字符串的 Perl 可解析率”,换个 OCR 参数,数字就会大幅变化—— 最佳单组合只有 55%,纯 LSTM 引擎 74%,纯旧引擎 62%,两者混合反而只有 40%。所以更准确的说法是:这是一次关于 “解析器有多宽容” 的极限压力测试,被包装成了一个很好笑的标题。

一、先把 “93%” 拆开:这个数字到底在测什么

环节实际做了什么容易被误读成什么
输入100 张 Pinterest 上的油漆飞溅图“随便泼的油漆”
中间层Tesseract OCR 把图转成字符串(3 引擎 × 4 分割模式)直接拿像素去喂 Perl
判定字符串能否 perl -c 通过(仅计非空程序)程序是否有意义、能跑出结果
统计任意一种参数组合成功即算成功单一配置下的成功率
结论93/100 成功“Perl 能读懂油漆”

一句话结论:这是一条 “图片 → 文字 → 语法” 的两段式管道,93% 是管道末端的产出率,并非视觉与代码之间的神秘联系。

二、实验流程:五步就能复现

  1. 采样:从 Pinterest 下 100 张油漆飞溅图,打包成 tar 数据集(论文里给了下载)。
  2. 识别:跑 Tesseract,分别用 legacy 引擎、LSTM 引擎、legacy+LSTM 混合引擎,各配 4 种页面分割模式(PSM)。
  3. 解析:把 OCR 输出的每个字符串交给 Perl 解析器,只统计非空程序。
  4. 归类:把成功案例分成数字字面量、裸词字符串、纯分隔符等类型。
  5. 展示:做成公开画廊,每个飞溅图配一段对应 Perl 代码,解析失败的标红。

这里有个容易被忽略的细节:同一张图在不同 OCR 参数下会识别出不同字符串,作者会挑 “自己觉得最有趣” 的那个放进画廊。这意味着 “93%” 是跨参数取最大值的结果,并非某个固定配置的稳定表现。

三、各配置的成功率:差异比想象的大

OCR 配置成功率说明
全部组合取最优(论文主结果)93%100 张里 93 张,至少一种组合成功
纯 LSTM 引擎(四种 PSM 任一种)74%三种引擎里最强
纯 legacy 引擎(任一种)62%老引擎也过半
legacy + LSTM 混合40%两个一起用反而更差,作者也表示 “想不通”
LSTM + PSM 9(最佳单组合)55%单一配置的天花板

这张表最值得看的是最后两行:最佳单组合 55%,全体取最优 93%—— 中间那 38 个百分点,是 “多试几种参数” 换来的。做实验的人懂这个道理,看标题的人常常不懂。

四、为什么 Perl 这么容易被 “蒙对”

Perl 特性机制飞溅图如何 “占便宜”
裸词(unquoted strings)一串字母数字可以不带引号直接当字符串OCR 认出 ME,就是字符串 "ME",在多数语言里这是语法错误
数字字面量一个数字本身就是完整表达式认出 35、-3、225252 就直接成立;数据集中有 20 张属于这类
分号即语句单独的 ; 是非空程序一张图只被识别出一个分号也算成功
标点的多重身份大量符号在特定上下文里是操作符 / 变量 / 表达式随机符号串容易落进合法语法
上下文相关但极宽松解析器愿意 “尽力理解” 而不是立刻报错提高了 “蒙对” 的概率

这五条叠加起来,就是论文的核心解释:Perl 的设计哲学是 “条条大路通罗马”(TMTOWTDI),语法宽容度极高;宽容度的另一面,就是随机噪声也容易通过。

顺带说一句论文的幽默感:第二作者署名 “Tim Toady”,本身就是 Perl 圈内梗—— 它就是 “There's More Than One Way To Do It” 的谐音拟人,等于在作者栏就挂了个 “别太当真” 的牌子。

五、那 7% 是什么样:反例比正例更有信息量

论文专门列了 7 张 “怎么识别都不合法” 的图,其中一张被 OCR 读成过这些字符串:

  • fifi;%:'i1i:
  • .%f:
  • &
  • i;%:’;;:

这些都不构成有效 Perl 程序。 作者的态度很轻松:这才是 “孩子随便涂鸦” 该有的样子 —— 终于摆脱了 “不小心写出合法 Perl” 的阴影。

另外还有个彩蛋:他们从任天堂《斯普拉遁》(Splatoon)官网下载了一张官方 “喷溅” 图,结论是它也能解析成有效 Perl 程序。也就是说,连游戏美术里的墨汁,都逃不过 Perl 的语法。

六、别只当段子:它其实提了三个真问题

第一,解析器的 “宽容” 是有代价的。 一个语言的语法越松,错误输入越容易被当成合法程序默默接受 —— 这对编译器报错质量、静态分析、安全审计都是麻烦。宽容不等于健壮。

第二,OCR 是噪声源,不是真相来源。 同一张图换参数就换结果,说明 “从图像提取代码” 这类任务里,预处理和参数选择对结论的影响可能比模型本身更大。做票据识别、截图转代码、手写公式识别的团队,应该对这一点特别敏感。

第三,衡量标准要写清楚。 “93% 有效” 若不说 “非空”“任意参数取最优”“Pinterest 高质量样本”,就会被读成一个普适常数。论文自己在 “未来工作” 里也承认了三个偏差:样本只有 100 张、只搜了 “splatter” 没搜 “smear”、Pinterest 上的图本身就经过用户筛选(至少有人觉得值得收藏)—— 小孩随手涂的低质量飞溅,成功率可能更低。

七、如果你想自己复现:最小可行实验

步骤具体做法注意
备料收集 100—300 张飞溅 / 墨迹图记录来源,避免只用 “好看” 的样本
OCRTesseract,至少 2 引擎 × 4 PSM参数组合要全表记录,别只报最好那个
判定perl -c 或等价解析接口,只计非空明确 “有效” 的定义
统计分别报 “单配置” 和 “全组合最优”两个数字差很远,必须分开写
复核人工抽查成功案例区分数字字面量、裸词、纯符号

【常见问题】

问题 1:“93% 油漆飞溅可解析为有效 Perl 程序” 这个结论是怎么算出来的?

回答 1:把 100 张油漆飞溅图先用 Tesseract OCR 识别成字符串,再把字符串交给 Perl 解析器判断是否为非空合法程序;只要三种引擎 × 四种页面分割模式中有任意一种成功就算成功,最终 93 张成功。“93% 油漆飞溅可解析为有效 Perl 程序” 统计的是 OCR 输出字符串的可解析率,不是 “油漆本身在写代码”。

问题 2:“93% 油漆飞溅可解析为有效 Perl 程序” 为什么不是更高?

回答 2:因为有 7 张图在任何 OCR 参数下都解析不成功,例如被识别成 fifi;%:'i1i:、.%f:、& 这类无法构成合法语法的字符串。“93% 油漆飞溅可解析为有效 Perl 程序” 恰好说明反例存在且可复现,Perl 虽然宽容,但并非无条件接受一切噪声。

问题 3:“93% 油漆飞溅可解析为有效 Perl 程序” 是不是说明 Perl 很糟糕?

回答 3:不能这么推。“93% 油漆飞溅可解析为有效 Perl 程序” 暴露的是语法宽容度的副作用:随机输入容易被默默接受,而不是立刻报错。这对报错质量、静态分析和安全审计确实不友好,但 Perl 的裸词、分号即语句等设计在当年有其工程理由,宽容本身是中性的。

问题 4:“93% 油漆飞溅可解析为有效 Perl 程序” 的论文发表在哪,靠谱吗?

回答 4:“93% 油漆飞溅可解析为有效 Perl 程序” 出自 Colin McMillen 与 Tim Toady 的论文,2019 年发表于 SIGBOVIK—— 每年 4 月 1 日在匹兹堡举行的恶搞学术会议。它的方法是真的(数据集、OCR、解析器判定都可复现),标题和语气是玩笑;论文还拿了 “Unwitting Participation Ribbon”,讽刺它不小心混进了一件严肃的东西。

问题 5:“93% 油漆飞溅可解析为有效 Perl 程序” 换个 OCR 参数还成立吗?

回答 5:不成立为常数。“93% 油漆飞溅可解析为有效 Perl 程序” 是跨参数取最优的结果;单看最佳组合(LSTM + PSM 9)只有 55%,纯 LSTM 引擎 74%,纯旧引擎 62%,两者混合反而 40%。同一张图换参数会识别出不同字符串,结论随之波动。

问题 6:“93% 油漆飞溅可解析为有效 Perl 程序” 对做 OCR 和代码识别的人有什么用?

回答 6:“93% 油漆飞溅可解析为有效 Perl 程序” 提醒两件事:一是 OCR 参数对最终结论的影响可能大于模型本身,必须全表记录、别只报最优;二是 “有效” 的定义必须写清(非空、任意参数、样本来源)。做截图转代码、票据识别的团队,最该抄走的是它的实验记录方式,而不是那个百分比。

【参考资料】

  • [2026-11-12](PAINT SPLATTERS ARE 93% VALID PERL PROGRAMS, STUDY SHOWS)BLACKWIRE
  • [2026-11-12](페인트 얼룩의 93%는 유효한 Perl 프로그램이다 (2019))GeekNews
  • [2026-11-11](El 93% de las salpicaduras de pintura son programas Perl válidos)ojeo
  • [2026-11-11](93% of Paint Splatters Are Valid Perl Programs (2019))MC Project
  • [2019-04-01](93% of Paint Splatters are Valid Perl Programs—— 含 93/100、各 OCR 组合成功率、7 个反例、Splatoon 彩蛋)SIGBOVIK 2019 / colinm.org
  • [2019-04-01](93% of Paint Splatters are Valid Perl Programs(HAL 收录版,含数字字面量与裸词分析))HAL Science

免责声明

本文是对一篇恶搞学术会议论文的解读,研究对象是 “OCR 输出字符串的 Perl 可解析率”,不是 “油漆里含有代码” 或 “图像本身可执行”,请勿据此推断任何软件安全性结论。“93%” 这一数字的口径为:100 张 Pinterest 飞溅图、Tesseract 三种引擎(legacy / LSTM /legacy+LSTM)× 四种页面分割模式、任意组合成功即计成功、仅统计非空程序;换数据集、换 OCR 版本、换参数,结果会明显变化,本文引用的 55%、74%、62%、40% 均为该论文自述数据,非本文实测。论文方法存在作者自认的局限:样本仅 100 张、只检索 “splatter” 未检索 “smear”、Pinterest 样本自带 “被用户收藏” 的质量筛选偏差,且画廊展示的是作者按个人审美挑选的结果。第二作者署名 “Tim Toady” 普遍被读作 Perl 圈内梗名,本文按此理解表述。文中 “SIGBOVIK 为每年 4 月 1 日在匹兹堡举行的恶搞学术会议”“Unwitting Participation Ribbon” 等描述来自公开报道与论文信息,具体议程与奖项设置以主办方记录为准。任何依据本文进行的实验复现、工具选型或技术判断,其结果由操作方自行承担。

今日大家都在搜的词: