HuggingFace镜像/granite-embedding-97m-multilingual-r2
模型介绍文件和版本分析
下载使用量0

Granite-Embedding-97M-Multilingual-R2

模型摘要: Granite-Embedding-97M-Multilingual-R2 是 Granite Embeddings 系列中的一个拥有 9700 万参数的密集嵌入模型,旨在以最低的计算成本提供高质量的多语言文本嵌入。它生成 384 维向量,上下文长度最多可达 32,768 个标记。该模型支持200 多种语言(基于底层编码器的多语言预训练语料库),其中52 种语言和编程语言得到增强支持,并接受了显式的检索对和跨语言训练。所有训练数据均使用宽松的、企业友好的许可证,以及 IBM 收集和生成的数据集。

Granite Embedding 97M Multilingual R2 在 Multilingual MTEB Retrieval(18 项任务) 上得分为59.6——这是所有 1 亿参数以下开源多语言嵌入模型中的最高检索分数,比其尺寸类别中的次优模型(multilingual-e5-small,50.9 分)高出8.7 分——同时比全尺寸的 granite-embedding-311m-multilingual-r2 大约小 3 倍。该多语言 R2 模型在多语言信息检索基准、代码检索、长文档搜索、对话多轮以及推理检索任务中均表现出强劲性能。

R2 版本的新特性

  • 架构升级: ModernBERT 取代了 XLM-RoBERTa,带来了交替注意力、SiLU 激活函数和旋转位置嵌入。
  • 扩展上下文: 32,768 个标记(较 R1 版本的 512 个有所提升),支持长文档和多段落检索。
  • 精简的多语言词汇表: 经过专门训练的 18 万标记分词器在保持广泛多语言覆盖的同时,减小了模型大小。
  • 模型剪枝: 从全尺寸多语言模型进行层剪枝(22 层 → 12 层),随后进行持续的蒸馏训练以恢复性能。
  • 更广泛的代码覆盖: 代码检索训练集包括 Python、Go、Java、JavaScript、PHP、Ruby、SQL、C、C++。
  • 训练改进: 多教师知识蒸馏和对比微调技术使其比上一代 granite-embedding-107m-multilingual 平均提升14.5 分。
  • 部署灵活性: 发布时包含 ONNX 和 OpenVINO 模型;与 vLLM 和 llama.cpp(GGUF)兼容。

该模型采用双编码器架构,可从查询、段落、代码和文档等文本输入生成高质量嵌入,通过余弦相似度实现无缝比较。granite-embedding-97m-multilingual-r2 结合了对比微调、知识蒸馏、模型剪枝和词汇选择等技术,在确保紧凑模型大小的同时,优化了多种语言间查询和段落嵌入的强对齐。

Granite Embedding Multilingual R2 版本包含两个基于 ModernBERT 架构的多语言嵌入模型:

  • granite-embedding-311m-multilingual-r2(3.11 亿参数):输出嵌入大小为 768,替代 granite-embedding-278m-multilingual。详见 granite-embedding-311m-multilingual-r2。
  • granite-embedding-97m-multilingual-r2(9700 万参数):通过对较大模型进行层剪枝和词汇选择构建的缩小版多语言模型,具有更少的层和更小的输出嵌入大小(384)。

模型详情

  • 开发机构: Granite Embedding Team, IBM
  • 代码仓库: ibm-granite/granite-embedding-models
  • 项目页面: IBM Granite
  • 论文: 2026年5月发布
  • 支持语言(自然语言处理): 支持200多种语言,其中52种语言和编程语言提供增强支持(详见完整语言列表)
  • 发布日期: 2026年4月29日
  • 许可证: Apache 2.0

支持语言

底层编码器在200多种语言的文本上进行了预训练,我们可提供适用于其中任何语言的通用嵌入。此外,我们为52种语言和编程语言提供增强支持,这些语言和代码接收了专门的检索对和跨语言训练数据,能在检索任务上生成更高质量的嵌入。

点击展开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++)上进行了训练,并支持跨语言代码检索。

何时使用此模型

  • 使用granite-embedding-97m-multilingual-r2:适用于对延迟敏感的生产工作负载、边缘部署,或需要最大编码吞吐量且具备竞争力的多语言质量的场景。该模型拥有9700万参数,比全尺寸的granite-embedding-311m-multilingual-r2小3倍,同时保持了强大的跨语言检索性能。
  • 使用granite-embedding-311m-multilingual-r2:当准确性是首要任务,且能够承受3.11亿参数模型的吞吐量时。
  • 使用granite-embedding-english-r2或granite-embedding-small-english-r2:当数据主要为英语时,这些特定于英语的模型为单语英语用例提供了优化性能。

使用方法

预期用途:该模型旨在为给定文本生成固定长度的向量表示,可用于跨多种语言的文本相似度计算、检索和搜索应用。

为实现高效推理,这些模型支持 Flash Attention 2。安装该组件为可选操作,但能加快编码速度:

pip install flash_attn

与 Sentence Transformers 配合使用:

该模型与 SentenceTransformer 库兼容,且使用起来非常简单:

