AIガイド · 16分で読めます

AIのEmbeddingとは?ベクトル、類似度、RAGを解説

Embeddingはテキストをベクトルに変換し、意味の近さを表します。単語・文・文書の埋め込み、コサイン類似度、RAGでの活用方法を解説します。モデルの次元数や料金、検索に使う際の仕組みに加え、ベクトル同士の比較方法や文章を検索する手順も紹介します。

暗い藍色のベクトル空間に光る点の集まりが3つあり、琥珀色の集まりの近くにより明るいクエリの光がある

AIのEmbedding(埋め込み)とは、テキストなどのデータを、似た意味が近くに配置される数学的な空間で表現する数値ベクトル、つまり浮動小数点数のリストです。機械学習モデルはベクトル埋め込みを使って概念間の関連性を測り、意味検索を実現し、RAGシステムで関連するコンテキストを取得します。

初めて検索パイプラインを構築するエンジニアにEmbeddingを説明するとき、私は地理の代わりにトピックを配置した地図を思い浮かべてもらいます。キーワードの照合では、2つの文字列に完全に同じ文字があるかを調べます。そのため、ある文書に「犬」、別の文書に「子犬」と書かれている場合にはうまくいきません。ベクトル埋め込みは意味を座標に変換することでこの隔たりを埋め、ソフトウェアが基本的な幾何学を使って考えを比較できるようにします。

ベクトル埋め込みは意味をどう表すのか?

ベクトル埋め込みは、単語、フレーズ、画像などの複雑な入力を多次元の埋め込み空間内の座標に変換して意味を表します。Stanford HAIのAI定義用語集によると、Embeddingは似たものを数学的な空間で近くに配置します。そのため、犬と子犬のような単語には近いベクトルが割り当てられ、犬とトーストは離れた位置になります。

OpenAIのEmbeddingガイドでは、Embeddingを、その距離によってテキスト文字列の関連性を測る浮動小数点数のベクトルと定義しています。2つのベクトルの距離が小さいと関連性が高く、大きいと関連性が低いことを示します。IBM Thinkは同じ原理をさまざまなデータ型について説明しています。ベクトル埋め込みはテキストや画像のような非数学的な入力を機械学習モデルが処理できる数値配列に変換し、現実世界でより似たものには、より似たベクトルを割り当てます。

GoogleのMachine Learning Crash Courseでは、エンジニアの作業に影響する埋め込み空間の実用的な性質を3つ挙げています。

  • 低次元への射影: モデルは高次元の生の入力を、より密度が高く低次元の埋め込み空間に射影することがよくあります。そこでは距離を相対的な類似度として数学的に計算できます。
  • 個々の座標の不透明さ: 学習済みEmbeddingの個々の次元を、人が明確にラベル付けした概念として解釈できることはまれです。意味は配列内のすべての数値が組み合わさった位置と方向に存在します。
  • タスク固有性: Embeddingは通常、特定のタスク向けに学習されます。そのため、意味に基づくテキスト検索に最適化されたベクトル空間は、商品推薦向けに学習された空間とは異なります。

ベクトルは正確な綴りではなく関連性を符号化するため、OpenAIはEmbeddingの本番環境での一般的な用途として、検索(クエリとの関連性による結果の順位付け)、クラスタリング、推薦、異常検知、多様性の測定、分類(文字列に最も近いラベルの割り当て)の6つを挙げています。

単語・文・文書のEmbeddingを解説

単語、文、文書のEmbeddingは、モデルが1つのベクトルに圧縮するテキストの量が異なります。適切な粒度を選ぶことで、システムが個々の用語、短いユーザークエリ、複数段落の文章のどれを扱うかが決まります。

単語のEmbedding

単語のEmbeddingは、1つの単語またはAIのトークンに割り当てられる密なベクトルです。Tomas Mikolovとその同僚が2013年に発表したword2vecなどの静的な単語Embeddingは、語彙内の各単語に固定されたグローバルなベクトルを1つ割り当てます。GoogleのMachine Learning Crash Courseが説明するように、単語の周辺の文脈を予測するよう学習されたモデルは、似た文脈に現れる単語が関連した意味を持つと仮定します。

静的な単語Embeddingにはよく知られた制限があります。例えば金融機関のbankと川岸のbankのように、1つのベクトルが単語のすべての意味を同時に表さなければなりません。GoogleはFrançois CholletのDeep Learning with Pythonを引用し、静的な単語Embeddingでは256、512、1024などの次元数が一般的に使われていたとも述べています。

文のEmbedding

文のEmbeddingは、単語ごとに別々のベクトルを作る代わりに、フレーズや文全体を1つのベクトルに変換します。IBMによると、文のEmbeddingはフレーズ全体が持つ複合的な意味を捉え、検索や質問応答のワークフローでユーザークエリを符号化するためによく使われます。文全体を符号化すると、同じ単語が異なる順序で並ぶ文字列を区別しやすくなります。

文書のEmbedding

