AI・データ●●●○○

埋め込み

Embedding ・ うめこみ

言葉や画像を「意味の近さが距離になる」数値ベクトルへ変換する技術。意味検索やRAGの核。

✦ 30秒で試す — 航海1文字も一致しない「犬」と「dog」が、隣どうしに並ぶ「ペットのしつけ」で先に出てくるのは?予想してみる

概要

埋め込み(エンベディング)は、言葉・文章・画像といったデータを、数百〜数千個の数値を並べたベクトル(座標)に変換する技術です。ポイントは変換のされ方にあります。「意味が近いものは近い座標に、意味が遠いものは遠い座標に」配置されるよう学習されているため、埋め込み空間では意味の近さが距離として測れるのです。「犬」と「子犬」は近くに、「犬」と「決算書」は遠くに置かれます。

これは「意味」というつかみどころのないものを、コンピュータが得意な数値計算の世界に持ち込む発想の転換です。文字列としての「犬」と「dog」は1文字も一致しませんが、埋め込み空間ではすぐ隣にいます。この性質のおかげで、キーワードが一致しなくても「言いたいことが同じ」文書を探せる意味検索、好みの近いアイテムを提示するレコメンド、そして LLM に関連知識を渡す RAG の検索部分が成立しています。

埋め込みを作るのはニューラルネットワークです。OpenAI や Google などが提供する埋め込みモデルの API に文章を渡すと、たとえば1536次元の数値配列が返ってくる — 現代のAIアプリ開発では、それくらい手軽に使える部品になっています。

なぜ生まれたか

コンピュータで言葉を扱う最初期の方法は「one-hot 表現」でした。語彙が5万語あるなら5万次元のベクトルを用意し、「犬」なら犬の位置だけを1、ほかを全部0にする方式です。この表現では、どの2語を取っても等しく無関係(すべてのベクトルが直交)で、「犬と猫は近い」という情報を持てません。「犬の飼い方」で検索しても「子犬のしつけ」が見つからない — 文字が一致するかどうかの世界しか作れませんでした。

転機は、「語の意味は、その語がどんな文脈に現れるかで決まる」という言語学の分布仮説(1950年代の Harris や Firth)を機械学習に落とし込んだことです。2013年に Google の Mikolov らが発表した word2vec は、大量のテキストで「周りの語から真ん中の語を当てる(またはその逆)」訓練をするだけで、意味の近い語が近い座標に集まる、数百次元の密なベクトル(分散表現)が得られることを示しました。正解ラベルは要らず、文章そのものから問題を作る自己教師あり学習です。「king − man + woman ≒ queen」のようにベクトルの足し引きが意味の操作に対応する現象は、意味が本当に幾何学に写し取れることを鮮やかに見せました。

ただし word2vec は1語に1つのベクトルしか持てず、「銀行の口座」の「口座」と文脈が違っても同じ座標でした。2018年以降、Transformerベースのモデル(BERT など)が文脈に応じたベクトルを作れるようになり、さらに「意味の近い文のペアは近づけ、無関係なペアは遠ざける」対照学習(contrastive learning)で文全体を1本のベクトルにする手法(2019年の Sentence-BERT など)が広まって、現在の意味検索の水準に至っています。

詳細

意味の空間と距離の測り方

埋め込みモデルは、入力の文章をトークン列に分け、ニューラルネットワークに通して1本のベクトルにまとめます。似た意味の入力からは似たベクトルが出るように、大量の「意味が近いペア・遠いペア」で訓練されています。できあがる空間は数百〜数千次元ですが、直観は2次元の地図で十分つかめます。

埋め込み空間(実際は数百〜数千次元)動物の近傍犬子犬dog猫金融の近傍決算書株価距離が遠い = 意味が遠い近い文字列としては無関係な「犬」と「dog」が、意味によって隣り合う点に注目
埋め込み空間のイメージ — 意味の近さがそのまま距離になる

近さの測り方として実務でいちばんよく使われるのがコサイン類似度です。2本のベクトルのなす角度に注目し、向きが揃っているほど1に近く、無関係なら0付近、逆向きなら−1になります。ベクトルの長さ(文章の長さや語の頻度などに影響されやすい)は無視して、向き=意味の方向だけを比べる尺度だと考えると直観に合います。多くの埋め込みモデルは長さ1にそろえた(正規化した)ベクトルを返すので、その場合はコサイン類似度・内積・ユークリッド距離の順位が一致します。長さがそろっていないベクトルでは、どの尺度を使うかで順位が変わる点に注意が要ります。

