有料の埋め込みAPIにコストをかけ続ける必要はありません。Google DeepMindが公開したEmbeddingGemmaは、300Mパラメータながら500M未満のモデルの中で最高水準の性能を持つオープン埋め込みモデルです。llama.cppのGGUFバージョンを使えばCPUだけでローカル実行でき、エージェントのメモリ検索コストをゼロにできます。

この記事でわかること:

  • EmbeddingGemmaがなぜサイズに対して高性能なのか
  • MTEBベンチマークでの具体的なスコアと次元の選び方
  • llama.cppでのローカル実行とOpenAI互換サーバーの立て方
  • QAT量子化バージョンの使い分け

https://huggingface.co/google/embeddinggemma-300m

有料埋め込みAPIの課題

AIエージェントの「記憶」はベクトル検索で動いています。会話履歴、参照ドキュメント、タスクの文脈——これらをベクトルに変換して類似度検索をかけるのがRAGの基本構造です。

問題は、テキストをベクトルに変換する「埋め込みモデル」にOpenAIやGeminiなどのAPIを使うとリクエストごとに費用がかかる点です。エージェントが頻繁にメモリを参照する構成では、この費用が積み上がります。

ローカルで動く高性能な埋め込みモデルがあれば、コストをゼロにできます。EmbeddingGemmaはその選択肢として有力です。

EmbeddingGemmaとは

Google DeepMindが2025年9月に公開した、300Mパラメータのオープン埋め込みモデルです。Gemma 3ファミリーをベースに、T5Gemmaで初期化する独自の学習レシピが採用されており、Geminiモデルの開発技術が流用されています。

際立った点はサイズに対する性能の高さです。Massive Text Embedding Benchmark(MTEB)の英語評価では平均スコア69.67を記録し、パラメータ数が500M未満のモデルの中で最高水準に達しています。論文(参考)によると、パラメータ数が2倍の大型モデルと同等の性能を持つとされています。100以上の言語でトレーニングされており、日本語のテキストにも対応します。

主な仕様と性能

入力は最大2048トークンで、出力は768次元のベクトルです。Matryoshka Representation Learning(MRL)という技術によって、出力を512・256・128次元に圧縮することもできます。次元を落とすほど検索速度と保存コストが改善しますが、精度はわずかに下がります。

MTEB多言語ベンチマーク(v2)での結果は次のとおりです。

次元数 タスク平均スコア
768次元 61.15
512次元 60.71
256次元 59.68
128次元 58.23

128次元まで落としても精度の落ち幅は約3ポイントと小さく、ストレージやメモリが限られる環境でも実用的に使えます。

llama.cppでローカル実行する

llama.cppを使うと、EmbeddingGemmaをGPUなしのCPUだけで動かせます。GGUFフォーマットのモデルファイルはHugging Faceで公開されています。

# GGUFモデルをダウンロード(Q8_0版)
huggingface-cli download ggml-org/embeddinggemma-300M-GGUF \
  embeddinggemma-300M-Q8_0.gguf --local-dir .

# テキストを埋め込みベクトルに変換
./llama-embedding -m ./embeddinggemma-300M-Q8_0.gguf \
  --pooling mean \
  --embd-output-format json \
  -p "検索したいテキスト" 2>/dev/null

OpenAI互換のサーバーとして起動する方法もあります。

./llama-server -m ./embeddinggemma-300M-Q8_0.gguf --embedding --port 8080

起動後は /v1/embeddings エンドポイントにPOSTリクエストを送ると、OpenAIのembeddings APIと同じ形式でレスポンスが返ります。既存のRAGシステムのAPIベースURLを差し替えるだけで移行できます。複数のテキストをまとめて埋め込みに変換するバッチ処理もサポートしています。

QAT量子化バージョンの選び方

Googleは量子化対応学習(QAT: Quantization-Aware Training)を施したバージョンも公開しています。通常の量子化は学習済みの重みを事後的に圧縮しますが、QATは量子化を前提として学習するため精度の劣化が少なく、同じビット数でも通常の量子化より高い精度を維持します。

Hugging Faceで入手できる主なGGUF版は次のとおりです。

  • ggml-org/embeddinggemma-300M-GGUF(Q8_0)— 標準精度・汎用
  • ggml-org/embeddinggemma-300m-qat-q8_0-GGUF — QAT版Q8、精度優先
  • ggml-org/embeddinggemma-300m-qat-q4_0-GGUF — QAT版Q4、低メモリ向け

スペックに余裕がある環境ではQAT Q8、メモリが限られるデバイスや大量リクエストをさばく構成ではQAT Q4が選択肢になります。QAT版は通常の量子化と比べて同じサイズで精度が高いため、基本的にQAT版を選ぶのが無難です。

なぜ今ローカル埋め込みが現実的なのか

EmbeddingGemmaが登場する前、ローカルで動く埋め込みモデルは精度とサイズのトレードオフに悩まされていました。実用的な精度を得るには大きなモデルが必要で、CPUだけでは速度が出ないケースも多かった。

300Mパラメータで2倍サイズのモデルと同等の性能が出るということは、コンシューマー向けのラップトップやミニPCでも十分に動く性能水準に達したことを意味します。エージェントのメモリ検索という頻度の高いタスクをローカルにオフロードする選択が、より現実的になっています。