Hugging Face Blog

Granite Embedding Multilingual R2:支持 200+ 语言和 32K 上下文长度的 Apache 2.0 多语言嵌入模型

8.5内容质量
Granite Embedding Multilingual R2:支持 200+ 语言和 32K 上下文长度的 Apache 2.0 多语言嵌入模型

TL;DR · AI 摘要

Granite Embedding Multilingual R2 是两个开源多语言嵌入模型,支持 200+ 语言和 32K 上下文长度。

核心要点

  • granite-embedding-97m-multilingual-r2 在 MTEB 多语言检索中达到 60.3 分,优于所有开源子 1 亿参数模型。
  • granite-embedding-311m-multilingual-r2 在 MTEB 多语言检索中排名第二(65.2 分),支持 Matryoshka 嵌
  • 两者均支持 200+ 语言、32K token 上下文长度,并兼容主流框架如 LangChain 和 Milvus。

结构提纲

按章节快速跳转。

  1. 介绍多语言嵌入模型面临的语言覆盖与模型大小的矛盾。

  2. 发布两个新的多语言嵌入模型:granite-embedding-311m-multilingual-r2granite-embedding-97m-multilingual-r2

  3. 详细说明两个模型的技术规格和性能表现。

  4. 介绍模型的训练方法和部署选项。

  5. 讨论模型在跨语言检索、代码检索等场景中的应用。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Granite Embedding Multilingual R2
    • 模型特性
      • 支持 200+ 语言
      • 32K token 上下文长度
      • Matryoshka 支持
    • 性能表现
      • MTEB 多语言检索 60.3 分
      • MTEB 多语言检索 65.2 分
    • 适用场景
      • 跨语言检索
      • 代码检索

金句 / Highlights

值得收藏与分享的关键句。

  • granite-embedding-97m-multilingual-r2 在 MTEB 多语言检索中达到 60.3 分,优于所有开源子 1 亿参数模型。

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • granite-embedding-311m-multilingual-r2 在 MTEB 多语言检索中排名第二(65.2 分),支持 Matryoshka 嵌入。

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 两者均支持 200+ 语言、32K token 上下文长度,并兼容主流框架如 LangChain 和 Milvus。

    第 2 段

    ⬇︎ 下载 PNG𝕏 分享到 X
#多语言嵌入#Apache 2.0#Hugging Face#LangChain
打开原文

标题:Granite Embedding Multilingual R2:Apache 2.0 开源多语言嵌入模型,支持 32K 上下文——百兆参数内最佳检索质量

文章来源:https://huggingface.co/blog/ibm-granite/granite-embedding-multilingual-r2

发布时间:2026-05-14T18:55:01.948Z

Markdown 内容:

内容提要: 基于 ModernBERT 架构的两个全新 Apache 2.0 多语言嵌入模型——9700 万参数的紧凑模型在 MTEB 多语言检索任务中超越所有开源百兆参数以下多语言嵌入模型(得分 60.3),以及 3.11 亿参数的完整尺寸模型在 MTEB 多语言检索中获得 65.2 分(在 5 亿参数以下开源模型中排名第二)并支持套娃嵌入。两者覆盖 200+ 语言,针对 52 种语言进行优化,支持 32K token 上下文(较 R1 提升 64 倍),并新增对 9 种编程语言的代码检索支持。

图 5:Granite Embedding Multilingual R2
图 5:Granite Embedding Multilingual R2

本文内容:企业级设计理念 · 强大的百兆参数以下多语言模型 · R1 版本的改进 · 完整版 311M 模型训练 · 构建紧凑型 97M 多语言模型 · 基准测试结果 · 套娃嵌入技术 · 部署方案 · 框架集成指南 · 模型选择建议 · 试用模型

多语言嵌入模型始终面临一个核心矛盾:广泛的语言覆盖通常需要以模型尺寸为代价,而小型模型往往要牺牲语言支持。如果您需要跨语言工作——例如在多语言语料库上进行检索增强生成、跨语言搜索、国际团队的代码检索——您可能经常不得不在“足够快”和“足够好”的模型之间做出艰难选择。

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

