Hugging Face:Blog(RSS)
精选
60AI 编辑部评分,满分 100

IBM 发布 Granite Embedding Multilingual R2 开源多语言嵌入模型

2026-05-15 02:55· 92天前
AI 导读

IBM 发布两个 Apache 2.0 开源多语言嵌入模型:97M 参数的紧凑型(granite-embedding-97m-multilingual-r2)在 MTEB Multilingual Retrieval 上得 60.3 分,超越所有开放子 1 亿参数模型;311M 全尺寸模型(granite-embedding-311m-multilingual-r2)得 65.2 分,在 500M 以下开放模型中排第二,并支持 Matryoshka 维度。两者均基于 ModernBERT 架构,支持 200+ 种语言,针对 52 种语言和 9 种编程代码检索训练,上下文窗口达 32,768 tokens。可直接替换 sentence-transformers、LangChain、LlamaIndex 等框架中的默认模型,预置 ONNX 和 OpenVINO 权重以优化 CPU 推理。

推荐理由

97M小模型在跨语言检索上打败很多300M级选手,32K上下文让长文档处理不再鸡肋,Apache 2.0开源意味着做多语言RAG的可以直接拿来当默认嵌入模型了。

正文 · AI 翻译

**摘要:** 基于 ModernBERT 构建的两款全新 Apache 2.0 多语言嵌入向量模型——一款 97M 参数的紧凑型模型,在 MTEB 多语言检索(60.3)上击败了所有开源 1 亿参数以下的多语言嵌入器;另一款 311M 参数的全尺寸模型,在 MTEB 多语言检索(65.2)上获得开源 5 亿参数以下模型第二名,并支持 Matryoshka 维度。两款模型均覆盖 200 多种语言,针对 52 种语言进行了调优,支持 32K token 上下文窗口(是 R1 的 64 倍),并新增了跨 9 种编程语言的代码检索能力。

多语言嵌入向量模型始终面临一个矛盾:广泛的语言覆盖通常以模型规模为代价,而小型模型又往往牺牲语言数量。如果你从事跨语言工作——例如多语言语料库的检索增强生成、跨语言搜索、国际团队中的代码检索——你可能不得不在“足够快”和“足够好”的模型之间做出选择。

Granite Embedding Multilingual R2 版本的发布显著缩小了这一差距。我们发布了两款新的多语言嵌入向量模型:

  • granite-embedding-311m-multilingual-r2 —— 一款 311M 参数的全尺寸模型,具有 768 维嵌入向量、Matryoshka 维度支持以及一流的多语言检索质量。
  • granite-embedding-97m-multilingual-r2 —— 一款 97M 参数的紧凑型模型,具有 384 维嵌入向量,在其规模下提供了强大的检索质量。

两款模型均支持 200 多种语言,并针对 52 种语言和编程代码增强了检索质量,上下文长度可达 32,768 个 token(相比其 R1 前代产品提升了 64 倍),并以 Apache 2.0 许可证发布。它们可直接与 sentence-transformers 和 transformers 配合使用,无需特定任务指令,并且只需更改一行模型名称即可作为即插即用替代品兼容 LangChain、LlamaIndex、Haystack 和 Milvus。对于当前仅使用英文默认设置的框架,这一行代码即可让社区中的每个用户获得对 200 多种语言的支持——无需更改 API、无需新增依赖项、也无需用户端修改任何代码。两款模型均附带用于 CPU 优化推理的 ONNX 和 OpenVINO 权重。

52 种增强支持语言(点击展开)底层编码器在 200 多种语言的文本上进行了预训练,可为其中任意一种语言生成通用嵌入向量。以下 52 种语言接受了显式的检索配对和跨语言训练,以实现更高质量的检索:

阿尔巴尼亚语 (sq)、阿拉伯语 (ar)、阿塞拜疆语 (az)、孟加拉语 (bn)、保加利亚语 (bg)、加泰罗尼亚语 (ca)、中文 (zh)、克罗地亚语 (hr)、捷克语 (cs)、丹麦语 (da)、荷兰语 (nl)、英语 (en)、爱沙尼亚语 (et)、芬兰语 (fi)、法语 (fr)、格鲁吉亚语 (ka)、德语 (de)、希腊语 (el)、希伯来语 (he)、印地语 (hi)、匈牙利语 (hu)、冰岛语 (is)、印度尼西亚语 (id)、意大利语 (it)、日语 (ja)、哈萨克语 (kk)、高棉语 (km)、韩语 (ko)、拉脱维亚语 (lv)、立陶宛语 (lt)、马来语 (ms)、马拉地语 (mr)、挪威语 (no)、波斯语 (fa)、波兰语 (pl)、葡萄牙语 (pt)、罗马尼亚语 (ro)、俄语 (ru)、塞尔维亚语 (sr)、斯洛伐克语 (sk)、斯洛文尼亚语 (sl)、西班牙语 (es)、斯瓦希里语 (sw)、瑞典语 (sv)、他加禄语 (tl)、泰卢固语 (te)、泰语 (th)、土耳其语 (tr)、乌克兰语 (uk)、乌尔都语 (ur)、乌兹别克语 (uz)、越南语 (vi)。

此外,这些模型还在编程代码(Python、Go、Java、JavaScript、PHP、Ruby、SQL、C、C++)上进行了训练,并支持跨语言代码检索。

企业级设计,开箱即用

这两个嵌入模型均在 IBM 精选数据集、公开可用数据以及内部生成或合成数据的混合数据集上训练。训练中使用的公开网络衍生数据,均经过 IBM 开发的质量、去重和治理流程进行筛选和过滤,旨在降低下游商业使用中的风险。我们有意避免使用 MS-MARCO 训练数据集以及具有明确非商业许可限制的数据集。模型使用 GneissWeb 进行预训练,该数据集是 IBM 从公开网络内容中精选,并经过 IBM 数据准备和治理工具处理的数据集,同时结合了其他 IBM 精选及公开可用来源。所有数据集均经过 IBM 治理审查,以评估许可考量、所有权信号和个人数据风险。这些流程旨在促进负责任的使用和企业级部署。

一款强大的低于 1 亿参数的多语言模型

本次发布的亮点是 granite-embedding-97m-multilingual-r2 模型。该模型拥有 9700 万参数,在覆盖 18 种语言的多语言 MTEB 检索基准上取得了 60.3 分——这是我们在 1 亿参数以下的开源多语言嵌入模型中所见的最高检索得分。在同尺寸级别的模型中,表现次优的 multilingual-e5-small 在同一基准上的得分为 50.9——在一个成熟的基准上拉开了 9.4 个百分点的差距。

