LLM埋め込みモデル(Embedding Model)とは、テキストや画像などのデータを固定長の高次元ベクトルに変換し、意味的な類似度を数値的に計算可能にするニューラルネットワークモデルである。RAG(検索拡張生成)やセマンティック検索、クラスタリング、分類など幅広いNLPタスクの基盤技術として利用される。
LLM埋め込みモデルは、テキストを高次元の密ベクトル(dense vector)に変換する技術である。従来のBag-of-Words(BoW)やTF-IDFといった疎ベクトル表現と異なり、単語や文の意味的な関係性を連続的な数値空間上に写像することで、「意味の近さ」をコサイン類似度やユークリッド距離で定量的に評価できる。
2024年以降、OpenAI text-embedding-3-large(3,072次元)やBAAI BGE-M3(最大8,192トークン)など、大規模言語モデルのアーキテクチャを活用した埋め込みモデルが急速に進化している。これらのモデルはRAGパイプラインのリトリーバル精度を直接左右するため、LLMアプリケーション構築において極めて重要な選択肢となっている。
BERTやRoBERTaに代表されるEncoder-only構造は、双方向の文脈理解により高品質な文表現を生成する。Sentence-BERT(SBERT)はBERTにSiameseネットワーク構造を適用し、文ペアの類似度計算を効率化した先駆的モデルである。
Mistral 7BやLlama 2をベースにしたE5-MistralやGTE-Qwen2は、LLMのデコーダアーキテクチャを埋め込みタスクに転用する。大規模な事前学習知識を活用できる反面、推論コストが高い傾向がある。
BGE-M3のように、Dense・Sparse・ColBERTの3つの検索手法を単一モデルで統合するアプローチも登場している。
| アーキテクチャ | 代表モデル | 次元数 | 最大トークン | 特徴 |
|---|---|---|---|---|
| Encoder-only | SBERT, E5-base | 384-1,024 | 512 | 高速・軽量 |
| Decoder-based | E5-Mistral, GTE-Qwen2-7B | 4,096 | 32,768 | 高精度・高コスト |
| ハイブリッド | BGE-M3 | 1,024 |
| 8,192 |
| 多手法統合 |
| API提供 | text-embedding-3-large | 256-3,072 | 8,191 | 次元削減可能 |
正例ペア(意味的に近い文のペア)と負例ペアを区別するよう学習する。InfoNCE損失やMultiple Negatives Ranking Loss(MNRL)が代表的で、バッチ内の他サンプルをハード負例として活用するIn-batch Negatives手法が広く採用されている。
E5やVoyageでは、入力テキストの前にタスク指示(例: query: や passage: )を付与することで、検索・分類・クラスタリングなど異なるタスクに対して最適化されたベクトルを生成する。INSTRUCTOR(Hkunlp)はこの手法の先駆者であり、タスク指示を明示的にモデルに渡すことで汎用性を確保している。
OpenAI text-embedding-3シリーズで採用された手法で、ベクトルの先頭N次元を切り取っても高い性能を維持できるよう学習する。3,072次元のモデルを256次元に削減しても、MTEBベンチマークで従来の1,536次元モデルを上回る性能を示す。ストレージコストと検索速度のトレードオフを柔軟に調整できる。
| モデル | 提供元 | 次元数 | MTEB平均 | 多言語 | コスト ($/1Mトークン) |
|---|---|---|---|---|---|
| text-embedding-3-large | OpenAI | 3,072 | 64.6 | 限定的 | $0.13 |
| text-embedding-3-small | OpenAI | 1,536 | 62.3 | 限定的 | $0.02 |
| BGE-M3 | BAAI | 1,024 | 66.1 | 100+言語 | 無料(OSS) |
| Voyage-3 | Voyage AI | 1,024 | 67.3 | 対応 | $0.06 |
| E5-Mistral-7B | Microsoft | 4,096 | 66.6 | 対応 | 無料(OSS) |
| GTE-Qwen2-7B | Alibaba | 3,584 | 67.2 | 対応 | 無料(OSS) |
| Cohere embed-v3 | Cohere | 1,024 | 64.5 | 100+言語 | $0.10 |
| Jina-embeddings-v3 | Jina AI | 1,024 | 65.5 | 89言語 | $0.02 |
埋め込みモデルで生成されたベクトルは、効率的な類似検索のためにベクトルデータベースに格納される。主要な選択肢は以下の通りである。
専用ベクトルDB: Pinecone、Milvus、Qdrant、Weaviate、Chroma。ANN(Approximate Nearest Neighbor)インデックスにより大規模データでも高速検索が可能。
既存DBの拡張: PostgreSQL + pgvector、Elasticsearch knn_search、Redis Vector Search。既存インフラに統合できる利点がある。pgvectorはHNSW(Hierarchical Navigable Small World)インデックスをサポートし、100万ベクトル規模でも実用的な検索速度を実現する。
# pgvectorでの埋め込みベクトル検索例
from sentence_transformers import SentenceTransformer
import psycopg2
model = SentenceTransformer('BAAI/bge-m3')
query_vector = model.encode('LLMの推論最適化手法')
conn = psycopg2.connect(dsn)
cur = conn.cursor()
cur.execute("""
SELECT id, title, 1 - (embedding <=> %s::vector) AS similarity
FROM documents
ORDER BY embedding <=> %s::vector
LIMIT 10
""", (query_vector.tolist(), query_vector.tolist()))
次元数が多いほど情報の表現力は高まるが、ストレージコスト・検索速度・メモリ使用量も増加する。Matryoshka表現学習により、高次元モデルの先頭部分を切り取って低次元で利用する手法が実用的である。OpenAI text-embedding-3-largeは3,072次元だが、256次元に削減しても多くのタスクで実用的な精度を維持する。用途とインフラ制約に応じて最適な次元数を選択すべきである。
主要な選択基準は以下の4点である。(1) 対象言語の対応状況(日本語を含む場合はBGE-M3やmultilingual-e5-largeが有力)、(2) MTEBベンチマークのRetrieval部門スコア、(3) 最大入力トークン数(長文ドキュメントにはBGE-M3の8,192トークンが有利)、(4) 推論コストとレイテンシ。本番環境では、自社ドメインのデータで評価し、ベンチマーク結果だけに依存しないことが重要である。
汎用埋め込みモデルは多くのタスクで高い性能を示すが、専門ドメイン(医療・法律・金融など)では、ドメイン固有のペアデータでファインチューニングすることで5-15%の精度向上が見込める。Sentence Transformersライブラリはファインチューニング用のTrainerクラスを提供しており、数千ペアのデータから効率的に学習できる。ただしデータ収集コストとの費用対効果を事前に評価すべきである。
Dense Embeddingは全次元に非ゼロ値を持つ連続ベクトルで、意味的類似度の捕捉に優れる。Sparse Embedding(BM25やSPLADE)はほとんどの次元がゼロの疎ベクトルで、キーワード一致に強い。BGE-M3のようなハイブリッドモデルは両方を統合し、意味検索とキーワード検索の長所を組み合わせている。