近似最近傍探索(ANN)アルゴリズムを理解する

インターネットが登場する前の時代に育った人であれば、新しく好きになるものを見つけるのは必ずしも簡単ではなかったことを思い出すでしょう。新しいバンドはラジオでたまたま聴いて知り、チャンネルを変え忘れたために偶然新しいテレビ番組を見たり、新しい好みのテレビゲームはほとんどカバーの画だけを基にして見つけたりしたものです。
今では、状況は大きく変わっています。Spotifyは私の好みに合ったアーティストを紹介してくれますし、Netflixは私たちが楽しめるとわかっている映画やテレビ番組を紹介してくれます。これらの推薦システムは、私たちが実際に探しているものを見つけることをとても簡単にしてくれます。NNは、海のように広がる利用可能な情報を見て、あなたが好きなもの、またはあなたが探しているものに最も近いものを識別します。
しかしNNアルゴリズムには本質的な欠陥があります。分析しているデータ量が多すぎる場合、各オプションを探るために膨大な時間がかかります。特にデータソースは年々拡大を続けているため、これが問題となります。ここで、近似最近傍(ANN)が最近傍(NN)からバトンを受け取り、状況を一変させます。
この記事ではANNについて、次の重要なトピックを扱います。
ANNの定義
ANNの仕組み
ANN検索をいつ使うのか
ベクトル検索におけるANNの重要性
ANNアルゴリズムのいろいろなタイプ
近似最近傍探索の説明
近似最近傍(ANN)は、データセットの中でクエリポイントに非常に近いが、必ずしも絶対に近いものではないデータ点を見つけるアルゴリズムです。NNアルゴリズムはすべてのデータを徹底的に検索して完璧なマッチを見つけますが、ANNアルゴリズムは十分に近いマッチで妥協します。
これはソリューションとしては悪手のように聞こえるかもしれませんが、実際には高速類似検索を成功させる鍵となっています。ANNはインテリジェントショートカットとデータ構造を活用し、効率的に検索空間をナビゲートします。膨大な時間とリソースを消費する代わりに、ANNではるかに少ない労力で、ほとんどの実際の状況で有用な、十分に近いデータポイントを特定します。
実のところ、これはトレードオフです。完全にマッチするものを見つける必要が絶対にあるなら、速度とパフォーマンスを犠牲にしてNNを使用すればいいのです。しかし、もしわずかな精度の低下を許容できるなら、ANNはほとんどの場合、より利点の大きいソリューションです。
近似最近傍探索アルゴリズムの仕組み
ANNの仕組みの最初の部分は次元削減であり、目標は高次元データセットを低次元データセットに変換することです。目的は、すべてのデータを分析するよりも予測モデルのタスクをよりシンプルで効率的にすることです。
これらのアルゴリズムは、メトリクス空間という数学的概念に基づいており、その空間内にデータポイントが存在し、それらの間の距離が定義されています。こういった距離は特定の規則(非負性、恒等式、対称性、三角不等式)に従う必要があり、ユークリッド距離やコサイン類似度のような一般的な関数を使用して計算します。
これをよりよく理解するために、休日に借りた別荘を探していると想像してみましょう。すべての建物を1つずつ(高次元)チェックする代わりに、地図を使うと、問題を2次元(低次元)に減らすことができます。(これは意図的に単純化した例です。次元の削減は、効率を改善するためにANNアルゴリズムが採用している唯一の方法ではありません。)
ANNアルゴリズムはまた、効率向上のためにインデックスと呼ばれる巧妙なデータ構造を活用しています。データをこれらのインデックスに事前処理することで、ANNは検索空間をはるかに速く移動できます。これらは地図上で自分の位置を把握し、休日用の別荘に早く着く手助けをしてくれる道路標識のように考えることができます。
近似最近傍探索をいつ使うのか
急速に進化するデータサイエンスの世界では、効率性が最も重要です。本当に一番近いデータを見つけること(厳密な最近傍探索)には価値がありますが、すでに見てきたように、それには多くの場合計算コストがかかります。ここでANN検索の真価が発揮されます。超高速でありながら、完璧ではないにせよ高い精度という、魅力的なトレードオフを提供します。
しかし他の検索方法よりもANNを選ぶのは一体どういう場合でしょうか?
正確な最近傍法は遅いかもしれませんが、正確さを重視したり、小さなデータセットを使う場合に最適な選択肢です。k最近傍(kNN)は、NNとANNの間に位置し、より高い精度を維持しつつより速い結果を提供します。しかし、kの値を正確に決めるのは難しく、高次元データにも苦労します。
ANNの速度と効率は、完全ではないもののその高い正確性と合わせて、次のような多くの状況には非常に適しています。
大規模なデータセット:数百万から数十億のデータポイントを扱う場合、厳密なNNの網羅的な性質により遅くなります。ANNは、膨大なデータランドスケープをナビゲートすることに優れており、迅速に結果を提供します。
高次元データ:次元が高くなるにつれて、正確なNNの計算は爆発的に増加します。ANNの次元削減技術は、探索空間を効果的に縮小し、画像やテキストのような複雑なデータの効率を高めます。
リアルタイムアプリケーション:即座に結果が必要ですか?推薦システム、不正検知、異常検知はリアルタイムの洞察に依存しています。ANNのスピードはこれらのシナリオに最適です。
許容可能な近似:アプリケーションが結果のわずかな誤差を許容できる場合、ANNの速度は非常に有用です。例えば画像検索では、最も近いものではなく、視覚的に似ている画像を見つけるだけで十分かもしれません。
ベクトル検索でのANNの重要性
ベクトル探索 は、密度の高いベクトルとして符号化されたデータを扱い、複雑な関係や埋め込まれた意味を捉えます。これにより、画像やテキスト、ユーザーの好みなどのコンテンツ検索において理想的であり、これは従来のキーワード検索では難しいタスクです。しかし、次元性の呪いはここにも当てはまります。なぜなら、これらのベクトルを表す次元の数が増えるにつれて、従来の探索方法は困難になり、遅く非効率的になるからです。
ANNは厳密な一致を見つけることから、「十分近い」一致を見つけることに注力を切り替えることで、この問題を解決します。こうして高速の結果取得が可能になります。ベクトル検索で膨大なデータセットから似たベクトルを瞬時に探し出せるのです。またスケーラビリティ機能が組み込まれているため、速度を犠牲にすることなく、必要なだけデータセットを拡大できます。
リアルタイムでの応答と、関連性と効率性の改善を組み合わせることは、多くの場合、ANNがベクトル検索の真の潜在能力を解き放つ際に重要な役割を演じるということを意味します。
近似最近傍探索アルゴリズムのタイプ
ANNの概念は検索において圧倒的な速度の利点を提供しますが、この用語は実際には多様なアルゴリズムのツールボックスを指します。そのどれにも長所とトレードオフがあり、具体的なデータと検索のニーズに合った正しいツールを選ぶには、その微妙な差異の理解が重要となります。
Kd木
Kd木は階層的な木構造でデータポイントを整理し、特定の次元に基づいて空間を分割します。これにより、低次元空間での高速かつ効率的な検索およびユークリッド距離に基づくクエリが可能になります。
Kd木は低次元での最近傍の検出に優れていますが、「次元の呪い」の問題があります。これは高次元になるにつれて、ポイント間の空間も爆発的に増加するという現象です。高次元では、単一の軸に基づいて分割するというKd木の戦略は、非効率的になります。検索ではほとんどのデータをチェックするようになり、効率性という長所を失い、全ポイントを通じた単なるリニアスキャンに近づき、速度の低下を招きます。
局所性鋭敏型ハッシュ(LSH)
LSHは強力なANN技法で、データポイントを「ハッシュ化」して、類似関係を巧みに保ったまま低次元空間にマッピングします。このクラスタリングにより検出が容易になり、画像やテキストのような膨大で高次元のデータセットの検索を、速度とスケーラビリティを保ったまま行うという点で、LSHが抜きんでた性能を示します。それでいて、しかも程よく正確な「十分近い」一致を返すのです。しかしLSHは時には誤検出(類似していないポイントを類似と検出)する場合があること、その効率性は距離のメトリクス(基準)とデータのタイプによって変わることに注意してください。異なるメトリクス(ユークリッド距離、Jaccard係数など)で作動するように設計されたさまざまなLSHファミリーがあり、それによりLSHは多用途に使えます。
Annoy
Annoy(Approximate Nearest Neighbors Oh Yeah)は単一のアルゴリズムではなく、LSHやKd木を直接実装せず、木の構築とクエリのために独自のアルゴリズムを使用するオープンソースのC++ライブラリです。高次元空間でメモリー効率を高め高速検索ができるように設計されていて、リアルタイムのクエリに適しています。基本的に使いやすいインターフェースを備えていて、さまざまなデータタイプや検索状況に柔軟に対応できます。Annoyの強みは複数のANNアプローチをひとつにまとめて活用でき、ニーズに最も合ったものを選択できる点にあります。処理を簡素化できますが、Annoyで適切な内部アルゴリズムを選択することは最適なパフォーマンスを得るために非常に重要であり、その効果はデータや精度の要件などの要因に依存することに留意しましょう。
リニアスキャンアルゴリズム
通常はANN技術として分類されませんが、リニアスキャンは総当たり的アプローチであり、他のANNアルゴリズムと似た結果をもたらすため、言及に値します。すべてのデータポイントを順次に計算し、レコード間の距離を計算し、最良のマッチを追跡します。アルゴリズムがシンプルなため、実装が簡単で小規模なデータセットに適しています。この基本的な手法の欠点は、大規模なデータセットには非効率的で、高次元データでは遅く、リアルタイムの応用には実用的でないことです。
正しいANNを選択する
どのANNを選ぶかを決める前に、以下の通り、考慮すべきことがいくつかあります。
データセットのサイズと次元:大規模で高次元のデータには局所性を考慮したハッシュを、小規模で低次元のデータにはKd木を使用することを検討してください。
必要な精度レベル:絶対的な精度が不可欠な場合は、リニアスキャンが最適な選択肢となるでしょう。そうでない場合は、LSHまたはAnnoyを検討してください。LSHは、速度と精度を両立させた優れたソリューションです。
計算リソース:Annoyは柔軟性を提供しますが、アルゴリズムを選ぶ前にメモリや処理の制限を考慮してください。
万能のソリューションはないことを覚えておきましょう。ご使用の固有データを使って、さまざまなANNアルゴリズムで実験し、その性能を評価して、ご自分のベクトル検索のニーズに完全にマッチするものを選びます。こういった選択肢以外にも、ANNアルゴリズムの世界は常に進化しているため、検索を改善できる新しい技術を見逃さないよう、最新の情報に注意を払うことが重要です。
ANNは検索を改善する秘密のソース
広大で複雑なデータの世界では、その迷宮をナビゲートする効率的なツールが必要となります。ANNは、類似検索を優れたものから偉大なものにする秘密のソースとなります。ANNはスピードと拡張性を提供しますが、その代償として精度に若干の妥協が生じます。そして、研究は毎週のように継続して進展しており、これらすべてがANN空間のダイナミックな性質に貢献するでしょう。例えば、量子コンピューティングと機械学習の進歩は、さらに高速で効率的な新しいタイプのANNアルゴリズムにつながる可能性があります。
私たちはさまざまなANNアルゴリズムを検討し、それぞれに長所と短所があることがわかりました。しかし、最終的に最適な選択は、特定のニーズによって異なります。データサイズ、次元数、精度要件、リソースなどの要素を考慮しましょう。ANNを最大限に活用するために、実験し、探求し、適切なアルゴリズムを選択してください。画像検索から不正検出まで、これらのアルゴリズムは大きな違いをもたらし、隠れたつながりを明らかにし、データ駆動型の洞察を迅速に提供します。
次に曲や映画、テレビゲームなどを検索する際には、表に出ない物静かなヒーロー、点を繋げて関連性を見出すANNアルゴリズムのことを思い出してください。
次のアクション
準備ができたら、ビジネスのデータから得られるインサイトを活用するための次の4つのステップに進みましょう。
無料トライアルを開始して、Elasticがビジネスにどのように役立つかをご覧ください。
ソリューションのツアーを参考に、Elasticsearchプラットフォームの仕組みと、ソリューションがニーズにフィットする仕組みを確認してください。
興味を持ってくれそうな人とこの記事を共有してください。メール、LinkedIn、X(旧Twitter)、Facebookで共有できます。
本記事に記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。
このブログ記事では、それぞれのオーナーが所有・運用するサードパーティの生成AIツールを使用したり、参照している可能性があります。Elasticはこれらのサードパーティのツールについていかなる権限も持たず、これらのコンテンツ、運用、使用、またはこれらのツールの使用により生じた損失や損害について、一切の責任も義務も負いません。個人情報または秘密/機密情報についてAIツールを使用する場合は、十分に注意してください。提供したあらゆるデータはAIの訓練やその他の目的に使用される可能性があります。提供した情報の安全や機密性が確保される保証はありません。生成AIツールを使用する前に、プライバシー取り扱い方針や利用条件を十分に理解しておく必要があります。
Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine、および関連するマークは、米国およびその他の国におけるElasticsearch N.V.の商標、ロゴ、または登録商標です。他のすべての会社名および製品名は、各所有者の商標、ロゴ、登録商標です。