記事のサマリー(TL;DR)
- 97Mモデルが100M以下オープン多言語埋め込みモデルでMTEB多言語検索スコア60.3点・首位。次点
multilingual-e5-smallの50.9点を+9.4点上回る - 311MモデルはLongEmbed(長文検索)71.7点で500M以下No.1。コンテキスト長はR1比64倍の32Kトークンを実現
- Apache 2.0ライセンス・MS-MARCO不使用で商用展開に対応。LangChain / LlamaIndex / Haystack / Milvusへモデル名1行変更で差し替え可能
日本語RAG・多言語検索システムの設計者が注目すべき実装ポイント
本モデルは52の強化対応言語に日本語(ja)が含まれており、日本語クエリ×英語パッセージのクロスリンガル検索や、和英混在コーパスへのRAG(検索拡張生成)構築で即座に活用できます。
実装面で注目すべき点は3つです。第一に、32Kトークンのコンテキスト長は法律文書・技術マニュアル・長文レポートをチャンク分割せず1件として埋め込める水準で、R1(512トークン)では文書の冒頭しか参照できなかった問題が解消されます。第二に、ONNX・OpenVINOウェイトが同梱されており、GPU不要のCPU推論が標準サポートされているため、コスト重視のオンプレ環境やエッジ配置でも動作します。第三に、97MモデルのONNXウェイトはわずか98MBで、既存の多言語デフォルトモデル paraphrase-multilingual-MiniLM-L12-v2(471MB)の約5分の1です。kintoneや社内SaaSのデータに対してRAGパイプラインを組む場合、LangChainやLlamaIndexとの組み合わせでモデル名を変えるだけでフレームワーク側の変更は不要です。
詳細
モデル概要
IBMは2026年5月14日、ModernBERT エンコーダを基盤とする多言語埋め込みモデル2種をApache 2.0ライセンスで公開しました。
- granite-embedding-311m-multilingual-r2:311Mパラメータ、768次元、Matryoshka次元削減対応
- granite-embedding-97m-multilingual-r2:97Mパラメータ、384次元、コンパクトモデル
両モデルとも200言語以上に対応し、52言語で検索品質を強化。コンテキスト長32,768トークン(R1比64倍)、Python・Go・Java・JavaScript・PHP・Ruby・SQL・C・C++の9言語コード検索に対応します。
エンタープライズ対応設計
学習データはIBMがキュレーションしたデータセット、公開データ、内部生成データの混合です。MS-MARCOおよび非商用ライセンスのデータセットは意図的に除外しています。事前学習にはIBMキュレーションのウェブコーパス「GneissWeb」を使用し、ライセンス・個人データリスクのガバナンスレビューを経ています。
R1からの変更点
R1世代はXLM-RoBERTaエンコーダ(512トークンコンテキスト)でした。R2は以下を刷新しています。
- アーキテクチャ:ModernBERT採用。交互アテンション長によるスループット向上、回転位置埋め込み(RoPE)による32Kコンテキスト、Flash Attention 2.0対応
- トークナイザ:311MモデルはGemma 3トークナイザ(262Kトークン)、97MモデルはGPT-OSSトークナイザを180K語彙にプルーニング。タイ語など非ラテン言語のトークン効率が大幅改善
311Mモデルの学習パイプライン
4段階で構成されます。
- 知識蒸留:Granite 3.3 Instruct・Mistral v0.2 Instructを教師モデルとして検索特化知識を転移
- コントラスティブファインチューニング:52言語・コードの検索ペアでクエリと関連パッセージの識別精度を向上
- モデルマージ:異なる目的(多言語幅 vs. 英語深度)で最適化したチェックポイントをマージ
- Matryoshka表現学習:768次元を512/384/256/128次元に切り詰めても品質劣化を最小化
結果:MTEB多言語検索65.2点(R1比+13.0点)、総合平均56.3点(R1比+14.5点)。
97Mモデルの学習手法
語彙選択と知識蒸留の2段階で構成されます。262K語彙を180Kに削減してパラメータを削減した後、Granite 4.1 8B・Mistral Instructを教師モデルとした知識蒸留とコントラスティブ学習でファインチューニング。311Mモデルの約3分の1のサイズで60.3点を達成しています。
ベンチマーク結果
主要モデルとの比較(スコアが高いほど優秀):
| モデル | パラメータ | MTEB多言語検索 | コード検索 | 英語検索 | LongEmbed |
|---|---|---|---|---|---|
| multilingual-e5-small | 118M | 50.9 | 53.5 | 46.5 | 38.8 |
| granite-embedding-107m-multilingual (R1) | 107M | 48.1 | 40.7 | 47.9 | 34.3 |
| granite-embedding-97m-multilingual-r2 | 97M | 60.3 | 60.4 | 50.1 | 65.6 |
| harrier-oss-v1-270m | 268M | 66.4 | 62.4 | 52.1 | 64.9 |
| jina-embeddings-v5-text-nano | 212M | 63.3 | 71.2 | 58.8 | 63.6 |
| granite-embedding-311m-multilingual-r2 | 311M | 65.2 (2位) | 63.8 (3位) | 52.6 (5位) | 71.7 (1位) |
| multilingual-e5-large | 560M | 53.7 | 55.8 | 51.5 | 40.4 |
特筆点:
- LongEmbedがR1→R2で最大の伸び:97Mで+31.3点、311Mで+34.0点。32Kコンテキストの直接的な恩恵
- コード検索:97Mで+19.7点、311Mで+15.3点向上
paraphrase-multilingual-MiniLM-L12-v2(多くのフレームワークのデフォルト、36.6点)に対し97M R2は+23.7点上回り、モデルサイズも小さい(97M vs 110M)
速度とスループット(NVIDIA H100、512トークンチャンク)
- 97Mモデル:2,500ドキュメント/秒超。
multilingual-e5-small同等スループットで検索精度は大幅上位 - 311Mモデル:約1,800ドキュメント/秒。
jina-embeddings-v5-text-nanoより検索精度が高く(65.2 vs 63.3)、エンコード速度は5.5倍以上
Matryoshka埋め込み(311Mモデル)
768次元→256次元(ストレージ・類似度計算コスト3分の1)へ削減しても、MTEB多言語検索のスコア低下は0.5点のみ(65.2→64.7)。128次元(6分の1)でも63.7点を維持し、フルスコアの97%以上を保持します。
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)
311Mを384次元に切り詰めた場合でも、97Mネイティブ384次元出力より全ベンチマークで優位です。
クロスリンガル検索
| モデル | 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 |
97M R2モデルはBelebeleスコアがR1比−2.2点と若干低下しています。180K語彙への削減・レイヤー数削減(22→12)によるトレードオフで、多言語幅・長文検索の大幅改善と引き換えになっています。多数の言語ペア間クロスリンガル転移が主用途なら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?", # 英語
"ドイツの首都はどこですか?", # 日本語
]
passages = [
"富士山は日本最高峰の独立峰である。",
"Berlin ist die Hauptstadt der Bundesrepublik Deutschland.",
]
q_emb = model.encode(queries)
p_emb = model.encode(passages)
print(util.cos_sim(q_emb, p_emb))
# 各クエリは言語をまたいで対応パッセージに最高スコアを付与
LangChain・LlamaIndex・Haystack・Milvusはモデル名1行変更でドロップイン対応。ONNX・OpenVINOウェイトによるCPU最適化推論、vLLMによる埋め込みエンドポイント、llama.cppを使ったGGUF変換・Ollamaへの対応も可能です。
フレームワーク統合担当者向け情報
- ライセンス:Apache 2.0、MS-MARCOは不使用
- API互換性:タスク固有プレフィックス不要。
all-MiniLM-L6-v2と同等のAPI動作 - 次元数:384次元(97M)・768次元(311M)で既存デフォルトと一致。インデックス移行不要
- 重みサイズ:97Mモデルのsafetensors重みは195MB。量子化ONNXは98MB(
all-MiniLM-L6-v2の91MBと同等で200言語以上対応) - CPU対応:ONNX・OpenVINOウェイト同梱。GPU不要
どちらのモデルを選ぶか
| 用途 | 推奨モデル |
|---|---|
| 最高の多言語検索精度 | 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 Multilingual Embedding R2テクニカルレポートを参照してください。フィードバックや質問はGitHubのibm-granite/granite-embedding-modelsへ。