该模型体积约为 3.11 亿参数完整版模型的三分之一,但在多语言、代码和长文档基准上保留了其大部分检索质量——相比其直接前代模型,在 MTEB 多语言检索上提升了 12.2 个百分点,这得益于新的架构、更好的训练数据以及一种新颖的剪枝方法(下文将详述)。完整版 granite-embedding-311m-multilingual-r2 在同一基准上得分为 65.2,相比其 R1 前代模型提升了 13.0 个百分点。

从 R1 到 R2 的变化

Granite Embedding Multilingual R1 模型基于 XLM-RoBERTa 编码器构建,上下文窗口为 512 个 token。R2 代则是从零开始的彻底重建:

ModernBERT 是一种最新的编码器架构,它借鉴了过去五年 Transformer 研究中的技术,重新审视了原始的 BERT 设计。这一转变带来了若干实际优势:交替注意力长度减少了长序列上的计算量(显著提升了长序列的吞吐量),旋转位置编码使得 32K 上下文窗口成为可能,而无需使用困扰旧架构的位置插值技巧,并且 Flash Attention 2.0 的支持加速了在现代 GPU 上的编码过程。

新的多语言分词器值得特别强调。我们没有复用 XLM-RoBERTa 的 25 万 token 词表,而是采用了现有的、具有强大多语言和代码覆盖能力的分词器。3.11 亿参数模型使用了 Gemma 3 分词器(26.2 万 token);9700 万参数模型则从 GPT-OSS 分词器出发,将其剪枝至一个紧凑的 18 万 token 词表,在保持广泛多语言覆盖的同时,减少了嵌入表的参数占用。分词器的效率远比人们意识到的更重要——一个 32K token 的窗口听起来很厉害,但如果你的分词器用其中一半来编码一段泰语文本,那就不一样了。

训练完整规模的 311M 模型

311M 模型是一个 22 层的 ModernBERT 编码器,配备 262K 模型 token 的多语言词表,通过多阶段流水线进行训练:

  1. 知识蒸馏:该模型同时从多个教师模型学习。教师模型是 Granite 3.3 Instruct 和 Mistral v0.2 Instruct 解码器模型,经过进一步微调用于文本嵌入向量,将检索特定知识迁移到 311M 编码器架构中。
  2. 对比微调:在多语言检索对(涵盖 52 种语言和代码的查询与相关及难负例段落匹配)上进行标准对比训练,提升了模型区分相关与不相关结果的能力。
  3. 模型合并:训练完成后,我们合并来自不同训练阶段和配置的检查点。这将针对不同目标(例如多语言广度 vs. 英语深度)优化的模型优势,整合到一组权重中,无需额外训练算力。
  4. 套娃表示学习:该模型使用套娃目标进行训练,使其 768 维嵌入向量可以截断为 512、384、256 或 128 维,且质量损失极小(参见下方套娃嵌入向量)。

最终得到的模型在 MTEB 多语言检索上得分为 65.2,整体平均得分为 56.3——相比其 R1 前代模型,平均分提升了 +14.5 分。

构建紧凑型 97M 多语言模型

97M 模型通过词表选择与知识蒸馏相结合的方式进行训练:

  1. 词表选择:262K 模型 token 的词表被缩减为经过专门训练的 180K 模型 token 词表,在保持广泛多语言覆盖的同时,大幅缩小了嵌入向量表的大小。
  2. 知识蒸馏:随后,使用来自多个教师模型(包括基于 Granite 4.1 8B 和 Mistral Instruct 解码器的教师模型)的知识蒸馏以及对比训练,对剪枝后的模型进行微调,以提升检索质量。

这种方法从多个强教师模型中迁移检索特定知识,同时在不牺牲语言覆盖范围的前提下减少模型参数量。最终得到一个高效紧凑的模型——在 MTEB 多语言检索基准上得分为 60.3,而全尺寸模型为 65.2,但模型体积大约缩小了 3 倍。

基准测试结果

多语言检索

按模型大小排序的主要基准套件性能表现。分数为每个基准内各任务的平均值(分数越高越好):

模型 参数量 激活参数量 嵌入维度 MTEB 多语言检索(18 项任务) 代码检索(12 项任务) 英文检索(10 项任务) LongEmbed(6 项任务) RaR-b(17 项任务)
F2LLM-v2-80M 80M 32M 320 50.1 68.0 47.5 31.7 17.9
multilingual-e5-small 118M 22M 384 50.9 53.5 46.5 38.8 20.3
granite-embedding-107m-multilingual (R1) 107M 11M 384 48.1 40.7 47.9 34.3 17.1
paraphrase-multilingual-MiniLM-L12-v2 118M 22M 384 36.6 23.5 35.9 20.9 10.9
jina-embeddings-v5-text-nano 212M 113M 768 63.3 71.2 58.8 63.6 25.2
harrier-oss-v1-270m 268M 100M 640 66.4 62.4 52.1 64.9 32.9
multilingual-e5-base 278M 86M 768 52.7 52.6 49.0 40.5 23.4
granite-embedding-278m-multilingual (R1) 278M 86M 768 52.2 48.5 51.5 37.7 18.9
embeddinggemma-300m 308M 106M 768 62.5 68.7 54.6 55.4 26.1
gte-multilingual-base 305M 113M 768 57.2 57.5 50.8 62.1 19.0
snowflake-arctic-embed-m-v2.0 305M 113M 768 54.8 55.2 58.4 55.4 23.3
multilingual-e5-large 560M 304M 1024 53.7 55.8 51.5 40.4 25.4
text-embedding-3-small (OpenAI,仅 API) 1536 50.7 53.8 53.6 23.2
granite-embedding-97m-multilingual-r2 97M 28M 384 60.3 60.4 50.1 65.6 24.9
granite-embedding-311m-multilingual-r2 311M 110M 768 65.2(第 2 名) 63.8(第 3 名) 52.6(第 5 名) 71.7(第 1 名) 28.0(第 2 名)

