3行でいうと

  • 埋め込みは、文章や画像、音声を数字の並び(ベクトル)に変えたもので、2つの距離で関係の強さを測ります。
  • ベクトル検索は、質問も数字の並びにして、キーワードでなく意味の近さで文書を探す方法です。
  • 数字の個数(次元)は、OpenAIのtext-embedding-3-smallが1,536個、Gemini Embedding 2は既定で3,072個です。
  • モデルを替えたら保存した数字は使えず、Googleは作り直しが必要と明記しています。

この記事は公式・一次資料を読んでまとめたものです。この記事は、実際に使って確かめた記録ではありません。

先に結論

たとえ話:「意味の地図」に、言葉を置いていく

大きな地図に、すべての文章を、1つずつ点として置いていくことを想像してください。ルールは1つだけです。意味が近い文章は、近くに置く。「新しい映画はすばらしい」と「その新作映画は最高だ」は隣り合い、「犬が庭で遊んでいる」は遠くに置かれます。

地図の上の位置を表す数字が、座標です。ふつうの地図は縦と横の2つの数字ですが、埋め込みでは1,000個以上の数字を使います。方向がそれだけあるので、「話題」「雰囲気」「言い回し」など、いろいろな観点の近さを同時に表せる、と考えると分かりやすいです(これは僕らの言い換えで、公式の説明そのものではありません)。

検索は、質問を地図に置いて、いちばん近くにある点を拾ってくるだけです。

仕組みを、順番に

1. 文章を、数字の並びに変える

OpenAIのガイドは、埋め込みを「浮動小数点数(小数)の並び」と説明しています。距離が小さければ関連が強く、大きければ弱いです。使い道として、検索、似たものの仲間分け(クラスタリング)、おすすめ、異常の検出、分類が挙げられています。

考え方の歴史をたどると、Mikolovらが2013年1月にarXivで公開した論文は、単語を数字のベクトルにする方法を示し、16億語のデータから1日足らずで質の高い単語ベクトルを学習できたと報告しています。ReimersとGurevychが2019年8月に公開したSentence-BERTの論文は、文章の埋め込みを作ることで、1万文の中から最も似た組を探す作業を、約65時間(BERTで文を2つずつ読み比べる方法の見積もり)から約5秒に縮められた、と書いています。

数字の並びは、AIモデルに文章を通して作ります。同じ文章でも、モデルが違えば別の数字になります。

2. 「近さ」を測る

近さの測り方で、よく使われるのは「コサイン類似度」です。Googleのドキュメントは、大きさでなく向きを比べる方法として、これを勧めています。値は-1(反対)から1(最も近い)までです。

Sentence Transformers(埋め込みを作る公開ライブラリ)の公式ドキュメントに、実際の出力例があります。

文の組み合わせ 類似度
「新しい映画はすばらしい」と「新しい映画はとても良い」(英語の原文の和訳) 0.8939
「新しい映画はすばらしい」と「犬が庭で遊んでいる」 0.0543

Anthropicの文書が紹介するVoyage AIの埋め込みは、長さが1にそろえてあります。この場合、単純な掛け算の合計(内積)とコサイン類似度は同じ結果になる、とAnthropicの文書にあります。

3. たくさんの中から、近いものを探す

件数が少ないうちは、保存した数字の並びを全部と比べれば済みます。Sentence Transformersのドキュメントは、この手作業の方法は、約100万件までの規模向け、と書いています。

件数が増えると、「近似」の方法が使われます。ベクトルを保存できるPostgres(データベース)の拡張機能pgvectorの公式ページによると、索引を作らない方法は、完全に正しい結果(再現率100%)を返しますが、索引を使う「近似」の方法は、少し取りこぼす代わりに速くなります。索引の方式にはHNSWとIVFFlatがあり、HNSWのほうが速さと精度のバランスがよい代わりに、作るのが遅くメモリを多く使う、と説明されています。

HNSWの論文(MalkovとYashunin、2016年3月にarXivで公開)は、階層になった「近道つきの網」で探す方法で、探す手間が件数の増え方に対して対数的にしか増えない、と報告しています。

4. 数字の個数(次元)を縮める

数字が多いほど、保存場所と計算が必要です。そこで、数字の個数を縮める工夫があります。Matryoshka Representation Learning(マトリョーシカ表現学習)の論文(2022年5月、arXiv)は、並びの先頭の部分だけでも役に立つように訓練する方法で、画像の分類で同じ精度のまま最大14分の1の大きさにできたと報告しています。