意味検索の手順を追うと、第一に、検索対象の文書をあらかじめすべて同じモデルで埋め込み、ベクトルとして保存しておきます。第二に、検索のたびにクエリの文を同じモデルで埋め込みます。第三に、保存してあるベクトルの中から、クエリとのコサイン類似度が高い順に上位 k 件を取り出します。キーワードを1つも共有していなくても、向きが近ければ上位に来る — これが「意味で探す」の中身です。

下の部品は、13語の埋め込みを3次元に縮めた見立ての空間です。金色のクエリ点をつかんで動かし、上位3件がどう入れ替わるかを確かめてください。「子犬」は「犬」と同じ向きで長さの短いベクトルにしてあるので、コサインの順位と距離の順位がずれる場面も見つかります。

⚡ 体験: クエリを動かして、近いものを取り出す

立体を準備しています…

クエリの例
順位語コサイン類似度距離の順位
1車0.9681位
2電車0.9492位
3パン0.9424位
4ハムスター0.9363位
5飛行機0.8975位

金色のクエリ点をつかんで動かしてください。向きの近い(コサイン類似度の高い)上位3語が金の線で結ばれます。

ハッシュとの対比 — 完全一致と意味的近傍

ハッシュ化の関数と並べると埋め込みの性格が際立ちます。ハッシュは「同一の入力→同一の値」を保証する一方、1文字でも違えば出力は全く別物になるよう設計されています(雪崩効果)。つまりハッシュは完全一致のための変換で、埋め込みは近さの保存のための変換です。「入力が少し変わったら出力も少しだけ変わってほしい」というハッシュとは正反対の要求を満たすのが埋め込みだ、と覚えると混同しません。同様に、RDBMS の LIKE 検索や全文検索が「文字面の一致」を探すのに対し、埋め込み検索は「意味の一致」を探します。両者は排他ではなく、実務ではキーワード検索と埋め込み検索を併用するハイブリッド検索がよく使われます。

使われ方 — 検索・レコメンド・RAG

意味検索では、あらかじめ全文書を埋め込みベクトルに変換してベクトルデータベースへ格納しておき、クエリが来たら同じモデルで埋め込んで近傍を探します。「返品したい」で検索して「返金ポリシー」の文書が見つかるのは、この仕組みの典型的な成果です。

レコメンドでは、商品・動画・ユーザーを同じ空間に埋め込み、「このユーザーのベクトルに近い商品」「この商品を見た人のベクトルに近い商品」を提示します。テキストに限らず、画像や音声も同じ空間に埋め込めば「この写真に似た商品を探す」といったクロスモーダル検索も可能です。

そして現在最大の用途がRAGです。LLMは学習時点までの知識しか持たないため、社内文書などの外部知識を検索してプロンプトに添える構成が定番になっており、その「関連文書を探す」中核を埋め込み検索が担っています。埋め込みの品質がそのまま回答品質の上限を決めるため、埋め込みモデルの選定はRAG設計の最重要ポイントの一つです。

実務の落とし穴

第一に、埋め込みモデルの混在です。異なるモデル(あるいは同じモデルの別バージョン)が出すベクトルは別の空間の座標なので、比較しても意味がありません。格納時と検索時は必ず同一モデルを使い、モデルを更新したら全データの再埋め込みが必要です。第二に、チャンク分割の設計です。長文書は分割してから埋め込みますが、切り方が悪いと文脈が失われ検索精度が落ちます。第三に、ドメイン適合です。汎用モデルは専門用語だらけの領域で精度が出ないことがあり、その場合はファインチューニングされた領域特化の埋め込みモデルを検討します。次元数はモデルが決めるものですが、大きいほど高精度・高コストになるため、格納量と検索速度とのバランスで選ぶことになります。

試問

13語を、意味の近さを保ったまま3次元の座標に置いた空間です(軸はおおむね 動物・お金・食べ物)。金色のクエリ点をつかんで動かせます(立体表示では、背景のドラッグで空間を回せます)。表には、クエリとのコサイン類似度(原点から見た向きの近さ)の順位と、まっすぐ測った距離の順位が並びます。「子犬」は「犬」とほぼ同じ向きで、長さだけが短い点です。

✦ 命題挑戦中

「子犬」をコサイン類似度では上位3件に入れたまま、距離(まっすぐ測った近さ)の順位では6位以下に落とせ

  • 「子犬」がコサイン類似度の上位3件に入っている
  • そのまま、「子犬」の距離の順位が6位以下
⚡ 体験: クエリを動かして、近いものを取り出す

立体を準備しています…

順位語コサイン類似度距離の順位
1車0.9681位
2電車0.9492位
3パン0.9424位
4ハムスター0.9363位
5飛行機0.8975位

金色のクエリ点をつかんで動かしてください。向きの近い(コサイン類似度の高い)上位3語が金の線で結ばれます。