ONNX 模型库
返回模型

说明文档


license: apache-2.0 language:

  • en base_model:
  • ibm-granite/granite-embedding-english-r2 pipeline_tag: text-ranking library_name: sentence-transformers tags:
  • granite
  • transformers
  • embeddings
  • mteb
  • text-embeddings-inference

granite-embedding-reranker-english-r2

模型概述: granite-embedding-reranker-english-r2 是来自 Granite Embeddings 系列的 149M 参数稠密交叉编码器模型,可用于生成高质量的文本嵌入。该模型基于最长 8192 个 token 的上下文长度生成大小为 768 的嵌入向量。与大多数其他开源模型相比,该模型仅使用具有宽松、企业友好许可证的开源相关性配对数据集,以及 IBM 收集和生成的数据集进行训练。

granite-embedding-reranker-english-r2 模型使用交叉编码器架构,通过联合编码查询和文档的文本来计算高质量的相关性分数,从而实现基于上下文对齐的精确重排序。该模型使用 pListMLE 等排序专用损失函数进行训练,并结合模型合并技术来增强性能。该重排序模型在标准信息检索基准测试(BEIR、MIRACL)、长文档搜索基准测试(MLDR)以及许多企业用例上表现出色。

最新的 granite embedding r2 版本发布了两个英语嵌入模型和一个英语重排序模型,均基于 ModernBERT 架构:

  • granite-embedding-english-r2(149M 参数):输出嵌入大小为 768,替代 granite-embedding-125m-english。
  • granite-embedding-small-english-r2(47M 参数):一款 首创的 缩减规模模型,支持 8192 上下文长度,层数更少,输出嵌入大小更小(384),替代 granite-embedding-30m-english。
  • granite-embedding-reranker-english-r2(149M 参数):基于 granite-embedding-english-r2 的重排序模型,输出嵌入大小为 768。

模型详情

使用方法

该模型旨在计算查询-文档对的相关性分数,非常适合信息检索和搜索应用中的重排序任务。

使用 Sentence Transformers: 该模型兼容 SentenceTransformer 库,使用非常简单:

首先,安装 sentence transformers 库

pip install sentence_transformers

然后可以使用该模型联合编码文本对以计算相关性分数。

from sentence_transformers import CrossEncoder, util

model_path = "ibm-granite/granite-embedding-reranker-english-r2"
# 加载 Sentence Transformer 模型
model = CrossEncoder(model_path)

passages = [
               "Romeo and Juliet is a play by William Shakespeare.",
               "Climate change refers to long-term shifts in temperatures.",
               "Shakespeare also wrote Hamlet and Macbeth.",
               "Water is an inorganic compound with the chemical formula H2O.",
               "In liquid form, H2O is also called 'water' at standard temperature and pressure."
            ]

query = "what is the chemical formula of water?"

# 联合编码查询和段落并计算相关性分数
ranks = model.rank(query, passages, return_documents=True)

# 打印文档排名和相关性分数
for rank in ranks:
    print(f"- #{rank['corpus_id']} ({rank['score']:.2f}): {rank['text']}")

使用 Huggingface Transformers: 这是一个简单的示例,展示如何使用 Transformers 库和 PyTorch 使用重排序模型。

首先,安装所需的库

pip install transformers torch

然后可以使用该模型编码文本对

import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer

model_path = "ibm-granite/granite-embedding-reranker-english-r2"

# 加载模型和分词器
model = AutoModelForSequenceClassification.from_pretrained(model_path).eval()
tokenizer = AutoTokenizer.from_pretrained(model_path)

pairs = [
    ["what is the chemical formula of water?", "Water is an inorganic compound with the chemical formula H2O."],
    ["what is the chemical formula of water?", "In liquid form, H2O is also called 'water' at standard temperature and pressure."],
    ["how to implement quick sort in python?", "The weather is nice today"],
]


# 对输入进行分词
tokenized_pairs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt')

# 编码并计算分数
with torch.no_grad():
    scores = model(**tokenized_pairs, return_dict=True).logits.view(-1, ).float()
    print(scores)

