Cointime

Download App
iOS & Android

ベクトル データベース - 大規模な類似性検索のための最も強力なツール

Validated Media

著者: Shashank Vats編集: Cointime.com QDD

ベクトルデータベース

ベクトル データベースは、特徴または属性の数学的表現である高次元ベクトルとしてデータを保存するデータベースです。これらのベクトルは通常、生データ (テキスト、画像、オーディオ、ビデオなど) に何らかの埋め込み関数を適用することによって生成されます。

ベクトル データベースは、メタデータ フィルタリングと水平スケーリングの機能を備えた、高速検索と類似性検索のためのベクトル埋め込みのインデックス付けと保存のためのツールとして定義できます。

ベクター データベースは、AI が複雑なタスクを実行するときに利用できる理解と長期記憶を獲得するために重要なセマンティック情報を含むデータ表現の一種であるベクター エンベディングに大きく依存しています。したがって、ベクトル データベースについてさらに詳しく説明する前に、ベクトル エンベディングとは何かを理解しましょう。

ベクトル埋め込み

ベクトル埋め込みは地図に似ていますが、オブジェクトが世界のどこにあるかを示すのではなく、いわゆるベクトル空間内のオブジェクトがどこにあるかを示します。ベクトル空間は、すべてのオブジェクトが独自の位置を持つ大きな遊び場のようなものです。猫、犬、鳥、魚などの動物がいるとします。各画像のベクトル埋め込みを作成することで、プレイグラウンド内の特別な場所を各画像に与えることができます。猫は一方の隅にいて、犬はもう一方の隅にいるかもしれません。空には鳥が、池には魚がいるかもしれません。ここは高次元空間です。それぞれの次元は、魚にはヒレがあり、鳥には翼があり、猫や犬には足があるなど、それぞれの異なる特性に対応しています。もう一つの特徴として、魚は水に属し、鳥は主に空に、犬や猫は陸に所属することが挙げられます。これらのベクトルを取得したら、数学的トリックを使用して、類似性に基づいてそれらをグループ化できます。得られた情報に基づいて、猫や犬などの同様の特徴を持つ動物をベクトル空間内でより近くに配置できます。

したがって、ベクトル埋め込みは、ベクトル空間内のオブジェクト間の類似点を見つけるのに役立つマップのようなものです。地図が世界で自分の道を見つけるのに役立つのと同じように、ベクトルの埋め込みは、ベクトルの遊び場で自分の道を見つけるのに役立ちます。

ここで、重要な考え方は、意味的な類似性を持つ埋め込み間の距離が小さいということであることが理解できたかもしれません。それらがどの程度類似しているかを調べるには、ユークリッド距離、コサイン距離などのベクトル距離関数を使用できます。ただし、クエリ ベクトルと他のすべてのベクトルの間の距離を計算して比較する必要があることを考えると、距離の比較はかなり困難な作業になる可能性があります。そのため、私たちはベクター データベースとベクター ライブラリを用意しています。ここで生じる可能性のある最大の疑問は、両方ともベクトルを介した効率的な検索を可能にするので、両者の違いは何でしょうか?ということです。確認してみましょう!

ベクター データベースとベクター ライブラリ

ベクトル ライブラリは、類似性検索のためにメモリ内のインデックスにベクトル埋め込みを保存します。ベクター ライブラリには次の機能と制限があります。

1. ベクトルのみを保存する — ベクトル ライブラリは、ベクトル エンベディングのみを保存し、それを生成する関連オブジェクトは保存しません。これは、クエリを実行すると、ベクター ライブラリが関連するベクターとオブジェクト ID を返すことを意味します。実際の情報は ID ではなくオブジェクトに保存されるため、これは制限されます。この問題を解決するには、オブジェクトを二次ストレージに保存する必要があります。次に、クエリによって返された ID を使用してオブジェクトを照合し、結果を知ることができます。

2. インデックス データは不変です — ベクトル ライブラリによって生成されたインデックスは不変です。これは、データがインポートされ、インデックスが構築されると、いかなる変更も行うことができない (新たな挿入、削除、変更はできない) ことを意味します。インデックスに変更を加えるには、インデックスを最初から再構築する必要があります。

3. インポート中のクエリの制限 - ほとんどのベクトル ライブラリは、データのインポート中にクエリを実行できません。最初にすべてのデータ オブジェクトをインポートし、オブジェクトのインポート後にインデックスを構築する必要があります。これは、数百万、さらには数十億のオブジェクトをインポートする必要があるアプリケーションにとって問題になる可能性があります。

3. インポート中のクエリの制限 - ほとんどのベクトル ライブラリは、データのインポート中にクエリを実行できません。最初にすべてのデータ オブジェクトをインポートし、オブジェクトのインポート後にインデックスを構築する必要があります。これは、数百万、さらには数十億のオブジェクトをインポートする必要があるアプリケーションにとって問題になる可能性があります。

Facebook の FAISS、Spotify の Annoy、Google の ScaNN など、多数のベクトル検索ライブラリが利用可能です。 FAISS はクラスタリング手法を使用し、Annoy はツリーを使用し、ScaNN はベクトル圧縮を使用します。各アプローチにはパフォーマンスのトレードオフがあり、アプリケーションとパフォーマンスの要件に基づいて選択できます。

ベクター データベースとベクター ライブラリの主な違いは、データを保存、更新、削除できる機能です。ベクター データベースは CRUD (作成、読み取り、更新、削除) 操作を完全にサポートしており、ベクター データベースの制限を解決します。