两款模型均支持 200+ 种语言,并对 52 种语言和编程代码 提供增强的检索质量,支持长达 32,768 token 的上下文(较 R1 前代提升 64 倍),并基于 Apache 2.0 许可证发布。它们可即开即用地与 sentence-transformerstransformers 库配合使用,无需特定任务指令,并能作为即插即用的替代方案兼容 LangChainLlamaIndexHaystackMilvus,仅需更改一行模型名称。对于当前仅默认支持英语的框架,这一行改动即可为您的社区所有用户提供 200+ 语言支持——无需 API 变更、无需新增依赖、用户端无需代码修改。两款模型均提供 ONNX 和 OpenVINO 权重,支持 CPU 优化推理。

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 治理审查,评估许可条款、所有权标识及个人数据风险。这些流程旨在促进负责任使用和企业级部署。

强大的不足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 版本的改进之处

Granite 多语言嵌入 R1 模型基于 XLM-RoBERTa 编码器构建,具有 512 个标记的上下文窗口。R2 版本进行了彻底重构:

图6:Granite嵌入R2架构
图6:Granite嵌入R2架构

ModernBERT 是近期提出的编码器架构,它结合过去五年 Transformer 研究的技术成果重新审视了原始 BERT 设计。这一转变带来多项实际优势:交替注意力长度减少长序列计算量(显著提升长序列处理吞吐量),旋转位置嵌入支持 32K 上下文窗口而无需困扰传统架构的位置插值技巧,Flash Attention 2.0 支持则加速现代 GPU 上的编码过程。

新版多语言分词器值得重点关注。我们没有复用 XLM-RoBERTa 的 25 万标记词表,而是采用现有具备强大多语言和代码覆盖能力的分词器。3.11 亿参数模型使用 Gemma 3 分词器(26.2 万标记);9700 万参数模型基于 GPT-OSS 分词器进行剪枝,压缩至 18 万标记的紧凑词表,在保持广泛多语言覆盖的同时减少了嵌入表的参数占用。分词器效率的重要性常被低估——当你的分词器编码单段泰文就消耗掉 32K 标记窗口的一半时,长上下文优势将大打折扣。

完整版 3.11 亿参数模型训练

3.11 亿参数模型是一个 22 层 ModernBERT 编码器,配备 26.2 万标记的多语言词表,通过多阶段流程训练:

  1. 知识蒸馏:模型同时从多个教师模型学习。教师模型包括经过文本嵌入专项优化的 Granite 3.3 Instruct 和 Mistral v0.2 Instruct 解码器,它们将检索专用知识迁移至 3.11 亿参数编码器架构。
  2. 对比微调:基于多语言检索对(涵盖 52 种语言和代码的查询与相关段落及困难负例匹配)进行标准对比训练,增强模型区分相关与无关结果的能力。
  3. 模型融合:训练完成后,我们合并来自不同训练阶段和配置的检查点。这将针对不同目标(如多语言广度与英语深度)优化的模型优势整合至单一权重集合,无需额外训练算力。
  4. 套娃表示学习:模型通过套娃目标进行训练,使其 768 维嵌入可截断至 512、384、256 或 128 维而保持最小质量损失(详见下文套娃嵌入章节)。

最终模型在 MTEB 多语言检索任务中获得 65.2 分,整体平均分达 56.3——较其 R1 前代实现平均 +14.5 分的提升。

构建紧凑型 9700 万参数多语言模型

9700 万参数模型通过词表选择知识蒸馏相结合的方式训练:

  1. 词汇选择:将 262K 词符的词汇表精简为针对性训练的 180K 词符词汇表,在保持广泛多语言覆盖的同时显著缩减嵌入表规模。
  2. 知识蒸馏:通过多个教师模型(包括 Granite 4.1 8B 和 Mistral Instruct 基于解码器的教师模型)的知识蒸馏和对比训练对剪枝后的模型进行微调,以提升检索质量。

