模型概述: Granite-Embedding-311M-Multilingual-R2 是 Granite Embeddings 系列中的一个拥有 3.11 亿参数的密集嵌入模型,用于生成高质量的多语言文本嵌入。它能生成 768 维向量,上下文长度最长可达 32,768 个 tokens。该模型支持200 多种语言(基于底层编码器的多语言预训练语料库),其中 52 种语言和编程语言得到了增强支持,并接受了显式的检索对和跨语言训练。所有训练数据均使用宽松的、企业友好的许可,以及 IBM 收集和生成的数据集。
Granite Embedding 311M Multilingual R2 在多语言信息检索基准测试、代码检索、长文档搜索、多轮对话以及推理检索任务中均表现出强劲性能。该多语言 R2 模型在 Multilingual MTEB Retrieval(18 项任务) 上得分为64.0——相比 granite-embedding-278m-multilingual(52.2)提升了 11.8 分,并且在所有检索基准测试中的平均得分为56.0,较上一代提高了 14.2 分。它支持 Matryoshka 降维、32k token 上下文,并提供 ONNX 和 OpenVINO 模型以用于生产部署。
该模型采用双编码器架构,可从查询、段落、代码和文档等文本输入生成高质量嵌入,通过余弦相似度实现无缝比较。Granite Embedding 311M Multilingual R2 模型结合了对比微调、知识蒸馏和模型合并等技术,经过优化确保在多种语言中查询与段落嵌入之间的强对齐。
Granite Embedding Multilingual R2 版本包含两个基于 ModernBERT 架构的多语言嵌入模型:
底层编码器在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++)上进行了训练,并支持跨语言代码检索。
预期用途:该模型旨在为给定文本生成固定长度的向量表示,可用于跨多种语言的文本相似度计算、检索和搜索应用。
为实现高效推理,这些模型支持 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-311m-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.9393, 0.6899, 0.7627],
# [0.6780, 0.9598, 0.7062],
# [0.7818, 0.7342, 0.9172]])嵌套娃娃表示学习:
该模型支持嵌套娃娃表示学习(MRL),允许您将嵌入截断为更小的维度(例如 512、384、256、128),同时性能只会适度下降。这有助于降低存储和内存需求。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("ibm-granite/granite-embedding-311m-multilingual-r2")
# Full 768-dimensional embeddings
full_embeddings = model.encode(["example text"])
print(full_embeddings.shape) # (1, 768)
# Truncated to 256 dimensions — still effective for many retrieval tasks
truncated_embeddings = model.encode(["example text"], truncate_dim=256)
print(truncated_embeddings.shape) # (1, 256)使用 Hugging Face Transformers:
以下是使用 Transformers 库和 PyTorch 调用 granite-embedding-311m-multilingual-r2 模型的简单示例。如需包含段落编码和余弦相似度的完整检索流程,请参见上文的 Sentence Transformers 示例。
首先,安装所需的库
pip install transformers torch然后可使用该模型对文本进行编码
import torch
from transformers import AutoModel, AutoTokenizer
model_path = "ibm-granite/granite-embedding-311m-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-311m-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-311m-multilingual-r2", backend="onnx")
embeddings = model.encode(["example text"])
# OpenVINO backend
model = SentenceTransformer("ibm-granite/granite-embedding-311m-multilingual-r2", backend="openvino")
embeddings = model.encode(["example text"])
# OpenVINO INT8 quantized backend (smaller & faster on CPU)
model = SentenceTransformer(
"ibm-granite/granite-embedding-311m-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-311m-multilingual-r2 --task embedllama.cpp (GGUF):
该模型可转换为 GGUF 格式,以便与 llama.cpp 配合使用:
# Convert to GGUF
python convert_hf_to_gguf.py ibm-granite/granite-embedding-311m-multilingual-r2 \
--outfile granite-embedding-311m-multilingual-r2.gguf
# Generate embeddings
llama-embedding -m granite-embedding-311m-multilingual-r2.gguf -p "example text"注意:Ollama 当前不支持基于 ModernBERT 的模型。
在检索、代码搜索、长文档和推理基准测试的平均表现上,Granite-Embedding-311M-Multilingual-R2 在 5 亿参数以下的多语言模型类别中位列前三,与上一代 Granite-Embedding-278M-Multilingual 相比,平均性能提升了 14.2 个百分点。
以下是在多语言 MTEB 检索、MTEB 英文检索、MTEB 代码检索、长文档搜索(LongEmbed)和推理即检索(RaR-b)基准测试中的性能表现。分数为各任务的平均值,数值越高越好。吞吐量(每秒处理文档数)是在单张 NVIDIA H100 GPU 上,以 1024 个序列为一批次、512 个 token 长度的条件下测量的。
Granite-Embedding-311M-Multilingual-R2 在 MTEB 多语言检索上得分为 64.0,与 R1 前代模型相比提升了 11.8 个百分点,同时保持了相近的速度,编码速度接近每秒 2000 个文档。
| 模型 | 参数规模 (M) | 嵌入维度 | MTEB 多语言检索 (18) | MTEB 检索(英文,v2)(10) | MTEB(代码,v1)(12) | LongEmbed (6) | RaR-b (17) | 平均值 | 吞吐量(文档/秒) |
|---|---|---|---|---|---|---|---|---|---|
| granite-embedding-107m-multilingual | 107 | 384 | 48.1 | 47.9 | 40.7 | 34.3 | 17.1 | 37.6 | 3,337 |
| granite-embedding-278m-multilingual | 278 | 768 | 52.2 | 51.5 | 48.5 | 37.7 | 18.9 | 41.8 | 2,185 |
| granite-embedding-97m-multilingual-r2 | 97 | 384 | 59.6 | 50.1 | 60.5 | 65.5 | 24.9 | 52.1 | 2,894 |
| granite-embedding-311m-multilingual-r2 | 311 | 768 | 64.0 | 52.6 | 63.9 | 71.7 | 28.0 | 56.0 | 1,944 |
该模型支持玛特廖什卡嵌入(Matryoshka Embeddings),能够在降低嵌入维度的同时不损失性能:
| 模型 | 嵌入维度 | MTEB(英语,v2) | MTEB(代码,v1) | 多语言MTEB检索 |
|---|---|---|---|---|
| granite-embedding-311m-multilingual-r2 | 768 | 52.6 | 63.9 | 63.9 |
| 512 | 52.5 | 63.8 | 63.9 | |
| 384 | 52.1 | 63.7 | 63.8 | |
| 256 | 51.6 | 63.4 | 63.5 | |
| 128 | 50.4 | 62.3 | 62.5 |
granite-embedding-311m-multilingual-r2模型基于ModernBERT架构,并扩展了多语言词汇表:
| 特性 | granite-embedding-311m-multilingual-r2 |
|---|---|
| 嵌入维度 | 768 |
| 层数 | 22 |
| 注意力头数 | 12 |
| 中间层维度 | 1152 |
| 激活函数 | GeGLU |
| 词汇表大小 | 262,152 |
| 最大序列长度 | 32,768 |
| 玛特廖什卡维度 | 768, 512, 384, 256, 128 |
| 参数数量 | ~311M |
Granite Embedding Multilingual R2模型融合了ModernBERT架构的关键增强特性,包括:
该模型通过多教师模型知识蒸馏、对比微调以及玛特廖什卡表示学习进行训练。
所有训练数据均来自宽松、商业友好的许可协议,这使得 Granite Embedding R2 适合无限制的企业部署。
训练数据来源于四个关键渠道:
在治理方面,所有数据都经过数据审批流程,并接受技术、业务和治理审查。这一全面流程会记录关于数据的关键信息,包括但不限于其内容描述、所有权、预期用途、数据分类、许可信息、使用限制、数据获取方式,以及敏感信息(例如个人信息)评估。
本模型使用的多语言分词器源自 Google 的 Gemma 3 分词器。原始的 Gemma 3 分词器词汇表被用作起点,并在多语言文本和代码数据上进一步训练,以生成本模型中使用的 262K 词元词汇表。Gemma 分词器的使用受 Gemma 使用条款 约束。Gemma 模型系列及相关资源详见 ai.google.dev/gemma。
我们使用 IBM 的计算集群 BlueVela Cluster 训练了 Granite Embedding Multilingual R2 模型,该集群配备了 NVIDIA H100 80GB GPU。此集群为在多 GPU 上训练我们的模型提供了可扩展且高效的基础设施。
Granite Embedding 311M Multilingual R2 利用了宽松许可的开源数据和精选的专有数据来提升性能。基础语言模型的训练数据经过过滤,以去除包含仇恨、辱骂和亵渎内容的文本,不过此类过滤的效果在不同语系中可能存在差异。
模型性能因语言而异:资源丰富的语言以及 52 种增强支持语言集中的语言通常能取得更好的结果,而低资源语言依赖于预训练阶段的跨语言迁移,可能表现出较低的检索质量。合成训练数据虽然能有效提高多语言覆盖度,但可能引入自然文本中不存在的分布偏差。较长的文本将被截断至 32,768 词元的上下文限制。
@misc{granite-embedding-311m-multilingual-r2,
title={Granite Embedding Multilingual R2 Models},
author={IBM Granite Embedding Team},
year={2026},
}