ざっくり言うと

埋め込み(Embedding)とは、文章・画像・音声などを数値の並びに置き換える方法です。この数値の並びを、ベクトルと呼びます。

ベクトル同士を比べると、埋め込みモデルが学習した「関連の近さ」を計算で出せます。

「解約したい」と「退会の手順」。使っている言葉は違うのに、指している中身は同じですよね。

こういう言い換えをまたいで探せる検索に、Embeddingはよく使われます。社内の資料をもとに生成AIへ答えさせるRAG(検索拡張生成)でも、土台になる部品のひとつです。

イメージ

ここで大事なのは、この地図が世界共通の正解ではないことです。近さが何を表すかは、モデルの学習のしかたと用途によって変わります。あくまで、そのモデルが作った1枚の地図だと考えてください。

ふつうの地図なら、縦と横の2つの数字で場所が決まります。Embeddingはもっと多くの数字を使い、いくつ使うかはモデルごとに決まっています。

数字の数は、保存する容量、計算にかかる量、検索の質のバランスで決まります。数字が多いほど必ず質が上がる、というわけではありません。

正確には

Embeddingを、公式はどう説明しているのでしょうか。言葉の選び方は違っても、指している中身は近いものです。

Google 機械学習教材

すき間だらけで巨大になってしまう表現を、もっと少ない数字が詰まったベクトルに置き換えるものと説明しています。これによって、もの同士の意味のつながりを表せるようになります。単語やカテゴリを扱うときが、その典型的な使いどころです。

OpenAI APIガイド

テキストの埋め込みを、小数を含む数字の並び(浮動小数点数のベクトル)としています。ベクトル同士の距離を測れば、文章と文章の関連の強さが分かるという説明です。

使いみちとして、次のような場面が挙げられています。

  • 検索
  • 似たもの同士のグループ分け(クラスタリング)
  • おすすめの表示
  • 分類
  • いつもと違うものの検知(異常検知)

ほかにもいろいろな使われ方があります。

ベクトルにできるのは、文章だけ?

文章だけではありません。Google Cloudのマルチモーダル埋め込みは、テキスト・画像・文書・音声・動画を入力として扱えます。ただし、どの種類を入れられるか、種類の違うデータを同じ地図の上で比べられるかは、モデルごとに違います。

対象ベクトルにすると、何ができる?
文章(単語・文・段落)意味の近い文章を探す、文書の仕分け、要約どうしの似ぐあいの比較
画像似た構図や被写体の画像を探す、画像の仕分け
音声似た声や曲調を探す、音声認識の下ごしらえ
コード動きが似ているプログラムを探す、不具合の近くを探す

置き換える作業そのものは、学習済みのEmbeddingモデルが引き受けます。クラウドのAPIへ送ってベクトルを受け取る方法もあれば、手元のパソコンやサーバーでモデルを動かす方法もあります。

「近さ」は、どうやって測る?

ベクトル同士の近さを測る代表的な方法が、コサイン類似度です。OpenAIは、自社のテキスト埋め込みにこの方法をすすめています。どの測り方がよいかはモデルによって違うので、実際に使うときは、そのモデルの説明に従ってください。

コサイン類似度は、地図の中心から見て2つの言葉が同じ方角にあるかを測るもの、と考えると分かりやすいです。

気をつけたいのは、出てきたスコアが「同じ意味である確率」ではないことです。Google Cloudも、類似度を目盛りの合った確率(校正済みの確率)としては扱わず、検索では順位を使う方法を案内しています。何点以上なら合格という線引きは、自分のデータで試しながら決めることになります。

使う場面

どこで使われている?

なかでも近年は、社内の情報を生成AIに答えさせるRAG(Retrieval-Augmented Generation)の中核部品として注目されています。流れはざっくり3ステップです。

  • 社内の文書を、地図の上に置く
  • 質問も、同じ地図に置く
  • 近いものを取り出して、生成AIへ渡す

シンプルな仕組みですよね。

注意点

関連用語

やってみよう