有几个值得注意的亮点:

  • 97M 参数的 R2 模型在平均得分以及大多数单项基准上,都超越了 multilingual-e5-base 和 gte-multilingual-base(约 300M 参数模型),尽管其体积大约小了 3 倍。
  • paraphrase-multilingual-MiniLM-L12-v2 —— 一个广泛使用的框架默认模型 —— 得分为 36.6,比 97M 的 R2 模型整整低了 23.7 分,而后者体积略小(97M 对比 110M 参数),且输出维度同为 384 维。
  • LongEmbed 是 R1 到 R2 提升最大的评测项:97M 模型提升了 31.3 分,311M 模型提升了 34.0 分。这是 32K 上下文窗口带来的直接回报——R1 的 512 token 限制意味着你的法律合同只能被看到第一页。许多实际的多语言工作负载涉及长文档(法律合同、技术手册、研究论文、多页报告),而 R1 根本无法完整阅读这些内容。
  • 代码检索能力大幅提升:相比 R1,97M 模型提升 19.7 分,311M 模型提升 15.3 分,这反映了新的代码训练集、更大的上下文窗口以及更好的训练方法。
  • 在更广泛的竞争格局中,harrier-oss-v1-270m 在 MTEB 多语言检索(66.4 分)和 RaR-b(32.9 分)上领先,而 jina-embeddings-v5-text-nano 在代码检索(71.2 分)和英文检索(58.8 分)上领先。311M 的 Granite 模型在平均分(56.3 分)上具有竞争力,并在 LongEmbed(71.7 分)上领先,同时其编码吞吐量显著高于 jina-embeddings-v5-text-nano(详见下方速度表)。

速度与吞吐量

编码速度对生产工作负载至关重要,尤其是在索引数百万份文档或需要低延迟查询编码时。我们使用 512 token 的块大小,在单张 NVIDIA H100 GPU 上测量了延迟和吞吐量:

97M 模型每秒可编码超过 2500 份文档——吞吐量与 multilingual-e5-small 相当——同时提供了显著更高的检索质量。311M 模型每秒约处理 1800 份文档,在检索质量上优于 jina-embeddings-v5-text-nano(65.2 分对比 63.3 分),且编码速度是其 5.5 倍以上(注意:速度数据是使用最新的 Transformer 代码计算得出的,该代码相比上一个 4.57 版本存在速度回退——对 Jina 和 Granite 模型均是如此——详情请参阅我们的技术报告)。harrier-oss-v1-270m 在此列出的竞品中提供了速度与检索分数的最佳组合。

套娃嵌入向量(311M)

311M 模型支持套娃表示学习,这允许你将嵌入向量从完整的 768 维截断至 512、384、256 或 128 维,同时质量仅优雅地下降。当存储、内存或相似度计算成本成为考量时,这非常有用——256 维嵌入向量的存储需求仅为 768 维的三分之一,且余弦相似度的计算成本也按比例降低。

以下是检索质量在不同嵌入维度下的表现:

降维带来的质量损失非常小。从 768 维降至 256 维——存储和相似度计算成本降低 3 倍——MTEB 多语言检索仅下降 0.5 个点(65.2 → 64.7),代码检索下降 0.5 个点(63.9 → 63.4)。即使在 128 维(降低 6 倍)的情况下,该模型在 MTEB 多语言检索上仍获得 63.7 分,在代码检索上获得 62.3 分——保留了其全维度性能的 97% 以上。在实践中,这意味着你可以大幅缩减索引大小和搜索延迟,同时对结果质量的影响微乎其微。(注意,上图中的结果是在上下文长度为 1024(针对英语和多语言检索)和 8192(针对代码检索)的条件下评估的。)

作为对比,311M 模型截断至 384 维(与 97M 模型原生输出的维度相同)后,在所有三个基准测试中仍优于 97M 模型。如果你需要 384 维的嵌入向量,并且能够承担 311M 模型的编码成本,那么套娃截断是更强的选择。

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("ibm-granite/granite-embedding-311m-multilingual-r2")

# Full 768-dimensional embeddings
full = model.encode(["example text"])
print(full.shape)  # (1, 768)

# Truncated to 384 dimensions
small = model.encode(["example text"], truncate_dim=384)
print(small.shape)  # (1, 384)

97M 模型不支持套娃表示——384 维已经足够紧凑。

跨语言检索

MTEB 检索中跨语言任务的平均性能。Belebele 衡量跨 122 种语言的跨语言段落匹配;MLQA 衡量跨 7 种语言的抽取式跨语言问答检索。

模型 Belebele 检索 MLQA 检索
granite-embedding-107m-multilingual (R1) 55.1 60.5
granite-embedding-278m-multilingual (R1) 62.2 63.0
granite-embedding-97m-multilingual-r2 52.9 60.5
granite-embedding-311m-multilingual-r2 66.5 67.1

311M 参数的 R2 模型在 Belebele 上比其 R1 前代提升了 +4.3,在 MLQA 上提升了 +4.1,表明在更大规模下,两个基准测试的跨语言迁移能力均有所增强。

97M 参数的 R2 模型在 Belebele 上得分较低(52.9 比 55.1,−2.2),但在 MLQA 上与 R1 前代持平(60.5)。Belebele 上的差距是剪枝和词汇缩减过程中固有的权衡——R2 模型的训练优先考虑了更广泛的 18 语言 MTEB 多语言检索集(在该集上比 R1 提升了 +12.2)和长文档检索(提升了 +31.3),而较小的词汇量(18 万 vs. 25 万 token)和减少的层数(12 层 vs. 22 层)影响了狭窄的跨语言迁移任务。如果跨多种语言对的跨语言迁移是你的主要用例,那么完整尺寸的 311M 模型是更好的选择。

部署选项

两个模型都提供了多种生产环境部署路径。使用以下命令安装核心库:

pip install sentence-transformers

Sentence Transformers(推荐给大多数用户):

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2")

queries = [
    "What is the tallest mountain in Japan?",          # English
    "Wer hat das Lied Achy Breaky Heart geschrieben?", # German
    "ドイツの首都はどこですか?",                            # Japanese
]

passages = [
    "富士山は、静岡県と山梨県にまたがる活火山で、標高3776.12 mで日本最高峰の独立峰である。",  # Japanese
    "Achy Breaky Heart is a country song written by Don Von Tress.",                        # English
    "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland.",                # German
]

q_emb = model.encode(queries)
p_emb = model.encode(passages)
print(util.cos_sim(q_emb, p_emb))
# Each query scores highest against its matching passage — across languages

LangChain(pip install langchain-huggingface):

from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(
    model_name="ibm-granite/granite-embedding-97m-multilingual-r2"
)

docs = embeddings.embed_documents([
    "富士山は日本最高峰の独立峰です。",
    "Mount Fuji is Japan's highest peak.",
])
query = embeddings.embed_query("What is Japan's tallest mountain?")
# Drop-in replacement anywhere LangChain accepts an Embeddings object

LlamaIndex(pip install llama-index-embeddings-huggingface):

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings

