库名称: transformers
语言:
- 英文
任务标签: 图像特征提取
许可证: apache-2.0
推理支持: 不支持
nomic-embed-vision-v1:拓展潜在空间
nomic-embed-vision-v1
是一款高性能视觉嵌入模型,与 nomic-embed-text-v1 共享相同的嵌入空间。
所有 Nomic Embed 文本模型现已支持多模态!
模型名称 |
Imagenet 零样本 |
Datacomp (平均38项) |
MTEB |
nomic-embed-vision-v1.5 |
71.0 |
56.8 |
62.28 |
nomic-embed-vision-v1 |
70.7 |
56.7 |
62.39 |
OpenAI CLIP ViT B/16 |
68.3 |
56.3 |
43.82 |
Jina CLIP v1 |
59.1 |
52.2 |
60.1 |
托管推理 API
使用 Nomic Embed 最简单的方式是通过 Nomic 嵌入 API。
通过 nomic
Python 客户端生成嵌入向量非常简单:
from nomic import embed
import numpy as np
output = embed.image(
images=[
"image_path_1.jpeg",
"image_path_2.png",
],
model='nomic-embed-vision-v1',
)
print(output['usage'])
embeddings = np.array(output['embeddings'])
print(embeddings.shape)
更多信息请参阅 API 参考文档。
数据可视化
点击下方的 Nomic Atlas 地图,可视化 10 万样本的 CC3M 数据集,比较视觉与文本嵌入空间!

训练细节
我们采用类似 LiT 的技术将视觉嵌入器与文本嵌入空间对齐,但固定了文本嵌入器!
更多细节请参阅即将发布的 Nomic Embed Vision 技术报告及配套 博客文章。
训练代码已开源至 contrastors
代码库。
使用方法
请注意,nomic-embed-text
必须使用前缀。因此,在多模态 RAG 场景(如文本到图像检索)中使用 Nomic Embed 时,应添加 search_query:
前缀。
Transformers
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel, AutoImageProcessor
from PIL import Image
import requests
processor = AutoImageProcessor.from_pretrained("nomic-ai/nomic-embed-vision-v1")
vision_model = AutoModel.from_pretrained("nomic-ai/nomic-embed-vision-v1", trust_remote_code=True)
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(image, return_tensors="pt")
img_emb = vision_model(**inputs).last_hidden_state
img_embeddings = F.normalize(img_emb[:, 0], p=2, dim=1)
此外,您还可以进行多模态检索!
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
sentences = ['search_query: 哪些可爱的动物适合拥抱?', 'search_query: 猫长什么样?']
tokenizer = AutoTokenizer.from_pretrained('nomic-ai/nomic-embed-text-v1')
text_model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1', trust_remote_code=True)
text_model.eval()
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = text_model(**encoded_input)
text_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
text_embeddings = F.normalize(text_embeddings, p=2, dim=1)
print(torch.matmul(img_embeddings, text_embeddings.T))
加入 Nomic 社区