実行プログラムと拡張機能
最終更新
EmbeddingGemma 2で写真や録音を手元で検索するには?
テキストで写真を探し、文書や録音も共通の埋め込み空間で比較します。
EmbeddingGemma 2はテキスト・コード・画像・動画・音声を共通の768次元埋め込みへ変換します。検索用ベクトルを作り、結果の要約は別のLLM1に任せられます。
文書以外に写真や音声も検索するには
EmbeddingGemma 2は文章・コード・画像・動画・音声を検索用の数値ベクトルへ変換します。質問に近い文書、写真、録音を探し、検索結果の要約は別のLLMに任せられます。すべての入力は共通の768次元埋め込み空間に置かれるため、テキストで写真を探したり、説明文と音声を比較したりできます。Googleモデルカード
埋め込みは原文の意味を数値配列で表したものです。意味の近い質問と資料がベクトル空間で近くなるように学習されています。たとえば返金日数を尋ねる質問から「決済取消後、営業日で5日以内」という案内を探せます。韓国語の検索品質は分野や表現で変わるため、自分の資料で評価してください。

文書を分けてテキスト検索から始める
文書全体を一つにせず、FAQの一項目やマニュアルの一節など、単独で読める大きさに分けます。文書ID・タイトル・本文・原文の位置を保存すると、検索結果を開いて根拠を確認できます。表やコードの意味が分断されない分割基準を決めましょう。
以下のインストールコマンドはmacOS・Linuxのbash/zsh向けです。Windows PowerShellでは仮想環境2を作り、.\.venv\Scripts\Activate.ps1で有効化します。パッケージのインストールと例の実行も同じ仮想環境で行います。
テキストだけを検索する場合は、画像・音声エンコーダーを無効にして270Mのテキスト構成を読み込めます。質問にはSearchQuery、検索対象の文書にはDocumentプロンプト3を使います。タイトル付きの文書はtitle: タイトル | text: 内容の形式で表します。公式開発者ガイド
python -m venv .venv
source .venv/bin/activate
python -m pip install -U sentence-transformers transformersfrom sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={"vision_config": None, "audio_config": None},
)
documents = [
"title: 返金手続き | text: 決済取消後、営業日で5日以内に返金されます。",
"title: 配送先変更 | text: 注文準備が始まる前まで配送先を変更できます。",
]
query = "返金には何日かかりますか?"
doc_vectors = model.encode(documents, prompt_name="Document", normalize_embeddings=True)
query_vector = model.encode(query, prompt_name="SearchQuery", normalize_embeddings=True)
scores = model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
print(f"{scores[index]:.3f}\t{documents[index]}")コードをsearch.pyとして保存し、同じ仮想環境で実行します。2つの文書とスコアが表示され、返金案内が先頭なら検索できています。自分の資料から質問と正解文書の組を作り、正解が上位に入るか確認して文書分割やタイトルを調整します。
python search.pyテキスト索引にマルチモーダル質問を加えます
同じEmbeddingGemma 2 checkpoint4・task設定・次元で互換性がある画像・音声queryなら既存索引を利用できます。QwenやBGEなど別modelのvectorをそのまま混在できる意味ではありません。
写真や録音を検索する場合、元file path・caption・録音日をmetadataとして保存します。vectorは原本fileの代わりにならないため、結果を開ける識別子が必要です。
テキスト質問で写真や音声を探す
まず作業フォルダーにphotos/lake.jpg、photos/street.jpg、recordings/meeting.wavを用意するか、コードのパスを実際のファイル位置に変更します。マルチモーダルエンコーダーとメディア処理ライブラリをインストールした後、写真はimageキー、録音はaudioキーを使う辞書でencode()に渡します。次の例では説明文と2枚の写真の埋め込みを比べ、類似度順に並べます。
python -m pip install -U sentence-transformers transformers pillow soundfile torchcodecfrom sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
query = model.encode("雪山と湖が見える風景", prompt_name="SearchQuery")
photos = [{"image": "photos/lake.jpg"}, {"image": "photos/street.jpg"}]
photo_vectors = model.encode(photos)
scores = model.similarity(query, photo_vectors)[0]
print(scores.argsort(descending=True).tolist())音声はmodel.encode({"audio": "recordings/meeting.wav"})のようにパスを渡し、テキスト質問と比較します。次の例では、会議の録音に近い質問を類似度順に並べます。音声は内部で16 kHzに変換されます。動画は毎秒1フレーム5を標準でサンプリングするため、より細かい場面検索にはフレーム数を調整してください。Googleのマルチモーダル例
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
audio = model.encode({"audio": "recordings/meeting.wav"})
queries = [
"会議の日程はいつに決まりましたか?",
"返金には何日かかりますか?",
]
query_vectors = model.encode(queries, prompt_name="SearchQuery")
scores = model.similarity(audio, query_vectors)[0]
for index in scores.argsort(descending=True).tolist():
print(f"{scores[index]:.3f}\t{queries[index]}")
text-onlyとfull multimodal構成を区別します
公式cardはtext-only選択loadを270M、text・vision・audio encoderを含む構成を740Mとしています。必要なmodalityだけを有効にし、library optionと実memory使用量を記録します。
以前のEmbeddingGemma紹介にあるfull model仕様をtext-only経路のmemory要件として読まないでください。初回は重みをdownloadし、text検索比較には公式text-only設定を使います。
ベクトルの次元数とライセンスを確認する
EmbeddingGemma 2の標準出力は768次元です。Sentence Transformersのtruncate_dimで512・256・128次元に短縮するとインデックス容量を減らせますが、検索品質も確認してください。Googleは256次元まで標準に近い品質を示し、128次元はテキスト専用の用途に推奨しています。質問と文書は同じ次元でエンコードし、短縮後に再正規化してください。
次元数を変えたら、保存済み文書も新しい次元で再エンコードしてインデックスを作り直してください。質問と文書は同じ次元を使います。このモデルはApache 2.0ライセンスで、条件に従って利用・改変・再配布できます。再配布時はライセンスと著作権表示を保持してください。モデルカードとライセンス
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
query = "返金には何日かかりますか?"
document = "title: 返金手続き | text: 決済取消後、営業日で5日以内に返金されます。"
query_vector = model.encode(
query, prompt_name="SearchQuery", truncate_dim=256, normalize_embeddings=True
)
document_vector = model.encode(
document, prompt_name="Document", truncate_dim=256, normalize_embeddings=True
)
print(model.similarity(query_vector, document_vector))query指示とdocument形式を合わせます
text検索では質問にtask: search result | query: ...を付け、文書はtitle: ... | text: ...形式にします。image・video・audioにはtext prefixを付けません。titleがない場合はtitle: noneです。
公式Sentence Transformers例はSearchQuery・Document task名で対応するpromptを適用します。library promptか手動prefixのどちらかを選び、二重適用を避けます。
実行時エラーとメモリ不足を確認する
ModuleNotFoundErrorが出たら、search.pyを実行するPythonがパッケージを入れた仮想環境と同じか確認します。python -m pip show sentence-transformersで確認し、必要なら環境を有効化して再インストールします。
画像や音声を開けない場合は、相対パスが現在の作業フォルダーを基準に正しいか確認します。絶対パスを試すとパスの問題とモデルの問題を切り分けやすくなります。メモリ不足ならテキスト専用構成に戻すか、他のアプリやモデルを終了して再実行してください。

