5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】Gemini Embedding 2 がGAに ― Embeddingの代表的なユースケースを整理する

5
Last updated at Posted at 2026-05-01

はじめに

2026年4月22日、Gemini Embedding 2 が GA(一般提供開始)となりました。

Gemini Embedding 2 は、テキストだけでなく、画像・動画・音声・PDF を単一の埋め込み空間にマッピングできる、Gemini API 初のマルチモーダル埋め込みモデルです。100以上の言語にも対応しています。

Embedding というと、RAG のための文書検索に使うもの、という印象が強いかもしれません。しかし公式ブログやドキュメントを眺めると、検索、ビジュアル検索、再ランキング、分類、クラスタリング、異常検知など、かなり広い用途があることがわかります。

この記事では、Gemini Embedding 2 のGAをきっかけに、Embeddingの代表的なユースケースを公式情報ベースで整理します。「触ってみた」というより、何に使えるのかの見取り図を作る、という位置づけです。

※本記事は個人の整理メモです。

参照した一次情報は主に以下の2つです。

fig0_scope.png

Gemini Embedding 2 とは

まずは仕様を簡潔に整理します。

項目 内容
モデルID gemini-embedding-2
GAリリース日 2026年4月22日
提供チャネル Gemini API / Gemini Enterprise Agent Platform(Vertex AI 経由のドキュメントも提供)
入力 テキスト、画像、動画、音声、PDF
出力 埋め込みベクトル
出力次元 128〜3072(推奨:768 / 1536 / 3072、デフォルト 3072)
入力トークン上限 8,192トークン
1リクエストあたりの上限 画像6枚、動画 最大120秒(音声付き動画は最大80秒)、音声 最大180秒、PDF 6ページ
入力上限の注記 ※ 音声付き動画は最大80秒、音声なし動画は最大120秒として扱われます。利用チャネル(Gemini API / Agent Platform / Vertex AI)により仕様の見え方に差があるため、本番利用前に最新ドキュメントを確認してください。
対応言語 100以上

特徴としては、複数モダリティを同じ意味空間に投影できる点が大きいです。たとえば「犬」というテキストと、犬の画像を、同じベクトル空間内で類似度比較できます。

fig1_modalities.png

さらに、テキストと画像を組み合わせたインターリーブ入力を1リクエストで処理し、1つの集約ベクトルとして返すこともできます。たとえば「ユーザーが投稿したテキスト+添付画像」をひとまとめに埋め込みたい、というケースに向いています。

from google import genai
from google.genai import types

client = genai.Client()

with open('dog.png', 'rb') as f:
    image_bytes = f.read()

result = client.models.embed_content(
    model='gemini-embedding-2',
    contents=[
        "An image of a dog",
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
    ]
)

print(result.embeddings)

入力ごとに別々のベクトルが必要なときは、Batch API を使う形になります。

また、Gemini Embedding 2 は Matryoshka Representation Learning (MRL) で訓練されています。これにより、デフォルトの3072次元の出力を、output_dimensionality で768や1536などに切り詰めても、品質を大きく落とさずにストレージ・検索コストを抑えられます。

ユースケース1:Agentic Multimodal RAG

RAG におけるEmbeddingの基本的な役割は次の通りです。

  1. 文書やデータをベクトル化してベクターDBに保存する
  2. ユーザーの質問もベクトル化する
  3. 類似度で関連情報を検索する
  4. LLMに検索結果を渡して回答を生成する

Gemini Embedding 2 では、テキスト文書だけでなく、PDF・画像・音声・動画も含めた検索・参照に広げやすいのがポイントです。公式ブログでは、AIエージェントが多数のファイルをスキャンしてコードベースを修正したり、複数のPDFを突き合わせたりするような、エージェント的なマルチステップ推論の文脈でマルチモーダルEmbeddingが紹介されています。

導入事例として、リーガルAIプラットフォームの Harvey は、従来のEmbeddingと比較して法務特化ベンチマークで Recall@20 が3%向上し、引用や回答の精度向上につながったと紹介されています。

task prefix で精度を上げる

Gemini API では、用途に応じてクエリ・ドキュメントの先頭にタスク指示(task prefix)を付けることが推奨されています。非対称検索(短いクエリ ↔ 長い文書)では、クエリ側とドキュメント側で別の prefix を使います。

# クエリ側:用途に応じて prefix を選ぶ
def prepare_query(content):
    return f"task: question answering | query: {content}"
    # return f"task: fact checking | query: {content}"
    # return f"task: code retrieval | query: {content}"
    # return f"task: search result | query: {content}"

