データモデリング
ベクトル検索を使用して AI および機械学習 (ML) アプリケーションを開発する際に、考慮すべきデータモデリングの検討事項を以下に示します。これらの要素は、アプリケーション内で正確かつ効率的な検索応答を生成するために、ベクトル検索を効果的に活用するのに役立ちます。
データ表現
ベクトル検索は、データ点を高次元ベクトルとして表現することに依存しています。ベクトル表現の選択は、データの性質によって異なります。
テキストドキュメントで構成されるデータの場合、単語埋め込み (例: Word2Vec) やドキュメント埋め込み (例: Doc2Vec) などの手法を使用して、テキストをベクトルに変換できます。より複雑なモデルを使用して、OpenAI GPT-4 や Meta LLaMA 2 などの大規模言語モデル (LLM) を使用して埋め込みを生成することもできます。Word2Vec は、浅いニューラルネットワークを使用して、単語の文脈に基づいて単語の埋め込みを学習する比較的単純なモデルです。重要な概念は、Word2Vec は単語が使用される文脈に関係なく、各単語に対して単一の固定ベクトルを生成することです。LLM は、深いニューラルネットワーク、特にトランスフォーマーアーキテクチャを使用して、単語の文脈に基づいて単語の埋め込みを学習する、はるかに複雑なモデルです。Word2Vec とは異なり、これらのモデルは文脈埋め込みを生成します。つまり、同じ単語でも使用される文脈によって異なる埋め込みを持つ可能性があります。
画像は、畳み込みニューラルネットワーク (CNN) などの深層学習手法や、Contrastive Language Image Pre-training (CLIP) などの事前トレーニング済みモデルを使用して表現できます。データの重要な特徴を捉えるベクトル表現を選択してください。
データセットの次元
ベクトル検索では、すべての埋め込みが同じベクトル空間で作成されていることが重要です。つまり、埋め込みは、適切な比較と分析を可能にするために、同じ原則と規則に従う必要があります。同じ埋め込みライブラリを使用すると、ライブラリがデータを特定の方法で一貫してベクトルに変換するため、この互換性が保証されます。たとえば、Word2Vec 埋め込みと BERT (LLM) 埋め込みを比較すると、これらのモデルのアーキテクチャが異なり、根本的に異なる方法で埋め込みを作成するため、問題が発生する可能性があります。
したがって、ベクトルデータ型は、浮動小数点数の固定長ベクトルです。次元の値は、使用する埋め込みモデルによって定義されます。一部の機械学習ライブラリでは次元の値が示されますが、埋め込みモデルで定義する必要があります。関連するオブジェクトが埋め込み空間で互いに近くになるようにして、良好な構造を作成するデータセットの埋め込みモデルを選択することが重要です。データセットに最適な埋め込みモデルを決定するには、さまざまな埋め込みモデルを試してみる必要がある場合があります。
埋め込みベクトルの前処理
正規化とは、長さが 1 になるようにデータをスケーリングすることです。これは通常、ベクトル内の各要素をベクトルの長さで割ることによって行われます。
標準化とは、平均がゼロで標準偏差が 1 になるようにデータをシフト (平均を引く) およびスケーリング (標準偏差で割る) することです。
埋め込みベクトルの文脈における標準化と正規化は同じではないことに注意することが重要です。適切な前処理方法 (標準化、正規化、またはそれ以外の何か) は、データの特定の特性と、機械学習モデルで実現しようとしていることによって異なります。前処理の手順には、テキストのクリーニングとトークン化、画像のリサイズと正規化、または欠損値の処理が含まれる場合があります。
埋め込みベクトルの正規化
埋め込みベクトルの正規化とは、ベクトル空間内のすべての埋め込みベクトルの長さ (またはノルム) が 1 になるようにするプロセスです。これは、ベクトルの各要素をベクトルの長さ (ユークリッド
ノルムまたは L2
ノルムとも呼ばれる) で割ることによって行われます。
たとえば、ベクトル検索クイックスタート の埋め込みベクトルとその正規化された対応ベクトルを見てください。ここでは、すべてのベクトルに一貫した長さが使用されています。
[0.1, 0.15, 0.3, 0.12, 0.05]
[0.45, 0.09, 0.01, 0.2, 0.11]
[0.1, 0.05, 0.08, 0.3, 0.6]
[0.27, 0.40, 0.80, 0.32, 0.13]
[0.88, 0.18, 0.02, 0.39, 0.21]
[0.15, 0.07, 0.12, 0.44, 0.88]
埋め込みを使用する場合にベクトルを正規化する主な理由は、ベクトル間の比較をより意味のあるものにするためです。正規化することで、比較がベクトルのスケールに影響されず、その方向のみに基づいていることを確認できます。これは、ベクトルの間のコサイン類似度を計算するのに特に役立ちます。ここでは、ベクトルの大きさではなく、ベクトル間の角度 (方向の関係) に焦点が当てられます。
埋め込みベクトルの正規化は、高次元データを標準化する方法であり、異なるベクトル間の比較がより意味のあるものになり、元のベクトルのスケールによる影響が少なくなります。正規化されたベクトルでは、ドット積
とコサインは同等ですが、ドット積
アルゴリズムの方が 50% 高速であるため、開発者は類似度関数に ドット積
を使用することをお勧めします。
ただし、埋め込みが正規化されていない場合、ドット積
は意味のないクエリ結果をひそかに返します。したがって、ドット積
はベクトル検索のデフォルトの類似度関数として設定されていません。
OpenAI、PaLM、または Simsce を使用して埋め込みを生成する場合、それらはデフォルトで正規化されます。別のライブラリを使用する場合は、ベクトルを正規化して、類似度関数を ドット積
に設定する必要があります。ベクトル検索クイックスタート で類似度関数を設定する方法を参照してください。
正規化は、すべてのベクトル検索の例に必須ではありません。
埋め込みベクトルの標準化
埋め込みベクトルの標準化とは、通常、統計で使用されるプロセスに似たプロセスのことで、データが平均ゼロと標準偏差 1 になるように標準化されます。標準化の目標は、埋め込みベクトルが標準正規分布の特性を持つように変換することです。
点間の距離を使用する機械学習モデル (最近傍法やユークリッド距離またはコサイン類似度を使用するモデルなど) を使用している場合は、標準化によって、すべての特徴が距離計算に等しく寄与することが保証されます。標準化しないと、スケールの大きな特徴が距離計算を支配する可能性があります。
たとえば、ニューラルネットワークの文脈では、類似したスケールの入力値を持つと、ネットワークがより効果的に学習するのに役立ちます。これにより、特定の機能がそのスケールだけで学習プロセスを支配しないことが保証されるためです。
インデックス作成とストレージ
SAI のインデックス作成およびストレージメカニズムは、ベクトル検索のような大規模なデータセット向けに調整されています。現在、SAI は、近似最近傍 (ANN) 検索のアルゴリズムであり、階層型ナビゲーショナルスモールワールド (HNSW) の近縁である JVector を使用しています。
JVector のような ANN 検索アルゴリズムの目標は、データセット内で、指定されたクエリポイントに最も近い (または最も類似した) データポイントを見つけることです。ただし、正確な最近傍を見つけるには、特に高次元データを扱う場合に、計算コストが高くなる可能性があります。したがって、ANN アルゴリズムは、正確な精度よりも速度と効率を優先して、最近傍を近似的に見つけることを目的としています。
JVector は、グラフの階層を作成することでこの目標を達成します。階層の各レベルは、ナビゲート可能な スモールワールド
グラフに対応しています。グラフをディスクに保存するために、ディスクバック ANN ライブラリである DiskANN に着想を得ています。グラフ内の任意のノード (データポイント) について、他のノードへのパスを簡単に見つけることができます。階層の上位レベルはノードが少なく、粗いナビゲーションに使用され、下位レベルはノードが多く、細かいナビゲーションに使用されます。このようなインデックス構造により、検索スペースを潜在的な一致に絞り込むことで、高速な検索が可能になります。
JVectorは、Panama SIMD APIも使用して、インデックスの構築とクエリを高速化します。
類似度指標
ベクトル検索は、関連性の高い一致を特定するために、ベクトル間の類似性または距離の計算に依存します。適切な類似度指標を選択することは非常に重要です。データ型が異なれば、より適切な指標も異なるためです。一般的な類似度指標には、コサイン類似度、ユークリッド距離、ジャカード類似度などがあります。指標の選択は、データの特性と目的の検索動作に合わせて行う必要があります。
ベクトル検索は、3つの類似度指標(コサイン類似度
、ドット積
、ユークリッド距離
)をサポートしています。ベクトル検索インデックスのデフォルトの類似度アルゴリズムはコサイン類似度
です。ほとんどのアプリケーションでは、正規化された埋め込みに対してドット積
を使用することをお勧めします。ドット積
はコサイン類似度
よりも50%高速であるためです。
スケーラビリティとパフォーマンス
データセットが拡大するにつれて、スケーラビリティは重要な考慮事項となります。ベクトル検索アルゴリズムは、大規模なデータセットを効率的に処理できるように設計する必要があります。Vector Searchを使用するCassandraデータベースは、データを効率的に分散し、並列処理でデータにアクセスして、パフォーマンスを向上させます。
評価と反復
既知の真実とユーザーフィードバックに基づいて検索結果を絞り込むために、継続的にデータを評価および反復します。これは、改善の余地がある領域を特定するのにも役立ちます。ベクトル表現、類似度指標、インデックス作成技術、または前処理ステップを繰り返し調整することで、検索パフォーマンスとユーザー満足度を向上させることができます。
ユースケース
適切に最適化された埋め込みを備えたベクトルデータベースは、データの検索と関連付けの新しい方法を可能にし、従来のデータベースでは以前は不可能であった結果を生成します。
例
-
正確なアイテム名やIDを知らなくても、特定のアイテムに類似したアイテムを検索する
-
正確な文字列やキーワードの一致ではなく、コンテキストとコンテンツの類似性に基づいてドキュメントを取得する
-
製品を検索し、別のカテゴリからコンテキスト的に類似した製品を取得するなど、異種アイテム間で検索結果を拡張する
-
単語の類似性検索を実行し、ユーザーにクエリや文章を言い換える方法を提案する
-
テキスト、画像、音声、またはビデオをクエリとしてエンコードし、入力と概念的、視覚的、聴覚的、または文脈的に類似したメディアを取得する
-
データの関連付けを自動的に生成することで、メタデータとキュレーションに費やす時間を短縮する
-
重複を自動的に識別して削除することで、データ品質を向上させる