Jina CLIP v1:多模态向量模型,为文本和图像而生!

CLIP 模型架起了文本和图像的桥梁,但实际上很少有人会用它来进行文本检索,因为CLIP的文本编码器无法有效的对长文本进行语义建模。

为了解决这一问题,我们推出了 Jina CLIP v1,一个增强版的 OpenAI CLIP 模型,擅长文本-文本、文本-图像、图像-文本、图像-图像四个方向的检索。从现在起,你的 CLIP 模型不仅是图像检索器,更是强大的文本检索器。

在构建多模态 RAG 应用时,你不再需要在不同的向量模型之间切换,一个模型、两种模态、四个搜索方向 都交给 Jina CLIP v1。更关键的是,它还能够处理长达 8K 的输入长度。接下来,就让我们一探这款新模型的精华所在。
示例:用 Jina CLIP 实现零样本实时图像分类

CLIP 模型架构

在 2021 年 1 月,OpenAI 推出了开创性的 CLIP 模型,其架构简洁却极具巧思:将一个文本编码器与一个图像编码器结合,在统一的向量空间中输出结果。CLIP 的文本向量与图像向量之间的距离,反映了两者语义关联的紧密程度。

CLIP 这一架构非常适用于跨模态检索和零样本分类任务,通过学习大量的图像和文本对,即使在没有针对性任务训练的情况下,也能理解并分类新的图像。

原始 CLIP 模型中的文本编码器是一个定制的神经网络,在图像编码器方面,OpenAI 则使用了一系列 ResNet 和 ViT 模型,再用图像描述进行训练,以生成相似的图像-文本向量。

这种方法非常有效,尤其是在零样本分类中的表现。举个例子,即使训练数据中没有标注宇航员的图像,CLIP 仍能凭借对文本和图像相关概念的理解,准确识别宇航员的图片。

然而,OpenAI 的 CLIP 也存在两大短板:

1. 文本输入容量非常有限。最多仅支持 77 个 token 的输入,根据 LongCLIP 的实验,实际上其有效输入不超过 20 个 token。

2. 在纯文本检索中表现不佳。主要原因有两点:首先,CLIP 模型的训练目标是对齐文本和图像,没有针对纯文本检索进行专门优化。其次,CLIP 模型的训练数据主要由相对较短的文本组成,难以泛化到更广阔的文本检索场景。

因此,在大多数应用到 CLIP 模型的实际应用场景中,如果涉及到纯文本检索任务,就需要引入其他专用文本向量模型并行使用,使得 AI 框架的规模和复杂性增加了一倍。

Jina CLIP v1 直接解决了这些痛点,利用了近年来的进展,jina-clip-v1 为涉及所有文本和图像模态组合的任务提供了最先进的性能,一个模型支持两种模态、四个搜索方向,为用户带来前所未有的便捷性和高效性。

Jina CLIP v1 模型架构

Jina CLIP v1 沿用了 OpenAI CLIP 的双编码器架构:两个编码器共同训练,生成在同一向量空间中的输出结果。

在文本编码器方面,我们采用自身的向量模型所使用的 Jina BERT v2 架构,支持高达 8k token 的长文本输入,输出维度为 768,明显优于 CLIP,能够处理更长的文本,并生成更精确的向量。

