Embedding
表記揺れ
ベクトル埋め込み
ベクトル埋め込みとは
題材、単語、画像、またはその他のデータ片の数値表現
ベクトル埋め込みは単に埋め込みとも呼ばれますが、これは大規模言語モデルやその他のAIモデルによって作成されます。
各ベクトル埋め込み間の距離によって、ベクトルデータベースまたはベクトル検索エンジンが、ベクトル間の類似性を決定します。 距離はデータオブジェクトのいくつかの次元を表すことがあり、機械学習を可能にし、AIがパターン、関係性、基本的な構造を理解できるようにします。
文章を数値データに変換する処理:Embedding(埋め込み)
文章をどうやってベクトルに変換するのか?
それはEmbeddingと呼ばれる処理を行うことで変換が可能になります。
このEmbedding自体もLLMの機能で行いますし、Embeddingの処理だけを対象としたLLMなども世の中には沢山あります。
https://scrapbox.io/files/65615f086f48e1001b9074a4.png
Embeddingの処理によって文章がベクトル(ありていに言うと数値データ)に変換されるので計算する(様々な関数に入力する)ことができるようになります。
ここでの本質は、このベクトルの値がどのように決まるのか?どいったロジックでベクトルに変換されるのか?ということだと思います。それに関連するキーワードが意味空間というものです。 このベクトル化をすることで単語同士の意味の近さを計算したり、単語の意味自体を計算することができるようになります。
単語の意味を計算する例として下記はあまりにも有名です。
https://scrapbox.io/files/65615f81cddbba001ca3abb0.png
これは単純な四則演算の例ですが、LLMの推論処理やベクトルストアでのセマンティック検索、類似検索でも要領は同じです。これらは統計処理のようなもっと高度な演算処理を行います。
「ベクトル化」ではなく「埋め込み」と呼ぶ理由
Embedの処理は「埋め込み」、「埋め込みベクトル」、「埋め込み表現」なんて言われ方をします。
初めて聞かれた方はこの「埋め込む」という表現がイメージし辛いのではないでしょうか。
上述の二次元の意味空間は、各単語の属性のようなものをベースに近しいベクトルになるように筆者が適当に絵を書いたものです。この中の、例えば、「富士山」という単語は「山」という意味合いを持ちますから、他の山と近しいベクトルの絵にしました。ですが、「富士山が位置する国は日本」という意味合いにおいては「日本」という単語のベクトルのほうに最も近くないといけないはず。そして、「富士山は日本で標高が一番高い」という意味合いにおいては「一番」という単語のベクトルと一番近くなければいけないはずです。このように単語は文脈の中で様々な意味をもちますので、実際は例示したような二次元ではとても表すことができず、現在市場に出回っているLLMのEmbedモデルはだいたい753次元~2048次元という高次元のベクトルを生成するものが主流です。
つまり、単語や文章をEmbedすると、下図のように、それらはLLMが事前学習した高次元の意味空間に埋め込まれるようなイメージが理解しやすいのではないかなと思います。
https://scrapbox.io/files/65615ffb0ae505001cb6ba4b.png
このようにして、文章データを変換したベクトルを大量にベクトルデータベースにため込んで検索ができるようにします。
RDBでは貯め込んだデータを検索するためにクエリを実行しますが、ベクトルデータベースの検索処理とはは、セマンティック検索ということになります。セマンティクスとは日本語で「意味論」を指し、セマンティック検索とはRDBのような単に検索キーワードの一致による検索ではなく、そのキーワードが持つ意味を考慮した検索を行うということです。これは成就y津したように文章データをベクトルデータに変換(意味空間にマッピングする)ことにより実現する機構です。