AI・機械学習
上級

BGE-M3(ビージーイーエムスリー)

BGE-M3(BAAI General Embedding M3)とは、北京智源人工智能研究院(BAAI)が開発した多機能・多言語・多粒度(Multi-Functionality, Multi-Linguality, Multi-Granularity)の埋め込みモデルである。Dense・Sparse・ColBERTの3つの検索手法を単一モデルで統合し、100以上の言語に対応する。

0 回閲覧
0 いいね

BGE-M3とは

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である。

3つの検索手法の統合

検索手法出力形式特徴適用場面
Dense1,024次元ベクトル意味的類似度に優れるセマンティック検索
Sparse語彙ベースの疎ベクトルキーワード一致に強い専門用語検索
ColBERTトークン単位ベクトル群細粒度マッチング精密な文書ランキング

3つのスコアを重み付き線形結合で統合することで、単一手法を上回る検索精度を実現する。典型的な重み配分は Dense: 0.4、Sparse: 0.2、ColBERT: 0.4 である。

多言語対応

100以上の言語でクロスリンガル検索が可能であり、日本語・中国語・韓国語などCJK言語でも高い性能を示す。多言語データセットでの学習により、英語クエリで日本語文書を検索するといった異言語間検索にも対応する。MIRACL(Multilingual Information Retrieval Across a Compliment of Languages)ベンチマークでは、多言語検索において最高水準の性能を記録している。

学習手法

3段階の学習パイプライン

  1. RetroMAE による事前学習: マスク付きオートエンコーダでXLM-RoBERTaの表現力を強化
  2. 大規模対照学習: 2.1億ペアの多言語テキストペアで対照学習を実施
  3. 統合ファインチューニング: Dense・Sparse・ColBERTの3つの損失関数を同時に最適化

Self-Knowledge Distillation

学習済みの教師モデル(自身の大規模版)からの知識蒸留を適用し、小規模モデルでも高い性能を維持する手法を採用している。

実装例

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-M3E5-Mistraltext-embedding-3-large
MTEB Retrieval平均66.166.664.6
MIRACL (多言語)71.264.858.3
最大入力長8,19232,7688,191
推論速度 (相対)1.0x0.15xAPI依存

多言語検索ではBGE-M3が他モデルを大きく上回り、推論速度もDecoder-basedのE5-Mistralと比べて約6.7倍高速である。

FAQ

Q1: BGE-M3とBGE-large-en-v1.5の違いは?

BGE-large-en-v1.5は英語特化のDense埋め込みモデル(最大512トークン)であるのに対し、BGE-M3は多言語対応・長文対応・3手法統合のモデルである。英語のみの短文タスクならBGE-large-en-v1.5のほうが軽量で高速だが、多言語・長文・ハイブリッド検索が必要な場合はBGE-M3が適する。

Q2: BGE-M3の推論にGPUは必須か?

FP16モードではGPU(VRAM 4GB以上)推奨だが、ONNX変換やCPU推論も可能である。HuggingFaceのOptimumライブラリでONNX量子化すれば、CPU環境でも実用的な速度(100文/秒程度)で動作する。本番環境では、NVIDIA T4以上のGPUでバッチ処理するのが一般的である。

Q3: Milvusとの組み合わせ方は?

MilvusはBGE-M3のDense・Sparseベクトルをネイティブにサポートしている。pymilvusのBGEM3EmbeddingFunctionを使えば、インデックス作成から検索まで一貫したワークフローを構築できる。ハイブリッド検索時はRRFRanker(Reciprocal Rank Fusion)で結果を統合するのが推奨される。