検索や RAG(Retrieval-Augmented Generation)のパイプラインでは、Embedding(埋め込み)モデルの性能がシステム全体の検索品質をほぼ決めます。クエリと検索対象のドキュメントがベクトル空間上でうまく整列していなければ、後段でどれだけ優秀な LLM や Reranker を使っても、拾えなかった文脈を取り戻すことはできません。
最近、Google が Gemma ファミリーのオープンウェイト(Open-weight)Embedding モデルを Hugging Face で公開しました。クラウドの商用 API だけでなく、ローカルで重みを動かす選択肢も現実的になってきています。そこで、このローカルモデルが Google のマネージド API である Gemini Embedding 2 と比べてどの程度使えるのか、テキストと画像の検索で実際に試してみました。
学術的なベンチマークではなく、実務を想定した比較です。管理されたテキスト文書、画像、キャプションデータを使って、多言語での検索精度とローカル運用の現実的なコスト感を調べました。
今回の日本語キャプションは元データを翻訳したものなので、ネイティブな日本語データセットの厳密な評価というより、多言語でどこまで動くかの目安として見てください。
比較したモデル
インデックスサイズとストレージ条件を揃えるため、どちらも 768 次元の埋め込みでテストしています。
EmbeddingGemma 2
Hugging Face で公開されているオープンウェイトのモデルです(EmbeddingGemma 2 model card)。重みを落とせば自前のサーバーで動くため、データを社外に出せない案件や、API の従量課金を抑えたい環境に向いています。
Gemini Embedding 2
Google のマネージドなマルチモーダル API です(Gemini Embedding 2 documentation)。GPU サーバーの用意やドライバ管理を気にせず、テキストと画像の両方を 1 つの API エンドポイントでベクトル化できます。
検証環境と評価の設定
ローカル側の推論は Google Colab の NVIDIA T4 GPU で動かしました。また、GPU がない場合のコスト感を見るため、CPU での実行時間も計測しています。アカウントやプラン(Google AI プランなど)によっては Colab の計算枠が使える場合もあります。
評価パラメーター
- 埋め込み次元数: 768
- L2正規化
- 類似度: コサイン類似度(Cosine Similarity)
- 順位評価指標: hit@1, hit@5, hit@10, MRR, nDCG@10
- ローカル側: 精度評価は GPU を使用(CPU は実行時間チェックのみ)
- Gemini: API リクエストの生レイテンシ
ベクトルはすべて L2 正規化し、コサイン類似度で順位をつけました。類似度の絶対値ではなく、正解が何位に入ったかで評価しています。
すべての評価スコアは 0 から 1 の範囲です。1 はその指標における完全な検索成功を意味し、0 は 1 件も正解できなかったことを示します。hit@k 指標のスコアは、検索に成功したクエリの割合とおおむね同義です。たとえば hit@1 = 0.80 の場合、全クエリの 80% で正解候補が第 1 位に返されたことを意味します。MRR と nDCG@10 は順位付けの品質を平均化したスコアであり、数値が高いほど正解がより上位に、より適切な順序で並んだことを示します:
-
hit@1: 1位に正解が入った確率 -
hit@5/hit@10: 上位 5 件、または 10 件の中に正解が入った確率 -
MRR(Mean Reciprocal Rank):最初の正解がどれだけ上位に来たかの指標 -
nDCG@10:上位 10 件の並び順の良さ。1 枚の画像に対して複数の正解キャプションがあるケースで差が出ます
検索精度の結果
1. ベトナム語テキスト検索(Text-to-Text)
クエリに対して、候補ドキュメントの中から正しい 1 件を拾えるかをテストしました。
| 指標 | EmbeddingGemma 2 | Gemini Embedding 2 | 差分 |
|---|---|---|---|
| hit@1 | 0.7000 | 0.8200 | +0.1200 |
| hit@5 | 0.8800 | 0.9200 | +0.0400 |
| hit@10 | 0.9200 | 1.0000 | +0.0800 |
| MRR | 0.7662 | 0.8669 | +0.1007 |
| nDCG@10 | 0.7991 | 0.8980 | +0.0989 |
Gemini は 1 位の的中率が高く(82% vs 70%)、MRR と nDCG@10 でも差をつけました。とはいえ、後段に Reranker を置いて top-k 候補を広めに取る設計なら、EmbeddingGemma の 70% も悪くありません。
2. テキストから画像検索(Text-to-Image)
ベトナム語と日本語の説明文から、該当する画像を探すタスクです。
| 言語 | 指標 | EmbeddingGemma 2 | Gemini Embedding 2 | 差分 |
|---|---|---|---|---|
| ベトナム語 | hit@1 | 0.7167 | 0.7667 | +0.0500 |
| hit@5 | 0.9500 | 0.9833 | +0.0333 | |
| hit@10 | 0.9667 | 1.0000 | +0.0333 | |
| MRR | 0.8061 | 0.8533 | +0.0472 | |
| nDCG@10 | 0.8442 | 0.8897 | +0.0455 | |
| 日本語 | hit@1 | 0.7000 | 0.7833 | +0.0833 |
| hit@5 | 0.9667 | 0.9833 | +0.0166 | |
| hit@10 | 0.9667 | 1.0000 | +0.0333 | |
| MRR | 0.8107 | 0.8658 | +0.0551 | |
| nDCG@10 | 0.8485 | 0.8993 | +0.0508 |
Gemini の方が 1 位に当てる率は高いですが、EmbeddingGemma も上位にはしっかり正解を残しています。両言語ともに hit@5 で 95% を超えているため、一次絞り込み用(First-stage retriever)としては十分実用レベルです。
3. 画像からテキスト検索(Image-to-Text)
画像を渡して、該当する説明文を探すタスクです。このテストでは、1 枚の画像に対して複数の正しい説明文が存在します。
| 言語 | 指標 | EmbeddingGemma 2 | Gemini Embedding 2 | 差分 |
|---|---|---|---|---|
| ベトナム語 | hit@1 | 0.7333 | 0.8000 | +0.0667 |
| hit@5 | 0.9333 | 1.0000 | +0.0667 | |
| hit@10 | 0.9667 | 1.0000 | +0.0333 | |
| MRR | 0.8280 | 0.8900 | +0.0620 | |
| nDCG@10 | 0.7913 | 0.8634 | +0.0721 | |
| 日本語 | hit@1 | 0.6667 | 0.7333 | +0.0666 |
| hit@5 | 0.9333 | 0.9667 | +0.0334 | |
| hit@10 | 0.9667 | 1.0000 | +0.0333 | |
| MRR | 0.7846 | 0.8381 | +0.0535 | |
| nDCG@10 | 0.7541 | 0.8350 | +0.0809 |
逆方向でも Gemini が安定して上位に並べました。nDCG@10 の差が大きいのは、Gemini が「正解の1つを当てる」だけでなく、「複数の正解キャプションを揃って上位に集める」ことができているためです。
レイテンシと実行コスト
クラウドの手軽さと、ローカル運用のマシンスペックのトレードオフです。
Gemini Embedding 2 API は、今回の測定で 1 入力あたり平均約 0.8 秒でした。本番運用のレイテンシはネットワークやバッチ処理の組み方で前後します。
EmbeddingGemma は、NVIDIA T4 GPU で動かした場合は 1 入力あたり約 0.427 秒と十分実用的でした。一方、CPU だけで動かすと約 15.4 秒かかりました。ローカルで画像検索を組むなら、GPU は前提条件になります。
まとめと使い分け
精度だけで見れば Gemini Embedding 2 の勝ちですが、使ってみて面白かったのは EmbeddingGemma 2 の実用性の高さです。
特にベトナム語テキストで hit@1 が 70%、画像検索の hit@5 が 95% を超えたのは、追加学習なしの 768 次元ローカルモデルとしてはかなり優秀です。商用 API と比べても、思った以上に戦えます。
Gemini Embedding 2 を選ぶとき
- Reranker を挟まず、1 発目の検索で高精度に当てたい
- GPU インスタンスの管理やドライバ更新などの運用をやりたくない
- すぐに動くマルチモーダル検索環境が欲しい
EmbeddingGemma 2 を選ぶとき
- セキュリティや規約で、テキストや画像を外部 API に送れない
- 大量データを定期的にインデックス化するため、API 従量課金ではなく固定のマシンコストで回したい
- GPU サーバーがあり、2段階検索の1段目(高速な候補絞り込み)として使いたい
GPU が用意できるなら、EmbeddingGemma 2 はデータを手元に残したまま実用的な検索基盤を作る選択肢になります。運用の手軽さと最高精度を求めるなら、引き続き Gemini API が基準になると思います。
