🚀 nomic-embed-text-v2-moe: 多言語エキスパート混合テキスト埋め込みモデル
このモデルは、多言語の検索タスクに特化した最先端の多言語エキスパート混合(MoE)テキスト埋め込みモデルです。多言語の検索性能に優れ、100 近い言語をサポートしています。
ブログ | 技術レポート | AWS SageMaker | Atlas 埋め込みと非構造化データ分析プラットフォーム
このモデルは論文 Training Sparse Mixture Of Experts Text Embedding Models で発表されました。
✨ 主な機能
- 高性能:約 3 億パラメータのモデルと比較して、最先端の多言語性能を発揮し、2 倍のサイズのモデルとも競争力があります。
- 多言語対応:約 100 の言語をサポートし、16 億ペア以上のデータで訓練されています。
- 柔軟な埋め込み次元:Matryoshka Embeddings を用いて訓練され、最小限の性能低下で 3 倍のストレージコスト削減を実現します。
- 完全なオープンソース:モデルの重み、コード、および訓練データ(コードリポジトリを参照)が公開されています。
プロパティ |
詳細 |
ベースモデル |
nomic-ai/nomic-embed-text-v2-moe-unsupervised |
ライブラリ名 |
sentence-transformers |
パイプラインタグ |
sentence-similarity |
タグ |
sentence-transformers, sentence-similarity, feature-extraction |
ライセンス |
apache-2.0 |
サポート言語 |
en, es, fr, de, it, pt, pl, nl, tr, ja, vi, ru, id, ar, cs, ro, sv, el, uk, zh, hu, da, 'no', hi, fi, bg, ko, sk, th, he, ca, lt, fa, ms, sl, lv, mr, bn, sq, cy, be, ml, kn, mk, ur, fy, te, eu, sw, so, sd, uz, co, hr, gu, ce, eo, jv, la, zu, mn, si, ga, ky, tg, my, km, mg, pa, sn, ha, ht, su, gd, ny, ps, ku, am, ig, lo, mi, nn, sm, yi, st, tl, xh, yo, af, ta, tn, ug, az, ba, bs, dv, et, gl, gn, gv, hy |
モデル |
パラメータ (M) |
埋め込み次元 |
BEIR |
MIRACL |
事前学習データ |
微調整データ |
コード |
Nomic Embed v2 |
305 |
768 |
52.86 |
65.80 |
✅ |
✅ |
✅ |
mE5 Base |
278 |
768 |
48.88 |
62.30 |
❌ |
❌ |
❌ |
mGTE Base |
305 |
768 |
51.10 |
63.40 |
❌ |
❌ |
❌ |
Arctic Embed v2 Base |
305 |
768 |
55.40 |
59.90 |
❌ |
❌ |
❌ |
|
|
|
|
|
|
|
|
BGE M3 |
568 |
1024 |
48.80 |
69.20 |
❌ |
✅ |
❌ |
Arctic Embed v2 Large |
568 |
1024 |
55.65 |
66.00 |
❌ |
❌ |
❌ |
mE5 Large |
560 |
1024 |
51.40 |
66.50 |
❌ |
❌ |
❌ |
🔧 技術詳細
- 総パラメータ数:475M
- 推論時のアクティブパラメータ数:305M
- アーキテクチャタイプ:エキスパート混合(MoE)
- MoE 設定:8 つのエキスパートとトップ 2 ルーティング
- 埋め込み次元:Matryoshka 表現学習により、768 から 256 までの柔軟な次元をサポート
- 最大シーケンス長:512 トークン
- サポート言語:数十の言語をサポート(性能セクションを参照)
論文の概要
Transformer ベースのテキスト埋め込みモデルは、MIRACL や BEIR などのベンチマークでパラメータ数を増やすことで性能を向上させてきました。しかし、このスケーリングアプローチは、推論の遅延やメモリ使用量の増加など、大きなデプロイメントの課題を引き起こします。これらの課題は、検索拡張生成(RAG)アプリケーションで特に深刻で、大規模モデルのメモリ要件の増加がデータセットの取り込み容量を制限し、遅延の増加がクエリ時のパフォーマンスに直接影響します。因果言語モデルは、エキスパート混合(MoE)アーキテクチャを使用して同様の効率性の課題に対処していますが、このアプローチは一般的なテキスト埋め込み設定には成功裏に適用されていません。この論文では、最初の汎用 MoE テキスト埋め込みモデルである Nomic Embed v2 を紹介します。私たちのモデルは、単言語および多言語のベンチマークで同じパラメータクラスのモデルを上回り、2 倍のサイズのモデルとも競争力のある性能を維持します。私たちは、すべてのコード、モデル、および評価データをオープンソース化し、https://github.com/nomic-ai/contrastors で訓練パイプラインの完全な再現性を保証します。
📦 インストール
このモデルは、SentenceTransformers と Transformers を通じて使用できます。GPU での最適なパフォーマンスを得るには、以下をインストールしてください。
pip install torch transformers einops git+https://github.com/nomic-ai/megablocks.git
⚠️ 重要提示
テキストプロンプトには、モデルに実行するタスクを指示する タスク指示プレフィックス を必ず含めてください。クエリや質問の前には search_query:
を、ドキュメントの前には search_document:
を使用してください。
💻 使用例
基本的な使用法
Transformersを使用する場合
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("nomic-ai/nomic-embed-text-v2-moe")
model = AutoModel.from_pretrained("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True)
sentences = ['search_document: Hello!', 'search_document: ¡Hola!']
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)
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
model.eval()
with torch.no_grad():
model_output = model(**encoded_input)
embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
print(embeddings.shape)
similarity = F.cosine_similarity(embeddings[0], embeddings[1], dim=0)
print(similarity)
トランケーションの場合は、正規化を適用する前にトランケートできます。
+ embeddings = embeddings[:, :matryoshka_dim]
embeddings = F.normalize(embeddings, p=2, dim=1)
SentenceTransformersを使用する場合
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True)
sentences = ["Hello!", "¡Hola!"]
embeddings = model.encode(sentences, prompt_name="passage")
print(embeddings.shape)
similarity = model.similarity(embeddings[0], embeddings[1])
print(similarity)
トランケーション/Matryoshka 埋め込みの場合は、truncate_dim
を指定して同様にモデルを使用できます。
model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True, truncate_dim=256)
...
性能
nomic-embed-text-v2-moe の BEIR と MIRACL での性能を、他のオープンウェイトの埋め込みモデルと比較した結果は以下の通りです。

