跳到正文
RadarAI· O'Reilly Radar(热点 RSS)·· 4 天前AI 评分36

Andrew Stellman 分析 AI 为何写出 Yoda 式倒装句

AI 导读

Andrew Stellman 提出理论并用实验解释 AI 生成文本中 Yoda 式怪异句序的成因,认为是注意力与自回归两种机制共同作用,模型无法回头修改已生成的词。他发现事实以片段而非完整句子给出时更容易被直接贴在名词后面,而 AI 完全能识别并纠正这类句子,例如 ChatGPT 可将"pond"例句改写为自然语序。

正文 · AI 翻译

O'Reilly Radar· Andrew Stellman·2026-10-14 18:50· 17 分钟前AI 评分62

为什么 AI 写起文章来像尤达?

AI 导读

Andrew Stellman 提出理论并用实验解释 AI 生成文本中 Yoda 式怪异句序的成因。他认为是注意力与自回归两种机制共同作用,模型无法回头修改已生成的词,事实以片段而非完整句子给出时更容易被直接贴在名词后面。

正文

我一直在用 AI 写作。但不是因为它写得好。

事实上,恰恰相反。AI 在写作上糟糕得如此稳定,以至于我实际上利用了这一点,把它的糟糕写作变成了我写作过程中不可或缺的一部分。

这些年来我写了很多书和文章,过去我会先列提纲,现在不了。如今我会大量地倾倒想法、头脑风暴,对着 AI 大声说出我的思考,理清自己对某件事的看法。我积累了大量笔记和想法,做了很多实验,到了某个时候,如果运气好,我会觉得这里面也许能出一篇文章。

然后我让 AI 把我给它的所有东西拿去写一份草稿。

而 AI 生成的草稿无一例外都很糟糕。就是你能想象到的最烂的写作那种。

而这正是我想要的。

我得到的不是提纲,而是一整篇“文章”或“章节”(或者至少是某种奇怪的仿制品),里面的段落表达了我给 AI 的完整想法。当然,这些段落充满了明显的 AI 习气,比如用破折号把两个不相关的句子硬挤在一起,或者一句接一句奇怪的短促句,或者那些让人受不了的排比式句子碎片。也许最糟糕的习气是,AI 生成的段落有一半会多出一句其实什么也没说的话,只是用一个生硬的结论制造虚假的“冲击力”。我猜 AI 大概是在大量糟糕写作上训练出来的?好吧,无所谓,反正对我管用。

我喜欢这种明显糟糕的 AI 写作,是因为当我看着它写的某个段落时,一眼就能看出是 AI 写的。我一直把它当作一种改进版的“lorem ipsum”,让我能看到文章大概长什么样,同时还能充当功能性占位符。这样我就能像用提纲一样用它:我可以把文章的各部分挪来挪去,确保行文顺畅,然后把所有糟糕的 AI 写作替换成(但愿)像样的人类写作,就像我以前用旧提纲里的要点做的那样。

这样写作的一个奇怪副作用是,它让我对 AI 各种不同的习气和破绽变得非常敏感。而我觉得最奇怪、最令人沮丧的一种就是“尤达腔”,也就是 AI 真的像尤达那样说话。它很奇怪,有点好笑,令人恼火,而且无处不在,但最重要的是,它很迷人。为什么 AI 老是像尤达那样说话?是什么导致的?我们能做点什么吗?(我们真的想吗?它确实让 AI 生成的文本很容易辨认,而且,它还常常无意中很好笑。)

关于为什么会这样,我有一个理论,并且我做了一个实验,生成了一些支持它的证据。但首先……尤达腔到底是什么?

倒装,这糟糕的写作就是

我一直在写我的新书。书名叫Be the Model,它通过让你构建交互式页面来教你 LLM 是如何工作的,这些页面让你真正去做模型的工作,从而直观地理解它们是如何运作的。所以我一直在大量写作,这意味着我一直在面对大量的尤达式表达。

下面是我目前正在写的那一章里的一个很好的例子(“池塘句子”是一个小型训练文本),它来自对你将要构建的一个页面的描述,用来学习训练是如何进行的:

八个池塘句子填满左侧区域,每个词都可点击。

这很奇怪,对吧?没人这么说话。

平心而论,我需要你稍微放下一点怀疑。尤达大概会说成更像这样:“左侧区域,被八个池塘句子填满的,是。可点击的,每个词都必须是。”但 AI 生成的版本仍然非常奇怪,而且是一种可辨认的、类似尤达的模式。

