エンベッディング ─ 意味検索を支えるベクトル表現の仕組み
結論から言うと、エンベッディングとは「テキストを数値の配列(ベクトル)に変換する技術」であり、意味が似たテキストはベクトル空間上でも近い場所に並ぶという性質を持つ。この仕組みがあるから、RAG(Lesson 06)ではユーザーの質問に意味的に近いドキュメントを素早く見つけられる。
なぜキーワード検索では足りないのか?
従来のキーワード検索は「文字の一致」だけを見る。「自動車」と「車」は別の文字列のため、キーワード検索では同じものとして扱えない。しかしエンベッディングを使うと、両者は意味的に近いため類似ベクトルが割り当てられ、一方を検索すれば他方も引っかかるようになる。これが「意味検索(セマンティック検索)」の基本原理だ。
テキストがベクトルになる仕組み
エンベッディングモデルはテキストを読み取り、たとえば 1536 次元の浮動小数点数の配列に変換する。
"AIエージェントとは何か" → [0.13, -0.24, 0.07, ... ] // 1536個の数値
"機械学習エージェントの概要" → [0.12, -0.22, 0.09, ... ] // 似た並び
"今日の天気はどうですか" → [0.91, 0.55, -0.44, ... ] // 遠い並び
2つのベクトルの「コサイン類似度」を計算すると、意味が近いほど 1.0 に近い値が返る。この距離計算が検索の核心だ。
歴史的な進化を3段階で押さえる
Lilian Weng のブログ(2017)は単語レベルの埋め込み(Word2Vec・GloVe)を詳しく整理している。Word2Vec は「単語の周辺文脈から意味を学ぶ」手法で、「王 − 男 + 女 ≒ 女王」のような演算が成立することで有名になった。
その後、BERT(2018)が文脈を考慮した表現を実現したが、2つの文の類似度を計算するには両文を同時に入力する必要があり、10,000 文の総当たり比較には約 65 時間かかるという問題があった。
Reimers と Gurevych(2019年 EMNLP)が発表した Sentence-BERT(SBERT) はシャム・ネットワーク構造でこれを解決した。各文を独立してベクトル化して保存でき、同じ 10,000 文の比較をわずか 5 秒に短縮している。これが現代のセマンティック検索の実質的な起点とされる。
RAGとの組み合わせ方
エンベッディングの典型的な使い方は次の流れだ。
- ドキュメントをチャンク(断片)に分割し、各チャンクをベクトル化してベクトルDBに保存する
- ユーザーの質問もベクトル化し、ベクトルDB内の近傍チャンクを ANN(近似最近傍探索)で取得する
- 取得したチャンクをコンテキストとして LLM に渡して回答させる
この仕組みを知っておくと、Advanced RAG(Lesson 21)のリランキングや HyDE がなぜ必要かも理解しやすくなる。
まとめ
エンベッディングはテキストを高次元ベクトルに変換し、意味の近さをコサイン類似度で測れるようにする技術だ。Word2Vec から SBERT へと進化する中で、文レベルの意味検索が実用的なスピードで行えるようになった。RAGを自分で実装するときは「どのエンベッディングモデルを選ぶか」「次元数は何か」「言語は日本語に対応しているか」を最初に確認するとよいとされる。