模型简介
模型特点
模型能力
使用案例
🚀 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},
}







