共享嵌入空间里放着什么
拿几亿组图文配对训练一个网络,配对的靠近就给奖励、不配对的靠近就罚,最后你会得到一件很有用的产物:一套坐标系,里面「黄金时刻」这个短语,就落在真实拍摄于黄金时刻的照片旁边。CLIP 模型给你的就是这套坐标系。
由此有两个结果。第一,你可以靠比较位置来量化一张图和一句描述的匹配程度,这就是基准测试和某些自动重排里用的 clip score。第二,也是你每天在用的那一半:文本编码器能把提示词变成一个向量,而生成模型知道怎么跟着它走。
提示词为什么是那副脾气
流传的大部分提示词玄学,其实都源自同一个性质。对比式训练奖励的是「大意对了」,所以编码器最终把一句话当成一袋带权重的概念,而不是一棵解析出来的语法树。三个常见症状都从这来。
- 属性串味。 「黄色雨衣旁边一辆红色自行车」出来可能是红色雨衣。颜色都在嵌入里,只是绑定很松。
- 否定失效。 「不要文字」「没有帽子」都是在往里加名词,不是在减。
- 空间关系弱。 「在上面」「在后面」「在左边」经常互换,因为方位短语携带的信号量比物体本身小得多。
- 同义堆叠没有加成。 把「超高清、8K、极致细节」并列写三个,模型看到的方向几乎是同一个。
真正有效的解法是「拆开」:一个主体只挂一个关键属性,主体数量压低,句子摆不平的事情交给模型自己的控件(反向提示词、权重语法、局部重绘再跑一遍)。
77 token 窗口,和取代它的东西
原版编码器读到第 77 个 token 就停。界面会替你把长提示词切段混合,所以在老权重上写两百词提示词,得到的往往是一个含糊的平均值,而不是一个精确的场景。
现在的旗舰模型基本已经翻篇。它们用 T5 编码器或者干脆用一个语言模型当文本编码器,有时再并行挂一个 CLIP 补视觉锚定。窗口从 77 个 token 拉到几百,编码器也真的有句法,所以写一句完整的话比写一串逗号分隔的 tag 更管用。如果你的提示词习惯是在 SD 1.5 上练出来的,这是最值得改掉的一条。
把编码器和生成器分开看
结果不对的时候,先判断是哪一半出的问题。内容跑偏,属性互换、从句被丢、方位词被无视,这是文本编码的问题,把提示词写短、把属性拆开就有救。内容对但画得差,手指糊成一团、材质发面、运动不稳,这是生成器和它训练数据的问题,提示词怎么改都白改。分清你面对的是哪一种,决定了你要跑三次测试还是三十次。