embed_model = HuggingFaceEmbedding(
    model_name="ibm-granite/granite-embedding-97m-multilingual-r2"
)
Settings.embed_model = embed_model  # applies globally to any index or pipeline

Haystack(pip install sentence-transformers haystack-ai)

from haystack.components.embedders import (
    SentenceTransformersDocumentEmbedder,
    SentenceTransformersTextEmbedder,
)
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.dataclasses import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore

doc_embedder = SentenceTransformersDocumentEmbedder(
    model="ibm-granite/granite-embedding-97m-multilingual-r2"
)
query_embedder = SentenceTransformersTextEmbedder(
    model="ibm-granite/granite-embedding-97m-multilingual-r2"
)
doc_embedder.warm_up()
query_embedder.warm_up()

# Embed and index documents
document_store = InMemoryDocumentStore()
result_docs = doc_embedder.run(documents=[
    Document(content="富士山は日本最高峰の独立峰です。"),
    Document(content="Mount Fuji is Japan's highest peak."),
    Document(content="Achy Breaky Heart is a country song written by Don Von Tress."),
    Document(content="Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland."),
])
document_store.write_documents(result_docs["documents"])

# Embed query and retrieve
result_query = query_embedder.run(text="What is Japan's tallest mountain?")
retriever = InMemoryEmbeddingRetriever(document_store=document_store)
results = retriever.run(query_embedding=result_query["embedding"], top_k=2)
for doc in results["documents"]:
    print(f"{doc.score:.3f}  {doc.content}")
# 0.961  Mount Fuji is Japan's highest peak.
# 0.913  富士山は日本最高峰の独立峰です。

Milvus(pip install pymilvus sentence-transformers)

from pymilvus import MilvusClient
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2")

# Use "./milvus.db" for local persistence or a server URI for production
client = MilvusClient(":memory:")
client.create_collection(collection_name="multilingual_docs", dimension=384)

docs = [
    "富士山は日本最高峰の独立峰です。",
    "Mount Fuji is Japan's highest peak.",
    "Achy Breaky Heart is a country song written by Don Von Tress.",
    "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland.",
]
embeddings = model.encode(docs).tolist()
client.insert(
    collection_name="multilingual_docs",
    data=[{"id": i, "vector": emb, "text": doc} for i, (emb, doc) in enumerate(zip(embeddings, docs))],
)

query_emb = model.encode(["What is Japan's tallest mountain?"]).tolist()
results = client.search(
    collection_name="multilingual_docs",
    data=query_emb,
    limit=2,
    output_fields=["text"],
)
for hit in results[0]:
    print(f"{hit['distance']:.3f}  {hit['entity']['text']}")
# 0.961  Mount Fuji is Japan's highest peak.
# 0.913  富士山は日本最高峰の独立峰です。

两个模型还附带预转换的 ONNX 和 OpenVINO 权重,用于优化的 CPU/加速器推理;可通过 vLLM(vllm serve ... --task embed)作为嵌入向量端点使用;并可使用 llama.cpp 转换为 GGUF 格式用于 Ollama。完整的部署示例请参见模型卡片。

面向框架集成者

如果你维护一个嵌入向量框架、向量数据库或 RAG 流水线库,并正在评估将这些模型作为默认选项,以下是需要了解的信息:

  • 许可证:Apache 2.0,训练时未使用 MS-MARCO
  • 即插即用行为:无需特定任务的指令前缀——在 API 层面表现与 all-MiniLM-L6-v2 一致。现有调用 .encode() 的代码无需修改即可运行。
  • 维度:384 维输出(97M 模型)和 768 维输出(311M 模型),与最常见的现有默认维度匹配。无需迁移索引。
  • 模型大小:9700 万参数模型的权重文件为 195 MB(safetensors 格式)—— 不到最常用的多语言默认模型 paraphrase-multilingual-MiniLM-L12-v2(471 MB)的一半大小。量化后的 ONNX 权重仅为 98 MB,与 all-MiniLM-L6-v2(91 MB)相当,同时覆盖 200 多种语言。
  • 对 CPU 友好:附带 ONNX 和 OpenVINO 权重,用于优化的 CPU 推理。入门教程无需依赖 GPU。
  • 默认支持多语言:如果您当前的默认模型仅支持英语,只需一行代码即可替换,让您社区中的每位用户都能获得 200 多种语言的支持 —— 无需改动他们的代码。
  • 稳定标识符:Hugging Face 上的 ibm-granite/granite-embedding-97m-multilingual-r2,由 IBM 在 Granite 模型系列下维护。

如需讨论将这些模型作为您项目的默认配置,请在 ibm-granite/granite-embedding-models 提交 issue。

应该使用哪个模型?

这两个多语言模型属于更广泛的 Granite Embedding R2 系列,该系列还包括两个高性能的英语专用模型:granite-embedding-english-r2(1.49 亿参数)和 granite-embedding-small-english-r2(4700 万参数)。如果您的数据主要是英语,英语模型在更小的规模下,能在英语基准测试中提供更高的检索质量,因为它们无需为 200 多种语言分配容量。

如果您需要…… 请使用
最佳多语言检索质量 granite-embedding-311m-multilingual-r2
灵活的嵌入向量维度(存储/速度权衡) granite-embedding-311m-multilingual-r2(Matryoshka)
最大吞吐量 / 边缘部署 / 低延迟 granite-embedding-97m-multilingual-r2
跨多种语言对的最佳跨语言迁移能力 granite-embedding-311m-multilingual-r2
数据以英语为主 granite-embedding-english-r2 或 granite-embedding-small-english-r2

试用模型

两个模型现已在 Hugging Face 的 IBM Granite Embedding 模型集合中提供:

  • granite-embedding-311m-multilingual-r2
  • granite-embedding-97m-multilingual-r2

您可以通过 Hugging Face Spaces 上的 Granite Embedding 演示页面(基于 CPU)交互式地试用小型模型,或者在 Google Colab 中运行完整的示例笔记本。

您可以在此处访问我们详细的技术报告,其中涵盖了完整的训练方法、按语言评估以及剪枝消融实验:Granite Multilingual Embedding R2 报告。如有疑问、反馈或问题,请访问 GitHub 上的 ibm-granite/granite-embedding-models。

框架维护者:如果您希望将这些模型作为您项目中的默认模型,请在 ibm-granite/granite-embedding-models 提交一个 issue——我们很乐意协助集成、测试,并解答任何关于许可或部署的问题。

快来试试吧,如果这些嵌入向量能给您带来愉悦,请在 Hugging Face 上猛戳 ❤️ 按钮。我们的模型也是有感情的,每一个点赞都能让它们温暖地度过夜晚。