该方法从多个强教师模型中迁移检索专用知识,在减少模型参数的同时不牺牲语言覆盖范围。最终得到一个高效紧凑的模型——在 MTEB 多语言检索评分为 60.3(完整规模模型为 65.2),而体积缩小约 3 倍。

基准测试结果

多语言检索

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

| 模型 | 参数量 | 激活参数量 | 嵌入维度 | MTEB 多语言检索 (18) | 代码检索 (12) | 英文检索 (10) | 长文本嵌入 (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) |

几个突出亮点:

  • 9700 万参数的 R2 模型在平均成绩和多数单项基准测试中,超越了 multilingual-e5-base 和 gte-multilingual-base(约 3 亿参数模型),尽管其体积小了约 3 倍。
  • 广泛使用的框架默认模型 `paraphrase-multilingual-MiniLM-L12-v2` 得分仅为 36.6,比 9700 万参数的 R2 模型整整低了 23.7 分,而 R2 模型在参数量(9700 万 vs 1.18 亿)上还略小,且输出维度同为 384 维。
  • 长文本嵌入是 R1 到 R2 提升最大的方面:9700 万模型提升 +31.3 分,3.11 亿模型提升 +34.0 分。这是 32K 上下文窗口的直接回报——R1 的 512 词符限制意味着你的法律合同只能通过第一页来判断。许多实际的多语言工作负载涉及长文档(如法律合同、技术手册、研究论文、多页报告),而 R1 根本无法完整查看。
  • 代码检索性能显著提升:相比 R1,9700 万模型提升 +19.7 分,3.11 亿模型提升 +15.3 分,这反映了新增的代码训练集、更大的上下文窗口以及改进的训练方法。
  • 在更广泛的竞争领域中,harrier-oss-v1-270m 在 MTEB 多语言检索(66.4)和 RaR-b(32.9)上领先,而 jina-embeddings-v5-text-nano 在代码检索(71.2)和英文检索(58.8)上领先。3.11 亿参数的 Granite 模型在平均分(56.3)上具有竞争力,并在长文本嵌入(71.7)上领先,同时提供了比 jina-embeddings-v5-text-nano 高得多的编码吞吐量(参见下面的速度表)。

速度与吞吐量

对于生产工作负载而言,编码速度至关重要,尤其是在需要索引数百万文档或需要低延迟查询编码的场景下。我们在单个 NVIDIA H100 GPU 上使用 512 词符的文本块测量了延迟和吞吐量:

图 7:速度 vs. 质量:9700 万模型以 3 倍的参数效率达到了 3 亿参数级别模型的质量
图 7:速度 vs. 质量:9700 万模型以 3 倍的参数效率达到了 3 亿参数级别模型的质量

9700 万模型每秒可编码超过 2,500 个文档——吞吐量与 multilingual-e5-small 相当——同时提供了显著更高的检索质量。3.11 亿模型以约 1,800 文档/秒的速度,在检索质量上(65.2 vs. 63.3)优于 jina-embeddings-v5-text-nano,同时编码速度超过其 5.5 倍(注:速度数据使用最新的 transformer 代码计算,该版本相比上一个 4.57 版本存在速度回归——这对 Jina 和 granite 模型均有影响——详情请参阅我们的技术报告)。harrier-oss-v1-270m 在所列竞争对手中提供了速度和检索分数的最佳组合。

套娃嵌入 (311M)

311M 模型支持 套娃表征学习 技术,允许将嵌入维度从完整的 768 维逐步缩减至 512、384、256 或 128 维,同时保持性能的平滑下降。当需要考虑存储空间、内存占用或相似性计算成本时,这一特性尤为实用——256 维嵌入所需的存储空间仅为 768 维的三分之一,余弦相似度的计算成本也按比例显著降低。

不同维度下的检索性能表现如下:

图 8:套娃嵌入:不同截断维度下的性能平滑下降
图 8:套娃嵌入:不同截断维度下的性能平滑下降

降维带来的质量损失微乎其微。从 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 模型的编码成本,套娃截断技术是更优选择。

code
from sentence_transformers import SentenceTransformer

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