nomic-embed-text-v2-moe の 768 次元と 256 次元にトランケートした場合の BEIR での性能は以下の通りです。

💡 使用上のベストプラクティス
- テキストに適切なプレフィックスを追加してください。
- クエリの場合は "search_query: "
- ドキュメントの場合は "search_document: "
- 最大入力長は 512 トークンです。
- ストレージや計算リソースが問題となる場合は、256 次元の埋め込みを使用することを検討してください。
制限事項
- パフォーマンスは言語によって異なる場合があります。
- MoE アーキテクチャのため、従来の密モデルよりもリソース要件が高い場合があります。
- カスタムアーキテクチャの実装を使用するには、モデルをロードする際に
trust_remote_code=True
を使用する必要があります。
訓練の詳細

- 複数の言語にまたがる 16 億の高品質ペアで訓練されています。
- 一貫性フィルタリングを使用して、高品質の訓練データを確保しています。
- Matryoshka 表現学習を組み込んで、次元の柔軟性を実現しています。
- 訓練には、弱教師付きの対照的事前学習と教師付きの微調整の両方が含まれています。
詳細については、ブログ記事 と 技術レポート をご覧ください。
Nomic コミュニティに参加する
📄 ライセンス
このモデルは、Apache 2.0 ライセンスの下で公開されています。
引用
もしこのモデル、データセット、または訓練コードが役に立った場合は、以下のように引用してください。
@misc{nussbaum2025trainingsparsemixtureexperts,
title={Training Sparse Mixture Of Experts Text Embedding Models},
author={Zach Nussbaum and Brandon Duderstadt},
year={2025},
eprint={2502.07972},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2502.07972},
}