检索增强开源生态搜索模型发布

来源:Hugging Face:Blog(RSS) · huggingface.co

IBM 发布 Granite Embedding Multilingual R2 开源多语言嵌入模型

Hugging Face:Blog(RSS)·2026-05-15 02:55·92天前
AI 导读

IBM 发布两个 Apache 2.0 开源多语言嵌入模型:97M 参数的紧凑型(granite-embedding-97m-multilingual-r2)在 MTEB Multilingual Retrieval 上得 60.3 分,超越所有开放子 1 亿参数模型;311M 全尺寸模型(granite-embedding-311m-multilingual-r2)得 65.2 分,在 500M 以下开放模型中排第二,并支持 Matryoshka 维度。两者均基于 ModernBERT 架构,支持 200+ 种语言,针对 52 种语言和 9 种编程代码检索训练,上下文窗口达 32,768 tokens。可直接替换 sentence-transformers、LangChain、LlamaIndex 等框架中的默认模型,预置 ONNX 和 OpenVINO 权重以优化 CPU 推理。

正文 · AI 翻译

**摘要:** 基于 ModernBERT 构建的两款全新 Apache 2.0 多语言嵌入向量模型——一款 97M 参数的紧凑型模型,在 MTEB 多语言检索(60.3)上击败了所有开源 1 亿参数以下的多语言嵌入器;另一款 311M 参数的全尺寸模型,在 MTEB 多语言检索(65.2)上获得开源 5 亿参数以下模型第二名,并支持 Matryoshka 维度。两款模型均覆盖 200 多种语言,针对 52 种语言进行了调优,支持 32K token 上下文窗口(是 R1 的 64 倍),并新增了跨 9 种编程语言的代码检索能力。

多语言嵌入向量模型始终面临一个矛盾:广泛的语言覆盖通常以模型规模为代价,而小型模型又往往牺牲语言数量。如果你从事跨语言工作——例如多语言语料库的检索增强生成、跨语言搜索、国际团队中的代码检索——你可能不得不在“足够快”和“足够好”的模型之间做出选择。

Granite Embedding Multilingual R2 版本的发布显著缩小了这一差距。我们发布了两款新的多语言嵌入向量模型:

  • granite-embedding-311m-multilingual-r2 —— 一款 311M 参数的全尺寸模型,具有 768 维嵌入向量、Matryoshka 维度支持以及一流的多语言检索质量。
  • granite-embedding-97m-multilingual-r2 —— 一款 97M 参数的紧凑型模型,具有 384 维嵌入向量,在其规模下提供了强大的检索质量。

两款模型均支持 200 多种语言,并针对 52 种语言和编程代码增强了检索质量,上下文长度可达 32,768 个 token(相比其 R1 前代产品提升了 64 倍),并以 Apache 2.0 许可证发布。它们可直接与 sentence-transformers 和 transformers 配合使用,无需特定任务指令,并且只需更改一行模型名称即可作为即插即用替代品兼容 LangChain、LlamaIndex、Haystack 和 Milvus。对于当前仅使用英文默认设置的框架,这一行代码即可让社区中的每个用户获得对 200 多种语言的支持——无需更改 API、无需新增依赖项、也无需用户端修改任何代码。两款模型均附带用于 CPU 优化推理的 ONNX 和 OpenVINO 权重。

52 种增强支持语言(点击展开)底层编码器在 200 多种语言的文本上进行了预训练,可为其中任意一种语言生成通用嵌入向量。以下 52 种语言接受了显式的检索配对和跨语言训练,以实现更高质量的检索:

阿尔巴尼亚语 (sq)、阿拉伯语 (ar)、阿塞拜疆语 (az)、孟加拉语 (bn)、保加利亚语 (bg)、加泰罗尼亚语 (ca)、中文 (zh)、克罗地亚语 (hr)、捷克语 (cs)、丹麦语 (da)、荷兰语 (nl)、英语 (en)、爱沙尼亚语 (et)、芬兰语 (fi)、法语 (fr)、格鲁吉亚语 (ka)、德语 (de)、希腊语 (el)、希伯来语 (he)、印地语 (hi)、匈牙利语 (hu)、冰岛语 (is)、印度尼西亚语 (id)、意大利语 (it)、日语 (ja)、哈萨克语 (kk)、高棉语 (km)、韩语 (ko)、拉脱维亚语 (lv)、立陶宛语 (lt)、马来语 (ms)、马拉地语 (mr)、挪威语 (no)、波斯语 (fa)、波兰语 (pl)、葡萄牙语 (pt)、罗马尼亚语 (ro)、俄语 (ru)、塞尔维亚语 (sr)、斯洛伐克语 (sk)、斯洛文尼亚语 (sl)、西班牙语 (es)、斯瓦希里语 (sw)、瑞典语 (sv)、他加禄语 (tl)、泰卢固语 (te)、泰语 (th)、土耳其语 (tr)、乌克兰语 (uk)、乌尔都语 (ur)、乌兹别克语 (uz)、越南语 (vi)。

此外,这些模型还在编程代码(Python、Go、Java、JavaScript、PHP、Ruby、SQL、C、C++)上进行了训练,并支持跨语言代码检索。

企业级设计,开箱即用

这两个嵌入模型均在 IBM 精选数据集、公开可用数据以及内部生成或合成数据的混合数据集上训练。训练中使用的公开网络衍生数据,均经过 IBM 开发的质量、去重和治理流程进行筛选和过滤,旨在降低下游商业使用中的风险。我们有意避免使用 MS-MARCO 训练数据集以及具有明确非商业许可限制的数据集。模型使用 GneissWeb 进行预训练,该数据集是 IBM 从公开网络内容中精选,并经过 IBM 数据准备和治理工具处理的数据集,同时结合了其他 IBM 精选及公开可用来源。所有数据集均经过 IBM 治理审查,以评估许可考量、所有权信号和个人数据风险。这些流程旨在促进负责任的使用和企业级部署。

一款强大的低于 1 亿参数的多语言模型

本次发布的亮点是 granite-embedding-97m-multilingual-r2 模型。该模型拥有 9700 万参数,在覆盖 18 种语言的多语言 MTEB 检索基准上取得了 60.3 分——这是我们在 1 亿参数以下的开源多语言嵌入模型中所见的最高检索得分。在同尺寸级别的模型中,表现次优的 multilingual-e5-small 在同一基准上的得分为 50.9——在一个成熟的基准上拉开了 9.4 个百分点的差距。

