一个界面上看不见的步骤
在你的提示词和模型之间,隔着一张查找表。分词器持有一份固定词表,通常三万到十万条,内容是字符、词片和常见完整词。你的文字被贪心地匹配进去,输出是一串整数。
weathered brass diving helmet 大概会变成五六个 token;Zooop 会被切成类似 zo + op + p 的碎片,因为词表里没有它。每个 id 接着去 embedding 表里取向量,这些向量才被文本编码器加工成引导生成的条件信号。
创作者能感知到的所有「提示词行为怪癖」,根源都在这一步,而这一步在界面上完全不可见。
token 预算,以及它为什么随模型而变
咬人最狠的上限是 77 个 token,继承自 CLIP。它折算成六七十个英文单词,而这 77 个位置里还有两个是保留标记。超限的文字不会被摘要、也不会被压缩,它是被直接丢掉的,且没有任何提示。
这一个事实就能解释一种非常常见的体验:你写了一条一百五十词的详细提示词,模型好像只听开头、不理结尾。它不是不理,它根本没收到。
新架构把天花板抬上去了。用 T5 或大模型文本编码器的模型能吃几百个 token,而且确实会奖励更长、结构更清楚的描述。所以「提示词该写多长」是模型的属性,不是一条通则,为一个模型调好的提示词换一族模型可能表现完全不同。
按重要程度排序的实操结论:
- 重要的放前面。 主体、动作、景别先写。真要被截断或被降权,就让尾部那些风格形容词去挨。
- token 花在名词上,别花在填充词上。 冠词、连词、客套话都在吃额度。
- 非英文提示词更贵。 在词表里占比低的文字会被切得很碎,同样内容要吃两到三倍额度。仅这一条,就让英文提示词在 CLIP 时代的模型上有真实优势。
- emoji、冷门 unicode、长连字符串很贵,而且几乎传达不了你想要的含义。
生僻词和品牌名为什么会翻车
词表里没有的词会变成碎片,而模型没给这些碎片挂任何概念。它仍然会出图,用碎片沾到的联想拼出来。你指名一个具体产品、一个冷门地名或一个自创角色时,那些「不知从哪来」的结果就是这么产生的。
三条绕开的路:
- 描述,而不是指名。 形状、材质、颜色、年代,模型对这些都有很强的概念。
- 给参考图。 对必须一模一样的物件,一张图胜过任何指名。
- 把这个 token 训出来。 文本嵌入或 LoRA 的作用正是给一个选定的触发词挂上一个真实概念,解决的就是这个问题。
分词带来的另一个副作用
属性串味。写 a red cube and a blue sphere,你会经常拿到一个蓝色的立方体。编码器为整条提示词产出的是一个整体条件向量,颜色 token 和物体 token 之间的绑定,远比你句子的语法看起来那么牢固。
比较可靠的绕法:一条提示词只描述一个主体,其余的后期合成;工具支持的话用分区条件或蒙版;或者把更重要的那一组配对写在前面,因为靠前的 token 权重更高。很多时候只把同样的词换个顺序,就足以决定哪个物体拿到那个颜色。