自分の文書をローカルAIに探させるには?〜EmbeddingGemma 2で日本語の記事検索をMacとRTX 3070で測った
自分で書いたメモや記事が増えてくると、「あの話、どこに書いたっけ」と探す時間が増えます。キーワード検索では、言い回しが違うと見つかりません。そこで、文の意味が近いものを探す「意味検索」を、自分のPCの中だけで動かす方法があります。このとき使うのが、埋め込みモデル(文章を数字の並びに変えるAI)です。
Googleは2026年10月6日に、埋め込みモデルの新版 EmbeddingGemma 2 を公開しました。スマホでも動く小ささをうたうモデルです。本記事では、公式の情報で仕様と動く場所を調べ、自分の文書を検索させる手順を初心者向けにまとめました。そのうえで、当ブログの日本語の記事100本を索引にして、日本語の問いでどれだけ当たるかと、速さを測りました。
2026年10月31日に調べ、11月1日の夜から2日の未明に測った内容です。対応ソフトの状況は、週単位で変わっています。
何を調べたのか
調べたのは3つです。EmbeddingGemma 2 はどんなモデルか、どのソフトとOSで動くのか、自分の文書を検索させるには何をすればよいか、です。
- 公式の情報: Google AI for Developers のモデルカードとリリース一覧、Google Developers Blog の2本の記事、Hugging Face の公式モデルページを読みました。
- 動かすソフトの情報: Ollama の公式ライブラリのページと GitHub の Issue、llama.cpp の GitHub の変更履歴を読みました。
- 当ブログの実測: Mac mini と、RTX 3070 を載せた Linux 機で測りました。
EmbeddingGemma 2 とは〜公式の仕様
EmbeddingGemma 2 は、文章や画像を768個の数字の並び(ベクトル)に変えるモデルです。意味が近い文章ほど、近い数字の並びで表されます。検索では、問いと文書をそれぞれ数字の並びに変え、近いものから順に並べます。文章を書くAIではないので、これ単体では返事をしません。
| 項目 | 内容(公式の記載) |
|---|---|
| 公開日 | 2026年10月6日(Googleのリリース一覧)。初代 EmbeddingGemma(300M)は2025年9月4日 |
| 大きさ | 全体で740M(7億4千万)パラメータ。文章とコードを扱う部分が270M、画像が170M、音声が300M |
| ベクトルの長さ | 768。512・256・128に切り詰めても使える(Matryoshka という学習方法による) |
| 一度に読める長さ | 8,192トークン |
| 入力 | 文章・コード・画像・動画・音声 |
| 言語 | 100以上の言語。言語によって性能が同じとは限らない、と注記あり |
| ライセンス | Apache 2.0(商用利用も可能な、制限の少ない条件) |
| 使うメモリ | Pixel 11 Pro で、文章だけなら約191MB、全部入りで約567MB(量子化したもの・Google Developers Blog) |
見出しの「567MB」は、スマホで画像や音声まで扱う全部入りの値です。自分の文書を検索するだけなら、文章を扱う270Mの部分だけで足ります。モデルカードにも、文章だけを読み込む方法が載っています。
日本語が対応言語に入っているかは、公式の文書に言語名の一覧が無く、確かめられませんでした【未確認】。「100以上の言語」に含まれると考えるのが自然ですが、日本語でどれだけ当たるかは、測って確かめるしかありません。
どこで動くのか〜Mac も Linux も Ollama で動いた
Googleの開発者向け記事には、Ollama・LM Studio・MLX・vLLM・sentence-transformers などが対応先として挙がっています。ただ、OSによって状況が違いました。
- Mac の Ollama: 公式ライブラリに embeddinggemma-2 があります。文章だけの270m版は304〜378MB、全部入りの740m版は1.3GBです。
- Linux と Windows の Ollama: GitHub の Issue(#18825)で、Ollama の開発者が10月6日に「LinuxとWindowsではまだ使えない。近く対応する」と回答しています。この Issue は10月31日の確認でも開いたままでした。ただ、実際に試すと、Linux の Ollama 0.40.13(公式の配布ファイル)で embeddinggemma-2:270m も embeddinggemma-2:latest も取得でき、数字の並びも返りました(2026年11月1日・RTX 3070)。Issue の記述より、実機のほうが先に進んでいました。Windows は試していません【未確認】。
- llama.cpp: 10月6日に、EmbeddingGemma 2 に対応する変更(PR #30054)が取り込まれました。llama.cpp の開発元が配る GGUF(llama.cpp 用のモデルファイル)は、Q8_0 が310MB、BF16 が558MBです。対応が入った最初の版番号は、変更履歴から特定できませんでした【未確認】。
Linux で Ollama を使っている人は、Ollama の通常の取り込み(hf.co から GGUF を読む方法)を試すと、「unknown model architecture」という読み込みエラーになると報告されています。Ollama が中に持っている llama.cpp が、対応前の版だったためです。新しいモデルが、ソフトの更新を待たないと読めない例は、Ollama で入れたモデルが llama.cpp で読めない話でも書きました。
本記事では、Mac mini(M4・メモリ24GB)と、RTX 3070 の Linux 機の両方を、Ollama 0.40.13 で動かしました。どちらも、日常で使っている Ollama とは別に、公式の配布ファイルを専用の場所に置いて測っています。llama.cpp 版の GGUF(Q8_0)は、今回は測っていません【未確認】。比べる相手として、初代 EmbeddingGemma(embeddinggemma:300m)も測っています。
自分の文書を検索させる手順
全体の流れは、文書を小分けにする、文書を数字の並びにして保存する、問いを数字の並びにする、近い順に並べる、の4段です。検索した結果を会話用のAIに渡して答えを書かせる仕組みを、RAG(検索して答える方式)と呼びます。本記事は、その前半の「探す」部分だけを扱います。
1. モデルを入れる
Ollama では、Mac でも Linux でも、次の1行で入ります(どちらも今回の測定で確認しました)。文章だけなら270m版で足ります。
ollama pull embeddinggemma-2:270m
llama.cpp を使う場合は(今回は測っていません【未確認】)、開発元の GGUF のページに載っている次のコマンドで、モデルを取り込んで待ち受けます。
llama serve -hf ggml-org/embeddinggemma-2-GGUF:Q8_0 --embeddings
どちらも、PCの中で待ち受けるサーバーとして動きます。家の外から届く設定にしないよう、Ollama を動かしているPCの安全性の記事も確認してください。
2. 文書を小分けにする
1本の記事をそのまま1つのベクトルにすると、記事の中の細かい話題が埋もれます。本記事では、見出しごとに区切り、長い節はさらに約500字で区切りました。区切った1つ1つを「チャンク」と呼びます。
3. 文書と問いに、決まった前置きを付ける
ここが一番の注意点です。EmbeddingGemma 2 は、文書と問いで違う前置きを付ける前提で作られています。モデルカードには、付けないと品質が落ちることがある、と書かれています。
- 文書:
title: 記事の題名 | text: 本文(題名が無ければtitle: none | text: 本文) - 問い:
task: search result | query: 問いの文
sentence-transformers という Python の道具では、この前置きを自動で付ける設定があります。Ollama の説明ページには前置きの記載が無く、自動で付くかは確かめられませんでした【未確認】。本記事では、自分で文字列の先頭に付けています。
4. 近い順に並べる
問いのベクトルと、すべてのチャンクのベクトルの近さ(コサイン類似度)を計算し、上から並べます。Python なら、次の程度の長さで書けます。
import ollama, numpy as np
def emb(texts):
return np.array(ollama.embed(model="embeddinggemma-2:270m", input=texts).embeddings)
D = emb([f"title: {t} | text: {x}" for t, x in chunks])
q = emb(["task: search result | query: グラボを2枚挿すときの注意は?"])[0]
score = D @ q / (np.linalg.norm(D, axis=1) * np.linalg.norm(q))
top3 = np.argsort(-score)[:3]
モデルカードには、float16 という形式で動かすと、壊れた値が出ることがあるという注意があります。llama.cpp で使う GGUF は、Q8_0 か BF16 を選びました。F16 の GGUF にも同じ注意が当てはまるかは、確かめていません【未確認】。
当ブログの記事100本で測った
当ブログの日本語の記事100本を、手順2の方法でチャンクに分けました。チャンクの数は 2,086個 です。問いは、読者が書きそうな日本語の質問を20件用意し、それぞれ「正解の記事」を先に決めておきました。上位1件・上位3件に正解の記事が入った割合を「当たり率」としています。測定は2026年11月1日の夜から2日の未明にかけて行いました。
速さは、全チャンクを数字の並びに変える時間を5回測り、上下の外れを1つずつ落とした中央3点の中央値から、1チャンクあたりの時間を出しました。
| モデルと環境 | 上位1件の当たり率 | 上位3件の当たり率 | 1チャンクあたりの時間 | 使ったメモリ |
|---|---|---|---|---|
| EmbeddingGemma 2 270m・Mac mini M4(Ollama) | 20問中20問 | 20問中20問 | 38.1ミリ秒 | 810MB(プロセスの使用量の最大) |
| EmbeddingGemma 2 270m・RTX 3070(Ollama・Linux) | 20問中20問 | 20問中20問 | 12.8ミリ秒 | 894MiB(GPU全体の最大) |
| EmbeddingGemma 2 latest(全部入り・1.28GB)・RTX 3070(Ollama・Linux) | 20問中20問 | 20問中20問 | 12.9ミリ秒 | 894MiB(GPU全体の最大) |
| 初代 EmbeddingGemma 300m・RTX 3070(Ollama・Linux) | 20問中20問 | 20問中20問 | 83.5ミリ秒(※) | 970MiB(GPU全体の最大) |
| EmbeddingGemma 2 270m・ベクトルを256に切り詰め(RTX 3070) | 20問中20問 | 20問中20問 | — | — |
| EmbeddingGemma 2 270m・前置きなし(RTX 3070) | 20問中16問 | 20問中18問 | — | — |
| EmbeddingGemma 2 270m・前置きなし(Mac mini) | 20問中14問 | 20問中17問 | — | — |
(※)初代は、Ollama の表示で、モデルのほとんどがCPUで動いていました(GPUに載ったのは約81MB/約740MB)。そのため、この時間は他の行と同じ条件の比較になっていません。速さの比較には使わないでください。時間は、2,086個のチャンクを5回処理し、上下の外れを1つずつ落とした3回の中央値を、1チャンクあたりに直した値です。
前置きを付けた場合は、EmbeddingGemma 2 も初代も、20問すべてで上位1件に正解の記事が入りました。この問いの数と難しさでは、2つのモデルの差は出ていません。問いは、私が記事の題名を見たうえで作ったため、題名に近い言葉を含む易しい問いに偏っています。当たり率が上限に張り付いたのは、そのためだと考えています。「初代より日本語に強い」とは、この測定からは言えません。
差が出たのは、前置きの有無でした。前置きを外すと、RTX 3070 の環境では上位1件の正解が20問中16問、上位3件が18問に下がりました。Mac mini では14問と17問でした。外れた問いは、「グラフィックボードを買い足すとき、先に確認することは?」のように、題名に出てこない言い方で聞いた問いや、「SSDを買うとき、単価と寿命のどちらで選ぶ?」のように、似た話題の記事が複数ある問いでした。数字は環境で2〜3問ほど違うため、「前置きなしだと2〜3割ほど外れる」くらいの目安として読んでください。
ベクトルを先頭の256個に切り詰めても、20問すべてで当たりました。保存する数字の量を3分の1(768個→256個)に減らせるので、記事数が多い場合の候補です。ただし、この問い20件では差が出ない難しさだったため、256個で十分かどうかは確かめきれていません。
速さは、RTX 3070 が1チャンクあたり12.8ミリ秒、Mac mini(M4)が38.1ミリ秒でした。2,086個のチャンクを全部処理して、前者は約27秒、後者は約79秒です。自分の記事100本の検索用データを作るだけなら、どちらも待てる長さです。
Mac と RTX 3070 の数字は、動かす機械もモデルファイルの形式(Mac は MLX 用、Linux は GGUF)も違います。機械の速さの比較ではなく、それぞれの環境で使えるかの目安として読んでください。
まとめと出典
分かったこと
- EmbeddingGemma 2 は、文章を数字の並びに変えて意味検索に使うモデルです。公開は2026年10月6日、ライセンスは Apache 2.0 です。
- 自分の文書を探すだけなら、文章を扱う270Mの部分で足ります。Ollama 版は304〜378MBです。
- Ollama 版は、Mac だけでなく、Linux の Ollama 0.40.13 でも動きました(Windows は未確認)。GitHub の Issue の記述(Linux は未対応)より、実機は先に進んでいました。
- 文書と問いに、決まった前置きを付けるのが前提です。前置きを外すと、上位1件の正解が20問中20問から16問(RTX 3070)、14問(Mac mini)に下がりました。
- 日本語の問い20件では、前置きを付ければ EmbeddingGemma 2 も初代も、上位3件に20問すべて正解が入りました。問いが易しく、2つの差は測れていません。
自分の文書を意味検索したい人は、まず EmbeddingGemma 2 の270M版(Ollama 版で304〜378MB)を入れ、文書と問いに決まった前置きを付けて、手元の文書で上位3件に正解が入るかを試すのが最初の一歩です。前置きを付け忘れると正解が減るので、先に確認してください。日本語は対応言語の一覧で確かめられていないので、自分の文書で確かめてから使ってください。
出典
- Google AI for Developers「Gemma releases」 https://ai.google.dev/gemma/docs/releases (2026年10月31日確認)
- Google AI for Developers「EmbeddingGemma 2 model card」 https://ai.google.dev/gemma/docs/embeddinggemma/model_card_2 (2026年10月31日確認)
- Hugging Face「google/embeddinggemma-2」 https://huggingface.co/google/embeddinggemma-2 (2026年10月31日確認)
- Google Developers Blog「EmbeddingGemma 2: The Developer Guide」 https://developers.googleblog.com/embeddinggemma-2-the-developer-guide/ (2026年10月31日確認)
- Google Developers Blog「Bring multimodal semantic search to the edge with EmbeddingGemma 2」 https://developers.googleblog.com/google-ai-edge-with-embeddinggemma-2/ (2026年10月31日確認)
- Ollama「embeddinggemma-2」 https://ollama.com/library/embeddinggemma-2 (2026年10月31日確認)
- Ollama GitHub Issue #18825 https://github.com/ollama/ollama/issues/18825 (2026年10月31日確認)
- llama.cpp GitHub PR #30054 https://github.com/ggml-org/llama.cpp/pull/30054 (2026年10月31日確認)
- Hugging Face「ggml-org/embeddinggemma-2-GGUF」 https://huggingface.co/ggml-org/embeddinggemma-2-GGUF (2026年10月31日確認)
今回確かめていないこと
日本語が対応言語の一覧に入っているかは、公式に言語名の一覧が無く、確かめていません。Ollama が前置きを自動で付けるか、llama.cpp で対応が入った最初の版番号、F16 の GGUF でも壊れた値が出るかも確かめていません。画像・動画・音声の検索は、本記事では扱っていません。







ディスカッション
コメント一覧
まだ、コメントがありません