文書のEmbeddingは、長めの文章、記事の一節、文書のチャンク全体を1つのベクトルで表します。単純な基準となる方法は単語ベクトルの平均を取って組み合わせますが、この方法では構造やニュアンスが失われることがよくあります。専用のテキストEmbeddingモデルは文章全体を一度に符号化します。実際の検索システムでは、本全体を1つのベクトルに圧縮することはまれです。代わりに、長いファイルを小さなチャンクに分割し、チャンクごとにEmbeddingを生成します。

Embeddingの種類 入力の粒度 典型的なベクトルの単位 主な役割と制限
単語のEmbedding 単一の単語またはトークン 語彙の項目ごとに1ベクトル 用語の類似性を捉える。word2vecのような静的モデルは単語のすべての意味を1つのベクトルにまとめる
文のEmbedding フレーズまたは単一の文 クエリまたは行ごとに1ベクトル フレーズ単位の意図を捉え、検索クエリや質問応答によく使われる
文書のEmbedding 文章または文書のチャンク チャンクまたは文書ごとに1ベクトル コーパスからの検索を支える。長い文書は通常Embeddingの前に分割が必要

Embeddingの次元数とは?

Embeddingの次元数はベクトルの長さ、つまりモデルが各入力に対して出力する浮動小数点数の数を示します。大きいベクトルは微妙な意味の違いを符号化する容量が大きく、小さいベクトルはメモリ使用量、インデックスのサイズ、比較時の計算量を減らします。

OpenAIの第3世代Embeddingモデルはこのトレードオフを直接示しています。2026年11月14日時点のOpenAIの公式ドキュメントでは、デフォルトの出力長はtext-embedding-3-smallが1536次元、text-embedding-3-largeが3072次元です。両モデルはAPIリクエストでオプションのdimensionsパラメータを受け付け、Embeddingの概念を表現する性質を失わずに短いベクトルを要求できます。

OpenAIは末尾の数値を問題なく削除できるように、両方の第3世代モデルを学習させました。2026年11月14日時点のOpenAIのEmbeddingガイドによると、text-embedding-3-largeを256次元に短縮しても、MTEBベンチマークでは短縮していない1536次元のtext-embedding-ada-002のEmbeddingを上回ります。ベクトルデータベースに1024次元の厳格な上限がある場合でも、OpenAIによれば、開発者はdimensionsを1024に設定してtext-embedding-3-largeを呼び出せます。これにより、わずかな精度と引き換えに互換性とストレージ使用量の削減を得られます。

APIから受け取ったベクトルを手動で短縮する開発者は、その後L2長さ正規化を適用する必要があります。Embeddingの作成時にdimensionsパラメータを直接渡せば手動の後処理を避けられ、OpenAIもこの手順を推奨しています。

コサイン類似度はEmbeddingをどう比較するのか?

コサイン類似度は、2つのEmbeddingベクトルの間の角度のコサインを測って比較します。ベクトルの大きさそのものではなく埋め込み空間での向きを評価するため、意味的に同じ方向を向く2つの文章は、長さが異なっても高いスコアになります。

一般的なベクトルでは、コサイン類似度は-1から1の範囲です。

  • 1: 両方のベクトルがまったく同じ方向を向き、最大の類似度を示します。
  • 0: 両方のベクトルが直交し、意味に相関がないことを示します。
  • -1: 両方のベクトルが反対方向を向きます。

ユークリッド距離は別の指標で、埋め込み空間内の2点間の直線距離を測ります。どの距離関数を選ぶべきかという問いに対し、OpenAIのEmbedding FAQはコサイン類似度を明確に推奨するとともに、OpenAIのベクトルでは通常、指標の選択による違いは小さいと述べています。OpenAIのAPIが返すEmbeddingはすべて長さ1に正規化されているため、コサイン類似度は内積と等しく、コサイン類似度とユークリッド距離は同じ検索順位を返します。

RAGでEmbeddingはどう使われるのか?

Embeddingは、言語モデルが回答を書く前にユーザーの質問を保存済みの文書チャンクと照合することで、検索拡張生成(RAG)を支えます。RAGパイプラインは事前学習で記憶した事実だけに頼る代わりに、ベクトルの類似度を使って非公開または最新のテキスト集を検索します。

OpenAIの質問応答とテキスト検索のガイダンスに沿った標準的なRAGパイプラインは、次の5つのステップで構成されます。

  1. コーパスを分割する: 長い元文書を小さな文章に分け、各ベクトルが焦点を絞った1つの考えを表すようにします。具体的な分割戦略は、RAG向けの文書分割方法のガイドで説明しています。
  2. チャンクを埋め込み、インデックス化する: 各チャンクをEmbeddingモデルに送り、得られたベクトルを元のテキストと一緒に保存します。OpenAIは大量のコレクションを高速に検索する場合、ベクトルをベクトルデータベースに保存することを推奨しています。
  3. ユーザークエリを埋め込む: 入力された質問をまったく同じEmbeddingモデルに通し、クエリをインデックス化されたチャンクと同じ数学的空間に配置します。
  4. 最近傍を取得する: コサイン類似度や正規化ベクトルの内積などの類似度スコアを計算し、最も一致するチャンクを取得します。
  5. コンテキストをモデルに渡す: 取得したテキストチャンクを言語モデルのプロンプトに挿入し、元資料に基づく回答を生成できるようにします。

