BGE-M3(BAAI General Embedding M3)とは、北京智源人工智能研究院(BAAI)が開発した多機能・多言語・多粒度(Multi-Functionality, Multi-Linguality, Multi-Granularity)の埋め込みモデルである。Dense・Sparse・ColBERTの3つの検索手法を単一モデルで統合し、100以上の言語に対応する。
PC構成ビルダーで最適なパーツを選択
BGE-M3は2024年1月にBAAIが公開したオープンソース埋め込みモデルで、その名前は3つの「M」——Multi-Functionality(多機能性)、Multi-Linguality(多言語性)、Multi-Granularity(多粒度性)——に由来する。HuggingFace上でBAAI/bge-m3として公開されており、Apache 2.0ライセンスで商用利用可能である。
従来の埋め込みモデルはDense検索(意味的類似度)に特化するものが多かったが、BGE-M3はDense、Sparse(語彙マッチング)、ColBERT(トークンレベルの遅延相互作用)の3方式を単一モデルから同時に出力できる点が画期的である。これにより、別々のモデルを運用する必要がなくなり、運用コストとアーキテクチャの複雑さを大幅に削減できる。
BGE-M3はXLM-RoBERTa-largeをベースモデルとして採用し、最大8,192トークンの長文入力に対応する。パラメータ数は約5.68億(568M)で、出力ベクトル次元は1,024である。
| 検索手法 | 出力形式 | 特徴 | 適用場面 |
|---|---|---|---|
| Dense | 1,024次元ベクトル | 意味的類似度に優れる | セマンティック検索 |
| Sparse | 語彙ベースの疎ベクトル | キーワード一致に強い | 専門用語検索 |
| ColBERT | トークン単位ベクトル群 | 細粒度マッチング | 精密な文書ランキング |
3つのスコアを重み付き線形結合で統合することで、単一手法を上回る検索精度を実現する。典型的な重み配分は Dense: 0.4、Sparse: 0.2、ColBERT: 0.4 である。
100以上の言語でクロスリンガル検索が可能であり、日本語・中国語・韓国語などCJK言語でも高い性能を示す。多言語データセットでの学習により、英語クエリで日本語文書を検索するといった異言語間検索にも対応する。MIRACL(Multilingual Information Retrieval Across a Compliment of Languages)ベンチマークでは、多言語検索において最高水準の性能を記録している。
学習済みの教師モデル(自身の大規模版)からの知識蒸留を適用し、小規模モデルでも高い性能を維持する手法を採用している。
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
queries = ['LLMの推論速度を改善する方法は?']
documents = [
'量子化により推論速度を2-4倍高速化できる',
'Speculative Decodingは小型モデルで候補トークンを生成する',
'バッチサイズの最適化も重要な高速化手法である'
]
# Dense + Sparse + ColBERT の3方式で同時にエンコード
query_output = model.encode(queries, return_dense=True, return_sparse=True, return_colbert_vecs=True)
doc_output = model.encode(documents, return_dense=True, return_sparse=True, return_colbert_vecs=True)
| ベンチマーク | BGE-M3 | E5-Mistral | text-embedding-3-large |
|---|---|---|---|
| MTEB Retrieval平均 | 66.1 | 66.6 | 64.6 |
| MIRACL (多言語) | 71.2 | 64.8 | 58.3 |
| 最大入力長 | 8,192 | 32,768 | 8,191 |
| 推論速度 (相対) | 1.0x | 0.15x | API依存 |
多言語検索ではBGE-M3が他モデルを大きく上回り、推論速度もDecoder-basedのE5-Mistralと比べて約6.7倍高速である。
BGE-large-en-v1.5は英語特化のDense埋め込みモデル(最大512トークン)であるのに対し、BGE-M3は多言語対応・長文対応・3手法統合のモデルである。英語のみの短文タスクならBGE-large-en-v1.5のほうが軽量で高速だが、多言語・長文・ハイブリッド検索が必要な場合はBGE-M3が適する。
FP16モードではGPU(VRAM 4GB以上)推奨だが、ONNX変換やCPU推論も可能である。HuggingFaceのOptimumライブラリでONNX量子化すれば、CPU環境でも実用的な速度(100文/秒程度)で動作する。本番環境では、NVIDIA T4以上のGPUでバッチ処理するのが一般的である。
MilvusはBGE-M3のDense・Sparseベクトルをネイティブにサポートしている。pymilvusのBGEM3EmbeddingFunctionを使えば、インデックス作成から検索まで一貫したワークフローを構築できる。ハイブリッド検索時はRRFRanker(Reciprocal Rank Fusion)で結果を統合するのが推奨される。