首先,安装 sentence transformers 库

pip install sentence_transformers

然后可使用该模型对文本对进行编码,并计算其表示形式之间的相似度。

from sentence_transformers import SentenceTransformer, util

model_path = "ibm-granite/granite-embedding-97m-multilingual-r2"
# Load the Sentence Transformer model
model = SentenceTransformer(model_path)

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

input_passages = [
    "富士山は、静岡県と山梨県にまたがる活火山で、標高3776.12 mで日本最高峰の独立峰である。",  # Japanese passage
    "Achy Breaky Heart is a country song written by Don Von Tress. Originally titled Don't Tell My Heart and performed by The Marcy Brothers in 1991.",  # English passage
    "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland. Die Stadt ist mit rund 3,7 Millionen Einwohnern die bevölkerungsreichste Kommune Deutschlands.",  # German passage
    ]

# Cross-lingual retrieval: each query should score highest with its matching passage in a different language
query_embeddings = model.encode(input_queries)
passage_embeddings = model.encode(input_passages)

# calculate cosine similarity — expect high scores on the diagonal (EN→JA, DE→EN, JA→DE)
print(util.cos_sim(query_embeddings, passage_embeddings))
# output: tensor([[0.8869, 0.6658, 0.7213],
#         [0.6792, 0.9577, 0.6420],
#        [0.7534, 0.6771, 0.9112]])

使用 Hugging Face Transformers:

以下是使用 Transformers 库和 PyTorch 运行 granite-embedding-97m-multilingual-r2 模型的简单示例。如需包含段落编码和余弦相似度的完整检索流程,请参见上文的 Sentence Transformers 示例。

首先,安装所需的库

pip install transformers torch

该模型随后可用于对文本进行编码

import torch
from transformers import AutoModel, AutoTokenizer

model_path = "ibm-granite/granite-embedding-97m-multilingual-r2"

# Load the model and tokenizer
model = AutoModel.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model.eval()

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

# tokenize inputs
tokenized_queries = tokenizer(input_queries, padding=True, truncation=True, return_tensors='pt')

# encode queries
with torch.no_grad():
    model_output = model(**tokenized_queries)
    # Perform pooling. granite-embedding-97m-multilingual-r2 uses CLS Pooling
    query_embeddings = model_output[0][:, 0]

# normalize the embeddings
query_embeddings = torch.nn.functional.normalize(query_embeddings, dim=1)

优化推理与部署

ONNX 和 OpenVINO:

预转换的 ONNX 和 OpenVINO 模型与 PyTorch 权重一同发布,用于生产环境部署。可通过 Sentence Transformers 中的 backend 参数直接加载这些模型:

from sentence_transformers import SentenceTransformer

# ONNX backend
model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2", backend="onnx")
embeddings = model.encode(["example text"])

# OpenVINO backend
model = SentenceTransformer("ibm-granite/granite-embedding-97m-multilingual-r2", backend="openvino")
embeddings = model.encode(["example text"])

# OpenVINO INT8 quantized backend (smaller & faster on CPU)
model = SentenceTransformer(
    "ibm-granite/granite-embedding-97m-multilingual-r2",
    backend="openvino",
    model_kwargs={"file_name": "openvino/openvino_model_qint8_quantized.xml"},
)
embeddings = model.encode(["example text"])

ONNX 模型兼容任何 ONNX Runtime 后端(CPU、CUDA、TensorRT、DirectML)。OpenVINO 模型针对英特尔硬件进行了优化,包括 CPU 和集成 GPU。

vLLM:

可使用 vLLM 将模型部署为嵌入端点:

vllm serve ibm-granite/granite-embedding-97m-multilingual-r2 --task embed

llama.cpp(GGUF):

该模型可转换为 GGUF 格式,以便与 llama.cpp 配合使用:

# Convert to GGUF
python convert_hf_to_gguf.py ibm-granite/granite-embedding-97m-multilingual-r2 \
    --outfile granite-embedding-97m-multilingual-r2.gguf

# Generate embeddings
llama-embedding -m granite-embedding-97m-multilingual-r2.gguf -p "example text"

注意:Ollama 当前不支持基于 ModernBERT 的模型。

评估结果

Granite-Embedding-97M-Multilingual-R2 以极低的计算成本实现了出色的检索质量。该模型拥有 9700 万参数和 384 维嵌入,在准确率与效率之间取得了令人瞩目的平衡:其检索质量与 gte-multilingual-base(一个 3.05 亿参数的模型)相当,而编码速度快了近 3 倍;与前代模型 granite-embedding-107m-multilingual 相比,平均得分提升了 14.5 分。

多语言检索性能

在多语言 MTEB 检索、MTEB 英文检索、MTEB 代码检索、长文档搜索(LongEmbed)以及推理即检索(RaR-b)基准测试中的性能。分数为各任务的平均值,分值越高越好。吞吐量(每秒处理文档数)是在单个 NVIDIA H100 GPU 上使用 512 令牌块的滑动窗口测量得出的。

