ベクトルデータベースとは何ですか?
ベクトルデータベースの定義
ベクトルデータベースとは、情報をデータオブジェクトの数値表現(ベクトル埋め込みとしても知られている)であるベクトルとして保存するデータベースのことです。ベクトル埋め込みのパワーを活用して、画像、テキスト、センサーデータなどの非構造化データや半構造化データの大規模なデータセット全体にインデックスを付けて検索します。ベクトルデータベースはベクトル埋め込みを管理するように構築されているので、非構造化データや半構造化データの管理のための完全なソリューションを提供します。
ベクトルデータベースはベクトル検索ライブラリやベクトルインデックスとは異なり、メタデータの保存やフィルタリングが可能なデータ管理ソリューションであって、拡張可能で、動的にデータ変更ができ、バックアップを実行し、セキュリティ機能を提供します。
ベクトルデータベースは、高次元ベクトルを通してデータを整理します。高次元ベクトルは数百もの次元を持ち、各次元は、それが表すデータオブジェクトの特定の機能や属性に対応しています。
ベクトルデータベースはどのように作動しますか?
ベクトルデータベースは、アルゴリズムを使用してベクトル埋め込みをインデックス付けし、クエリすることで作動します。このアルゴリズムによって、ハッシュ化、量子化、またはグラフベースの検索による近似最近傍探索(ANN)が可能となります。
情報を取り出すには、ANN検索でクエリの最近傍のベクトルを見つけます。近似最近傍探索はkNN検索(近傍法またはK最近傍法アルゴリズムとして知られています)よりも計算負荷が少ないのですが、正確性も劣ります。しかし、高次元ベクトルの大規模データセット用に対しては、効率的かつ大規模に機能します。
ベクトルデータベースのパイプラインは次ようになっています。
インデックス化:ハッシュ化、量子化、またはグラフベースの技法を使用して、ベクトルデータベースはベクトルを特定のデータ構造にマッピングして、ベクトルにインデックスを付けます。これで検索を高速化できます。
- ハッシュ化:局所性鋭敏型ハッシュ(LSH)アルゴリズムのようなハッシュ化アルゴリズムは、迅速に結果が得られ、おおよその結果を生成できるため、近似最近傍探索に最適です。LSHは数独パズルのようなハッシュテーブルを使用し、最近傍をマップします。クエリはテーブル内にハッシュ化され、次に同じテーブルのベクトルのセットと比較して、類似性を判定します。
- 量子化:直積量子化(PQ)のような量子化技法は、ベクトルをより小さい部分に分割し、その各部分をコードで表し、次にその部分を元に繋ぎ戻します。その結果は、ベクトルとそのコンポーネントのコード表現となります。こういったコードの組み合わせは、コードブックとして参照されます。クエリを受けたら、量子化を使用しているベクトルデータベースはクエリをコードに分解し、これをコードブックに照らし合わせて最もよく似たコードを見つけ、結果を生成します。
- グラフベース:Hierarchical Navigable Small World(HNSW)アルゴリズムのようなグラフアルゴリズムでは、ノードを使用してベクトルを表します。ノードをクラスター化し、類似のノード間に線やエッジを引き、階層型のグラフを作成します。クエリが発せられたら、アルゴリズムはグラフ階層をナビゲートし、クエリのベクトルにもっとも類似したベクトルを含むノードを見つけます。
ベクトルデータベースは、データオブジェクトのメタデータもインデックス付けします。このため、ベクトルデータベースはベクトルインデックスとメタデータインデックスの2種類のインデックスを持ちます。
クエリ処理:ベクトルデータベースがクエリを受け取ると、インデックスの着いたベクトルをクエリのベクトルと比較し、最近傍ベクトルを判定します。最近傍を確定するために、ベクトルデータベースは類似性測度と呼ばれる数学的手法を用います。類似性測度には以下に挙げるようにさまざまな種類があります。
- コサイン類似度は-1から1の範囲で類似性を確定します。ベクトル空間内で2つのベクトル間の角度のコサインを測定して、まったく正反対(-1で表される)、直交(0)、同一(1)であるベクトルを判定します。
- ユークリッド距離は、ベクトル間の直線距離を測定して、0から無限大の範囲で類似性を判定します。同一のベクトルは0で表され、ベクトル間の差異が大きくなると、この値も大きくなります。
- ドット積類似性測度は、負の無限大から正の無限大までの範囲でベクトルの類似性を判定します。ドット積では2つのベクトルの大きさの積と、その間の角度のコサインを測定して、お互いに別の方向を向いているベクトルには負の値を、直交するベクトルには0を、同じ方向を向いているベクトルには正の値を割り当てます。
後処理:ベクトルデータベースパイプラインの最終ステップでは、ベクトルデータベースがさまざまな類似性測度を使用して最近傍のランクを付け替えている間に、時として後処理または事後フィルタリングを行います。この段階では、データベースはメタデータに基づく検索で特定したクエリの最近傍をフィルタ処理します。
一部のベクトルデータベースは、ベクトル検索を実行する前にフィルタを適用するものもあります。この場合、前処理または事前フィルタリングと呼ばれます。
ベクトルデータベースのコアコンポーネント
ベクトルデータベースは、以下に挙げるようなコアコンポーネントを装備しています。
- 高い性能と耐障害性:シャーディングとレプリケーション処理により、ベクトルデータベースは高性能で、高い耐障害性を確保しています。シャーディングとは、複数のノードにわたってデータをパーティショニングする技術です。一方レプリケーションは異なるノード間でデータのコピーを複数作成します。あるノードに障害が発生した場合、この構造により障害に耐え、性能を維持します。
- 監視機能:高い性能と耐障害性を確保するために、ベクトルデータベースはリソースの使用状況、クエリの成果、システム全体の健全性を監視する必要があります。
- アクセス制御機能:ベクトルデータベースにはデータセキュリティ管理も必要です。アクセス制御規制により、コンプライアンス、結果責任、およびデータベースの使用における監査能力を確保します。これはまたデータが保護されていることを意味します。許可を得ている人がアクセスし、ユーザーの活動記録が保持されます。
- スケーラビリティと調整可能性:優れたアクセス制御機能は、ベクトルデータベースのスケーラビリティ(拡張性)と調整可能性に影響を与えます。保存されるデータ量が増えると、水平方向への拡張機能が必須となります。インサートやクエリの変化量が異なっていたり、基盤となるハードウェアに差異があると、アプリケーションのニーズに影響します。
- 複数ユーザーとデータ隔離:ベクトルデータベースではスケーラビリティとアクセス制御機能に関連し、複数のユーザーや複数使用を扱う必要があります。これと併せて、べクトルデータベースはデータ隔離を行い、いかなるユーザー活動(インサート、デリート、クエリなど)も必要のない限り、他のユーザーには見えないようにする必要があります。
- バックアップ機能:ベクトルデータベースは、定期的なデータバックアップを作成します。これはシステム障害発生時におけるベクトルデータベースの重要な機能です。データの損失や損傷が起こった場合、バックアップを使ってデータベースを以前の状態に修復することができます。これで作動停止時間を最小限に抑えます。
- APIとSDK:ベクトルデータベースはAPIを使用して、ユーザーにとって使いやすいインターフェイスを提供します。APIとは、アプリケーションプログラミングインターフェイスと呼ばれるソフトウェア1種で、アプリケーションはリクエストやレスポンスを介してお互いに「話す」ことができます。API層がベクトル検索体験を簡素化します。SDKとは、ソフトウェア開発キットのことで、多くの場合APIをラップしています。これはプログラミング言語であって、データベースはこれを使って通信や管理を行います。SDKを使用すると、特定のユースケース(セマンティック検索や推奨システムなど)の開発時に基本構造について考慮する必要がなくなり、開発者にとってはベクトルデータベースが非常に扱いやすいものとなります。
ベクトルデータベースと従来のデータベースの違いは何ですか?
従来のデータベースは情報を表形式で保存し、データポイントに値を割り当ててデータをインデックス付けします。クエリを行うと、従来のデータベースはクエリに正確に一致する結果を返します。
ベクトルデータベースでは、ベクトルを埋め込み形式で保存し、ベクトル検索が可能となり、正確な一致ではなく、類似判定によるクエリ結果を返します。ベクトルデータベースは、従来のデータベースで不可能だった以下の点で「ステップアップ」しています。これは、ベクトル埋め込みを操作するように意図的に設計されています。
ベクトルデータベースはまた従来のデータベースよりも類似性検索、人工知能(AI)、機械学習アプリケーションといった特定の用途により適しています。高次元な検索が行え、インデックス化をカスタマイズでき、拡張可能かつ柔軟で、効率的だからです。
ベクトルデータベースの用途
ベクトルデータベースはAI、機械学習(ML)、自然言語処理(NLP)、画像認識アプリケーションで使用されています。
- AI/MLの用途:ベクトルデータベースは、セマンティックな情報検索と長期間のメモリによって、AI機能を改善することができます。
- NLPの用途:ベクトル類似性検索は、ベクトルデータベースの主要な機能のひとつですが、自然言語処理の用途に有効です。ベクトルデータベースはテキスト埋め込みを処理できるため、コンピュータが人間の言語、すなわち自然言語を「理解」できます。
- 画像認識と検索用途:ベクトルデータベースは、画像を画像埋め込みに変換します。類似性検索を用いて、良く似た画像を検索したり、一致する画像を特定したりできます。
ベクトルデータベースはまた、異常検知や顔検出アプリケーションにも活用できます。
ベクトルデータベースの将来の動向
ベクトルデータベースは将来、AIやMLの開発、さらには深層学習の使用に関する研究と複雑に絡み合って、構造化データ、非構造化データ1のより強力な埋め込みを生成します。
より高度な埋め込みを生成する能力が改善されるにつれ、ベクトルデータベースがこういった埋め込みの処理や管理をより良く行う能力には、新しい技法やアルゴリズムが必要となります。実のところ、こういった新しい手法は一貫して開発され続けています。
更なる研究として、ハイブリッドデータベースの開発にも力が注がれています。これは従来のリレーショナルデータベースとベクトルデータベースの機能の結合を目指しており、効率的で拡張可能なデータベースに対して高まっているニーズへの回答となります。
Elasticsearchのベクトルデータベース
Elasticsearchはベクトル検索のためにベクトルデータベースを組み込んでいます。Elasticは、開発者がElasticsearch Relevance Engine(ESRE)を使って自分自身のベクトル検索エンジンを構築できるようにしています。
Elasticsearchツールを使うことで、オンプレミスでもクラウドでも、またハイブリッド環境においても、非構造化データや構造化データの検索、フィルタとファセットの適用、テキストデータやベクトルデータへのハイブリッド検索の適用、文書やフィールドレベルのセキュリティの利用が可能となるベクトル検索エンジンを構築できます。
脚注
1 Gu, Huaping.『ベクトルの力を解き放つ:埋め込みとベクトルデータベース - Linkedin。』 LinkedIn、2023年4月2日、www.linkedin.com/pulse/unleashing-power-vectors-embeddings-vector-databases-huaping-gu