ベクトルデータベースとは
ベクトルデータベースの定義
ベクトルデータベースとは、情報をデータオブジェクトの数値表現(ベクトル埋め込みとしても知られている)であるベクトルとして保存するデータベースのことです。ベクトル埋め込みのパワーを活用して、画像、テキスト、センサーデータなどの非構造化データや半構造化データの大規模なデータセット全体にインデックスを付けて検索します。ベクトルデータベースはベクトル埋め込みを管理するように構築されているため、非構造化データや半構造化データの管理のための総合的なソリューションを提供します。
ベクトルデータベースはベクトル検索ライブラリやベクトルインデックスとは異なり、メタデータの保存やフィルタリングが可能なデータ管理ソリューションであり、拡張可能で、動的にデータ変更ができ、バックアップを実行し、セキュリティ機能を提供します。
ベクトルデータベースは、高次元ベクトルを通してデータを整理します。高次元ベクトルは数百もの次元を持ち、各次元は、それが表すデータオブジェクトの特定の機能や属性に対応しています。
ベクトルデータベースはどのように機能するのか
ベクトルデータベースは、アルゴリズムを使用してベクトル埋め込みをインデックス付けし、クエリすることで機能します。このアルゴリズムによって、近似最近傍探索(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とは、アプリケーションプログラミングインターフェイスと言うソフトウェアの一種で、アプリケーションはリクエストやレスポンスを介してお互いに「話す」ことができます。API層がベクトル検索体験を簡素化します。SDK(ソフトウェア開発キット)は、多くの場合APIをラップしています。これはプログラミング言語であって、データベースはこれを使って通信や管理を行います。SDKを使用すると、特定のユースケース(セマンティック検索や推奨システムなど)の開発時に基本構造について考慮する必要がなくなり、開発者にとってはベクトルデータベースが非常に扱いやすいものとなります。
ベクトルデータベースと従来のデータベースの違い
従来のデータベースは情報を表形式で保存し、データポイントに値を割り当ててデータをインデックス付けします。クエリを行うと、従来のデータベースはクエリに正確に一致する結果を返します。
ベクトルデータベースでは、ベクトルを埋め込み形式で保存し、ベクトル検索が可能となり、正確な一致ではなく、類似判定によるクエリ結果を返します。ベクトル検索は、従来のデータベースでは不可能な点で「ステップアップ」しており、ベクトル埋め込みで動作することを意図して設計されています。
ベクトルデータベースは、類似性検索、人工知能、機械学習アプリケーションなどの特定のアプリケーションにおいて、従来のデータベースよりも適しています。これは、高次元の検索やカスタマイズされたインデックス作成が可能であり、拡張性、柔軟性、効率性に優れているためです。
ベクトルデータベースの用途
ベクトルデータベースはAI、機械学習(ML)、自然言語処理(NLP)、および画像認識アプリケーションで使用されています。
- AI/MLアプリケーション:ベクトルデータベースは、セマンティック情報検索と長期メモリによってAI機能を向上させることができます。
- NLPアプリケーション:ベクトル類似性検索は、ベクトルデータベースの主要なコンポーネントであり、自然言語処理アプリケーションに有効です。ベクトルデータベースはテキスト埋め込みを処理できるため、コンピュータが人間の言語、すなわち自然言語を「理解」できます。
- 画像認識と検索アプリケーション:ベクトルデータベースは画像を画像埋め込みに変換します。類似性検索を使用することで、類似画像の検索や一致画像の特定が可能です。
ベクトルデータベースはまた、異常検知や顔検出アプリケーションにも活用できます。
ベクトルデータベースによってAI検索が強化される仕組みをご覧ください。弊社のウェビナー視聴して、プロジェクトに最新の検索エクスペリエンスを構築する方法をご覧ください。
ベクトルデータベースの将来の動向
ベクトルデータベースは将来、AIやMLの開発、さらには深層学習の使用に関する研究と複雑に絡み合って、構造化データ、非構造化データ1のより強力な埋め込みを生成します。
より高度な埋め込みを生成する能力が改善されるにつれ、ベクトルデータベースがこういった埋め込みの処理や管理をより良く行う能力には、新しい技法やアルゴリズムが必要となります。実のところ、こういった新しい手法は一貫して開発され続けています。
更なる研究として、ハイブリッドデータベースの開発にも力が注がれています。これは従来のリレーショナルデータベースとベクトルデータベースの機能の結合を目指しており、効率的で拡張可能なデータベースに対して高まっているニーズへの回答となります。
Elasticsearchのベクトルデータベース
Elasticsearchは、ベクトルデータベースをベクトル検索のために組み込んでいます。Elasticは、開発者がElasticsearch Relevance Engine(ESRE)を使って自分自身のベクトル検索エンジンを構築できるようにしています。
Elasticsearchツールを使うことで、オンプレミスでもクラウドでも、またハイブリッド環境においても、非構造化データや構造化データの検索、フィルタとファセットの適用、テキストデータやベクトルデータへのハイブリッド検索の適用、文書やフィールドレベルのセキュリティの利用が可能となるベクトル検索エンジンを構築できます。ElasticsearchのベクトルデータベースとSearch AI Platformは、開発者に包括的なハイブリッド検索機能と主要なLLMプロバイダーからの革新へのアクセスを提供します。ElasticのローコードPlaygroundを使用すると、開発者は数分で独自のプライベートデータを用いてLLMを迅速にテストできます。
脚注
1 Gu, Huaping.「Unleashing the Power of Vectors: Embeddings and Vector Databases - Linkedin.」LinkedIn、4月2日2023年、www.linkedin.com/pulse/unleashing-power-vectors-embeddings-vector-databases-huaping-gu