Long-CLIP:无缝扩展 CLIP 模型的长文本理解能力
一、背景
这里介绍一下新出的文章 Long-CLIP,方案虽然比较简单,但是 CLIP 使用的场景非常多,因此对很多任务也会比较有帮助。
对应的论文为:https://arxiv.org/abs/2403.15378
对应的代码库为:https://github.com/beichenzbc/Long-CLIP/tree/main
二、摘要
CLIP(Contrastive Language Image Pre-Training)模型在涉及图文相关的场景中非常常用,比如图文检索、文生图以及大型多模态模型等。它们通常使用 CLIP 中的 Text Encoder 或 Image Encoder 对文本或图像进行编码。然而,CLIP 中的 Text Encoder 只支持 77 个 Text Token,甚至有研究表明其超过 20 个 Token 就会导致性能下降,这会导致其无法处理长文本的场景,比如详细描述。
在 Long-CLIP 中,作者通过对 Positional Embedding 的 Knowledge-Preserved Stretching 以及 Primary Component Matching 方案对 CLIP 模型进行优化,使其在保留短文本能力的同时扩充长文本理解能力,并且可以无缝替换已有的 CLIP 模型,在针对长文本的图文检索任务上提升 20%,在传统图文检索任务提升 6%。
三、方法
3.1 CLIP 模型
CLIP 模型是 OpenAI 在大规模图像-文本对数据集上通过对比学习方式训练的图文模型,具体论文可以参考 [2103.00020] Learning Transferable Visual Models From Natural Language Supervision,对应的代码库为 GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image。其核心思想为:一对图像-文本分别提取特征,这一对特征的相似性应该尽可能大,而图像和其他文本对应的特征相似性应该尽可能小。
3.2 Knowledge-Preserved Stretching
CLIP 中的 Text Encoder 采用了可学习的绝对 Position Embedding,因此输入文本 Token 会受到 77 个 Token 的限制,也有一些方案试图解决这个问题,比如位置编码插值方法。然而,这种简单的线性插值方案可能导致对已有 Position Embedding 的干扰,导致影响模型对短文本的理解能力。
幸运的是,作者发现 CLIP 模型本身的前 20 个 Token 的 Postion Embedding 对模型效果起到至关重要的作用,而在之后的 Position Embedding 并没有经过较充分的学习。基于这一发现,作者在进行 Position Embedding 插值时会保留前 20 个 Position Embedding,只对后续的 Position Embedding 进行插值。
其相应推理过程也很简单,这里作者额外创建了一个 positional_embedding_res,其有效长度为 248-20=(77-20)*4=228,也就是 57 个 Position Embedding 扩展为 228 个 Position Embedding,推理时分别处理。
3.3 Primary Component Matching
在进行长度外推后,直接使用长文本进行微调并不能获得理想的效果,主要是其会导致短文本能力的下降,尤其是在分类任务上。因此,作者进一步探索了如何通过微调来解锁长文本理解能力,同时保留短文本能力。
具体方案如下图 Fig.3 所示,作者提出了 Primary Component Matching 策略:
- 同时输入图像、短文本以及详细长文本,分别提取特征,分别对应细粒度图像特征、粗粒度文本特征和细粒度文本特征;
- 使用 Primary Component Extraction 模块从细粒度图像特征中提取粗粒度图像特征。
- 训练的目标为:细粒度图像特征和细粒度文本特征对齐,粗粒度图像特征和粗粒度文本特征对齐。
那么什么是细粒度图像特征,什么是粗粒度图像特征呢?作者认为,一个好的模型不仅应该能捕获各种属性,还应该理解它们之间的相对关系和不同的重要性。而长描述文本微调可能将模型推向于只捕获各种属性,为此,作者期望模型还能够专注于捕获关键属性对应的粗粒度图像特征,并与短文本特征对齐。
基于以上考量,作者将 Primary Component Extraction 模块分为 3 个基本组件:
- Component-Decomposition Function:分解为特征值(重要性)和特征向量,Ifine 为细粒度图像特征
- Component-Filtration Function:按照特征值(重要性)过滤,这里作者保留了32 个最大的特征值
-
- Component-Reconstruction Function:使用过滤后的特征值和特征向量恢复到原来的特征空间,Icoarse 为粗粒度图像特征
上述的过程和我们常见的数据压缩-重建,图像去噪等处理高度相似,作者也同样直接使用 PCA(Principal Component Analysis)方法来实现。
PS:其实 OpenAI 在其文生图模型 DALL-E 2([2204.06125] Hierarchical Text-Conditional Image Generation with CLIP Latents) 中也通过 PCA 来降低 CLIP 图像 embedding 的维度。这是因为作者发现,当使用 SAM 训练 CLIP 时,CLIP 表征空间的秩急剧下降,同时略微提升了评估指标。作者发现仅保留 1024 个主成分中的 319 个也能几乎保留全部信息。
四、评估
4.1 定量评估
如下图 Table 1 所示,在长文本的文本-图像检索任务上,提出的 Long-CLIP 模型获得了最优的效果:
如下图 Table 2 所示,在短文本的文本-图像检索任务上,提出的 Long-CLIP 模型甚至获得了比原始 CLIP 更好的效果,并且明显优于直接微调的方案:
如下图 Table 3 所示,在 0-shot 图像分类任务上,提出的 Long-CLIP 模型明显优于直接微调的方案,并且相比原始 CLIP 差距不大:
4.2 消融实验
作者也进一步进行了消融实验,来验证提出的两个组件 Knowledge-Preserved Stretching(KPS) 以及 Primary Component Matching(PCM) 的有效性。如下图 Table 4 所示,同时使用两个组件在所有任务上获得了最优效果:
4.3 定性评估
为了验证提供模型的即插即用特性,作者直接替换了 Stable-Diffusion-V1-5 中的 CLIP text encoder,用于验证其文生图能力,如下图可以看出,替换后模型能更好的遵循指令,生成更多的细节信息,而原始的结果中往往容易忽略一些内容:
PS:其实 OpenAI 也在很早之前意识到了这个问题,在 DALL-E 3(Improving Image Generation with Better Captions)模型中,他们发现传统的文生图模型难以遵循详细的图像描述,并且经常出现忽略单词或混淆提示的语义,作者猜测可能是训练集中的噪声或者不准确的图像描述导致的。相应的解决方案是训练了一个详图图像描述模型,然后对图像生成高度描述性的文本,然后借助这些文本用于模型训练,可以大大提高文生图的指令跟随能力。此外作者也将相关能力应用到了其强大的视频生成模型 Sora 中。
PS:在 Google 的 Imagen([2205.11487] Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding)文生图模型中作者也发现了类似的现象。具体来说,作者发现使用 CLIP 的 Text Encoder 和 T5-XXL 在 MS-COCO 等简单任务上获得了相似的表现,但是在 DrawBench 上人们更喜欢 T5-XXL 作为 Encoder 的结果,作者也认为主要原因是 DrawBench 中的文本 Prompt 更加复杂,比如包含更长、更详细的描述。
五、参考链接
- https://arxiv.org/abs/2403.15378
- https://github.com/beichenzbc/Long-CLIP/tree/main
- https://arxiv.org/abs/2103.00020
- https://github.com/openai/CLIP
- https://arxiv.org/abs/2204.06125
- https://cdn.openai.com/papers/dall-e-3.pdf
- https://arxiv.org/abs/2205.11487
本文转载自 AI闲谈,作者: AI闲谈