在图像编码器方面,我们使用了北京智源人工智能研究院的最新模型 EVA-02(https://github.com/baaivision/EVA/tree/master/EVA-02),我们对一系列图像编码器进行了测评,在相似的预训练背景下进行跨模态测试,EVA-02 明显优于其他模型。它的模型大小也与 Jina BERT 架构相当,因此图像和文本处理任务的计算负担大致相同。经过我们的进一步训练,它在图像到图像及跨模态任务中展现出极佳表现。

通过这一全新组合,Jina CLIP v1 取得了以下重大进展:

  • 在跨模态、纯文本、纯图像等所有场景下表现都很卓越,相比 CLIP 模型平均性能提升了 46%。

  • EVA-02 在图像-文本和纯图像任务中表现出色,Jina AI 的额外训练进一步提升了其纯图像任务的表现。

  • 支持更长的文本输入,最高支持 8k token 输入,可与丰富语义上下文相关联。

  • Jina CLIP 即使在非跨模态场景中也有出色表现,可以大幅节省用户使用时的空间、计算、代码维护和复杂度。

Jina CLIP 各项性能表现均优于 OpenAI CLIP 模型训练

Jina CLIP v1 在性能上的出色表现,归因于我们创新性的三阶段训练流程。前面提到了 CLIP 模型在纯文本场景下表现不佳的主要原因:

  1. CLIP 专注于捕捉跨模态(图像和文本)的语义关联,对于单个模态(纯文本)之间的细粒度语义建模能力相对较弱。

  2. CLIP 使用的训练数据主要来自网络上的图像-文本对,相比于大规模语料库,训练数据在覆盖面和多样性方面存在局限,这导致模型难以泛化到更广阔的文本检索场景。

因此,我们有针对性地设计了训练方案来改善这一问题,通过两个任务共同优化、以及长文本单项优化的方式进行训练,具体分为三个步骤:

三阶段联合训练流程

第一阶段:对齐图像和文本向量

首先,我们使用带描述的图像数据来对齐图像和文本向量,辅助文本对来进行协同训练。这种训练方法使两模态互相促进,提升短文本的检索能力,同时大幅提升跨模态检索性能。

第二阶段:利用合成数据进行长文本优化

接着,我们引入了由 AI 模型生成的合成数据,主要是长文本图像描述数据,通过增加文本序列长度(至 512)来训练模型。这一阶段重点提升了模型对于长文本的关注和处理能力,进一步优化了文本检索的性能。

第三阶段:难负样本学习

在最后阶段,我们使用包含难负样本的文本三元组,进一步改进文本编码器,学习区分相关文本与不相关文本。同时,为保持文本-图像对齐,我们继续对长图像描述进行训练。此阶段显著提升了纯文本性能,模型的图像-文本的跨模态检索能力则保持稳定。

通过上述策略,我们实现了文本和图像两种模态的共同进化,使模型在所有检索场景中均能发挥出色表现。有关训练和模型架构的详细信息,请参阅我们的论文:《Jina CLIP: Your CLIP Model Is Also Your Text Retriever》https://arxiv.org/abs/2405.20204。

多模态向量的新前沿

我们评估了 Jina CLIP v1 在纯文本、纯图像以及跨模态任务中的表现。我们使用 MTEB 检索基准来评估其文本性能;在纯图像任务中,采用 CIFAR-100 基准测试;在跨模态任务方面,选择了包含在 CLIP 基准中的 Flickr8k、Flickr30K 和 MSCOCO Captions 数据集进行评估。

结果如上图所示:jina-clip-v1 在所有类别中均优于 OpenAI 的原始 CLIP,尤其是在纯文本提升了 165.1%,纯图像检索方面提升了 12.3%,平均来看性能提升了 46%。

如何上手 API

您可以轻松地通过 Jina Embeddings API 将 Jina CLIP v1 集成到您的应用中。

下面的代码示例展示了如何通过 Python 中的 requests 包调用 API 来获取文本和图像的向量,它将文本字符串和图像的 URL 传递给 Jina AI 服务器,并返回两者的编码。

☝️ 记得将 <YOUR_JINA_AI_API_KEY> 替换为已激活的 Jina API 密钥。你可以在 Jina Embeddings 网页获取包含一百万免费 tokens 的试用密钥。

go 复制代码
import requests
import numpy as np
from numpy.linalg import norm

cos_sim = lambda a,b: (a @ b.T) / (norm(a)*norm(b))

url = 'https://api.jina.ai/v1/embeddings'

headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <YOUR_JINA_AI_API_KEY>'
}

