エンベディングとは?AIが意味の近い文書を探せる理由
画像出典: パブリックドメイン(Wikimedia Commons)
エンベディングは、単語や文章を数値の並び(ベクトル)に変換する技術です。意味の近い言葉ほど近い数値になるよう作られているため、キーワードが一文字も一致していなくても「意味が近い文書」を距離の計算だけで見つけられます。検索・レコメンド・RAGはいずれもこの仕組みの上に立っています。
社内文書AIの検索は、入力された文字列を文書の中から探しているわけではありません。言葉をいったん数の並びに置き換えて、数の近さで探しているのです。
正直なところ、ここは説明を聞いても最初はピンと来ないところだと思います。「意味を数値にする」と言われても、意味に数字がついている実感がないからです。ただ、順番に見ていくと、やっていること自体はかなり素朴です。エンベディング(embedding、埋め込み)と呼ばれるこの技術は、いま使われている検索・レコメンド・社内文書AIのほぼ全部の土台になっています。
エンベディングとは?ひとことで言うと何をしている技術か
エンベディングとは、単語や文章といった複雑なデータを、AIが処理しやすい数値ベクトル(数字を並べたもの)に変換する技術です。1つの単語や文章に対して、たくさんの次元を持つ数値の並びが割り当てられます。
たとえば「猫」という言葉は、こんな形の数値になります。
猫 → [0.2, -0.5, 0.8, 0.1, ..., 0.3]
この数字ひとつひとつに「かわいさ度」「動物度」のような人間が読める意味があるわけではありません。人間には解読できない数字の並びです。それでも役に立つのは、意味の近い言葉どうしは、数値の並びも近くなるように作られているからです。
「猫」と「犬」はどちらも身近な動物なので、数の並びとしても近い位置に来ます。一方で「猫」と「自動車」は、まったく離れた位置に置かれます。地図の上に言葉を置いていくところを想像してください。動物は動物どうしが集まった一角に、乗り物は乗り物どうしが集まった別の一角に配置される。エンベディングがやっているのは、ものすごく次元の多い地図に、あらゆる言葉と文章を配置する作業です。
2次元では、言葉の意味を表しきれないからです。紙の地図なら縦と横の2つの数字で位置が決まりますが、言葉の近さには「動物か・乗り物か」「良い意味か・悪い意味か」「フォーマルか・くだけているか」など、無数の軸があります。軸が足りないと、たまたま別の理由で近くにいる言葉が同じ場所に潰れてしまいます。
実際のモデルがどれくらいの軸を使っているかは公表されています。OpenAIの text-embedding-3-small は既定で1536次元、text-embedding-3-large は既定で3072次元のベクトルを出力します。1つの文章が、1536個や3072個の数字として表現されるということです。
なぜキーワードが一致しなくても見つかるのか?
ここが、冒頭の「休み」と「有給休暇取得手続」がつながった理由です。
従来のキーワード検索は、文字列の一致に依存しています。「休み」で検索すれば「休み」という文字が入った文書が出る。逆に言えば、その文字が入っていない文書は、どれだけ内容が的確でも出てきません。「解約」で探しているのに社内資料には「退会手続き」としか書かれていない、という取りこぼしは、この仕組みの限界そのものです。
ベクトル検索では、手順が入れ替わります。
- 文書を先に数値化しておく社内文書を1件ずつエンベディングにかけ、ベクトルにして保存しておきます(この保管場所をベクトルデータベースと呼びます)。
- 質問文も同じように数値化する「休みの申請ってどうやるの」という質問も、同じモデルでベクトルに変換します。
- 数の近さで並べる質問のベクトルに近い位置にある文書のベクトルを探します。近い=意味が近い、として上位から返します。
検索の最後の工程が、文字の照合ではなく距離の計算になっている——これがベクトル検索の正体です。距離を測るだけなので、質問文と文書に共通する単語が1つもなくても成立します。
- 社内で言い方が統一されていない(「解約」と「退会」、「有給」と「年休」)
- 読み手が正式名称を知らない(「あの経費の紙」と「旅費精算書」)
- 質問が話し言葉で、文書が硬い書き言葉
- 同じ内容が複数の文書に散らばっていて、どれを見ればいいか分からない
レコメンドにはどう使われている?
おすすめ表示も、原理としては同じことをしています。文書のかわりに商品や記事をベクトルにして、同じ地図の上に並べるだけです。
ある記事を読んだ人に次を勧めたいなら、その記事のベクトルの近くにある記事を返せばいい。カテゴリを人手でタグ付けしなくても、内容そのものの近さで並ぶところが利点です。「タグは違うのに、なぜか読みたかったものが出てくる」という体験は、たいていこの距離計算から来ています。
逆に言えば、ベクトルが近いことと、その人が今それを欲しいことは別です。買ったばかりの洗濯機とよく似た洗濯機が延々と出てくる、あの現象がまさにそれで、意味の近さは測れても「もう買った」という文脈までは測れていません。実際のサービスでは、購買履歴や新しさなど別の情報を後段で組み合わせて調整しています。
社内文書AI(RAG)とはどうつながる?
最近よく聞く「AIに社内資料を読ませる」仕組みは、RAG(Retrieval-Augmented Generation、検索拡張生成)と呼ばれます。AWSの説明では、RAGはLLMを外部データ(たとえば企業の社内文書)で拡張し、その企業固有の用途で正確な出力を生むために必要な文脈をモデルに与える技術、とされています。
RAGは大きく3つのステップで動きます。
- 検索(Retrieval)質問に関連する情報を、社内文書やナレッジベースから探し出す。
- 拡張(Augmentation)見つけた情報を、質問文と一緒に生成AIへ渡す。
- 生成(Generation)生成AIが、渡された根拠を踏まえて自然な文章で答える。
エンベディングが働くのは1番目の検索です。前段として社内文書をベクトル化してベクトルデータベースへ取り込んでおき、質問文と意味的に近い文書を引き当てる。エンベディングの精度がそのままRAGの回答の土台になる、という関係です。仕組み全体の詳しい話はRAGの解説記事にゆずりますが、心臓部の片方がここにあることは押さえておくと理解が早くなります。
どれくらいのコストがかかる?
「意味で検索できるなら、社内の資料を全部入れたい」と思ったときに気になるのが費用です。エンベディングは生成AIに文章を書かせるのに比べて、単価がかなり低い部類に入ります。
| モデル | 既定の次元数 | 1000トークンあたりの価格 |
|---|---|---|
| text-embedding-3-small | 1536 | $0.00002 |
| text-embedding-3-large | 3072 | $0.00013 |
| text-embedding-ada-002(旧) | 1536 | $0.0001 |
OpenAIの公表データをもとに作成
上の表で目を引くのは、text-embedding-3-small が旧世代の text-embedding-ada-002 に対して5分の1の価格になっている点です(1000トークンあたり$0.0001から$0.00002へ)。同じ次元数でこの下がり方なので、意味検索を導入するときの費用のハードルはかなり下がっています。
次元数についても融通が利きます。dimensions パラメータを指定すると、概念を表現する能力を保ったまま次元数を減らせます。次元が減れば保存容量も検索の計算量も軽くなるので、扱う文書が多いときの現実的な調整手段になります。
エンベディングが苦手なこと・注意すべきことは?
ベクトル検索は「だいたい近いもの」を返す仕組みなので、厳密な一致が必要な場面ではむしろ弱くなります。型番、契約番号、日付、人名の完全一致を探したいときに、意味の近い別の型番を返されては困ります。実務では、キーワード検索と併用して使い分けるのが現実的です。
検索の精度と、生成の精度は別問題です。関連文書を正しく引き当てているのに回答が不正確、というケースは、検索側ではなく生成AI側が事実と異なる内容を作り出している(ハルシネーション)ことを示しています。どちらが原因かで打つ手がまったく変わるので、「AIの答えが変だ」で止めずに、まず引いてきた文書が妥当だったかを確認するのが切り分けの起点になります。
もう一つ、見落とされがちなのが元データの質です。RAGの課題として、データベースに過去情報や重複データが多いと、誤った情報を選んでしまうリスクが高まることが指摘されています。古い規程と新しい規程が両方入っていれば、意味の近さでは区別がつきません。意味検索の賢さは、入れた資料の整理具合を超えられないのです。
- 入れる資料に、失効した旧版が混ざっていないか
- 同じ内容の重複ファイルを整理できているか
- 誰が見てよい資料かのアクセス制御が設計されているか
- 型番・番号での完全一致検索も必要か(必要ならキーワード検索を併用)
社内文書を扱う以上、情報セキュリティへの配慮も欠かせません。アクセス制御や、ガードレール(AIへの入力と出力を監視し、不適切な内容や事実と異なる回答をそのまま返さないようにする仕組み)の設計が求められる領域です。
結局、何が分かればいいのか
エンベディングについて押さえるべきことは、そう多くありません。
- 言葉や文章を、数字の並び(ベクトル)に変えている
- 意味が近いものほど、数字としても近い位置に来るように作られている
- だから検索・レコメンド・RAGは、文字の一致ではなく距離の計算で動いている
この3点が入っていると、AI関連のニュースや製品説明が急に読みやすくなります。「ベクトルデータベース」「意味検索」「セマンティック検索」といった言葉が出てきたとき、その裏で何が起きているのかが想像できるからです。
手を動かして確かめたいなら、社内資料を全部入れる前に、10件ほどのファイルで小さく試すのが確実です。自分がふだん使う話し言葉で質問して、正式名称でしか書かれていない資料が出てくるか。それが出てきたら、意味の近さが距離として測れているということです。
よくある質問
エンベディングとは何ですか?
エンベディングとは、単語や文章などの複雑なデータを、AIが処理しやすい数値ベクトル(数字の並び)に変換する技術です。意味の近いデータほどベクトルとしても近い位置に配置されるため、数値どうしを比較することで意味的な関連性を判断できます。
ベクトル検索は普通のキーワード検索と何が違いますか?
従来のキーワード検索は文字列の一致に依存するため、検索語がその文書に含まれていなければヒットしません。エンベディングを使うベクトル検索は、質問文と文書をそれぞれベクトルに変換して距離を計算するため、キーワードが完全一致しなくても意味が類似する文書がヒットします。
エンベディングモデルの次元数はどれくらいですか?
OpenAIのtext-embedding-3-smallは既定で1536次元、text-embedding-3-largeは既定で3072次元のベクトルを出力します。dimensionsパラメータを指定すれば、概念の表現能力を保ったまま次元数を削減することもできます。
エンベディングとRAGはどう関係していますか?
RAG(検索拡張生成)は検索・拡張・生成の3ステップで動きますが、その1つ目の検索でエンベディングが使われます。社内文書をあらかじめベクトル化してベクトルデータベースに格納しておくことで、質問文と意味的に近い文書を探し出せるようになります。
※記事で使用した内容・数値は変更される場合があります。最新情報は公式サイトをご確認ください。