🚀 nomic-embed-vision-v1.5:拓展潛在空間
nomic-embed-vision-v1.5
是一款高性能的視覺嵌入模型,它與 nomic-embed-text-v1.5 共享相同的嵌入空間。所有 Nomic Embed 文本模型現在都是多模態的!
🚀 快速開始
博客 | 技術報告 | AWS SageMaker | Atlas 嵌入和非結構化數據分析平臺
模型性能對比
名稱 |
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和
transformers
庫。
📦 安裝指南
文檔中未提及具體安裝步驟,此章節跳過。
💻 使用示例
基礎用法
使用 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.5',
)
print(output['usage'])
embeddings = np.array(output['embeddings'])
print(embeddings.shape)
更多信息請參考 API 參考。
高級用法
使用 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.5")
vision_model = AutoModel.from_pretrained("nomic-ai/nomic-embed-vision-v1.5", 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: What are cute animals to cuddle with?', 'search_query: What do cats look like?']
tokenizer = AutoTokenizer.from_pretrained('nomic-ai/nomic-embed-text-v1.5')
text_model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1.5', 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.layer_norm(text_embeddings, normalized_shape=(text_embeddings.shape[1],))
text_embeddings = F.normalize(text_embeddings, p=2, dim=1)
print(torch.matmul(img_embeddings, text_embeddings.T))
📚 詳細文檔
數據可視化
點擊下面的 Nomic Atlas 地圖,可視化 100,000 個 CC3M 樣本,比較視覺和文本嵌入空間!

使用注意事項
請記住,nomic-embed-text
需要前綴,因此在多模態 RAG 場景(例如文本到圖像檢索)中使用 Nomic Embed 時,應使用 search_query:
前綴。
🔧 技術細節
訓練方法
我們採用了類似於 LiT 的技術,但鎖定了文本嵌入器,將視覺嵌入器與文本嵌入對齊。更多細節請參考即將發佈的 Nomic Embed Vision 技術報告和相應的 博客文章。
訓練代碼
訓練代碼已在 contrastors
倉庫 中發佈。
📄 許可證
本項目採用 Apache-2.0 許可證。
加入 Nomic 社區