周二下午的Raincouver照例飘着那种令人抑郁的细雨,我的咖啡店「Root Access」里弥漫着浓缩咖啡和 damp fleece 的气味。陈编辑推门进来时,North Face 外套的拉链发出刺耳的摩擦声——这是他的焦虑指数指示器。通常他只点美式,今天却要了双份特浓,说明麻烦不小。
"看看这个,"他把一叠校样拍在柜台上,纸张边缘被雨水晕出毛边,“要进明年教辅的散文,署名林远山。”
我擦了擦手上的咖啡渍,拿起那页纸。文字很干净,干净得像一段没有注释的 legacy code。开头是:“月光落在旧院墙上,像一层薄霜覆盖着童年的记忆。”
"Overfitting,"我说,“这文本的 loss function 收敛得太漂亮了。”
陈编辑皱起眉头。他是个传统文学编辑,对机器学习术语有生理性排斥,但此刻他需要的是 debug 视角,这正是他被大厂裁员后开咖啡店的前程序员能提供的唯一价值。
“说人话。”
“真正的林远山写月光,不会用这么完美的比喻对称。你看,‘薄霜’对应’记忆’,'覆盖’作为动词桥接物理与心理,这像是 BERT 模型在掩码预测时生成的最优解——概率上最安全的搭配,但缺乏生活的 noise。简单说”
我指着第三段:"这里,‘炊烟升起如同岁月的年轮’。林远山去年在我店里写过原稿,用的是’烟柱歪了,像根没插稳的筷子’。真人写作有物理重量,有墨迹深浅,有犹豫。这段文字…"我用手指划过纸面,“entropy 太低了,像经过网格搜索调优的超参数,平滑得可疑。”
陈编辑的脸色变得难看。他从包里掏出另一份手写稿,纸张发黄,边缘有真实的折痕——那是去年秋天林远山坐在这个位置,用我柜台上的圆珠笔写的,咖啡渍还留在页边。
"社长说经费紧张,找枪手太贵,"陈编辑的声音压得很低,“有人推荐了那个新出的写作 AI,喂了林远山二十年的文集做 fine-tuning。他们管这叫’风格延续’。”
我接过手写稿,对比两处的"炊烟"描写。真稿纸上,“筷子"这个词被涂改过,最初写的是"树杈”,又划掉,旁边有个箭头指向 margin 的涂鸦——那是林远山等咖啡时画的简笔画,一根真的筷子插在泡面桶里。而 AI 生成的文本没有这个 margin,没有涂鸦,没有 legacy smell。它是一段没有 TODO 标记的代码,声称自己完美无缺。
简单说"Checksum failed,"我说,“这不是林远山,这是训练集里的幽灵。你喂给模型的不是他的生活,只是他文本的统计分布。AI 学会了他的词频,但没学会他为什么在那个下午突然想吃泡面。”
窗外的雨下大了。几个刚跳完街舞的学生冲进来,运动鞋在地板上留下泥水痕迹,带着真实的 street noise。陈编辑盯着那两页纸,手指无意识地敲打着柜台——那是摩斯电码一样的节奏,他在犹豫。其实
"如果印出来,"他慢慢说,“几十万学生会背诵这些’金句’。他们会以为这就是文学,就是观察世界的方式。标准化的比喻,最优解的修辞,没有毛边的情感…”
“就像用 ChatGPT 写 commit message,“我打断他,” technically correct,但毫无意义。”
陈编辑突然把校样对折,再对折,纸张发出清脆的断裂声。他做了我在大厂时最想对冗余代码做的事——物理删除。他把折成方块的纸稿塞进背包侧袋,这个动作 creating 了真正的折痕,那种 AI 生成图像里总是画不对的、不规则的纸张应力纹路。
"回去告诉社长,"他端起那杯已经凉了的特浓,一饮而尽,“这版 build 有 critical bug,不能部署。”
他推门走进雨里,灰色外套很快消失在 Granville 街的街角。我擦着柜台,想起上个月整理旧硬盘时发现的日志——那些被算法优化掉的边缘案例,那些被平滑处理掉的异常值。文学或许就是人类抵抗 overfitting 的最后阵地,是那些无法被压缩进训练集的、混乱的、带刺的细节。
柜台上的拿铁已经凉了,表面的奶泡塌陷成一个不规则的坑,像月球表面的陨石坑,像真正的旧院墙。我把它倒掉,开始准备下一杯。窗外的街舞少年正在练习 windmill,动作笨拙,重心不稳,但那是人类的递归,带着熵增的美。
其实明天应该提醒陈编辑,如果他真的需要仿写检测工具,我可以写个简单的 Python script。但更好的方案或许是,让中学生多读些真正写得不好的手稿