1. ベクトルとオブジェクトの保存 — データベースはデータ オブジェクトとベクトルの両方を保存できます。両方が保存されるため、ベクトル検索と構造化フィルターを組み合わせることができます。フィルターにより、最近傍がメタデータと一致することが保証されます。

2. 可変性 — Vector Database は CRUD を完全にサポートしているため、インデックス作成後にエントリを簡単に追加、削除、更新できます。これは、継続的に変化するデータを処理する場合に非常に役立ちます。

3. リアルタイム検索 — ベクトル ライブラリとは異なり、データベースを使用すると、インポート プロセス中にデータのクエリと変更を行うことができます。数百万のオブジェクトをアップロードしても、インポートされたデータは引き続き完全にアクセスでき、実行可能であるため、インポートの完了を待ってから既存のデータの操作を開始する必要はありません。

つまり、ベクトル データベースは、上記で説明したように、独立したベクトルのインデックス付けの制限に対処することで、ベクトルの埋め込みを処理するための優れたソリューションを提供します。

しかし、ベクトル データベースが従来のデータベースよりも優れているのはなぜでしょうか?

ベクター データベースと従来のデータベース

従来のデータベースは、リレーショナル モデルを使用して構造化データを保存および取得するように設計されています。つまり、データの列と行に基づいてクエリ用に最適化されています。従来のデータベースにベクトル埋め込みを保存することは可能ですが、これらのデータベースは、大規模なデータセットに対して類似性検索やその他の複雑な操作を効率的に実行するためのベクトル操作にはあまり適していません。

これは、従来のデータベースでは文字列や数値などの単純なデータ型に基づいたインデックス作成手法が使用されているためです。これらのインデックス付け手法は、逆インデックスや空間ツリーなどの特殊なインデックス付け手法を使用する必要がある高次元ベクトル データには適していません。

さらに、従来のデータベースは、ベクトル埋め込みに関連する大量の非構造化データまたは半構造化データを処理できるように設計されていません。たとえば、画像ファイルや音声ファイルには何百万ものデータ ポイントが含まれている場合がありますが、これらは従来のデータベースでは効率的に処理できません。

一方、ベクトル データベースは、ベクトル データの保存と取得のために特別に設計されており、大規模なデータセットに対して類似性検索やその他の複雑な操作を実行するために最適化されています。特殊なインデックス作成技術とアルゴリズムを使用して高次元データを処理し、ベクトル埋め込みの保存と取得において従来のデータベースよりも効率的になります。

ベクトル データベースについてこれまで読んできたので、それがどのように機能するのか疑問に思っているかもしれません。見てみましょう。

ベクトルデータベースはどのように機能するのでしょうか?

従来のデータベースがどのように機能するかは誰もが知っています。データベースは文字列、数値、その他の種類のスカラー データを行と列に格納します。一方、ベクトル データベースはベクトルを操作するため、最適化とクエリの実行方法がまったく異なります。

従来のデータベースでは、通常、値がクエリと完全に一致するデータベース内の行を探します。ベクトル データベースでは、類似性測定を適用して、クエリに最も類似したベクトルを見つけます。

ベクトル データベースは、アルゴリズムの組み合わせを使用して、近似最近傍 (ANN) 検索を実行します。これらのアルゴリズムは、ハッシュ、量子化、またはグラフベースの検索を通じて検索プロセスを最適化します。

これらのアルゴリズムは、クエリ ベクトルの近傍を迅速かつ正確に取得できるパイプラインに結合されます。ベクトル データベースはおおよその結果を提供するため、考慮する必要がある主なトレードオフは精度と速度の間です。結果が正確であればあるほど、クエリは遅くなります。ただし、優れたシステムは、超高速でほぼ完璧な精度を提供できます。

以下は、ベクトル データベースの一般的なパイプラインです。

これらのアルゴリズムは、クエリ ベクトルの近傍を迅速かつ正確に取得できるパイプラインに結合されます。ベクトル データベースはおおよその結果を提供するため、考慮する必要がある主なトレードオフは精度と速度の間です。結果が正確であればあるほど、クエリは遅くなります。ただし、優れたシステムは、超高速でほぼ完璧な精度を提供できます。

以下は、ベクトル データベースの一般的なパイプラインです。

l インデックス付け - ベクトル データベースは、PQ、LSH、HNSW などのアルゴリズムを使用してベクトルのインデックス付けを行います。このステップでは、ベクトルをデータ構造にマップし、より高速な検索を可能にします。

l クエリ - ベクトル データベースは、インデックス付きクエリ ベクトルをデータセット内のインデックス付きベクトルと比較して、最近傍 (適用されたインデックスで使用される類似性尺度) を見つけます。

l 後処理 — 場合によっては、ベクトル データベースはデータセットから最終的な最近傍を取得し、後処理して最終結果を返します。このステップには、別の類似性尺度を使用して最も近いものを並べ替えることが含まれる場合があります。

要約する

ベクトル データベースは、従来のデータベースでは効率的に実行できない、大規模なデータセットに対する類似性検索やその他の複雑な操作を行うための強力なツールです。完全に機能するベクトル データベースを構築するには、データの意味論的な意味を捉え、正確な類似性検索を可能にする埋め込みが不可欠です。ベクター ライブラリとは異なり、ベクター データベースはユースケースに応じて拡張できるように設計されているため、パフォーマンスとスケーラビリティが重要なアプリケーションに最適です。機械学習と人工知能の台頭により、ベクター データベースは、レコメンダー システム、画像検索、意味的類似性などを含む多くのアプリケーションでますます重要になってきています。この分野が発展し続けるにつれて、将来的にはベクトル データベースのより革新的なアプリケーションが登場することが期待されます。

コメント

全てのコメント

Recommended for you