チャンクのサイズや検索の閾値は文書の構造やクエリのパターンによって大きく異なります。そのため、普遍的な単一のチャンクサイズに頼るのではなく、実際のコーパスで分割戦略をテストする必要があります。

OpenAIのEmbeddingモデル、制限、料金

2026年11月14日時点で、OpenAIのEmbedding APIは固定のトークン制限とトークン単位の料金を持つ主要なテキストモデルを3つ提供しています。開発者はinputとmodelを含むPOST https://api.openai.com/v1/embeddingsリクエストを送信してベクトルを生成します。オプションでdimensions(第3世代モデルの場合)とencoding_format(デフォルトはfloat、またはbase64)も指定できます。

記載したOpenAIのEmbeddingモデル3つには共通のリクエスト制限があります。1つの入力につき最大8,192トークン、入力配列につき最大2,048項目、1回のAPI呼び出しの全入力を合計して最大300,000トークンです。空の文字列は拒否されます。OpenAIはリクエスト送信前にローカルでトークンを数える方法として、tiktokenでcl100k_baseエンコーディングを使用することを勧めています。3つのモデルはすべてOpenAIのBatch APIにも対応しています。

モデル デフォルト次元数 最大入力トークン数 100万トークン当たりの料金(2026年11月14日) 1ドル当たりの概算ページ数(1ページ~800トークン) OpenAIが公表したMTEBスコア
text-embedding-3-small 1536 8,192 $0.02 62,500 62.3%
text-embedding-3-large 3072 8,192 $0.13 9,615 64.6%
text-embedding-ada-002 1536 8,192 $0.10 12,500 61.0%

これらの数値は、2026年11月14日時点のOpenAIの料金ページとEmbeddingガイドから直接引用しています。OpenAIはtext-embedding-3-smallをtext-embedding-ada-002の改良後継モデルと説明し、text-embedding-3-largeを英語と英語以外の両方のタスクにおいて最も高性能なモデルと位置付けています。上記のMTEBの割合は、あくまでこの日時点でOpenAIが自社のドキュメントに公表したベンチマークであり、すべてのEmbeddingプロバイダーを対象にした最新の独立した業界全体のランキングではありません。

FAQ

ベクトル埋め込みとトークンの違いは?

トークンは、モデルが読み取り、課金対象とする単語や単語の一部などの入力テキストの断片です。ベクトル埋め込みは、1つ以上のトークンの意味を表すためにモデルが出力する浮動小数点数の密な配列です。OpenAIのEmbeddingモデルには最大8,192トークンを入力して、1つのベクトルを受け取ることができます。

OpenAIのdimensionsパラメータはEmbeddingの精度を下げるのか?

dimensionsパラメータでベクトルを短縮すると、わずかな精度と引き換えにストレージと計算のコストを削減できます。OpenAIによると、第3世代モデルは概念の表現を維持しながら末尾の数値を削除できるように学習されています。2026年11月14日時点でOpenAIは、256次元のtext-embedding-3-largeベクトルが、短縮していない1536次元のtext-embedding-ada-002ベクトルをMTEBで引き続き上回ると報告しています。

OpenAIのEmbeddingにはコサイン類似度とユークリッド距離のどちらを使うべきか?

OpenAIが推奨する指標はコサイン類似度ですが、OpenAIのベクトルではどちらの関数も同じ順位を返します。OpenAIのEmbeddingは長さ1に正規化されているため、コサイン類似度は数学的に内積と等しく、ユークリッド距離でもまったく同じ順序が保たれます。他のソースから得た一般的な未正規化ベクトルでは、コサイン類似度は大きさではなく角度を取り出して評価します。

Embeddingモデルは最近の出来事を知っているのか?

OpenAIの第3世代Embeddingモデルであるtext-embedding-3-smallとtext-embedding-3-largeは、2021年9月より後に起きた出来事を知りません。OpenAIはEmbeddingのFAQで、この知識の打ち切りは一般にテキスト生成モデルよりもEmbeddingにとって制約が小さいと述べていますが、特定の専門分野や打ち切り後のクエリでは一致の品質が下がる場合があります。

OpenAI APIで生成したEmbeddingの所有者は誰か?

OpenAIの公式FAQによると、顧客は送信した入力と、Embeddingを含むOpenAIモデルが生成した出力ベクトルの両方を所有します。OpenAIは、この所有権がEmbeddingの各エンドポイントに適用される一方、APIの利用が適用法に従っていることを確認する責任はユーザーにあると述べています。

出典

執筆

Chunyu Cai

Chunyu CaiはLotook, LLCの最高経営責任者(CEO)であり、起業家です。AIモデルやエージェント、そしてそれらが日々の仕事をどう変えるかについて執筆しています。Chunyu CaiはImperial College Londonで修士号を取得しています。