多模态 embedding
把图像和文本训练到同一个向量空间里,你就能用文字搜图片。这也是 CLIP 和大多数跨模态检索背后的思路。
文本的 embedding 空间会把相似的句子放在彼此附近。图像的 embedding 空间会把相似的图片放在彼此附近。
现在把两者放进同一个空间,让一张狗的照片和「a dog」这段文本落在几乎相同的位置。
这就是多模态 embedding,它解锁了任何一种模态单独都没有的能力:用文字搜图片,而系统里不需要任何标签、标记或图注。
对比学习
训练方法就是整个思路本身,而且很优雅。
从网上收集大量「图像-图注」配对。取一批——比如说 1000 对。把这 1000 张图和 1000 条图注全部编码。
于是你得到一个 1000×1000 的相似度网格。其中恰好 1000 个格子是正确的配对,其余都是错配。训练的目标是:配对的组合得高分,其他所有组合都得低分。
这就是对比学习。除了配对关系本身,不需要任何标签,所以它能扩展到从公开网络上抓来的数亿条样本。
结果是得到一个共享空间。图像编码器和文本编码器朝着同一个目标一起训练,因此它们的输出可以直接比较——你可以算一张图片和一句话之间的余弦相似度。
注意负样本在这里起的作用。学习的驱动力很大程度上来自把 99.9 万个错误配对推开,而不只是把 1000 个正确配对拉近。批次越大,每一步提供的负样本越多,这也是批大小在这类训练里格外重要的原因。
它带来了什么
以文搜图。 把查询编码成向量,找最近的图像向量。对任何图片集合都管用,不需要打标。
以图搜图。 找到视觉上或语义上相似的图片。
零样本分类。 要把一张图分到 n 个类别之一,就把「a photo of a {category}」这样的字符串编码,取最近的那个。不需要在这些类别上训练过任何东西——分类器是在查询时用词现搭出来的。正是这个结果让这套方法出了名。
给生成模型做条件。 扩散模型需要彼此有关联的文本表示和图像表示;共享空间提供的正是这个。
跨混合媒体的去重与聚类。
它在哪不够用
这些局限相当稳定,在拿它搭东西之前值得先知道。
组合绑定。 「一个红方块放在蓝球上」和「一个蓝方块放在红球上」的 embedding 很接近。这种表示对「出现了哪些概念」的捕捉,远好于对「它们如何关联」的捕捉——和图像生成提示词里出现的失败完全一样。
计数。 表示得很差,视觉领域其他地方也是如此。
细粒度区分。 鸟类物种、产品型号、几乎一模一样的文档。这个空间是粗粒度的。
图像里渲染出来的文字。 这些模型往往靠有没有像文字的像素来匹配,而不是真的去读它——这就是一张含有「apple」这个词的图片,可能出于错误的理由匹配上查询「apple」的原因之一。
网络抓取带来的偏见。 这个空间继承了图注数据里的各种关联,和文本 embedding 空间一模一样。它是「人们在互联网上怎么给图片写图注」的一份压缩记录。
实际使用
在专门领域,检索质量会下降。 医学影像、工业质检、技术图纸在网络图注里出现得很少。先在自己的数据上测一测,别假定它能迁移过来。
提示词的措辞有影响。 做零样本分类时,「A photo of a {x}」稳定优于光秃秃的「{x}」,因为它更贴近训练时的图注风格。模板上很小的改动就能带来可测量的准确率变化。
和关键词过滤结合。 和文本的混合检索是同一个道理:语义交给 embedding,其余交给精确的元数据。
精度要紧时做重排序。 一个把查询和候选项放在一起看的交叉编码器,胜过各自独立算出的相似度——这个模态如此,文本也如此。
要点回顾
- 多模态 embedding 把图像和文本放进同一个共享空间,于是两者可以直接比较
- 用网络「图像-图注」配对以对比学习方式训练:配对组合拉近,其他所有组合推开
- 由此实现以文搜图、零样本分类、给生成模型做条件——都不需要标签
- 在组合关系、计数、细粒度区分和读取图中文字上都弱
- 在自己的领域上做测试;网络图注训练出来的能力迁移得并不均匀
下一篇: 语音识别是怎么运作的