Elasticsearch は、バージョン 7.3 以降、ベクトル検索をサポートします。HNSW によるANNベクトル検索は8.0 以降でサポートされています。現在、Elasticsearch は世界で最もダウンロードされているベクター データベースです。密なベクトルとベクトル比較を使用してドキュメントを検索できます。ベクトル検索には、人工知能と機械学習の分野で多くの重要な用途があります。ベクトルを効率的に保存および取得するデータベースは、実稼働対応の AI/ML サービスを構築するために不可欠です。Elastic ベクトル検索の詳細については、「What is Vector search? Better search with ML | Elastic」のアドレスを参照してください 。
ベクトルとは正確には何ですか?
簡単に言えば、ベクトルはデータの数値表現です。すべてのデータ (表、テキスト、画像、ビデオ、サウンドなど) は、数値の多次元配列として表すことができます。
ベクトル検索がどのように正確に機能するかについてはさまざまな技術的バリエーションがありますが、基本的な考え方はベクトル空間での ANN アルゴリズム検索の概念に焦点を当てています。
上の図に示すように、ベクトル (埋め込み) 空間では、cat と kitten という 2 つの単語が比較的近くにあり、dog がわずかに遠くにあることがわかります。キングとクイーンという言葉は互いに近いですが、犬、猫、子猫とは遠く離れています。これは、記事「Elasticsearch: セマンティック検索 - Python でのセマンティック検索」を読むことによっても確認できます。とても興味深い記事でした。読む価値があります。
ベクトルとしての表形式データ
機械学習アルゴリズムで簡単に使用できる形式へのデータの変換は、ML パイプラインのデータ前処理段階で行われます。これはパイプラインの初期段階の 1 つです。
表形式のデータ (SQL データベースのテーブルなど) には、行ごとに 1 つの観測値が含まれます。
各列のデータは、大きく 4 つのタイプのいずれかに分類できます。
- 名目: 名目データは、序数または定量的な値を持たない値を指します。性別はこのタイプのデータの例です。
- Ordinal : Ordinal データには自然な順序があり、スケール上の位置に従って数値が何らかの順序で表示されますが、それらに対して算術タスクを実行することはできません。日付フィールドは順序データの例です。
- 離散: 離散データには、整数または整数の値が含まれます。クラス内の生徒の総数は、離散データの例です。これらのデータは小数や分数に分解できません。
- 連続: 連続データは 10 進形式です。たとえば、クラス内の生徒の身長は連続データの例です。
機械学習アルゴリズムは名目データや順序データの処理が苦手です。したがって、表形式のデータを機械学習アルゴリズムに入力する前に、多くの場合、これらのフィールドを数値に変換する必要があります。エンコードは、非数値フィールドを数値フィールドに変換する機械学習のプロセスです。名義フィールドと順序フィールドをエンコードした後、ベクトル データ セットを取得します。
ベクトルとしての画像
画像は、数値の 3 次元行列 (技術的には Rank-3 Tensorですが、今は詳細を無視しましょう) として表すことができます。2 次元はピクセルの座標を表し、3 次元には 3 つのカラー チャネルが含まれます。マトリックスの数値は 0 ~ 255 の範囲で、ピクセルの 3 原色 (赤、緑、青) の値を表します。したがって、4 x 4 ピクセルのカラー画像は次のようにマトリックスとして表現できます。
画像をベクターに変換する方法については、次の記事を参照してください。
ベクトルとしてのテキスト
テキスト情報は長い数値ベクトルに変換できます。ベクトル内の位置は単語を表し、値はテキスト内で単語が出現する回数を表します。これをテキストデータのバッグオブワード表現と呼びます。
These are not the droid you are looking for. No, I am your father.
これら:1、ある: 2、ない: 1、ザ: 1、ドロイド: 1、あなた: 1、見る: 1、のため: 1
いいえ: 1、私: 1、午前: 1、あなた: 1、父親: 1
テキスト情報は長い数値ベクトルに変換できます。ベクトル内の位置は単語を表し、値はテキスト内で単語が出現する回数を表します。これは、テキスト データのバッグ オブ ワード表現と呼ばれます。この初期の形式のベクトル化テキストは、スパース ベクトル (ゼロが多すぎるベクトル) を生成します。テキストをベクトルに変換するための、より洗練された方法 (単語埋め込み) が存在します。これらのメソッドは、保存サイズが小さいコンパクトで高密度のベクトルを生成でき、また、ベクトル空間内でより近いテキストが意味が類似していると予想されるような方法でテキストの意味をエンコードできます。
データをベクトルとして表すのはなぜでしょうか?
データ ポイントは情報を効率的にエンコードして操作するため、機械学習ではベクトルとして表現されます。ベクトルは、データ ポイントを整理するための簡潔で構造化された形式を提供します。各ベクトル要素は特定の特性または属性に対応します。データポイントがベクトルとして表される場合、機械学習アルゴリズムは加算、減算、ドット積などの数学的演算を簡単に実行できます。これにより、データ ポイント間の類似性の計算、距離の推定、モデルの最適化など、トレーニングと推論のプロセスに含まれるさまざまな計算が容易になります。さらに、ベクトルでは、多くの機械学習手法の基礎を形成する線形代数と行列演算を使用できます。ベクトルの力を利用することで、機械学習アルゴリズムは複雑なデータセットを効果的に分析して学習し、最終的には正確な予測と貴重な洞察を得ることができます。
ベクトルは数学的なものです
ベクトル検索は、数十年にわたって開発されてきた機械学習技術です。単語を数値に変換し、類似性の尺度、つまりこれらの単語が互いにどれだけ似ているかを表す尺度を使用します。少し複雑ですが、高校数学のいくつかの概念に頼ることで、より具体的にすることができます。
2 点間の線は、一方の端が原点にあり、もう一方の端が点にあるベクトルです。これを線分の終点と呼びます。
これを幾何学的に考えるとより具体的になります。開始点 (原点と呼ばれる) があり、左に 6 点、右に 6 点伸びる線があります。同じ原点から開始して、線は上に 6 ポイント、下に 6 ポイント伸びます。(線を無限に延長することもできますが、具体性のために小さな数を使用しました。)
これらの線をグラフにすると、左右の線が X 軸、上下の線が Y 軸になります。軸上の任意の点を、一方の側に正の数値、もう一方の側に負の数値を使用して数値として表すことができます。私たちはいつもこの二次元の形、平面を見ています。
図 2 では、ベクトル (または線の端点) に 2 つの数値があります。1 つは x 軸を表し、もう 1 つは y 軸を表します。2 次元とは、ベクトル空間内の位置を表すために 2 つの数値が必要であることを意味します。
3 次元を想像するには、ページから離れるのと同じように、図から離れる必要があります。3 次元の点は 3 つの数値を取得します。
ベクトルに次元が追加されるたびに (これは想像しにくいですが)、追加の数値が得られます (密ベクトルと呼ばれることもあります)。
機械学習アプリケーションでは、コンピューター科学者は数百次元または数千次元の空間でベクトルを扱います。これは確かに、それらを視覚化する私たちの能力や幾何学についての直感の一部を複雑にしますが、同じ原則が 2 次元と 3 次元にも当てはまります。
ベクトルの類似性を測定する
したがって、ベクトルを使用すると、単語、画像、クエリ、さらには製品などの非構造化データを数値表現に変換できます。データとそのベクトルは類似性によって同期され、検索者の質問と意図に一致する結果が表示されます。
類似性メトリクスを使用してデータとクエリを照合します。ここで、線、グラフ、ベクトル空間に関する上記の段落が登場します。
2 つの非構造化データがどのように関連しているかを議論する場合、ベクトル空間でそれらの距離を測定する何らかの方法が必要です。ベクトルは類似性を度単位で測定します。これは、ベクトルの長さではなくベクトルの方向が重要であることを意味します。線の方向によって角度の幅が決まり、それによって類似性を測定します。
図をもう一度見てみると、3 つのベクトルが見えます。
- ベクトル A は (2, 1)
- ベクトル B は (3, 2)
- ベクトル C は (-1, 2)
ベクトル A とベクトル B の間の角度は、ベクトル A とベクトル C の間の角度よりもはるかに小さいです。
角度が狭いと、たとえ 1 つの線分が別の線分よりもはるかに長い場合でも、物事が密接に関連していることがわかります。繰り返しますが、ベクトルの長さではなく、ベクトルの方向に関心があります。
2 つのベクトル間に 180 度の角度がある場合は、それらが逆相関していることを示しており、これは貴重な情報となる可能性があります。角度が 90 度の場合、2 つのベクトルはお互いについて何も伝えることができません。
2 つのベクトル間の類似性または距離の測定は、距離 (数値) の実際の計算にコサイン関数が使用されるため、コサイン距離と呼ばれます。
マンハッタンの地図を見ると、ほとんどの通りが上から下 (北/南) と左から右 (東/西) に走っていることがわかります。最高のベーグル店がホテルからどのくらい離れているかを確認する必要があるとき、上に 3 ブロック、下に 1 ブロックあると言われました。
これは距離を測定する 1 つの方法です。私がいる場所 (原点) からベーグル店までの距離をマンハッタン距離といいます。ただし、直線距離もあります。これは、ユークリッド距離と呼ばれる別の測定値です。距離を測定する方法はたくさんありますが、これら 2 つの例がアイデアを与えてくれます。
ベクトル検索では、近いほど「関連性が高い」ことを意味し、遠いほど「関連性が低い」ことを意味します。
データをベクトルとして表現したので、次に何が起こるでしょうか?
データがベクトル形式で表現されると、通常は事前トレーニングされた機械学習モデルに入力され、これらのベクトルが新しいベクトル空間にマッピングされ、類似したオブジェクト (テキスト、画像、またはデータポイント) のベクトルが互いに見えるようになります。近くのベクトルで。新しいベクトル空間。このプロセスは埋め込みと呼ばれます。ご想像のとおり、生成される新しいベクトルのセットも埋め込みと呼ばれます。
類似のデータに対応するベクトルが互いに近い新しいベクトルのセット (それぞれがデータ ポイントの 1 つを表す) を取得すると、驚くべきことが起こります。
データが類似性の概念に基づいて互いに近くに配置されたベクトルとして表される場合、特定のアイテムに類似したアイテムを見つけることは、元のアイテム ベクトルに近いすべてのアイテム ベクトルを見つけることを単純化します。
では、何が大変なのでしょうか?
Vector Search のリリースにより、ベクトル検索を実行するためにまったく別の並列インフラストラクチャをセットアップすることなく、単純な演算子 HNSW を使用して Elasticsearch に保存されたベクトルの類似性検索を実行できるようになりました。
アプリケーション チームはすぐに次の利点を実感し始めました。
- アプリケーションのアーキテクチャと設計を簡素化
- アプリケーションのリリースサイクルの短縮
- インフラストラクチャのコストを削減する
- メンテナンスコストの削減
- 価値をより早く実現する
LLM や生成 AI などの最新の AI テクノロジーを使用してユーザー エクスペリエンスを迅速に向上できるアプリケーション チームは、競合他社の先を行く可能性が高くなります。
Elasticsearch をベクトル検索に使用する方法について詳しくは、AI の記事コラムをお読みください。
ベクトル検索の使用例
- セマンティック検索: 検索クエリの意味とドキュメントの内容の意味に基づいてドキュメントを検索します。セマンティック検索は、データベースまたは検索エンジンから情報を取得する従来のテキスト検索方法よりも高度な方法です。従来のテキスト検索はキーワード一致と単語の完全一致に依存しますが、セマンティック検索は、ユーザーのクエリと検索コンテンツの背後にあるコンテキスト、意図、意味を理解することを目的としています。記事「Elasticsearch: NLP の導入方法: テキスト埋め込みとベクトル検索」を参照してください。
- 逆画像検索: 特定の画像に「似ている」画像を検索します (Google 画像検索など)。記事「Elasticsearch: Elastic で画像類似検索を実装する方法」を参照してください。
- レコメンデーション エンジン: 以前のビューに基づいてソーシャル メディアの投稿をレコメンドします (Instagram の画像レコメンデーション、Twitter のツイートレコメンデーション、Facebook フィードまたは Youtube のストーリーなど)
- 盗作検出: 文書がデータベース内の文書とどの程度一致するかに基づいて盗作を検出します。