使用 Huggingface Transformers(检索器 + 重排序器端到端): 这是一个简单的示例,展示如何使用 Transformers 库和 PyTorch 将 Granite 检索器和重排序器端到端地结合使用。检索器首先为查询找到最相关的候选文档,然后重排序器对这些候选文档进行重新排序,生成最终的排序列表。

import torch
from transformers import AutoModel, AutoTokenizer, AutoModelForSequenceClassification

# --------------------------
# 1. 加载检索器 (149M)
# --------------------------
retriever_model_path = "ibm-granite/granite-embedding-english-r2"
retriever = AutoModel.from_pretrained(retriever_model_path).eval()
retriever_tokenizer = AutoTokenizer.from_pretrained(retriever_model_path)

# 示例查询 + 候选文档
query = "what is the chemical formula of water?"
documents = [
    "Water is an inorganic compound with the chemical formula H2O.",
    "In liquid form, H2O is also called 'water' at standard temperature and pressure.",
    "The weather is nice today",
    "Quick sort is a divide and conquer algorithm that sorts by partitioning."
]

# 编码查询和文档
with torch.no_grad():
    query_emb = retriever(
        **retriever_tokenizer(query, return_tensors="pt", truncation=True, padding=True)
    ).last_hidden_state[:, 0, :]   # CLS 嵌入

    doc_embs = retriever(
        **retriever_tokenizer(documents, return_tensors="pt", truncation=True, padding=True)
    ).last_hidden_state[:, 0, :]

# 计算余弦相似度
query_emb = torch.nn.functional.normalize(query_emb, dim=-1)
doc_embs = torch.nn.functional.normalize(doc_embs, dim=-1)
similarities = torch.matmul(query_emb, doc_embs.T).squeeze(0)

# 按检索器对文档排序
retriever_ranked = sorted(
    zip(documents, similarities.tolist()),
    key=lambda x: x[1],
    reverse=True
)
print("Retriever ranking:")
for doc, score in retriever_ranked:
    print(f"{score:.4f} | {doc}")


# --------------------------
# 2. 加载重排序器 (149M)
# --------------------------
reranker_model_path = "ibm-granite/granite-embedding-reranker-english-r2"
reranker = AutoModelForSequenceClassification.from_pretrained(reranker_model_path).eval()
reranker_tokenizer = AutoTokenizer.from_pretrained(reranker_model_path)

# 准备 top-k 候选(例如检索器的前 3 个)
top_k = 3
candidate_pairs = [[query, doc] for doc, _ in retriever_ranked[:top_k]]

# 分词并重排序
with torch.no_grad():
    tokenized_pairs = reranker_tokenizer(
        candidate_pairs, padding=True, truncation=True, return_tensors="pt"
    )
    rerank_scores = reranker(**tokenized_pairs).logits.view(-1, ).float()

# 按重排序器对文档排序
reranker_ranked = sorted(
    zip([doc for doc, _ in retriever_ranked[:top_k]], rerank_scores.tolist()),
    key=lambda x: x[1],
    reverse=True
)

print("\nReranker final ranking:")
for doc, score in reranker_ranked:
    print(f"{score:.4f} | {doc}")

使用 Hugging Face Text Embeddings Inference (TEI):

这是一个简单的示例,展示如何通过 Docker 使用 Text Embeddings Inference (TEI) 部署重排序模型,TEI 是一个超快的文本嵌入模型推理解决方案。

  • 在 CPU 上:
docker run -p 8080:80 -v hf_cache:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cpu-latest --model-id ibm-granite/granite-embedding-reranker-english-r2
  • 在 NVIDIA GPU 上:
docker run --gpus all -p 8080:80 -v hf_cache:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cuda-latest --model-id ibm-granite/granite-embedding-reranker-english-r2

然后你可以通过 /rerank 路由向部署的 API 发送请求(更多详情请参阅 Text Embeddings Inference OpenAPI 规范):

curl http://0.0.0.0:8080/rerank \
  -H "Content-Type: application/json" \
  -d '{
    "query": "what is the chemical formula of water?",
    "texts": [
      "Water is an inorganic compound with the chemical formula H2O.",
      "In liquid form, H2O is also called '\''water'\'' at standard temperature and pressure.",
      "The weather is nice today",
      "Quick sort is a divide and conquer algorithm that sorts by partitioning."
    ],
    "raw_scores": false,
    "return_text": false,
    "truncate": true,
    "truncation_direction": "Right"
  }'