folder indexを差分更新して容量を測ります
file ID・hash・更新時刻を保存し、変更された文書・mediaだけ再埋め込みし、削除fileのvectorを除去します。写真・音声folderではcaptionを原本fileへ結びます。
128・256・512・768次元への短縮はraw vector容量を減らせますが品質も変わる場合があります。同じ質問で順位を比較し、raw配列だけでなくDB index・metadataを含むfolder全体の容量で判断します。
modality別検索と原本確認を分けます
text→image・image→text・audio→textなど実際に使う方向ごとに質問を分け、正解file IDが上位k件に入るか記録します。1方向の結果は他の組み合わせを保証しません。
検索した文書・写真・録音を開いて根拠を確認し、検索漏れとparse・caption誤りを分けます。本ガイドは読者のfileを実行した実測を示さないため、自分の資料で精度・遅延・memoryを測ります。
用語の注釈
大規模言語モデル — 大量のテキストデータから言語パターンを学び、文脈に沿ったテキストを処理・生成するモデルです。
本文に戻るPython仮想環境 — プロジェクトごとにPythonパッケージを分けて導入する環境です。パッケージのバージョンの衝突を減らせます。
本文に戻るプロンプト — モデルに送る入力文です。生成モデルでは作りたい結果を説明する文になり、出力の構成や内容を大きく左右します。
本文に戻るチェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。
本文に戻るフレーム — 動画を構成する1枚の画像です。
本文に戻る
よくある質問
- この記事で最初に確認すべきことは何ですか?
- EmbeddingGemma 2はテキスト・コード・画像・動画・音声を共通の768次元埋め込みへ変換します。検索用ベクトルを作り、結果の要約は別のLLMに任せられます。
- 必要なメモリはどのくらいですか?
- 公式cardはtext-only選択loadを270M、text・vision・audio encoderを含む構成を740Mとしています。必要なmodalityだけを有効にし、library optionと実memory使用量を記録します。
- 条件と出典はどこで確認できますか?
- EmbeddingGemma 2は文章・コード・画像・動画・音声を検索用の数値ベクトルへ変換します。質問に近い文書、写真、録音を探し、検索結果の要約は別のLLMに任せられます。すべての入力は共通の768次元埋め込み空間に置かれるため、テキストで写真を探したり、説明文と音声を比較したりできます。[Googleモデルカード](https://huggingface.co/google/embeddinggemma-2)