# ドキュメント側:title と text を付ける
def prepare_document(content, title=None):
    if title is None:
        title = "none"
    return f"title: {title} | text: {content}"

公式ブログでは、インデックス時とクエリ時の両方に prefix を適用すると検索精度が大きく向上すると明記されています。地味ですが効果が大きい部分なので、忘れずに両側に入れておくのが良さそうです。

fig2_task_prefix.png

ただし、Embedding はあくまで検索・類似度計算の基盤です。チャンク設計、評価、権限管理、再ランキングなど、RAG全体を支える要素も重要なので、「Embeddingを差し替えれば万能」というわけではない点は意識しておきたいところです。

ユースケース2:マルチモーダル検索 / ビジュアル検索

Gemini Embedding 2 の特徴が一番伝わりやすいのが、この用途です。

  • テキストで画像を探す
  • 画像で類似商品を探す
  • 写真とブランド名から在庫やカタログを照合する
  • 動画や音声も含めて意味検索する

このタスクでは、task: search result | query: {content} という prefix を使います。

代表的な事例として、URBN傘下の衣類レンタル企業 Nuuly は、倉庫で撮影した衣類写真をカタログ画像と照合して、タグのない衣類を特定する社内ビジュアル検索ツールで Gemini Embedding 2 を採用しています。結果として、Match@20 の精度が60%から約87%、製品識別率が74%から90%以上に向上したと公式ブログで紹介されています。

業務アプリの観点では、在庫照合、商品検索、ナレッジ検索、現場写真検索といった応用先が見えてきます。「画像検索」というと従来はファイル名やタグでの検索を指すことが多かったですが、ここで言うのは意味的に近い画像や商品を探せる検索です。

ユースケース3:記憶・パーソナライズ検索

「ユーザーの記憶」「行動履歴」「メモ」をEmbeddingで横断検索する用途も増えています。

公式ブログでは、Supermemory が「記憶のためのベクターDB」を構築し、断片的なメモ間の概念的な検索を実現している事例が紹介されています。Gemini Embedding 2 を統合した結果、検索の Recall@1 が 40% 向上し、インデックス、検索、Q&Aといったコア検索パイプライン全体に活かされているとのことです。

Embeddingは「文書検索」だけでなく、ユーザー固有の記憶・行動履歴の検索にも使える、という方向性を示す事例です。

ただし、個人データを扱う場合はプライバシー、保持期間、同意、削除、アクセス制御などへの配慮が欠かせません。Embedding化されたベクトルは元データを完全に消したことにはならない、という点も意識しておきたいところです。

※ 本記事中の Recall@k / Match@k の改善率(Harvey、Nuuly、Supermemory の事例)は、公式 Developers Blog の表現をそのまま引用しています。絶対値のポイント改善か相対改善かは原文の表記に依拠するため、厳密な比較が必要な場合は原典をご確認ください。

ユースケース4:検索結果の再ランキング

検索結果を一度取得したあと、Embeddingの類似度で並べ替える、という使い方もあります。

ベクトル検索や全文検索でTop-Nを取得 → クエリと各候補のEmbedding類似度(コサイン類似度や内積)でスコア計算 → 並べ替え、という流れです。

import numpy as np

# 1. 内積(コサイン類似度)の計算関数
def dot_product(a, b):
    return (np.array(a) @ np.array(b).T)

# 2. 検索結果とクエリを埋め込み
search_res = get_embeddings(summaries)
embedded_query = get_embeddings([query])

# 3. 類似度スコアを計算
sim_value = dot_product(search_res, embedded_query)

# 4. 最も関連性の高いものを選ぶ
best_match_index = np.argmax(sim_value)

応用テクニックとして、クエリに対する仮の回答(hypothetical answer)をLLMで生成し、そのEmbeddingと検索結果を比較してランク付けする、というアプローチも公式ブログで紹介されています(HyDE系の手法)。

RAGの回答品質を上げるには、検索結果をそのまま使うのではなく、再ランキングやフィルタリングを挟むことが効くケースが多い、というのは押さえておきたいポイントです。

ユースケース5:分類・クラスタリング・異常検知

ここで「EmbeddingはRAGだけではない」が一気に強くなる章です。

Embeddingは、データ間の関係性を捉えてクラスタを作ったり、外れ値を見つけたりする用途にも使えます。これは感情分析や異常検知の基盤としても機能します。

これらは対称的なユースケース(クエリと文書を区別しない)なので、両側に同じ prefix を使います。