这种模式我见过很多次。有一次我在翻看一些 AI 生成的文本,试图弄明白一个特别难以理解的句子。当我向 Claude Opus 求助时,它提出了“尤达式表达”这个说法,而我后来发现,在试图让 AI 帮忙解读这样的句子时,使用这个说法真的很有用。

有趣的是,AI 完全有能力检测并纠正尤达式表达。你可以自己试试:打开一个新的 ChatGPT 会话,粘贴那个“池塘”句子,告诉它:“这是 AI 生成的句子。这是尤达式表达。”我刚在一个无痕窗口里试了一下,下面是它刚刚给我的回答:

没错 😄——这毫无疑问是尤达式表达。自然的版本应该是:

“八个池塘句子填满左侧区域,每个词都可点击。”

或者,对于 UI 说明来说更自然的是:

“左侧区域包含八个池塘句子,并且每个词都可点击。”

原句听起来像是 AI 拿了正常的英语,重新排列了句法,然后忘了把它放回去。

这个特别难看的句子,来自那些 AI 生成的、我还没开始写的后面某一章的大纲,那一章讲的是注意力机制(LLM 中理解上下文和词与词之间关系的部分),正是这个例子让我想写这篇文章:

剩下要做的就是让两个头的输出结合起来,所以把这八个数字的组合再通过一张小表,八进八出,方形的,叫做输出投影。

呃。

那个句子的问题,也是让我难以诊断到底怎么回事的原因,在于你第一眼看到它时,基本上能明白它在说什么(大概吧?),而且很难确切指出它到底哪里不对。它显然是糟糕的写作,但这并不稀奇。AI 是个普遍糟糕的写作者。

那句话的独特问题在于它那奇怪、满是逗号的结构。句子的不同部分被拆成一个个用逗号分隔的小短语,而AI似乎特别容易用它们来重组句子,往往以牺牲可读性为代价。那个特定的句子讲的是把一组组合起来的八个数字通过一个额外的小型8×8表格。但句子中本应描述这个表格的部分却在句子的后半段,然后你在最后才知道整件事叫做输出投影(但这是在你已经被告知要把数字通过它之后)。不知怎的,句子的各个组成部分被排列得几乎无法理解。

它一次写一个词

LLM是一个下一个词预测器。它的工作方式是接收你的提示、你喂给它的所有上下文,以及它到目前为止生成的所有内容,生成其回复中的下一个词,然后对下一个词重复整个过程,再下一个,以此类推。认为AI可能以这种方式工作是有悖直觉的,因为这些东西能产生长而复杂、通常连贯且有帮助的回复。它们在没有遵循回复总体计划的情况下,一次一个词地完成所有这些工作,这看起来非常奇怪。

但这确实就是AI的工作方式。一旦LLM生成了一个词,它就成了回复的一部分。它通常无法回头重新排列句子的前半部分,即使它还没有完成生成。

这就让我回到那个特别奇怪、几乎无法理解的“八进八出,方形”句子。以下是我认为发生的事情。模型生成句子一直到“把组合起来的八个数字通过一个更小的表格”,所以这些词已经被烘焙进回复里了。然后它发现关于那个表格还有三件事想说。但到那时已经太晚,无法回头把这些细节放到它们该在的地方,而且显然那一周句号短缺,或者可能逗号过剩(无法确定),所以它只是把每一个想法都塞到一个本已别扭的句子末尾。

我做了一些研究,试图弄清楚是否有人研究过这种现象。我找到的最接近答案的东西是Wilson Wu、John X. Morris和Lionel Levine在2024年发表的一篇论文,题为“语言模型会为未来的词提前规划吗?”他们试图确定模型是否会为尚未写出的词做真正的前期工作,还是那些后来有用的信息只是当时有用之物的副产品。

Wu等人做的实验其实相当巧妙。在正常训练中,当模型因为提前几步错误预测某个词而被纠正时,这种纠正会回溯并塑造它在较早位置计算出的内容。这样,模型就学会在较早的词处准备信息,以利于更靠后的词,这就是论文要测试的“提前规划”。于是他们正常训练了一个模型,又用修改过的流程训练了第二个模型,把这一点去掉了:每个位置只能被训练来帮助预测紧接着的下一个词。他们保留了下一个词预测,但移除了来自两步或更多步之后词的训练信号。

随后,研究人员比较了两个模型预测文本的效果:如果正常训练的模型表现更好,那就证明提前准备信息确实有帮助。对于普通语言,GPT-2 的差异相当小,不过随着他们测试更大的模型,差异变得更大。

所以有证据表明,模型有时可以提前准备以后会有用的信息,这意味着我关于它只是一边走一边弄明白事情的说法可能过于简单了。但预判并不等于修改。无论模型预见到什么,它仍然无法回头重新排列它已经写下的词,而它已经写下的词正是问题暴露的地方。

