BAAI(北京智源人工知能研究院)が開発した多言語・多粒度・多機能の埋め込みモデル。Dense・Sparse・ColBERT の3種類のベクトルを同時生成し、100言語以上に対応する2024年公開のオープンソース Embedding モデル。
BGE-M3は、中国の北京智源人工知能研究院(BAAI)が2024年1月に公開したオープンソースのテキスト埋め込みモデルである。名称の「M3」は Multi-linguality(多言語)、Multi-functionality(多機能)、Multi-granularity(多粒度)の3つの「M」に由来する。1つのモデルで Dense・Sparse・ColBERT の3種類のベクトル表現を同時生成でき、100言語以上・最大8,192トークンの入力に対応する。
| 方式 | ベクトル形状 | 得意な場面 | 速度 |
|---|---|---|---|
| Dense | 1024次元の1ベクトル | セマンティック類似検索 | 高速 |
| Sparse |
| 語彙サイズの疎ベクトル |
| キーワード完全一致・専門用語 |
| 高速 |
| ColBERT | トークン数×1024の行列 | 高精度リランキング | 低速 |
実用的には Dense + Sparse のハイブリッド検索でリコール率を最大化し、ColBERT でリランキングする3段階パイプラインが推奨される。
| ベンチマーク | BGE-M3 | E5-Mistral | Voyage-3 |
|---|---|---|---|
| MIRACL(多言語検索) | 71.8 nDCG@10 | 64.2 | — |
| MTEB Retrieval(英語) | 58.4 nDCG@10 | 56.9 | 67.3 |
| BEIR(英語14タスク平均) | 51.8 nDCG@10 | 50.1 | — |
| 最大入力長 | 8,192 tokens | 4,096 tokens | 16,000 tokens |
多言語検索(MIRACL)では圧倒的な強さを見せるが、英語単一ではVoyage-3等のクローズドモデルに劣る場面もある。
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
sentences = ["BGE-M3は多言語埋め込みモデルです", "RAGパイプラインで使用されます"]
embeddings = model.encode(sentences, return_dense=True, return_sparse=True, return_colbert_vecs=True)
# Dense vector: embeddings['dense_vecs'] → shape (2, 1024)
# Sparse vector: embeddings['lexical_weights'] → list of dict
# ColBERT vector: embeddings['colbert_vecs'] → list of (seq_len, 1024)
Sentence Transformers・LlamaIndex・LangChain等の主要フレームワークでも対応済み。
BGE-M3の独自性は「1モデル3方式」のマルチ機能性にある。E5-MistralはLLMベースの高品質Dense埋め込み、Voyage-3はAPIサービスとしての利便性、GTE-Qwen2はQwen2ベースの軽量高性能、Jina Embeddings v3はタスク別LoRAアダプタでそれぞれ差別化する。多言語RAGではBGE-M3が第一選択。
Q1: BGE-M3はGPU必須? A: 推論はCPUでも可能だが、568Mパラメータのため実用的にはGPU推奨。FP16で約1.1GB VRAM消費。バッチ推論ではRTX 3060以上で快適に動作する。
Q2: OpenAI text-embedding-3-smallと比べてどう? A: OpenAIはAPI経由で手軽だが多言語性能でBGE-M3に劣る(特に日本語・中国語)。Sparse/ColBERT非対応のため検索精度の上限もBGE-M3が上。ただしOpenAIの方がインフラ管理不要。
Q3: LM StudioやOllamaで動かせる?
A: BGE-M3はLM Studioで対応済み(GGUF形式)。Ollamaでも ollama pull bge-m3 でローカル実行可能。量子化版(Q4_K_M等)ならVRAM 600MB程度で動作。