# 完整的 768 维嵌入
full = model.encode(["example text"])
print(full.shape)  # (1, 768)

# 截断至 384 维
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 vs 55.1,−2.2),但在 MLQA 上与 R1 前代持平(60.5)。Belebele 的差距是模型剪枝和词表缩减过程中的固有权衡——R2 模型的训练优先考虑了更广泛的 18 语言 MTEB 多语言检索集(较 R1 提升 +12.2)和长文档检索能力(+31.3),而缩减后的词表(18 万 vs. 25 万词元)和层数(12 vs. 22)影响了特定跨语言迁移任务的表现。如果多语言对跨语言迁移是您的主要应用场景,完整规模的 311M 模型是更佳选择。

部署方案

两款模型均提供多种生产环境部署方案。通过以下命令安装核心库:

code
pip install sentence-transformers

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

code
from sentence_transformers import SentenceTransformer, util

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

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

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

q_emb = model.encode(queries)
p_emb = model.encode(passages)
print(util.cos_sim(q_emb, p_emb))
# 每个查询在不同语言环境下均能精准匹配对应段落

LangChain (pip install langchain-huggingface):

code
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?")
# 可作为嵌入对象直接接入 LangChain 生态

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

code
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  # 可全局应用于任意索引或流水线

Haystack (pip install sentence-transformers haystack-ai)

python
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()

# 嵌入并索引文档
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"])

# 嵌入查询并检索
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)

python
from pymilvus import MilvusClient
from sentence_transformers import SentenceTransformer

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

# 本地持久化使用 "./milvus.db",生产环境使用服务器 URI
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  富士山は日本最高峰の独立峰です。

这两个模型还提供了预转换的 ONNXOpenVINO 权重,用于优化的 CPU/加速器推理,可以通过 [vLLM](https://docs.vllm.ai/) (vllm serve ... --task embed) 作为嵌入端点工作,并且可以使用 llama.cpp 转换为 GGUF 格式以用于 [Ollama](https://ollama.com/)。完整部署示例请参阅模型卡片。

对于框架集成者

如果您维护一个嵌入框架、向量存储或 RAG 管道库,并正在评估这些模型作为默认选项,以下信息您需要了解:

  • 许可证:Apache 2.0,未经 MS-MARCO 训练
  • 即插即用行为:无需特定任务的指令前缀 —— 在 API 级别行为类似于 all-MiniLM-L6-v2。现有调用 .encode() 的代码无需修改即可工作。
  • 维度:384 维输出(97M)和 768 维输出(311M),匹配最常见的现有默认值。无需索引迁移。
  • 模型大小:97M 模型的权重为 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 提交议题。

您应该使用哪个模型?

这两个多语言模型是更广泛的 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(套娃式) | | 最大吞吐量/边缘部署/低延迟 | granite-embedding-97m-multilingual-r2 | | 跨多种语言对的最佳跨语言迁移能力 | granite-embedding-311m-multilingual-r2 | | 主要处理英文数据 | granite-embedding-english-r2granite-embedding-small-english-r2 |

试用模型

两款模型现已登陆 Hugging Face 平台的 IBM Granite 嵌入模型集合

您可以通过 此处 的 Granite 嵌入演示在 Hugging Face Spaces 上交互式体验小模型(支持 CPU 运行),或在 Google Colab 中运行完整示例笔记本:

图片 9:在 Colab 中打开
图片 9:在 Colab 中打开

您可通过 Granite 多语言嵌入 R2 技术报告 获取详细技术文档,其中涵盖完整训练方法、分语言评估及剪枝消融实验。如有疑问、反馈或问题,请访问 GitHub 上的 ibm-granite/granite-embedding-models

框架维护者:若您希望将此类模型设为项目默认配置,请在 ibm-granite/granite-embedding-models 提交议题——我们乐意为您提供集成支持、测试协助,并解答有关许可或部署的各类问题。

欢迎试用这些模型,如果嵌入效果让您心动,别忘了在 Hugging Face 上猛击 ❤️ 按钮。我们的模型也有情感,每个 +1 都能让它们在深夜倍感温暖。