granite-embedding-97m-multilingual-r2 以每秒近 2900 个文档的速度,实现了与其 R1 前代模型相当的吞吐量,同时在多语言检索方面得分提升了近 10 分。它保留了全尺寸 3.11 亿参数模型的大部分检索质量,而模型体积缩小约 3 倍,吞吐量提高约 1.5 倍。

模型参数(百万)嵌入维度MTEB 多语言检索 (18)MTEB 检索(英文,v2)(10)MTEB(代码,v1)(12)LongEmbed (6)RaR-b (17)平均值吞吐量(文档/秒)
granite-embedding-107m-multilingual10738448.147.940.734.317.137.63337
granite-embedding-278m-multilingual27876852.251.548.537.718.941.82185
granite-embedding-311m-multilingual-r231176864.052.663.971.728.056.01944
granite-embedding-97m-multilingual-r29738459.650.160.565.524.952.12894

模型架构与核心特性

Granite Embedding Multilingual R2 版本包含两个多语言嵌入模型,均基于 ModernBERT 架构构建。97M 模型是通过对 311M 模型进行层剪枝(从 22 层减至 12 层)和词汇选择(从 262K 个令牌减至 180K 个令牌)得到的,并使用了一个专为多语言覆盖而训练的紧凑型分词器,以减小模型尺寸。97M 模型采用 SiLU 激活函数(源自剪枝后的架构),而非全尺寸模型中使用的 GeGLU。

特性granite-embedding-97m-multilingual-r2granite-embedding-311m-multilingual-r2
嵌入维度384768
层数1222
注意力头数1212
中间层维度15361152
激活函数SiLUGeGLU
词汇表大小180,000262,152
最大序列长度32,76832,768
Matryoshka 维度—768, 512, 384, 256, 128
参数数量~97M~311M

训练与优化

Granite Embedding Multilingual R2 模型融合了 ModernBERT 架构的关键增强特性,包括:

  • 交替注意力长度以加速处理
  • 旋转位置嵌入以支持更长序列长度
  • 针对 200 多种语言的代码和文本数据训练的多语言分词器
  • Flash Attention 2.0 以提升效率
  • 精简参数,去除不必要的偏置项

97M 模型是通过层剪枝和词汇选择构建的,以较大的 granite-embedding-311m-multilingual-r2 为起点,将 transformer 层数从 22 层减至 12 层。一个经过专门训练的紧凑型多语言分词器(180K 词汇量)在显著减少参数数量的同时,保持了广泛的多语言覆盖能力。剪枝后的模型随后通过多教师模型知识蒸馏和对比微调进行训练,以恢复检索质量,在尺寸缩小 3 倍的情况下,保留了全尺寸模型的大部分性能。

数据收集

所有训练数据均来自具有宽松、商业友好许可的来源,这使得 Granite Embedding R2 适合无限制的企业部署。

训练数据来自四个关键来源:

  1. 从网络上爬取的无监督标题-正文配对数据
  2. 具有宽松、企业友好许可的公开可用配对数据
  3. IBM 内部针对特定技术领域的配对数据
  4. IBM 生成的多语言合成数据,包括长文档对

在治理方面,我们所有的数据都经过数据审批流程,该流程需接受技术、业务和治理审查。这一全面流程会获取有关数据的关键信息,包括但不限于其内容描述、所有权、预期用途、数据分类、许可信息、使用限制、数据获取方式,以及对敏感信息(例如个人信息)的评估。

基础设施

我们使用 IBM 的计算集群 BlueVela Cluster 训练了 Granite Embedding Multilingual R2 模型,该集群配备了 NVIDIA H100 80GB GPU。该集群为在多个 GPU 上训练我们的模型提供了可扩展且高效的基础设施。

伦理考量与局限性

Granite Embedding 97M Multilingual R2 利用具有宽松许可的开源数据和精选专有数据来提升性能。基础语言模型的训练数据经过过滤,以去除包含仇恨、辱骂和亵渎内容的文本,不过此类过滤的效果在不同语系之间可能存在差异。

作为一个剪枝模型,granite-embedding-97m-multilingual-r2 以牺牲部分准确性为代价,换取了显著更快的推理速度和更低的资源需求。不同语言的性能表现各异:资源丰富的语言以及 52 种语言增强支持集中的语言通常能取得更好的结果,而低资源语言依赖跨语言迁移,可能表现出较低的检索质量——这种影响在这个较小的模型中比在全尺寸的 311M 变体中更为明显。词汇量的减少(从 262K 令牌减少到 180K 令牌)也可能影响某些语言的令牌化效率。较长的文本将被截断至 32,768 令牌的上下文限制。

资源

  • 了解 Granite 的最新更新:https://www.ibm.com/granite
  • 获取教程、最佳实践和提示工程建议,开始使用:https://www.ibm.com/granite/docs/
  • 了解最新的 Granite 学习资源:https://ibm.biz/granite-learning-resources

引用

@misc{granite-embedding-97m-multilingual-r2,
      title={Granite Embedding Multilingual R2 Models},
      author={IBM Granite Embedding Team},
      year={2026},
}