该模型体积约为 3.11 亿参数完整版模型的三分之一,但在多语言、代码和长文档基准上保留了其大部分检索质量——相比其直接前代模型,在 MTEB 多语言检索上提升了 12.2 个百分点,这得益于新的架构、更好的训练数据以及一种新颖的剪枝方法(下文将详述)。完整版 granite-embedding-311m-multilingual-r2 在同一基准上得分为 65.2,相比其 R1 前代模型提升了 13.0 个百分点。

从 R1 到 R2 的变化

Granite Embedding Multilingual R1 模型基于 XLM-RoBERTa 编码器构建,上下文窗口为 512 个 token。R2 代则是从零开始的彻底重建:

ModernBERT 是一种最新的编码器架构,它借鉴了过去五年 Transformer 研究中的技术,重新审视了原始的 BERT 设计。这一转变带来了若干实际优势:交替注意力长度减少了长序列上的计算量(显著提升了长序列的吞吐量),旋转位置编码使得 32K 上下文窗口成为可能,而无需使用困扰旧架构的位置插值技巧,并且 Flash Attention 2.0 的支持加速了在现代 GPU 上的编码过程。

新的多语言分词器值得特别强调。我们没有复用 XLM-RoBERTa 的 25 万 token 词表,而是采用了现有的、具有强大多语言和代码覆盖能力的分词器。3.11 亿参数模型使用了 Gemma 3 分词器(26.2 万 token);9700 万参数模型则从 GPT-OSS 分词器出发,将其剪枝至一个紧凑的 18 万 token 词表,在保持广泛多语言覆盖的同时,减少了嵌入表的参数占用。分词器的效率远比人们意识到的更重要——一个 32K token 的窗口听起来很厉害,但如果你的分词器用其中一半来编码一段泰语文本,那就不一样了。

训练完整规模的 311M 模型

311M 模型是一个 22 层的 ModernBERT 编码器,配备 262K 模型 token 的多语言词表,通过多阶段流水线进行训练:

  1. 知识蒸馏:该模型同时从多个教师模型学习。教师模型是 Granite 3.3 Instruct 和 Mistral v0.2 Instruct 解码器模型,经过进一步微调用于文本嵌入向量,将检索特定知识迁移到 311M 编码器架构中。
  2. 对比微调:在多语言检索对(涵盖 52 种语言和代码的查询与相关及难负例段落匹配)上进行标准对比训练,提升了模型区分相关与不相关结果的能力。
  3. 模型合并:训练完成后,我们合并来自不同训练阶段和配置的检查点。这将针对不同目标(例如多语言广度 vs. 英语深度)优化的模型优势,整合到一组权重中,无需额外训练算力。
  4. 套娃表示学习:该模型使用套娃目标进行训练,使其 768 维嵌入向量可以截断为 512、384、256 或 128 维,且质量损失极小(参见下方套娃嵌入向量)。

最终得到的模型在 MTEB 多语言检索上得分为 65.2,整体平均得分为 56.3——相比其 R1 前代模型,平均分提升了 +14.5 分。

构建紧凑型 97M 多语言模型

97M 模型通过词表选择与知识蒸馏相结合的方式进行训练:

  1. 词表选择:262K 模型 token 的词表被缩减为经过专门训练的 180K 模型 token 词表,在保持广泛多语言覆盖的同时,大幅缩小了嵌入向量表的大小。
  2. 知识蒸馏:随后,使用来自多个教师模型(包括基于 Granite 4.1 8B 和 Mistral Instruct 解码器的教师模型)的知识蒸馏以及对比训练,对剪枝后的模型进行微调,以提升检索质量。

这种方法从多个强教师模型中迁移检索特定知识,同时在不牺牲语言覆盖范围的前提下减少模型参数量。最终得到一个高效紧凑的模型——在 MTEB 多语言检索基准上得分为 60.3,而全尺寸模型为 65.2,但模型体积大约缩小了 3 倍。

基准测试结果

多语言检索

按模型大小排序的主要基准套件性能表现。分数为每个基准内各任务的平均值(分数越高越好):

模型 参数量 激活参数量 嵌入维度 MTEB 多语言检索(18 项任务) 代码检索(12 项任务) 英文检索(10 项任务) LongEmbed(6 项任务) RaR-b(17 项任务)
F2LLM-v2-80M 80M 32M 320 50.1 68.0 47.5 31.7 17.9
multilingual-e5-small 118M 22M 384 50.9 53.5 46.5 38.8 20.3
granite-embedding-107m-multilingual (R1) 107M 11M 384 48.1 40.7 47.9 34.3 17.1
paraphrase-multilingual-MiniLM-L12-v2 118M 22M 384 36.6 23.5 35.9 20.9 10.9
jina-embeddings-v5-text-nano 212M 113M 768 63.3 71.2 58.8 63.6 25.2
harrier-oss-v1-270m 268M 100M 640 66.4 62.4 52.1 64.9 32.9
multilingual-e5-base 278M 86M 768 52.7 52.6 49.0 40.5 23.4
granite-embedding-278m-multilingual (R1) 278M 86M 768 52.2 48.5 51.5 37.7 18.9
embeddinggemma-300m 308M 106M 768 62.5 68.7 54.6 55.4 26.1
gte-multilingual-base 305M 113M 768 57.2 57.5 50.8 62.1 19.0
snowflake-arctic-embed-m-v2.0 305M 113M 768 54.8 55.2 58.4 55.4 23.3
multilingual-e5-large 560M 304M 1024 53.7 55.8 51.5 40.4 25.4
text-embedding-3-small (OpenAI,仅 API) 1536 50.7 53.8 53.6 23.2
granite-embedding-97m-multilingual-r2 97M 28M 384 60.3 60.4 50.1 65.6 24.9
granite-embedding-311m-multilingual-r2 311M 110M 768 65.2(第 2 名) 63.8(第 3 名) 52.6(第 5 名) 71.7(第 1 名) 28.0(第 2 名)