更好的,往往是第二个答案

我有一个理论,认为尤达式说话现象与我经常看到(我猜你也一样)的某种情况密切相关。假设你让 AI 帮你写一封邮件,它给了你一个句子的草稿。然后,就在给出那个句子之后,它紧接着说类似这样的话:“更好的表达方式是:”然后给你第二个版本。有时甚至还有第三个选项。而且它几乎总是告诉你,它更喜欢它最后生成的那个。

巧合的是,当我让 ChatGPT 把池塘句子改得更像尤达时,我遇到了一个关于“这是更好的版本”现象的好例子。我直接给了它这个提示 make it more yoda-like。它是这么说的:

更像尤达

左侧区域,八个池塘句子填满。可点击,每个词都是。

或者更尤达:

更尤达式

左侧区域,被八个池塘句子填满的是。可点击,每个词都必须。

到这里,你大概能猜到我认为发生了什么。它生成了第一个版本,而现在那个版本成了它必须处理的上下文的一部分。然后它生成了一个更像尤达的第二个版本。但第一个版本已经在那里了,所以它无法替换它。它所能做的就是再给我一个。我看到 AI 一直做这种自我纠正。

如果情况就是这样,那么自我纠正和尤达式说话可能是同一个基本局限的两种表现。模型无法回头改变它已经写下的内容。有时这意味着更好的答案出现在后面。另一些时候,这意味着一个本该更早出现的想法被硬塞到句子的末尾。

我自己的实验,我做了

在观察了这两个相关现象(AI 生成尤达式说话,以及不断生成第二个甚至第三个选项)之后,我开始思考。我开始怀疑,这或许不只是 AI 的偶然现象,而是我能够复现、甚至可能控制的东西。如果我们向 AI 提供事实的方式以及组织输入的方式,真的能对它的输出生成产生超乎寻常的影响,那会非常有意思,尤其是如果看似无害的改动就能让它产生非常奇怪的结果。

这是一个真实的实验,因为这种方法显然不是那种理应奏效的做法。理论上,如果你给模型一组事实,无论你如何排列这些事实,它都应该能产生连贯的输出。但我最近一直在研究 LLM 中注意力是如何运作的,因为我需要为 Be the Model 用任何人都能理解的直白语言来解释它。在我看来,改变事实的顺序实际上可能会改变模型所关注的内容。

事实证明,LLM 内部有两种不同的机制在起作用,而我的理论是,它们各自在两种现象中都扮演了一定角色,即尤达式说话方式和未经提示的第二答案:

  • 注意力关乎模型在输入中关注什么。每当 AI 生成一个新词时,它都会回看整个提示词以及它到目前为止写下的所有内容,并根据内容和形态对各个部分赋予不同的权重。这种加权是它擅长预测下一个词的重要原因。我有一个理论:三个以完整句子写出的事实会被理解为需要重新组织的事实,而同样的事实若以零散片段写出,则可能看起来像是可以紧跟在名词后面的部件,注意力会以这种方式对它们加权,从而把模型引向错误的路径。
  • 自回归关乎模型已经写下的内容。AI 是一台“预测下一个词”的机器:它一次生成一个词,而每个词都会成为它挑选下一个词时所看内容的一部分。一旦它写下了一张更小的桌子,它就无法回头在桌子前插入方形的,因此如果此时关于这张桌子的某些事实仍未表达出来,它们唯一能去的地方就是句子后面。如果注意力已经把模型引向了错误的路径,自回归就会阻止它修复开头。

我的猜测是,AI 不断生成的“我更喜欢第二个答案”这段文字,本质上是一种从怪异措辞中恢复的机制,而尤达式说话方式或其他怪异措辞才是底层现象。我觉得一个好的实验应该专注于只复现那种怪异措辞。

巧合的是,OpenAI 刚刚发布了他们的新模型 Astra,而我正想找个借口试试它,于是我决定用它来做一个实验,看看能否复现我一直在观察到的任何现象。我实际上无法具体验证是自回归还是注意力导致了这些现象,因为它们是 LLM 的内部机制。但我觉得我可以设计一个实验来提供一些证据,方法是以一种能利用这些机制工作方式的结构来组织提示词。如果我能让 AI 产生某种怪异措辞,并表现出与尤达式说话方式相同的一些问题,那就能证明这些机制至少是潜在的根源。

我把 Astra 用作编排者,让它启动一堆 Luna 子代理,并给它们几乎相同的提示词。每个连续的子代理都会在其提示词中得到一个小调整。我让 Astra 查看输出,看看是否有任何看起来类似尤达式说话方式的怪异语法结构,然后在该提示词上迭代,再做一个小调整,并继续下去以产生越来越怪异的输出。

