ONNX 模型库
返回模型

说明文档

<br><br>

<p align="center"> <img src="https://huggingface.co/datasets/jinaai/documentation-images/resolve/main/logo.webp" alt="Jina AI: Your Search Foundation, Supercharged!" width="150px"> </p>

<p align="center"> <b>由 <a href="https://jina.ai/"><b>Jina AI</b></a> 训练的嵌入模型集合。</b> </p>

<p align="center"> <b>Jina CLIP:您的 CLIP 模型同时也是文本检索器!</b> </p>

预期用途与模型信息

jina-clip-v1 是一个最先进的英文多模态(文本-图像)嵌入模型

传统的文本嵌入模型(如 jina-embeddings-v2-base-en)在文本到文本检索方面表现出色,但无法完成跨模态任务。像 openai/clip-vit-base-patch32 这样的模型可以有效地对齐图像和文本嵌入,但由于其训练方法和上下文限制,并未针对文本到文本检索进行优化。

jina-clip-v1 通过在两个领域都提供强大的性能来弥补这一差距。它的文本组件与 jina-embeddings-v2-base-en 的检索效率相当,而其整体架构为跨模态检索设立了新的基准。这种双重能力使其成为多模态检索增强生成(MuRAG)应用的出色工具,能够在单个模型内实现无缝的文本到文本和文本到图像搜索。

数据与参数

查看我们的论文

使用方法

  1. 开始使用 jina-clip-v1-en 最简单的方法是使用 Jina AI 的 Embeddings API
  2. 或者,您可以通过 transformers/sentence-transformers 包直接使用 Jina CLIP。
!pip install transformers einops timm pillow
from transformers import AutoModel

# 初始化模型
model = AutoModel.from_pretrained('jinaai/jina-clip-v1', trust_remote_code=True)

# 新的有意义的句子
sentences = ['A blue cat', 'A red cat']

# 公开图片 URL
image_urls = [
    'https://i.pinimg.com/600x315/21/48/7e/21487e8e0970dd366dafaed6ab25d8d8.jpg',
    'https://i.pinimg.com/736x/c9/f2/3e/c9f23e212529f13f19bad5602d84b78b.jpg'
]

# 编码文本和图像
text_embeddings = model.encode_text(sentences)
image_embeddings = model.encode_image(image_urls)  # 也接受 PIL.image、本地文件名、dataURI

# 计算相似度
print(text_embeddings[0] @ text_embeddings[1].T) # 文本嵌入相似度
print(text_embeddings[0] @ image_embeddings[0].T) # 文本-图像跨模态相似度
print(text_embeddings[0] @ image_embeddings[1].T) # 文本-图像跨模态相似度
print(text_embeddings[1] @ image_embeddings[0].T) # 文本-图像跨模态相似度
print(text_embeddings[1] @ image_embeddings[1].T)# 文本-图像跨模态相似度

或使用 sentence-transformers:

# !pip install -U sentence-transformers 
from sentence_transformers import SentenceTransformer

# 初始化模型
model = SentenceTransformer('jinaai/jina-clip-v1', trust_remote_code=True)

# 新的有意义的句子
sentences = ['A blue cat', 'A red cat']

# 公开图片 URL
image_urls = [
    'https://i.pinimg.com/600x315/21/48/7e/21487e8e0970dd366dafaed6ab25d8d8.jpg',
    'https://i.pinimg.com/736x/c9/f2/3e/c9f23e212529f13f19bad5602d84b78b.jpg'
]

text_embeddings = model.encode(sentences)
image_embeddings = model.encode(image_urls)
  1. JavaScript 开发者可以通过 Transformers.js 库使用 Jina CLIP。请注意,要使用此模型,您需要从源码安装 Transformers.js v3,使用 npm install xenova/transformers.js#v3
import { AutoTokenizer, CLIPTextModelWithProjection, AutoProcessor, CLIPVisionModelWithProjection, RawImage, cos_sim } from '@xenova/transformers';

// 加载分词器和文本模型
const tokenizer = await AutoTokenizer.from_pretrained('jinaai/jina-clip-v1');
const text_model = await CLIPTextModelWithProjection.from_pretrained('jinaai/jina-clip-v1');

// 加载处理器和视觉模型
const processor = await AutoProcessor.from_pretrained('Xenova/clip-vit-base-patch32');
const vision_model = await CLIPVisionModelWithProjection.from_pretrained('jinaai/jina-clip-v1');

// 运行分词
const texts = ['A blue cat', 'A red cat'];
const text_inputs = tokenizer(texts, { padding: true, truncation: true });

// 计算文本嵌入
const { text_embeds } = await text_model(text_inputs);

// 读取图像并运行处理器
const urls = [
    'https://i.pinimg.com/600x315/21/48/7e/21487e8e0970dd366dafaed6ab25d8d8.jpg',
    'https://i.pinimg.com/736x/c9/f2/3e/c9f23e212529f13f19bad5602d84b78b.jpg'
];
const image = await Promise.all(urls.map(url => RawImage.read(url)));
const image_inputs = await processor(image);

// 计算视觉嵌入
const { image_embeds } = await vision_model(image_inputs);

