模型概述
模型特點
模型能力
使用案例
🚀 nomic-embed-text-v2-moe:多語言專家混合文本嵌入模型
nomic-embed-text-v2-moe
是一款最先進的多語言專家混合(MoE)文本嵌入模型,在多語言檢索方面表現出色。它支持約 100 種語言,訓練數據超過 16 億對,具有高性能、靈活嵌入維度等特點,且完全開源。
🚀 快速開始
本模型可通過 SentenceTransformers 和 Transformers 使用。若要在 GPU 上獲得最佳性能,請安裝以下依賴:
pip install torch transformers einops git+https://github.com/nomic-ai/megablocks.git
⚠️ 重要提示 文本提示 必須 包含 任務指令前綴,以告知模型正在執行的任務。請在查詢/問題前使用
search_query:
,在文檔前使用search_document:
。
✨ 主要特性
- 高性能:與約 3 億參數的模型相比,在多語言性能上達到了最先進水平,與兩倍大小的模型競爭也不落下風。
- 多語言支持:支持約 100 種語言,在超過 16 億對數據上進行訓練。
- 靈活的嵌入維度:採用 Matryoshka Embeddings 進行訓練,在存儲成本降低 3 倍的情況下,性能僅有微小下降。
- 完全開源:模型權重、代碼 和訓練數據(詳見代碼倉庫)均已開源。
📦 安裝指南
若要在 GPU 上獲得最佳性能,請安裝以下依賴:
pip install torch transformers einops git+https://github.com/nomic-ai/megablocks.git
💻 使用示例
基礎用法
Transformers
如果使用 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)
# torch.Size([2, 768])
similarity = F.cosine_similarity(embeddings[0], embeddings[1], dim=0)
print(similarity)
# tensor(0.9118)
對於截斷操作,可以在歸一化之前進行截斷:
+ embeddings = embeddings[:, :matryoshka_dim]
embeddings = F.normalize(embeddings, p=2, dim=1)
SentenceTransformers
使用 SentenceTransformers 時,可以將 prompt_name
指定為 "query"
或 "passage"
,任務指令將自動包含在內。
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)
# (2, 768)
similarity = model.similarity(embeddings[0], embeddings[1])
print(similarity)
# tensor([[0.9118]])
對於截斷/Matryoshka 嵌入,可以指定 truncate_dim
並以類似方式使用模型:
model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True, truncate_dim=256)
...
高級用法
暫無高級用法示例。
📚 詳細文檔
模型概述
屬性 | 詳情 |
---|---|
模型類型 | 最先進的多語言專家混合(MoE)文本嵌入模型 |
訓練數據 | 超過 16 億對多語言高質量數據 |
支持語言 | 約 100 種語言,包括英語、西班牙語、法語等 |
模型架構
- 總參數:4.75 億
- 推理時的活躍參數:3.05 億
- 架構類型:專家混合(MoE)
- MoE 配置:8 個專家,採用 top-2 路由
- 嵌入維度:通過 Matryoshka 表示學習,支持 768 到 256 的靈活維度
- 最大序列長度:512 個標記
- 支持語言:支持數十種語言(詳見性能部分)
論文摘要
基於 Transformer 的文本嵌入模型通過增加參數數量,在 MIRACL 和 BEIR 等基準測試中提高了性能。然而,這種擴展方法帶來了顯著的部署挑戰,包括增加推理延遲和內存使用。這些挑戰在檢索增強生成(RAG)應用中尤為嚴重,大型模型增加的內存需求限制了數據集攝入能力,其較高的延遲直接影響查詢時的性能。雖然因果語言模型使用專家混合(MoE)架構解決了類似的效率挑戰,但這種方法尚未成功應用於通用文本嵌入場景。在本文中,我們介紹了 Nomic Embed v2,這是第一個通用的 MoE 文本嵌入模型。我們的模型在單語言和多語言基準測試中均優於相同參數類別的模型,同時與兩倍大小的模型保持競爭力。我們在 https://github.com/nomic-ai/contrastors 上開源了所有代碼、模型和評估數據,以確保我們的訓練管道完全可復現。
性能
- 與其他開放權重嵌入模型對比:
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 表示學習實現維度靈活性。
- 訓練方式:包括弱監督對比預訓練和有監督微調。
🔧 技術細節
本模型採用專家混合(MoE)架構,通過 top-2 路由機制選擇 8 個專家。在推理時,活躍參數為 3.05 億,總參數為 4.75 億。通過 Matryoshka 表示學習,模型支持 768 到 256 的靈活嵌入維度,最大序列長度為 512 個標記。訓練數據超過 16 億對多語言高質量數據,使用一致性過濾確保數據質量,並結合弱監督對比預訓練和有監督微調。
📄 許可證
本項目採用 Apache-2.0 許可證。
加入 Nomic 社區
- Nomic 官網:https://nomic.ai
- Discord 社區:https://discord.gg/myY5YDR8z8
- Twitter:https://twitter.com/nomic_ai
引用
如果您發現本模型、數據集或訓練代碼有用,請引用以下論文:
@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},
}