def prepare_query_and_document(content):
    # 用途に応じて、いずれかの prefix を有効化して使う
    # return f'task: clustering | query: {content}'
    # return f'task: sentence similarity | query: {content}'
    # return f'task: classification | query: {content}'
    pass

具体例としては次のようなものが考えられます。

  • 問い合わせ文の自動分類
  • 顧客コメント・レビューのクラスタリング
  • 類似チケットの検出
  • 異常なログ・レビューの検知
  • 画像やPDFを含むデータのグルーピング

Gemini API の Cookbook には、クラスタリング、テキスト分類、異常検知それぞれのノートブックが公開されているので、最初の取っ掛かりとして参照しやすいです。

fig3_usecases.png

実装Tips

出力次元の選び方

デフォルトは 3072次元、推奨値は 768 / 1536 / 3072 です。MRL によって、3072から切り詰めても精度低下が抑えられるよう設計されているため、コストやストレージを優先する場合は 768 や 1536 から始めて、必要に応じて上げていくのが現実的です。

result = client.models.embed_content(
    model="gemini-embedding-2",
    contents="What is the meaning of life?",
    config={"output_dimensionality": 768}
)

fig4_mrl.png

コスト最適化

オンライン用途以外であれば、Gemini API の Batch API を使うとデフォルト価格の50%でスループットを上げられます(Developers Blog 記載)。大規模な再埋め込みや初期インデックス構築では特に効きます。

ただし、Agent Platform / Vertex AI 側では Batch prediction の対応状況が異なる場合があるため、利用チャネルごとの最新仕様を確認してください。

ベクターDB

公式ブログでは、Agent Platform の Vector Search、Pinecone、Weaviate、Qdrant、ChromaDB などが連携先として挙げられています。GCP上で完結させたいなら AlloyDB(pgvector)や BigQuery との統合も選択肢になります。

旧モデルからの移行

gemini-embedding-001 はテキスト用途中心のモデル、gemini-embedding-2 はテキスト・画像・動画・音声・PDFを統一空間にマッピングするマルチモーダルモデルです。

既存の gemini-embedding-001 で作ったベクトルと、gemini-embedding-2 のベクトルを同じインデックス内でそのまま比較する設計は避け、移行時は再埋め込みを前提に考えるのが安全です。次元数の見直しや、task prefix の適用方針もこのタイミングで整理しておくと良さそうです。

用語ミニ解説

fig5_glossary.png

本文中に出てきた用語のうち、初見だと立ち止まりやすいものを短くまとめておきます。

  • Recall@k:検索結果の上位k件に正解が含まれる割合。k=1 が最も厳しい指標で、1位に正解が来る割合を表す。
  • Match@k:類似画像検索などで、上位k件の中に正解(マッチすべきアイテム)が含まれる割合。Recall@k と同じ考え方を画像検索文脈で言い換えたもの。
  • コサイン類似度 / 内積:2つのベクトルがどれくらい近い向きを向いているかを示すスコア。正規化済みベクトルでは、内積をコサイン類似度と近い形で扱える。
  • task prefix:クエリや文書の先頭に task: question answering | query: ... のような指示を付けて、Embedding を用途に最適化する仕組み。
  • MRL(Matryoshka Representation Learning):1つのEmbeddingを「先頭から切り詰めても意味が保たれる」ように学習する手法。次元数を柔軟に選べる。
  • HyDE(Hypothetical Document Embeddings):クエリに対する仮の回答をLLMに生成させ、そのEmbeddingで検索する手法。短いクエリと長い文書のギャップを埋める用途で使われる。

まとめ

fig6_summary.png

Gemini Embedding 2 のGAは、Embeddingの使い道を見直す良いタイミングだと感じました。整理してみると、Embeddingは RAG だけでなく、マルチモーダルRAG、ビジュアル検索、記憶検索、検索結果の再ランキング、分類、クラスタリング、異常検知など、かなり広い用途で使えることが見えてきます。

特に Gemini Embedding 2 では、テキスト・画像・動画・音声・PDF を同じ意味空間で扱える点が大きく、これまでテキスト中心だったEmbedding活用の発想を広げてくれる存在だと整理しやすいです。

一方で、実務ではモデル選定だけでなく、データ設計、評価、コスト、権限管理、再埋め込み設計といった周辺要素も同じくらい重要になります。「新しいモデルを試す」と「設計を見直す」をセットで考えると、効果が出やすそうだなと感じています。

参考(公式情報)

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?