ベクトル検索を支える人気の機械学習アルゴリズム
この記事では、ベクトル検索の本質と、K-最近傍(ANN)や近似最近傍(ANN)のような、効率的なベクトル検索を可能にする一般的な機械学習アルゴリズムを紹介する。
シリーズ全体を読む
- 筏か否か?クラウドネイティブデータベースにおけるデータ一貫性のベストソリューション
- Faiss(フェイスブックAI類似検索)を理解する
- 情報検索メトリクス
- ベクターデータベースにおける高度なクエリー技術
- ベクトル検索を支える人気の機械学習アルゴリズム
- ハイブリッド検索:テキストと画像を組み合わせて検索機能を強化
- ベクターデータベースの高可用性の確保
- ランキングモデル:ランキングモデルとは何か?
- Zillizでレキシカル検索とセマンティック検索を使いこなす
- バイナリ量子化とMilvusによるベクトル検索の効率化
- モデルプロバイダーオープンソースとクローズドソースの比較
- Milvusによる多言語言語の埋め込みとクエリー
- 構造化データのベクトル化とクエリの究極ガイド
- HNSWlibを理解する:高速近似最近傍探索のためのグラフベースライブラリ
- ScaNN(Scalable Nearest Neighbors)とは?
- ScaNNを始める
- 次世代検索:クロスエンコーダとスパース行列因子分解がk-NN検索を再定義する方法
- ボイジャーとは?
- 迷惑とは何か?
ベクトル検索は、現代のデータ検索や類似クエリの基本的な部分である。空港やスタジアムのような人通りの多い場所でのセキュリティ監視を自動化する顔認識技術について考えてみよう。それぞれの顔は、ユニークな顔の特徴を表す高次元ベクトルに変換される。そして、このベクトルを、ベクトル類似性検索を使用して、Milvusのようなベクトルデータベースに格納されている犯罪者や他のセキュリティ脅威に関するデータと比較し、潜在的なリスクを特定し、セキュリティ問題をタイムリーに防止する。
ベクトル検索は、クエリの本質を理解し、データの海から最適なマッチを素早く見つける、超スマートなアシスタントを持つようなものだ。オンラインで製品を探している時も、ストリーミング・サービスでおすすめを検索している時も、複雑なデータセットを分析している時も、ベクトル検索はそれを素早く実現します。
この記事では、ベクトル検索の本質と、K-最近傍(ANN)や近似最近傍(ANN)など、効率的なベクトル検索を実現する人気の機械学習アルゴリズムをご紹介します。
ベクトル検索の本質
ベクトル検索(ベクトル類似検索または最近傍検索とも呼ばれる)は、情報検索システムにおいて、指定されたクエリベクトルと密接に一致するデータポイントを特定するために設計された手法である。この手法は、画像、テキスト、音声などの非構造化データを高次元空間内のベクトルとして表現し、クエリベクトルと密接に一致するベクトルを効率的に検索することを目的としている。
ベクトル間の類似性を評価するために、ユークリッド距離や余弦類似度などの距離メトリックが一般的に使用され、ベクトル空間における近接性は近接性を示す。効果的な整理と検索を容易にするために、ベクトル検索アルゴリズムは、ツリーベース構造やハッシュ技術のようなインデックス構造を採用している。
ベクトル検索の開発は、AI主導のアプリケーションの成長とともに進み、データ処理と分析を根本的に変えてきた。レコメンデーションシステムから自然言語処理の促進まで、ベクトル検索エンジンは、eコマース、ヘルスケア、金融など、さまざまな分野のAIアプリケーションにおいて重要な役割を担っている。これらの技術が進歩するにつれて、ベクトル検索はますます変革的な役割を果たすようになり、デジタル時代における複雑なデータセットとの関わり方や理解の仕方を再構築しています。
KNN(最近傍探索)アルゴリズムとANN(近似最近傍探索)アルゴリズムです。以下のセクションでは、これらのアルゴリズムがどのようなもので、どのようにベクトル検索を強力にするのかについて説明します。
K-最近傍(KNN)アルゴリズムとは?
K-最近傍(KNN)アルゴリズムは、分類や回帰タスクに広く使われている機械学習手法です。このアルゴリズムは、類似したデータ点が高次元空間内でクラスタリングされるという原理に基づいており、データのパターン認識において論理的かつ直感的です。
データ学習段階では、KNNは従来のモデルを構築するのではなく、データセット全体を参照用に保持する。予測を行う際には、ユークリッドやコサイン距離などの選択された距離メトリックを用いて、新しい入力データ点と訓練データセット内のすべての既存点との間の距離を測定する。アルゴリズムは次に、新しいデータ点に最も近いK個の訓練例、つまり「近傍」を特定する。分類タスクでは、KNNはこれらのK個の近傍例の中で最も頻繁に表現されるクラス・ラベルを新しいデータ点に割り当てる。回帰タスクでは、アルゴリズムはこれらの近傍からの値の平均または加重平均に基づいて値を予測する。
下の図はKNNアルゴリズムがどのように機能するかを示している。新しいデータポイントを分類するために、KNNはこのポイントと、カテゴリーAやカテゴリーBのような各カテゴリーからのK個の最近傍との間の距離を計算します。距離を決定した後、アルゴリズムはこれらの計算された距離に基づいて、データポイントをそのK個の最近傍の中で最も多いカテゴリーに割り当てます。この例では、新しいポイントはカテゴリーBに割り当てられます。
K-最近傍(KNN)アルゴリズムの仕組み](https://assets.zilliz.com/How_K_Nearest_Neighbors_KNN_Algorithms_Work_98ebc101f6.png)
K-最近傍(KNN)アルゴリズムのしくみ
KNNアルゴリズムの有効性は、K(考慮される最近傍の数)の選択と使用される距離メトリックに影響されます。したがって、これらのパラメーターを調整することは、最適なパフォーマンスを達成するために非常に重要です。
ANNアルゴリズムの詳細については、我々のブログを参照してください:[MLにおけるK-最近傍(KNN)アルゴリズムとは】(https://zilliz.com/blog/k-nearest-neighbor-algorithm-for-machine-learning)
KNNのベクトル探索への応用
各データ点が高次元ベクトルとして表現されるベクトル探索アプリケーションでは、KNNアルゴリズムは、指定されたクエリに類似したベクトルを効率的に検索することができます。このアルゴリズムは、クエリ・ベクトルとデータセット内の他のすべてのベクトルとの距離を計算し、その後、計算された距離に基づいて上位K個の最も近いベクトルを選択する。
K'の値を調整することで、ベクトル探索の精度と効率のバランスを最適化する柔軟性が得られる。この柔軟性により、KNNアルゴリズムは、推薦システム、画像検索、テキスト意味検索など、類似ベクトルの迅速な識別が重要な様々な領域で非常に有用である。
近似最近傍(ANN)アルゴリズムとは?
近似最近傍(ANN)アルゴリズムは、Zilliz Cloudのような高性能なベクトルデータベースに格納された大規模データセット内の効率的な最近傍検索を行うための、機械学習やデータサイエンスの手法として人気があります。
ANNは、K-最近傍(KNN)アルゴリズムの最適化バージョンと考えることができる。データセット内の全てのデータポイントを網羅的に検索する代わりに、ANNアルゴリズムは高い確率で近似最近傍を特定し、計算コストを大幅に削減する。この最適化により、ANNは膨大なデータセットであっても、迅速なクエリ応答を必要とするアプリケーションに非常に適している。
ベクトル探索におけるANNの応用
ANNアルゴリズムは、類似のベクトルを含む可能性の高い領域を区切る地図を描くように、インデックス作成段階で特殊なインデックス構造を構築することで、ベクトル検索を効率化する。このマッピングにより、ANNはクエリー段階で、すべてのベクトルを個別に評価することなく、潜在的な近傍に効率的に焦点を当てることができる。その代わりに、ANNはこれらの事前に構築されたマップを使用して、最近傍について情報に基づいた推定を行う。
これらの予測は常に100%の精度を達成するわけではないが、多くの用途において十分な精度を持ち、スピード面で大きな優位性を持つ。この効率性は、大規模なデータセットを管理し、高次元空間をナビゲートする上で非常に重要であり、推薦システムや画像検索のような、迅速かつ効果的なクエリが不可欠な分野でANNは欠かせないものとなっている。
ANNについて詳しくは、こちらのページをご覧ください:近似最近傍探索(ANNS)とは
KNN 対 ANN検索
ANN検索とKNN検索の重要な違いは、検索結果の精度と、速度と必要な計算資源の性能にある。
精度と正確さ
KNN検索:このアルゴリズムは、データセット内のクエリ点の正確なk近傍を見つける。指定された距離メトリックに基づいて最も近いものを決定するために、すべての可能な近傍を評価することによって精度を保証する。
ANN探索:KNNとは異なり、ANN検索は近似最近傍を見つけることを目的とする。ANN検索は、速度と効率性を向上させるために、ある程度の精度を犠牲にする。このアプローチは常に正確な最近傍を保証するものではないが、十分に近い結果を提供し、多くの実用的なアプリケーションには十分である。
パフォーマンス(速度とリソース使用量)
KNN検索:KNNは非常に精度が高いが、1点1点を比較する必要があるため、特に大規模なデータセットでは計算コストが高く、処理速度が遅くなる可能性がある。また、メモリや処理能力も大幅に必要となる。
ANN検索:近似結果に注目することで、Locality-Sensitive Hashing (LSH)、ツリー、またはグラフベースの手法のようなANN検索アルゴリズムは、少ない計算オーバーヘッドで結果を素早く取り出すことができる。これらの手法は、特に大規模なデータセットや、スピードが重要なリアルタイムアプリケーションを扱う場合に有益である。
範囲検索:ベクトル検索の精度向上
KNNとANNはベクトル探索のための優れたアルゴリズムですが、あらかじめ決められた数の最近傍を返すことに制限されています。これは結果の冗長性につながります。例えば、KNNやANNを使ったベクトル検索では、スポーツニュースのアグリゲーターは、最初に読んだ1つの記事が原因で、同じサッカーの試合に関する記事を繰り返し推薦するかもしれない。このような制限は、コンテンツの多様性とユーザーエンゲージメントを低下させる可能性がある。さらに、ベクトルデータベースを含むベクトル検索技術にはTop-K制約があるため、数百万から数十億のデータセットに対するクエリは、何千もの関連する結果を見落とす可能性があり、膨大なデータ量の処理と送信によってシステムリソースに過度の負担をかけることになる。
Milvus](https://zilliz.com/what-is-milvus)ベクトルデータベースは、KNNとANNアルゴリズムの上に最適化された検索アプローチであるRange Search機能を導入している。この方法は、クエリ中に入力ベクトルとデータベースベクトル間の距離範囲を指定することで、よりバランスの取れた検索を可能にする。この精度の高さは、データの重複排除や著作権侵害の検出など、検索結果の綿密な制御が要求されるアプリケーションで特に有利であり、類似の候補を見逃すことがない。
ここでは、検索距離パラメータを定義するために範囲検索機能を利用する方法を説明します:
# 検索パラメータに radius と range_filter を追加する。
search_params = {"params":params": {"nprobe":10, "radius": 10, "range_filter": 1010, "range_filter":20}, "metric_type":"L2"}
res = collection.search(
vectors, "float_vector", search_params, topK、
"int64 > 100", output_fields=["int64", "float"])
)
このコード・スニペットでは、検索は入力ベクトルから10~20単位以内のベクトルを返すように設定されており、正確な結果のサブセットを提供している。
要約
要約すると、ベクトル検索の本質は、様々なアプリケーションにおいて高次元のデータベクトルを効率的に処理し、検索することにある。KNNは高次元空間におけるデータ点の近接性を分析することで、正確なデータ分類を保証する。一方、ANNは最近傍を近似することで、大規模なデータセットに対してスピード効率の高いソリューションを提供し、性能と計算効率のバランスを取ります。どちらのアルゴリズムも、膨大なデータセットを効果的に分析・解釈する機械学習システムの能力を強化することで、セキュリティ、電子商取引、ヘルスケアなどの分野を変革するのに役立っている。
ANNとKNNの両アルゴリズムはベクトル検索に効率的ですが、限界と性能向上の余地があります。Milvusベクトルデータベースは、クエリ中に入力ベクトルとMilvusに保存されたベクトル間の距離を指定できる範囲検索機能を提供し、より正確でバランスの取れた検索結果をもたらします。
詳細はこちらディープダイブとリソース
これらのリソースは、ベクトル検索テクノロジーと様々なドメインでのアプリケーションを理解するのに役立ちます。
学術論文
Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs](https://arxiv.org/abs/1603.09320) by _Yu. A. Malkov and D. A. Yashunin.A. Malkov and D. A. Yashunin.
A Survey on Efficient Processing of Similarity Queries over Neural Embeddings_](https://arxiv.org/abs/2204.07922) by _Yifan Wang.
近似最近傍探索 in High Dimensions_](https://arxiv.org/abs/1806.09823) by _Alexandr Andoni, Piotr Indyk, Ilya Razenshteyn
チュートリアルとブログ
Milvus 2.3.4:検索の高速化、データサポートの拡大、モニタリングの改善など](https://milvus.io/blog/milvus-2-3-4-faster-searches-expanded-data-support-improved-monitoring-and-more.md)
ベクターデータベース、ベクター検索ライブラリ、プラグインの比較](https://zilliz.com/learn/comparing-vector-database-vector-search-library-and-vector-search-plugin)