🚀 nomic-embed-vision-v1.5: 潜在空間の拡張
nomic-embed-vision-v1.5
は、高性能なビジョン埋め込みモデルです。このモデルは、nomic-embed-text-v1.5と同じ埋め込み空間を共有しています。現在、すべてのNomic Embed Textモデルはマルチモーダルになっています!
🚀 クイックスタート
ブログ | 技術レポート | AWS SageMaker | Atlas Embedding and Unstructured Data Analytics Platform
モデルの性能比較
名前 |
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 |
✨ 主な機能
ホスト型推論API
Nomic Embedを始める最も簡単な方法は、Nomic Embedding 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.5',
)
print(output['usage'])
embeddings = np.array(output['embeddings'])
print(embeddings.shape)
詳細については、APIリファレンスを参照してください。
データ可視化
下のNomic Atlasマップをクリックすると、VisionとTextの埋め込み空間を比較した100,000サンプルのCC3Mを可視化できます!

🔧 技術詳細
学習方法
我々は、LiTに似た手法を用いて、ビジョン埋め込み器をテキスト埋め込みにアラインさせていますが、テキスト埋め込み器を固定しています。詳細については、Nomic Embed Vision技術レポート(近日公開予定!)と対応するブログ記事を参照してください。学習コードは、contrastors
リポジトリで公開されています。
💻 使用例
基本的な使用法
nomic-embed-text
は接頭辞が必須です。そのため、マルチモーダルRAGシナリオ(例:テキストから画像を検索)でNomic Embedを使用する場合は、search_query:
接頭辞を使用する必要があります。
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))
📄 ライセンス
このプロジェクトは、Apache-2.0ライセンスの下で公開されています。
コミュニティへの参加