Views
No views yet
nomic-embed-vision-v1 is a high performing vision embedding model that shares the same embedding space as nomic-embed-text-v1.| Name | Imagenet 0-shot | Datacomp (Avg. 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 |
nomic Python client is as easy as1from nomic import embed
2import numpy as np
3
4output = embed.image(
5 images=[
6 "image_path_1.jpeg",
7 "image_path_2.png",
8 ],
9 model='nomic-embed-vision-v1',
10)
11
12print(output['usage'])
13embeddings = np.array(output['embeddings'])
14print(embeddings.shape)contrastors repositorynomic-embed-text requires prefixes and so, when using Nomic Embed in multimodal RAG scenarios (e.g. text to image retrieval),
you should use the search_query: prefix.1import torch
2import torch.nn.functional as F
3from transformers import AutoTokenizer, AutoModel, AutoImageProcessor
4from PIL import Image
5import requests
6
7processor = AutoImageProcessor.from_pretrained("nomic-ai/nomic-embed-vision-v1")
8vision_model = AutoModel.from_pretrained("nomic-ai/nomic-embed-vision-v1", trust_remote_code=True)
9
10url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
11image = Image.open(requests.get(url, stream=True).raw)
12
13inputs = processor(image, return_tensors="pt")
14
15img_emb = vision_model(**inputs).last_hidden_state
16img_embeddings = F.normalize(img_emb[:, 0], p=2, dim=1)1
2def mean_pooling(model_output, attention_mask):
3 token_embeddings = model_output[0]
4 input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
5 return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
6
7sentences = ['search_query: What are cute animals to cuddle with?', 'search_query: What do cats look like?']
8
9tokenizer = AutoTokenizer.from_pretrained('nomic-ai/nomic-embed-text-v1')
10text_model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1', trust_remote_code=True)
11text_model.eval()
12
13encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
14
15with torch.no_grad():
16 model_output = text_model(**encoded_input)
17
18text_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
19text_embeddings = F.normalize(text_embeddings, p=2, dim=1)
20
21print(torch.matmul(img_embeddings, text_embeddings.T))