提词优化器“琥珀”带你用好CLIP!视觉-语言表征学习新进展

  • 2021 年 9 月 14 日
  • AI

AI科技评论报道

是否还在为设计CLIP模型的提词器(prompt)而烦恼??到底是“a photo of a [class]”还是“a [class] photo”??对于特定任务(例如食物分类或是卫星图像识别),如何添加符合语境的上下文(context)??用了本文提出的提词优化器CoOp(中文名:琥珀),这些问题通通不需要烦恼?。
文章链接://arxiv.org/abs/2109.01134

代码链接://github.com/KaiyangZhou/CoOp

结合视觉和语言的预训练方法(Vision-Language Pretraining)最近成为了视觉表征学习的一种有前景的方向。区别于使用图像和离散标签进行学习的传统分类器,以CLIP为代表的视觉语言预训练模型利用了两个独立的编码器来对齐图像和原始文本在这种范式下,监督来源变得更加灵活多样且容易获取(如图片评论或网络配图文案都可以做图片监督)。更重要的是,模型变得十分容易零样本(zero-shot)迁移到下游任务。这是因为下游任务的类别不必一定属于训练中离散标签的一种。只要提供下游任务的标签信息,通过适当提词器(prompt)生成的文本向量可以直接代替固定的离散标签。下图展示了CLIP模型结构。

我们发现了在实践中部署此类模型的主要挑战是对提词器的设计,这是因为设计合适的提词器需要专业领域的知识,尤其是针对专业类别名要设计专门的语境(或称作上下文,context)。同时,提词器的设计也需要花费大量时间来调整,因为微小的措辞变化可能会对性能产生巨大影响(例如下图a,在“a photo of [CLASS]”中的[CLASS]前加个“a”直接涨了将近6个点?!!)。此外,不同的下游任务需要的不同设计(例如图b-d中的“flower”,“texture”,和“satellite”)也进一步阻碍了部署的效率。

为了克服这一挑战,我们提出了一种名为上下文优化 (Context Optimization,英文名:CoOp,中文名:琥珀) 的新方法。琥珀的主要思想是对提词器中的上下文(context)用连续向量进行建模,而整个训练过程将仅仅端到端优化这几个上下文词向量,而保持预训练参数不变。此举完全自动化了提词器的设计过程。下图展示了琥珀的模型结构。

实验里我们使用了11个视觉数据集来验证琥珀的有效性:结果表明琥珀是一个十分高效的小样本学习方法,平均每个类别只需要一到两张图片就可以击败基于手工提词器的零样本识别模型。当每个类别的图片有16张时,琥珀比手工提词器平均高出了大约17个百分点(最高可达50个百分点?)。不仅如此,琥珀还对领域泛化表现出了极强的鲁棒性(见下图,M指代琥珀的提词器长度)。

此时,读者一定与我们一样对琥珀学到的提词器充满兴趣。可惜的是,当我们在词空间中寻找与优化得到的词向量距离最近的现实词汇时,我们很难找到有实际含义的词,因为我们发现即便是最临近的现实词汇,其距离与优化得到的词向量仍然相距甚远,并且在词空间中,临近的词向量不一定具有相似的含义。下图展示了5个数据集对应的距离最优解最近的16词提词器。这进一步展示了人工设计的提词器可能始终无法达到琥珀的效果。

鉴于以上提词器可视化的结果,我们大胆的推测,在一些数据集上,一些无厘头的提词器,例如“makka pakka akka yakka ikka akka [class]”甚至可能比“a photo of a [class]”在某些数据集上有更好的效果?。


雷锋网雷锋网雷锋网