// 计算相似度
console.log(cos_sim(text_embeds[0].data, text_embeds[1].data)) // 文本嵌入相似度
console.log(cos_sim(text_embeds[0].data, image_embeds[0].data)) // 文本-图像跨模态相似度
console.log(cos_sim(text_embeds[0].data, image_embeds[1].data)) // 文本-图像跨模态相似度
console.log(cos_sim(text_embeds[1].data, image_embeds[0].data)) // 文本-图像跨模态相似度
console.log(cos_sim(text_embeds[1].data, image_embeds[1].data)) // 文本-图像跨模态相似度

性能

文本-图像检索

模型名称 Flickr 图像检索 R@1 Flickr 图像检索 R@5 Flickr 文本检索 R@1 Flickr 文本检索 R@5
ViT-B-32 0.597 0.8398 0.781 0.938
ViT-B-16 0.6216 0.8572 0.822 0.966
jina-clip 0.6748 0.8902 0.811 0.965
模型名称 MSCOCO 图像检索 R@1 MSCOCO 图像检索 R@5 MSCOCO 文本检索 R@1 MSCOCO 文本检索 R@5
ViT-B-32 0.342 0.6001 0.5234 0.7634
ViT-B-16 0.3309 0.5842 0.5242 0.767
jina-clip 0.4111 0.6644 0.5544 0.7904

文本-文本检索

模型名称 STS12 STS15 STS17 STS13 STS14 STS16 STS22 STSBenchmark SummEval
jina-embeddings-v2 0.7427 0.8755 0.8888 0.833 0.7917 0.836 0.6346 0.8404 0.3056
jina-clip 0.7352 0.8746 0.8976 0.8323 0.7868 0.8377 0.6583 0.8493 0.3048
模型名称 ArguAna FiQA2018 NFCorpus Quora SCIDOCS SciFact TRECCOVID
jina-embeddings-v2 0.4418 0.4158 0.3245 0.882 0.1986 0.6668 0.6591
jina-clip 0.4933 0.3827 0.3352 0.8789 0.2024 0.6734 0.7161

联系方式

加入我们的 Discord 社区,与其他社区成员交流想法。

引用

如果您在研究中发现 jina-clip-v1 有用,请引用以下论文:

@misc{2405.20204,
    Author = {Andreas Koukounas and Georgios Mastrapas and Michael Günther and Bo Wang and Scott Martens and Isabelle Mohr and Saba Sturua and Mohammad Kalim Akram and Joan Fontanals Martínez and Saahil Ognawala and Susana Guzman and Maximilian Werk and Nan Wang and Han Xiao},
    Title = {Jina CLIP: Your CLIP Model Is Also Your Text Retriever},
    Year = {2024},
    Eprint = {arXiv:2405.20204},
}

常见问题

我遇到这个问题,应该怎么办?

ValueError: The model class you are passing has a `config_class` attribute that is not consistent with the config class you passed (model has <class 'transformers_modules.jinaai.jina-clip-implementation.7f069e2d54d609ef1ad2eb578c7bf07b5a51de41.configuration_clip.JinaCLIPConfig'> and you passed <class 'transformers_modules.jinaai.jina-clip-implementation.7f069e2d54d609ef1ad2eb578c7bf07b5a51de41.configuration_cli.JinaCLIPConfig'>. Fix one of those so they match!

Transformers 库在 4.40.x 到 4.41.1 版本之间存在一个 bug。您可以将 transformers 更新到 >4.41.2 或 <=4.40.0 版本。

给定一个查询,如何合并其文本-文本和文本-图像的余弦相似度?

我们的经验研究表明,文本-文本余弦相似度通常大于文本-图像余弦相似度!如果要合并两个分数,我们推荐两种方法:

  1. 文本-文本相似度和文本-图像相似度的加权平均:
combined_scores = sim(text, text) + lambda * sim(text, image)  # 最优 lambda 取决于您的数据集,但一般来说 lambda=2 是一个不错的选择。
  1. 在合并分数之前应用 z-score 标准化:
# 伪代码
query_document_mean = np.mean(cos_sim_text_texts)
query_document_std = np.std(cos_sim_text_texts)
text_image_mean = np.mean(cos_sim_text_images)
text_image_std = np.std(cos_sim_text_images)

query_document_sim_normalized = (cos_sim_query_documents - query_document_mean) / query_document_std
text_image_sim_normalized = (cos_sim_text_images - text_image_mean) / text_image_std

jinaai/jina-clip-v1

作者 jinaai

feature-extraction transformers
↓ 61.6K ♥ 257

创建时间: 2024-05-21 13:52:49+00:00

更新时间: 2025-05-20 10:39:21+00:00

在 Hugging Face 上查看

文件 (27)

.gitattributes
README.md
config.json
config_sentence_transformers.json
custom_st.py
model.safetensors
modules.json
onnx/text_model.onnx ONNX
onnx/text_model_bnb4.onnx ONNX
onnx/text_model_fp16.onnx ONNX
onnx/text_model_int8.onnx ONNX
onnx/text_model_q4.onnx ONNX
onnx/text_model_quantized.onnx ONNX
onnx/text_model_uint8.onnx ONNX
onnx/vision_model.onnx ONNX
onnx/vision_model_bnb4.onnx ONNX
onnx/vision_model_fp16.onnx ONNX
onnx/vision_model_int8.onnx ONNX
onnx/vision_model_q4.onnx ONNX
onnx/vision_model_quantized.onnx ONNX
onnx/vision_model_uint8.onnx ONNX
preprocessor_config.json
pytorch_model.bin
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.txt