GoogleのGemini Embeddingは、この方法で訓練されていて、数字の個数を縮められると文書にあります。OpenAIのtext-embedding-3系も、末尾の数字を取り除いて縮められます(読んだ文書にマトリョーシカという名前は出てきません)。OpenAIの文書は、dimensionsという設定で縮められ、MTEB(埋め込みの性能を測る試験)で、text-embedding-3-largeを256個に縮めたものが、縮めていない古いtext-embedding-ada-002(1,536個)を上回った、と書いています。手で縮めた場合は、長さを1にそろえ直す必要があります。

見立てです。この縮め方が用意されているのは、保存先に次元の上限があるためだと思います。pgvectorの公式ページによると、通常のvector型に索引を作れるのは2,000次元までです(表の列自体は16,000次元まで)。3,072個の数字をそのまま索引にはできない計算になります(僕らの読み取りで、公式がそう説明しているわけではありません)。OpenAIの文書にも、上限が1,024次元の保存先向けに1,024個へ縮める例があります。

5. 質問と文書で、作り分ける

質問は短く、文書は長い、という非対称の検索では、モデルと使い方の選択が大切だと、Sentence Transformersの文書は強調しています。GoogleのGemini Embedding 001は、用途を示す設定(task_type)を持ち、Embedding 2は、文章の頭に「task: search result | query: …」のような決まった書き出しを付けます。Voyage AIは、input_typeで「document」と「query」を指定します。どれも、質問側と文書側で扱いを変える、という同じ考え方です。

実際の使い道と、いまの数字(2026年10月8日確認)
モデル 次元 最大入力 料金(100万トークンあたり) 確認元
OpenAI text-embedding-3-small 1,536 8,192トークン $0.02 OpenAIのガイドとモデルページ
OpenAI text-embedding-3-large 3,072 8,192トークン 確認していません OpenAIのガイド
Google Gemini Embedding 2 既定3,072(128〜3,072で指定) 8,192トークン 文字$0.20(一括処理は$0.10) Googleの文書と料金ページ
Google Gemini Embedding 001 既定3,072(128〜3,072で指定) 2,048トークン 確認していません Googleの文書
Voyage AI voyage-4 系 既定1,024(256、512、2,048も可) 32,000トークン Anthropicの文書には書かれていない Anthropicの文書

補足です。

  • OpenAIのガイドは、text-embedding-3-smallで1ドルあたり約62,500ページ、と見積もっています。$0.02で割ると、1ページを約800トークンと置く計算です。
  • Gemini Embedding 2は、文字のほかに画像、動画、音声、PDFも扱える、Googleの初のマルチモーダルな埋め込みモデルです。料金ページでは、画像1枚が約$0.00012、音声1秒が約$0.00016、動画1コマが約$0.00079と書かれています。
  • GoogleのAPIの無料枠でも埋め込みは使えますが、料金ページは、無料枠の入力は「製品の改善に使われる」、有料枠は使われない、と書いています。
  • Anthropicは、自社の埋め込みモデルを提供していないと文書で述べ、Voyage AI(MongoDB)を勧めつつ、他社も比べるよう案内しています。Voyageの料金は、MongoDBの文書にあるとされ、僕らは読んでいません。

代表的な使い道は、資料を質問で探す仕組み(RAG。別の記事で扱っています)です。このとき、資料は小さく切ってから、1つずつ埋め込みにして保存します。Googleのファイル検索の機能は、埋め込みの作成に100万トークンあたり$0.15がかかる、と料金ページにあります。

誤解されやすい点

「意味を理解している」とは書かれていない 公式の文書が述べているのは、文章を数字にして、距離で関連を測る、ということまでです。近い数字の並びが、人が思う「同じ意味」と一致するかは、モデルや分野によって違います。Sentence Transformersの文書が「用途に合うモデルの選択が重要」と書いているのは、そのためです。

「数字の並びだけ保存すれば、元の文章は要らない」わけではない 検索で見つかるのは、近い数字の並びです。答えに使うのは元の文章なので、数字と元の文章を対応づけて保存する必要があります。

「どのモデルのベクトルも混ぜられる」わけではない Googleは、Embedding 001と2の空間は互換性がなく、移行には作り直しが必要と書いています。OpenAIやVoyageのモデルでも、この記事では確認していませんが、別々のモデルが作った数字を同じ地図の上で比べる意味は、ふつうありません。

気をつけること

出典

更新履歴