data = {
  'input': [
     {"text": "Bridge close-shot"},
     {"url": "https://fastly.picsum.photos/id/84/1280/848.jpg?hmac=YFRYDI4UsfbeTzI8ZakNOR98wVU7a-9a2tGF542539s"}],
  'model': 'jina-clip-v1',
  'encoding_type': 'float'
}

response = requests.post(url, headers=headers, json=data)
sim = cos_sim(np.array(response.json()['data'][0]['embedding']), np.array(response.json()['data'][1]['embedding']))
print(f"Cosine text<->image: {sim}")

主流 LLM 框架集成

Jina CLIP v1 已与 LlamaIndex 和 LangChain 等热门框架集成:

  • 在 LlamaIndex 中: 通过 MultimodalEmbedding 基类使用 JinaEmbedding,并调用 get_image_embeddings 或 get_text_embeddings。

  • 在 LangChain 中: 使用 JinaEmbeddings,并调用 embed_images 或 embed_documents。

定价

文本和图像输入的费用按 token 消耗计算。

  • 对于英语文本,平均每个单词需要 1.1 个 token。

  • 对于图像,则 224x224 像素块数量计算,每块 1,000 tokens,不足一块的按一块计算。

我们还为企业用户提供包含个性化咨询、定制解决方案、优先支持等增值服务。

在 Hugging Face 上开源

Jina AI 一直积极推动开源社区发展,因此,我们在 Hugging Face 上开源了 Jina CLIP v1 模型,采用 Apache 2.0 许可证,欢迎大家下载使用。

你可以在 Hugging Face 的 jina-clip-v1 模型页面上找到示例代码,用于在你自己的系统或云部署中下载并运行此模型。

jinaai/jina-clip-v1 · Hugging Face:https://huggingface.co/jinaai/jina-clip-v1

总结

作为我们在多模态向量检索的力作,Jina CLIP v1 性能显著超越了 OpenAI 的 CLIP,尤其在纯文本和纯图像检索任务中有显著改进。它成功克服了 CLIP 在单一模态建模方面的不足,真正实现了文本、图像两种模态的高效融合,统一了跨模态检索任务。

对于应用开发者来说,现在你只需部署一个模型实例,即可同时支持文本-文本、文本-图像、图像-文本和图像-图像四种检索方向,无需针对不同的检索任务分别使用专门的模型。显著降低了模型管理和部署的复杂度,减少了维护和计算开销。

由于资源限制,该模型目前仅支持英文文本。我们正努力扩展其对更多语言的支持。

有关 Jina CLIP v1 模型的更多信息,请访问我们的网站 https://jina.ai/embeddings。如需讨论具体用例和其他 Jina AI 产品,请通过小助手 jinaai01 与我们联系。

相关推荐
海棠AI实验室20 分钟前
机器学习基础算法 (一)-线性回归
人工智能·python·机器学习
星霜旅人22 分钟前
均值聚类算法
人工智能·机器学习·支持向量机
长风清留扬24 分钟前
机器学习中的密度聚类算法:深入解析与应用
人工智能·深度学习·机器学习·支持向量机·回归·聚类
看星猩的柴狗25 分钟前
机器学习-正则化技术
人工智能·机器学习
程序员非鱼26 分钟前
深度学习任务简介:分类、回归和生成
人工智能·深度学习·分类·回归·生成
dwjf32128 分钟前
机器学习(二)-简单线性回归
人工智能·机器学习·线性回归
AI_Mind29 分钟前
Gemini 2.0:面向智能体时代的全新 AI 模型
人工智能·搜索引擎
i查拉图斯特拉如是1 小时前
基于MindSpore NLP的PEFT微调
人工智能·自然语言处理
mahuifa1 小时前
QtCreator配置github copilot实现AI辅助编程
人工智能·ai编程·github copilot·qtcreator
千穹凌帝1 小时前
基于深度学习多图像融合的屏幕缺陷检测方案
人工智能·深度学习·数码相机