ベクトルデータベースを選択するには、多くのソリューションと考慮事項を検討する必要があります。
そしてこれらの考慮事項の中で最も重要なのは、適切なベクトル検索アルゴリズムを選択することです。
本記事では、ベクトルデータベースの基本的な定義や考え方をはじめ、ベクトル類似性検索やアルゴリズムの重要性について解説します。
ベクトルデータベースとは
ベクトルデータベースは、テキスト、画像、音声、ビデオなどの構造化データと非構造化データを大規模に効率的に保存、迅速に取得、処理し、検索をより簡単かつ効率的に行うデータベースです。
ベクトルデータベースは、実際のデータそのものを格納するのではなく、エンベッディングと呼ばれるデータの数値表現を保存します。
エンベッディングプロセスでは、さまざまなタイプのコンテンツを受け取り、それらをベクトルに変換します。
ベクトルは情報検索を支えるデータ構造です。
ベクトルは、ソース情報をコンパクトな高次元 (HD) 数値に変換し、埋め込みに含めるディメンションが多いほど、各情報をより詳細に保持できるようになります。
また、ベクターには、テキストや数値から画像や音楽に至るまで、あらゆる種類の情報を埋め込むことができます。
ベクトルが作成されてデータベースに格納されると、リアルタイムのレコメンデーション システムやコンテンツの要約などの 人工知能 (AI)アプリケーションに使用できます。
関連動画:Aerospikeベクトル検索とは 〜デモによるAIへの活用とメリット〜
ベクトルデータベースはどのように機能するのか
これには、潜在的に何兆もの比較が含まれる可能性があります。
特殊なベクトル データベースは検索プロセスを最適化することでこの問題に対処し、効率的かつ効果的な結果を保証します。」
ベクトルデータベースは、これらのベクトルを効率的に保存および検索するためのソリューションを提供します。
ベクトル データベースが実行する手順
1.ベクトルをストレージ層に書き込む
2.新しいベクトルとベクトル空間内にすでに存在するベクトルの間の類似性、つまり「距離」を計算する
3.検索を最適化するためのインデックスを構築する
4.検索リクエストが受信されると、最も類似したベクトル、つまり「最近傍」として知られる概念が特定される
それに加えて、ベクトル データベースは従来のデータベースと同じ機能の多くも実行します。
これらには次のものが含まれます。
- 検索を容易にするためのデータの前処理、より効率的に整理するためのデータの後処理、キャッシュ、クエリの書き換え、同時実行制御、トランザクション管理などの手法により、検索をより効率的にする
- データのパーティショニング、レプリケーション、プルーニングなどの最適化手法を使用してスケールに備える
- システム分析、インデックスの最適化、データのバックアップ、暗号化と認証によるセキュリティを通じてデータベースを監視、保守、保護する
- データベース を他のシステム と統合する
関連ブログ:Aerospike Vector Searchのご紹介
ベクトル類似検索とは
ベクトル空間内での検索には、ベクトル類似性検索が必要です。
これは、クエリベクトル (検索によって作成された新しいベクトル) に最も似ているデータベース内のベクトルを探すことを意味します。
結果は、定義された類似性メトリックまたは距離測定に基づきます。
類似性ベクトルまたは距離測定をどのように定義するかによって、ベクトル類似性検索の成功が決まります。
ベクトル類似性検索はどのように機能するのか
説明したように、ソース データをベクトル表現に変換するプロセスは埋め込みと呼ばれます。
すべてのベクトルの世界は全体的な「ベクトル空間」を構成し、そこでは同様の概念が互いにマッピングされます。
ベクトル間の相対距離は、ベクトル間の概念的な距離を表します。
概念を視覚化するために、単純化された 2 次元 (2D) の例から始めましょう。
この例では、1 つの次元は性別を表し、もう 1 つの次元は年齢を表します。
図 1: 2D ベクトル空間に埋め込まれた概念の表現
このベクトル空間では、「祖父」は「少年」よりも「男性」に近く、「男性」からは 2 つ、「少年」からは 7 つ離れています。
また、「男性」と「女性」は「子供」に対して同じ距離を持っています。
対照的に、「男性」は「女性」より 8 歳離れていますが、年齢との関係は同じです。つまり、「男の子」と「男性」の距離は、「女の子」と「女性」の距離と同じです。
ここで、「幼児」を検索し、それに関連する最も関連性の高い概念を取得したいとします。
したがって、「幼児」と空間内の他のベクトルの間の距離を計算し、最も近い「N」個のベクトルを取得します。
最も簡単な方法は、「幼児」と既存のすべてのベクトルの間の距離を計算することです。
これは小規模な例では簡単ですが、より一般的で広範な実装ではコストがかかり非効率的になります。
特に 3 つ以上の次元を持つ例を議論する場合、より効率的な方法は、インデックスを作成して使用することです。
インデックスは、空間情報をエンコードするツリーやグラフなどのデータ構造であり、検索中に適切な場所にすばやく移動するのに役立ちます。
あらゆるタイプの高性能データベースは、インデックスの効率に依存します。
クエリに応答して、システムは検索をベクトルに埋め込み、データベース内の最も類似したインデックス付きベクトルが取得されます。
候補の絞り込みや再ランキングなど、オプションの後処理も利用できます。
精度と速度の間にトレードオフがある理由
上記の 2D の例では、ベクトル間の距離の計算は簡単です。
最も正確な結果がほぼ即座に得られます。
ただし、2D を超えて HD ベクトル表現に移行すると、類似性スコアの計算が複雑になります。
例を視覚化して想像することがすぐに困難または不可能になるだけでなく、指数関数的に多くの計算とメモリが必要になります。
クエリに最も類似したベクトルを正確に返す完全検索を実行することは可能ですが、これらの方法はコストがかかります。
また、処理時間も長くなり、文字通り何時間もかかります。
正確な検索は小さなデータセットに対して可能であり、近似最近傍実装とのパフォーマンス比較に役立ちます。
ただし、一般に、組織は代わりに近似検索を使用します。
近似検索ははるかに高速ですが、精度は少し劣ります。
近似検索を実行するにはいくつかの方法があり、精度と速度の点でそれぞれに長所と短所があります。
したがって、プロジェクトに最適なベクトル データベース ソリューションを選択するには、適切なベクトル検索アルゴリズムの実装を理解して選択することが重要です。
一般的なベクトル検索アルゴリズムとは
ベクトル検索の背後にある最も一般的なアルゴリズムの多くは、「最近傍」という一般的なカテゴリに基づいています。
実際、ベクトル検索は「最近傍」検索と呼ばれることがよくあります。
「最近傍」アルゴリズムは、データ セットをツリー、ハッシュ、グラフのいずれに編成するかによって異なりますが、すべて同じように機能します。
選択された距離メトリックに基づいて、指定されたクエリ ポイントに最も近いデータ ポイントを見つけます。
最適化を向上させるために、ベクトル表現を圧縮することで検索効率を向上させる量子化やクラスタリングなどの手法も使用する場合があります。
KNN および ANN アルゴリズム
前に説明したように、検索には正確と近似の 2 つの基本的なタイプがあります。
具体的には、「最近傍」検索には 2 つの基本的なタイプがあります。正確な検索の K 最近傍 (KNN) と近似検索の近似最近傍 (ANN) です。
完全検索の場合、KNN はデータベース内のすべてのベクトルを比較して、クエリ ベクトルに最も近い「k」個のベクトルを返します。
しかし、完全一致検索の問題を思い出してください。
たとえば、次元 300 のベクトルと 1 億個のベクトルのデータベースがある場合、最も類似した「k」個のベクトルを取得するには 300 億回の操作が必要です。
したがって、ANN アルゴリズムが現実世界のアプリケーションで最も一般的に使用されていることは驚くべきことではありません。
最も人気のある ANN アルゴリズムには次のようなものがあります。
- 近似最近傍 Oh Yeah (ANNOY) と近似最近傍高速ライブラリ (FLANN) はツリーベースであり、写真のインタラクティブなリアルタイム画像類似性検索など、できるだけ高速にする必要がある場合に最適です。共有プラットフォーム
- Hierarchical Navigable Small World (HNSW) と Navigable Small World (NSW) はグラフベースであり、世界的な大規模な電子商取引プラットフォームの推奨システムなど、大規模な規模で可能な限り正確である必要があるアプリケーションに最適です。
- Locality-Sensitive Hashing (LSH) と Semantic Hashing (SH) はハッシュ ベースの ANN であり、リソース効率よりも精度が重要ではないシナリオ (社内ドキュメント管理システムのコンテンツ重複排除など) の費用対効果に最適です。
ベクトルデータベースまとめ
ご覧のとおり、検索パフォーマンスとシステム全体の効率を最適化するには、最適なベクトル検索アルゴリズムを選択することが重要です。
これは最終的に、ユーザー エクスペリエンスの向上とアプリケーションの結果の向上に貢献します。
まず、アルゴリズムの選択をデータ要件に合わせて調整し、最適なパフォーマンス要件を提供するように調整する必要があります。
パフォーマンスのトレードオフを定義する際に考慮すべき指標には、精度と遅延のほかに、スループット、コスト、スケーラビリティなどがあります。
このブログは、2024年4月18日のブログ「Vector search: Considerations for database efficiency」の翻訳です。