有几个值得注意的亮点:

  • 97M 参数的 R2 模型在平均得分以及大多数单项基准上,都超越了 multilingual-e5-base 和 gte-multilingual-base(约 300M 参数模型),尽管其体积大约小了 3 倍。
  • paraphrase-multilingual-MiniLM-L12-v2 —— 一个广泛使用的框架默认模型 —— 得分为 36.6,比 97M 的 R2 模型整整低了 23.7 分,而后者体积略小(97M 对比 110M 参数),且输出维度同为 384 维。
  • LongEmbed 是 R1 到 R2 提升最大的评测项:97M 模型提升了 31.3 分,311M 模型提升了 34.0 分。这是 32K 上下文窗口带来的直接回报——R1 的 512 token 限制意味着你的法律合同只能被看到第一页。许多实际的多语言工作负载涉及长文档(法律合同、技术手册、研究论文、多页报告),而 R1 根本无法完整阅读这些内容。
  • 代码检索能力大幅提升:相比 R1,97M 模型提升 19.7 分,311M 模型提升 15.3 分,这反映了新的代码训练集、更大的上下文窗口以及更好的训练方法。
  • 在更广泛的竞争格局中,harrier-oss-v1-270m 在 MTEB 多语言检索(66.4 分)和 RaR-b(32.9 分)上领先,而 jina-embeddings-v5-text-nano 在代码检索(71.2 分)和英文检索(58.8 分)上领先。311M 的 Granite 模型在平均分(56.3 分)上具有竞争力,并在 LongEmbed(71.7 分)上领先,同时其编码吞吐量显著高于 jina-embeddings-v5-text-nano(详见下方速度表)。

速度与吞吐量

编码速度对生产工作负载至关重要,尤其是在索引数百万份文档或需要低延迟查询编码时。我们使用 512 token 的块大小,在单张 NVIDIA H100 GPU 上测量了延迟和吞吐量:

97M 模型每秒可编码超过 2500 份文档——吞吐量与 multilingual-e5-small 相当——同时提供了显著更高的检索质量。311M 模型每秒约处理 1800 份文档,在检索质量上优于 jina-embeddings-v5-text-nano(65.2 分对比 63.3 分),且编码速度是其 5.5 倍以上(注意:速度数据是使用最新的 Transformer 代码计算得出的,该代码相比上一个 4.57 版本存在速度回退——对 Jina 和 Granite 模型均是如此——详情请参阅我们的技术报告)。harrier-oss-v1-270m 在此列出的竞品中提供了速度与检索分数的最佳组合。

套娃嵌入向量(311M)

311M 模型支持套娃表示学习,这允许你将嵌入向量从完整的 768 维截断至 512、384、256 或 128 维,同时质量仅优雅地下降。当存储、内存或相似度计算成本成为考量时,这非常有用——256 维嵌入向量的存储需求仅为 768 维的三分之一,且余弦相似度的计算成本也按比例降低。

以下是检索质量在不同嵌入维度下的表现:

降维带来的质量损失非常小。从 768 维降至 256 维——存储和相似度计算成本降低 3 倍——MTEB 多语言检索仅下降 0.5 个点(65.2 → 64.7),代码检索下降 0.5 个点(63.9 → 63.4)。即使在 128 维(降低 6 倍)的情况下,该模型在 MTEB 多语言检索上仍获得 63.7 分,在代码检索上获得 62.3 分——保留了其全维度性能的 97% 以上。在实践中,这意味着你可以大幅缩减索引大小和搜索延迟,同时对结果质量的影响微乎其微。(注意,上图中的结果是在上下文长度为 1024(针对英语和多语言检索)和 8192(针对代码检索)的条件下评估的。)

作为对比,311M 模型截断至 384 维(与 97M 模型原生输出的维度相同)后,在所有三个基准测试中仍优于 97M 模型。如果你需要 384 维的嵌入向量,并且能够承担 311M 模型的编码成本,那么套娃截断是更强的选择。

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("ibm-granite/granite-embedding-311m-multilingual-r2")

# Full 768-dimensional embeddings
full = model.encode(["example text"])
print(full.shape)  # (1, 768)

# Truncated to 384 dimensions
small = model.encode(["example text"], truncate_dim=384)
print(small.shape)  # (1, 384)

97M 模型不支持套娃表示——384 维已经足够紧凑。

跨语言检索

MTEB 检索中跨语言任务的平均性能。Belebele 衡量跨 122 种语言的跨语言段落匹配;MLQA 衡量跨 7 种语言的抽取式跨语言问答检索。

模型 Belebele 检索 MLQA 检索
granite-embedding-107m-multilingual (R1) 55.1 60.5
granite-embedding-278m-multilingual (R1) 62.2 63.0
granite-embedding-97m-multilingual-r2 52.9 60.5
granite-embedding-311m-multilingual-r2 66.5 67.1

311M 参数的 R2 模型在 Belebele 上比其 R1 前代提升了 +4.3,在 MLQA 上提升了 +4.1,表明在更大规模下,两个基准测试的跨语言迁移能力均有所增强。

97M 参数的 R2 模型在 Belebele 上得分较低(52.9 比 55.1,−2.2),但在 MLQA 上与 R1 前代持平(60.5)。Belebele 上的差距是剪枝和词汇缩减过程中固有的权衡——R2 模型的训练优先考虑了更广泛的 18 语言 MTEB 多语言检索集(在该集上比 R1 提升了 +12.2)和长文档检索(提升了 +31.3),而较小的词汇量(18 万 vs. 25 万 token)和减少的层数(12 层 vs. 22 层)影响了狭窄的跨语言迁移任务。如果跨多种语言对的跨语言迁移是你的主要用例,那么完整尺寸的 311M 模型是更好的选择。

部署选项

两个模型都提供了多种生产环境部署路径。使用以下命令安装核心库:

pip install sentence-transformers

Sentence Transformers(推荐给大多数用户):

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2")

queries = [
    "What is the tallest mountain in Japan?",          # English
    "Wer hat das Lied Achy Breaky Heart geschrieben?", # German
    "ドイツの首都はどこですか?",                            # Japanese
]

passages = [
    "富士山は、静岡県と山梨県にまたがる活火山で、標高3776.12 mで日本最高峰の独立峰である。",  # Japanese
    "Achy Breaky Heart is a country song written by Don Von Tress.",                        # English
    "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland.",                # German
]

q_emb = model.encode(queries)
p_emb = model.encode(passages)
print(util.cos_sim(q_emb, p_emb))
# Each query scores highest against its matching passage — across languages

LangChain(pip install langchain-huggingface):

from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(
    model_name="ibm-granite/granite-embedding-97m-multilingual-r2"
)

docs = embeddings.embed_documents([
    "富士山は日本最高峰の独立峰です。",
    "Mount Fuji is Japan's highest peak.",
])
query = embeddings.embed_query("What is Japan's tallest mountain?")
# Drop-in replacement anywhere LangChain accepts an Embeddings object

LlamaIndex(pip install llama-index-embeddings-huggingface):

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings

embed_model = HuggingFaceEmbedding(
    model_name="ibm-granite/granite-embedding-97m-multilingual-r2"
)
Settings.embed_model = embed_model  # applies globally to any index or pipeline