评估结果

下表报告了 Granite Embedding English 重排序模型在 BEIR、MLDR 和 Miracl 基准测试上的性能。所有模型都是在从 granite-embedding-english-small-r2 或 granite-embedding-english-r2 检索器检索的 top-20 文档上进行评估的。 每个重排序模型都以其支持的最大序列长度进行评估,而查询被截断为 64 个 token。

模型 参数量 (M) 序列长度 BEIR 平均 MLDR (en) Miracl (en)
检索器:granite-embedding-small-english-r2 47 8192 50.9 40.1 42.4
    ms-marco-MiniLM-L12-v2 33 512 52.0 34.8 54.5
    bge-reranker-base 278 512 51.6 36.7 40.7
    bge-reranker-large 560 512 53.0 37.9 42.2
    gte-reranker-modernbert-base 149 8192 54.8 50.4 54.3
    granite-embedding-reranker-english-r2 149 8192 55.0 44.9 54.2
检索器:granite-embedding-english-r2 149 8192 53.1 41.6 43.6
    ms-marco-MiniLM-L12-v2 33 512 53.2 34.5 55.4
    bge-reranker-base 278 512 53.0 36.6 40.9
    bge-reranker-large 560 512 54.3 38.0 42.3
    gte-reranker-modernbert-base 149 8192 56.1 51.2 54.8
    granite-embedding-reranker-english-r2 149 8192 55.8 45.8 55.2

模型架构和关键特性

最新的 Granite Reranking r2 版本发布了一个英语排序模型,基于 ModernBERT 架构:

  • granite-embedding-reranker-english-r2(149M 参数):输出嵌入大小为 768。

下表展示了两个 R2 模型的结构:

模型 granite-embedding-reranker-english-r2
嵌入大小 768
层数 22
注意力头数 12
中间层大小 1152
激活函数 GeGLU
词表大小 50368
最大序列长度 8192
参数量 149M

训练和优化

r2 模型融合了 ModernBERT 架构的关键增强功能,包括:

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

数据收集

Granite 重排序模型使用来自四个关键来源的数据进行训练:

  1. 从网络抓取的无监督标题-正文配对数据
  2. 具有宽松、企业友好许可证的公开配对数据
  3. 针对特定技术领域的 IBM 内部配对数据
  4. IBM 生成的合成数据

值得注意的是,由于非商业许可证的限制,我们_不使用_流行的 MS-MARCO 检索数据集作为训练语料(许多开源模型因其高质量而使用该数据集)。

底层编码器模型使用 GneissWeb,这是一个 IBM 精选的数据集,完全由开放、商业友好的来源组成。

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

基础设施

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

伦理考量和局限性

用于训练基础语言模型的数据经过过滤,以删除包含仇恨、滥用和亵渎内容的文本。granite-embedding-reranker-english-r2 针对英语进行了微调,上下文长度为 8192 个 token(更长的文本将被截断到此大小)。

资源

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

引用

@misc{awasthy2025graniteembeddingr2models,
      title={Granite Embedding R2 Models}, 
      author={Parul Awasthy and Aashka Trivedi and Yulong Li and Meet Doshi and Riyaz Bhat and Vignesh P and Vishwajeet Kumar and Yushu Yang and Bhavani Iyer and Abraham Daniels and Rudra Murthy and Ken Barker and Martin Franz and Madison Lee and Todd Ward and Salim Roukos and David Cox and Luis Lastras and Jaydeep Sen and Radu Florian},
      year={2025},
      eprint={2508.21085},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2508.21085}, 
}

keisuke-miyako/granite-embedding-reranker-english-r2-onnx-fp32

作者 keisuke-miyako

↓ 1 ♥ 0

创建时间: 2026-02-07 06:16:56+00:00

更新时间: 2026-02-11 16:07:15+00:00

在 Hugging Face 上查看

文件 (7)

.gitattributes
README.md
config.json
model.onnx ONNX
special_tokens_map.json
tokenizer.json
tokenizer_config.json