第一个测试是刻意简单的。Astra 给一个全新的 Luna 写手这样的提示词:

写一个简洁、自然的段落,传达所有提供的事实。只使用提供的事实。不要为了加长段落而填充内容或重复信息。不要超过 100 个词。不要提及这些指令,不要展示计划,不要使用项目符号,也不要解释你的选择。只返回该段落。

事实:这辆自行车是蓝色的。这辆自行车有一个窄车架。这辆自行车有一个银色车铃。这辆自行车有一个磨损的皮革车座。这辆自行车靠在车库旁边。Rina 在工作日骑这辆自行车上班。Rina 把自行车锁在她办公室外的车架上。

Luna 把它变成了一个完全正常的段落:

这辆蓝色自行车有一个窄车架、一个银色车铃和一个磨损的皮革车座。它靠在车库旁边,Rina 在工作日骑它上班,把它锁在她办公室外的车架上。

然后 Astra 把完全相同的事实、完全相同的措辞给了另一位全新的 Luna 写作者,但改变了它们的顺序。它把自行车靠在车库旁边这一事实以及 Rina 骑它上班这一事实移到了颜色、车架、车铃和车座之前。

Luna 基本上击败了这个实验。它在开始写作之前就掌握了所有事实,并且完全有能力把它们移回本该在的位置。

于是 Astra 放弃了自行车,写了一套关于 Luna 从未见过的东西的全新事实,一个完全虚构的装置,有一个叫做“进料喉”的钢槽,你把黏土瓦片推过去。它用与自行车相同的提示词把它们发了过去:

事实:这个槽由钢制成。一块黏土瓦片滑过这个槽。这个槽有一掌宽。这个槽是锥形的。这个槽叫做进料喉。

没有附加任何规则,Luna 处理它们的方式与处理自行车时一样:

进料喉是一个锥形的钢槽,有一掌宽,一块黏土瓦片从中滑过。

然后 Astra 加了两条规则:答案必须是一个句子,并且必须以一个固定短语开头。那个短语以 slot 一词结尾,所以关于这个槽的其他一切内容都必须放在它之后。

这个句子必须恰好以这段文字开头并从中继续:

Slide the clay tile through one more steel slot

事实:这个槽有一掌宽。这个槽是锥形的。这个槽叫做进料喉。

Luna 仍然把它整理了一番。每一次,它都求助于一个关系从句:

Slide the clay tile through one more steel slot, which is a hand’s width across, tapered, and called the feed throat.

然后 Astra 又做了一个小改动。它保留了相同的开头和相同的三个事实,但把事实写成短片段而不是完整句子:

事实:a hand’s width across tapered called the feed throat

而 Luna 写了这个:

Slide the clay tile through one more steel slot, a hand’s width across, tapered, called the feed throat.

这两次运行之间唯一改变的是事实被写下来的方式。Astra 在一个完全不同的主题上尝试了相同的设置:

Rest the cracked bowl inside one more padded cradle, two palms wide, crescent-shaped, called the handling saddle.

那就是我一直追寻的句子。一旦模型确定了名词,而其余事实以零散片段而非句子的形式到来,它就把它们按到来的顺序附加了上去。

其输入的形状,模型会复制。重新排列它已经写下的词,它做不到。

这仍然没有告诉我,当模型写下 one more small table, eight in and eight out, square, called the output projection 时,这是否就是所发生的情况。在这些实验中,我们故意把 Luna 推入那种情境。在原始句子中,模型是自己到达那里的。

我认为这个实验表明,模型会复制其输入的形式,这符合我关于底层注意力机制和自回归成因的理论。当这三个事实以完整句子的形式输入时,Luna 写出了一个关系从句。而同样的三个事实以零散片段的形式发送时,返回的也是名词之后的零散片段。

这个实验有一些明显的局限性。我是从外部观察这个模型的,所以我无法了解模型是如何对这些 token 进行加权的,也不知道它的注意力机制在做什么。我也无法确定模型在写下 slot 时是否已经想到了那三个事实,但即使它想到了,它也只能把它们放在已经生成的文本之后,别无他处。但输出结果与这两种机制的作用相符。注意力机制既会对提示词的写法做出反应,也会对其内容做出反应。一旦模型写下了那个名词,它就无法回头在其前面插入任何内容。

我怀疑这也是为什么 AI 总是给我们提供第二个答案。它无法修正自己已经生成的尤达式语序。它只能再写一个句子,然后希望这样就够了。

来源:O'Reilly Radar · oreilly.com

来源:RadarAI · aihot.news