Haystack(pip install sentence-transformers haystack-ai)

from haystack.components.embedders import (
    SentenceTransformersDocumentEmbedder,
    SentenceTransformersTextEmbedder,
)
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.dataclasses import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore

doc_embedder = SentenceTransformersDocumentEmbedder(
    model="ibm-granite/granite-embedding-97m-multilingual-r2"
)
query_embedder = SentenceTransformersTextEmbedder(
    model="ibm-granite/granite-embedding-97m-multilingual-r2"
)
doc_embedder.warm_up()
query_embedder.warm_up()

# Embed and index documents
document_store = InMemoryDocumentStore()
result_docs = doc_embedder.run(documents=[
    Document(content="富士山は日本最高峰の独立峰です。"),
    Document(content="Mount Fuji is Japan's highest peak."),
    Document(content="Achy Breaky Heart is a country song written by Don Von Tress."),
    Document(content="Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland."),
])
document_store.write_documents(result_docs["documents"])

# Embed query and retrieve
result_query = query_embedder.run(text="What is Japan's tallest mountain?")
retriever = InMemoryEmbeddingRetriever(document_store=document_store)
results = retriever.run(query_embedding=result_query["embedding"], top_k=2)
for doc in results["documents"]:
    print(f"{doc.score:.3f}  {doc.content}")
# 0.961  Mount Fuji is Japan's highest peak.
# 0.913  富士山は日本最高峰の独立峰です。

Milvus(pip install pymilvus sentence-transformers)

from pymilvus import MilvusClient
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2")

# Use "./milvus.db" for local persistence or a server URI for production
client = MilvusClient(":memory:")
client.create_collection(collection_name="multilingual_docs", dimension=384)

docs = [
    "富士山は日本最高峰の独立峰です。",
    "Mount Fuji is Japan's highest peak.",
    "Achy Breaky Heart is a country song written by Don Von Tress.",
    "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland.",
]
embeddings = model.encode(docs).tolist()
client.insert(
    collection_name="multilingual_docs",
    data=[{"id": i, "vector": emb, "text": doc} for i, (emb, doc) in enumerate(zip(embeddings, docs))],
)

query_emb = model.encode(["What is Japan's tallest mountain?"]).tolist()
results = client.search(
    collection_name="multilingual_docs",
    data=query_emb,
    limit=2,
    output_fields=["text"],
)
for hit in results[0]:
    print(f"{hit['distance']:.3f}  {hit['entity']['text']}")
# 0.961  Mount Fuji is Japan's highest peak.
# 0.913  富士山は日本最高峰の独立峰です。

两个模型还附带预转换的 ONNX 和 OpenVINO 权重,用于优化的 CPU/加速器推理;可通过 vLLM(vllm serve ... --task embed)作为嵌入向量端点使用;并可使用 llama.cpp 转换为 GGUF 格式用于 Ollama。完整的部署示例请参见模型卡片。

面向框架集成者

如果你维护一个嵌入向量框架、向量数据库或 RAG 流水线库,并正在评估将这些模型作为默认选项,以下是需要了解的信息:

  • 许可证:Apache 2.0,训练时未使用 MS-MARCO
  • 即插即用行为:无需特定任务的指令前缀——在 API 层面表现与 all-MiniLM-L6-v2 一致。现有调用 .encode() 的代码无需修改即可运行。
  • 维度:384 维输出(97M 模型)和 768 维输出(311M 模型),与最常见的现有默认维度匹配。无需迁移索引。
  • 模型大小:9700 万参数模型的权重文件为 195 MB(safetensors 格式)—— 不到最常用的多语言默认模型 paraphrase-multilingual-MiniLM-L12-v2(471 MB)的一半大小。量化后的 ONNX 权重仅为 98 MB,与 all-MiniLM-L6-v2(91 MB)相当,同时覆盖 200 多种语言。
  • 对 CPU 友好:附带 ONNX 和 OpenVINO 权重,用于优化的 CPU 推理。入门教程无需依赖 GPU。
  • 默认支持多语言:如果您当前的默认模型仅支持英语,只需一行代码即可替换,让您社区中的每位用户都能获得 200 多种语言的支持 —— 无需改动他们的代码。
  • 稳定标识符:Hugging Face 上的 ibm-granite/granite-embedding-97m-multilingual-r2,由 IBM 在 Granite 模型系列下维护。

如需讨论将这些模型作为您项目的默认配置,请在 ibm-granite/granite-embedding-models 提交 issue。

应该使用哪个模型?

这两个多语言模型属于更广泛的 Granite Embedding R2 系列,该系列还包括两个高性能的英语专用模型:granite-embedding-english-r2(1.49 亿参数)和 granite-embedding-small-english-r2(4700 万参数)。如果您的数据主要是英语,英语模型在更小的规模下,能在英语基准测试中提供更高的检索质量,因为它们无需为 200 多种语言分配容量。

如果您需要…… 请使用
最佳多语言检索质量 granite-embedding-311m-multilingual-r2
灵活的嵌入向量维度(存储/速度权衡) granite-embedding-311m-multilingual-r2(Matryoshka)
最大吞吐量 / 边缘部署 / 低延迟 granite-embedding-97m-multilingual-r2
跨多种语言对的最佳跨语言迁移能力 granite-embedding-311m-multilingual-r2
数据以英语为主 granite-embedding-english-r2 或 granite-embedding-small-english-r2

试用模型

两个模型现已在 Hugging Face 的 IBM Granite Embedding 模型集合中提供:

  • granite-embedding-311m-multilingual-r2
  • granite-embedding-97m-multilingual-r2

您可以通过 Hugging Face Spaces 上的 Granite Embedding 演示页面(基于 CPU)交互式地试用小型模型,或者在 Google Colab 中运行完整的示例笔记本。

您可以在此处访问我们详细的技术报告,其中涵盖了完整的训练方法、按语言评估以及剪枝消融实验:Granite Multilingual Embedding R2 报告。如有疑问、反馈或问题,请访问 GitHub 上的 ibm-granite/granite-embedding-models。

框架维护者:如果您希望将这些模型作为您项目中的默认模型,请在 ibm-granite/granite-embedding-models 提交一个 issue——我们很乐意协助集成、测试,并解答任何关于许可或部署的问题。

快来试试吧,如果这些嵌入向量能给您带来愉悦,请在 Hugging Face 上猛戳 ❤️ 按钮。我们的模型也是有感情的,每一个点赞都能让它们温暖地度过夜晚。

来源:Hugging Face:Blog(RSS)· huggingface.co