46.6kデモを予約するログイン無料で始める

ScaNN(Scalable Nearest Neighbors)とは?

ScaNNはGoogleによって開発されたオープンソースのライブラリで、大規模なデータセットにおける高速な近似最近傍検索を行う。

推薦システム、画像検索、自然言語処理(NLP)などのアプリケーションは、膨大なデータセットの中からパターンやつながりを見つける能力に大きく依存している。あなたが気に入る次の映画を提案するにしても、視覚的に類似した画像を検索するにしても、関連するテキストを特定するにしても、これらのシステムは、関連する結果を提供するために、ベクトル類似性検索として知られるコアプロセスに依存している。

しかし、データセットが数百万、数十億のアイテムに成長するにつれ、類似検索を大規模に実行することはますます困難になっている。ScaNN** (Scalable Nearest Neighbors)は、このプロセスを最適化し高速化するためにGoogleが開発したライブラリです。ScaNNは高度な技術を活用して最近傍検索 (NNS)をより高速かつ効率的にし、AI駆動型システムが複雑なデータをより高速かつ正確に扱えるようにします。

ScaNNの特徴を探る前に、まず基本的なことから始めましょう。ベクトル検索を理解し、なぜそれが不可欠なのかを理解することです。

基本:ベクトル探索と最近傍探索

ベクトル](https://zilliz.com/glossary/vector-embeddings)-画像、テキスト、音声のような非構造化データの数学的表現-を比較して、与えられたクエリーポイントに最も類似したアイテムを見つけるプロセスである。このプロセスは、高次元空間で「最も近い」マッチを識別するため、最近傍探索(NNS)とも呼ばれる。

ベクトル検索の仕組み

データがベクトルに変換されるとき、各ベクトルは多次元空間の点と考えることができます。2つの項目が似ていれば似ているほど、その点はこの空間内で近くなります。例えば

  • 推薦システム**:映画推薦エンジンは、各映画とユーザーの好みをベクトルとして表現する。ロマンティック・コメディが好きな場合、システムはベクトル空間でロマンティック・コメディに近いベクトルを持つ映画を検索する。

  • 画像検索画像をベクトルに変換し、類似した特徴を持つ画像を検索する逆画像検索エンジン。

  • NLP**:テキスト埋め込みは、単語や文章の意味を捉えるベクトルである。ベクトルの類似性は、意味的に関連するテキストを識別するのに役立ちます。

ベクトルを比較するために、私たちはユークリッド距離や余弦類似度のような数学的指標を使用してそれらの「距離」を計算します。距離が小さい=類似性が高い。例えば、映画の推薦システムでは、ロマンティック・コメディを表すベクトルは、ホラー映画よりも別のロマンティック・コメディに近いでしょう。

課題:ベクトル探索のスケーリング

ベクトルの類似性検索は小さなデータセットでは簡単ですが、ベクトルの数が増えるにつれて計算コストが高くなります。 数百万、数十億のベクトルから最近傍を検索することを想像してみてください。各クエリをすべてのベクトルと比較する必要があり、リアルタイムのアプリケーションでは実行不可能です。

厳密な最近傍探索のための従来の方法(総当たりなど)は、このような要求を処理するには遅すぎます。これを克服するために、最新のシステムは近似最近傍探索(ANNS)に目を向けます。これは、パフォーマンスを大幅に向上させる代わりに、わずかな精度を犠牲にすることで処理を高速化します。

ScaNN (Scalable Nearest Neighbors)とは?

ScaNN とは Scalable Nearest Neighbors の略で、ベクトル類似検索のスケーリングの課題に対処するために設計されたライブラリである。Google によって開発された ScaNN は、近似最近傍探索 (ANNS) に重点を置き、従来ほとんどの探索アルゴリズムにとって困難であった大規模なデータセットでも、速度と精度のバランスを取ることができます。

では、ScaNN のアーキテクチャと、どのようにしてこの効率性を実現しているのかを見てみよう。

ScaNN の仕組み

ScaNN は、ベクトル検索における最大の課題のひとつである、データセットが大きく複雑になっても、高次元空間で最も関連性の高いベクトルを効率的に見つけるという課題を解決するために構築されています。ScaNNのアーキテクチャは、ベクトル探索プロセスを明確な段階に分解する。これらの段階とは、分割、量子化、再順位付けである。

図 - ScaNNのアーキテクチャ.png](https://assets.zilliz.com/Figure_Sca_NN_s_architecture_6966f34a88.png)

図ScaNNのアーキテクチャ

各ステージは、検索を遅くしたりリソース消費を増加させたりする特定のボトルネックに取り組む。この多段階プロセスにより、ScaNNはスピードと精度の両方を最適化し、早い段階で無関係なデータをフィルタリングし、最終段階で結果を微調整することができる。3つのコンポーネントについて詳しく説明しよう。

ScaNNの3つのコアコンポーネント

1.パーティショニング はデータセットをクラスターに分割するプロセスである。この方法は、データセット全体をスキャンする代わりに、関連するデータのサブセットのみに焦点を当てることで検索空間を狭め、時間と処理リソースを節約する。ScaNN は多くの場合、k-means のようなクラスタリング アルゴリズムを使用してクラスタを特定し、類似検索をより効率的に実行できるようにします。

2.量子化: ScaNN はパーティショニングの後、異方性ベクトル量子化 として知られる量子化プロセスを適用する。従来の量子化は、元のベクトルと圧縮されたベクトル間の全体的な距離を最小化することに重点を置いているが、これは最大内積探索(MIPS)のようなタスクには理想的でなく、類似性は直接的な距離ではなくベクトルの内積によって決定される。異方的量子化は、代わりにベクトル間の平行成分、つまり正確な内積を計算するために最も重要な部分を保存することを優先します。このアプローチにより、ScaNNは圧縮されたベクトルをクエリに注意深く整合させることで高いMIPS精度を維持し、より高速で正確な類似性検索を可能にしている。

3.再順位付け: 再順位付け段階は最終段階で、ScaNNは分割と量子化段階からの検索結果を微調整する。この再順位付けでは、上位の候補ベクトルに対して正確な内積計算が適用され、最終的な結果が高精度になるようにします。再順位付けは、最初のフィルタリングとクラスタリングが粗い層として機能し、最終段階で最も関連性の高い結果のみがユーザーに返されるようにする、高速推薦エンジンや画像検索アプリケーションにおいて極めて重要である。

この3段階のプロセスにより、ScaNNは近似検索のスピードと厳密検索手法の精度を組み合わせることができ、両方を必要とするアプリケーションにとってバランスの取れた選択肢となる。アーキテクチャを理解したところで、次にさまざまな環境で ScaNN をセットアップしてその機能を実装し始める方法を見ていきましょう。

ScaNN による実装方法の詳細については、こちらのチュートリアルをご覧ください。

ScaNN の主な機能

ScaNN の設計には、パフォーマンスと適応性のために調整されたさまざまな機能が組み込まれています。以下は、ScaNNが最新のAIおよび機械学習アプリケーションに効果的な特性の一部です:

ハイブリッド粗目および細目サーチ

ScaNN は粗視化と細視化の両方の検索テクニックを組み合わせており、粗視化検索ではデータセットを大まかにフィルタリングして無関係なデータを素早く除外し、細視化検索ではフィルタリングされた結果の中から最も関連性の高いマッチを正確にチェックする。この粗目から細目へのアプローチにより、ScaNNが評価する必要のあるベクトルの数が制限され、精度を落とすことなくスピードが向上する。このハイブリッド手法により、小規模なデータセットでも大規模なデータセットでも効率性が保証される。

近似最近傍 (ANN)

ScaNN は近似最近傍 (ANN) 探索に依存しており、これは速度を優先するために精度をある程度犠牲にする手法である。ANN は ScaNN がほぼ正確な結果を迅速に返すことを保証し、これは低レイテンシ応答時間が要求されるアプリケーションでは重要である。近似の程度を調整することで、ユーザーは速度と精度のトレードオフを制御でき、ScaNN をさまざまな検索シナリオに適応させることができます。

スケーラビリティ

ScaNN のアーキテクチャは、膨大なデータセットを処理するために構築されており、データ量の増加に応じてスムーズに拡張できるようにパフォーマンスが最適化されています。数百万から数千万のベクトルを扱う場合でも、ScaNN のパーティショニングと量子化メカニズムが効率的な運用を可能にし、高いスケーラビリティが要求される様々な環境に適しています。

TensorFlow との統合

TensorFlow](https://github.com/tensorflow)とのシームレスな統合により、ScaNNは機械学習パイプラインに直接適合することができます。TensorFlow のサポートにより実装が簡素化され、大規模な修正を必要とせずに、より広範なワークフローに ScaNN を組み込むことができます。この互換性により、効率的な最近傍探索が不可欠な機械学習タスクでの使用が容易になる。

カスタマイズ可能な精度対速度

ScaNN の調整可能なパラメーターにより、ユーザーはニーズに応じて精度と速度のトレードオフを調整できます。例えば、精度設定を下げて検索結果の高速化を優先したり、高精度を必要とするアプリケーションのために精度を上げたりすることができます。この柔軟性は、さまざまなパフォーマンスを必要とする企業にとって貴重なものであり、その企業独自のデータとレスポンス要件に合わせてScaNNを最適化する手段を提供します。

メモリー効率

メモリ効率は ScaNN のもうひとつの長所です。特にその量子化戦略は、ベクトル表現を圧縮することでメモリ使用量を削減する。これにより、ScaNN は大規模なメモリリソースを必要とせずに大規模なベクトル探索を可能にするため、リソースに制約のある環境に適している。

ScaNN のベストユースケース

ScaNN の強みは、高速かつ高精度のベクトル類似性検索に依存するアプリケーションに最適な選択肢を提供します。一般的なユースケースには以下のようなものがあります:

  • レコメンデーションエンジン**:ScaNN の高速ベクトル検索機能は、リアルタイムで関連性の高いレコメンデーションを提供することで、ユーザーエクスペリエンスを向上させます。

  • 画像検索**:ScaNN は、視覚的な類似性に基づいて画像を効率的にマッチングさせることができ、e コマースなどの分野におけるビジュアル検索エンジンに役立ちます。

  • 自然言語処理**](https://zilliz.com/learn/A-Beginner-Guide-to-Natural-Language-Processing):自然言語処理アプリケーションは、言語データのベクトル化表現に依存することが多く、ScaNN の速度と効率性は、テキストの類似性マッチングや文書検索のようなタスクに理想的です。

他のベクトル検索ライブラリとの比較

ScaNN と Faiss の比較

ScaNNとFaissはどちらも最近傍探索のための高性能ツールであるが、アプローチは大きく異なる。ScaNN は異方性ベクトル量子化によって MIPS 向けに高度に最適化されており、内積検索結果のランキング精度を維持することを優先している。このためScaNNは、内積類似度に依存する推薦エンジンのようなアプリケーションで特に有用である。対照的に、Faissは商品の量子化を含む、より広範なインデックス作成と量子化オプションのセットを提供し、多様な検索ニーズに柔軟に対応します。FaissのGPUサポートは、より大きなデータセットでのパフォーマンスを向上させるが、ScaNNはMIPSに重点を置いているため、待ち時間の影響を受けやすい環境でも高速なレスポンスを実現できる。

ScaNNとAnnoyの比較

ScaNNとAnnoy(近似最近傍探索の略)は、異なる探索ニーズに対応するために異なる構造になっている。Annoyはランダムな射影木を使ってインデックスを作成するため、低次元空間やメモリが限られた環境では非常に効率的である。しかしAnnoyは高次元や大規模なデータには最適化されておらず、ScaNNのパーティショニングと量子化技術が優位性を発揮する。ScaNNは高次元空間での正確な類似性検索を必要とするアプリケーションに適しており、Annoyはより単純で小規模なデータセットに適している。

ScaNN と HNSWlib の比較

HNSWlib は Hierarchical Navigable Small World (HNSW) グラフアプローチに基づき、ノードが近接関係で接続されたデータポイントを表す多層グラフを構築することで、ベクトル検索の高精度に優れています。HNSWlib の階層構造は、これらのグラフ階層を介した高精度検索をサポートしますが、ScaNN の分割と量子化よりも多くのメモリを必要とします。高精度とメモリ効率の両方を必要とするアプリケーションでは、特に大規模データ環境では ScaNN の設計の方が適している。

ScaNNの課題と限界

ScaNN には多くの利点がある一方で、注意すべき制限やトレードオフもあります:

検索スピードと精度のトレードオフ

ScaNN では精度とスピードのトレードオフを設定できますが、最高精度を設定しても、完全一致のために設計されたより専門的なアルゴリズムに遅れをとる場合があります。ScaNNの検索は近似的な性質を持っているため、正確性にやや欠ける結果となることがあり、すべてのユースケースに適しているとは限りません。しかし、この妥協は多くの場合、スピードの向上と釣り合います。

次元の問題

ScaNN は様々なデータセットで良好なパフォーマンスを示すが、極めて高次元のデー タは依然として課題を提示する可能性がある。ScaNN が採用するパーティショニングと量子化手法は、次元がある閾値を超えると効率や精度が低下する可能性があるが、これはほとんどの高次元ベクトル探索手法に共通する問題である。

スケーリング複雑性

特定のデータセットやユースケースに合わせて ScaNN のパラメーターを調整するのは複雑な場合があります。ScaNN は複数の調整可能な機能を提供するため、各シナリオに合わせた微調整が必要になる場合があり、これには時間がかかります。ユーザーによっては、特定のデータセットやリソースに合わせてパフォーマンスを最適化するための実験が必要になる場合があります。

ユースケースによっては、このような制限があるため、ユーザーはスタンドアロンライブラリではなく、完全なベクトルデータベースソリューションを検討することになるかもしれません。

ベクター検索ライブラリとベクターデータベースの比較

ベクター検索ライブラリとベクターデータベース は、異なるデータ処理ニーズに対応しています。

ScaNN、Faiss、Annoyのようなベクトル検索ライブラリは、高速な類似検索用に設計されている。これらのライブラリは、ベクトル空間における最近傍の効率的な検索に重点を置いているが、永続的なデータ保存や複雑なクエリの機能は備えていない。これらのライブラリは、ベクトルデータが一過性のものであったり、より広範なデータ処理ワークフローに組み込まれていたりする場合に最適である。例えば、Meta社が開発したFaissは、高密度のベクトルコレクションを管理するために最適化されており、インメモリの限界を超えるようなデータセットにも適している。

一方、MilvusやそのフルマネージドバージョンであるZilliz Cloudのような専用に構築されたベクトルデータベースは、単純な類似検索にとどまらず、億単位のベクトルデータに対しても堅牢なストレージ、インデックス作成、クエリ機能を提供する。これらのベクトルデータベースは、リアルタイム更新や分散スケーラビリティ、ハイブリッドスパースとデンスベクトル検索、マルチレプリカ、マルチテナンシー、その他多くのエンタープライズ対応機能もサポートしており、プロダクションアプリケーションに適しています。

さらにMilvusは、ScaNN、HNSW、IVF、DiskANNなどを含む様々なANNアルゴリズムをネイティブでサポートしており、それぞれが異なるユースケースや要件に最適化されています。

ベクトル探索のベンチマーク:ScaNN パフォーマンス

ANN-Benchmarkは、様々なデータセットにおける様々なANNSアルゴリズムの性能を測定し、比較するために設計された包括的な評価ツールである。

glove-100-angularデータセットにおいて、ScaNNは他のライブラリと比較して、同程度の精度レベルで1秒間に約2倍のクエリを処理し、高い性能を示した。このため、速度と精度が同等に重要視される広範なデータセットの処理に適している。

図 - ベンチマーキング結果.png](https://assets.zilliz.com/Figure_Benchmarking_result_9258911cb8.png)

_図ベンチマーク結果

これらのベンチマーク結果は、ScaNNが迅速かつ正確なベクトル類似性検索を提供する能力を備えていることを強調しており、膨大な高次元データの効率的な取り扱いを必要とするアプリケーションにとって強力な選択肢となっています。

結論

ScaNN はベクトル類似検索において非常に効率的であり、分割、量子化、再順位付けなどの技術を活用して、高次元データの速度と精度のバランスを実現している。推薦エンジン、画像検索、自然言語処理 (NLP) など、パフォーマンスが優先されるペースの速い AI アプリケーションの構築に最適です。また、ScaNN は柔軟性も備えており、ユーザーは特定のユースケースに合わせて精度と速度のトレードオフを微調整できるため、スケーラブルでメモリ効率の高いソリューションに効果的です。

しかし、ScaNN や Faiss、Annoy、HNSWlib などの類似ライブラリは、プロトタイピング、小規模アプリケーション、または頻繁な更新を必要としない比較的静的なデータセットに最適です。億スケールのデータセットや、高可用性、マルチテナンシー、ハイブリッドスパース/デンス検索、フィルタリング検索といった高度な機能を含むプロダクショングレードのシナリオには、Milvusのような専用に構築されたベクトルデータベースが、より堅牢でスケーラブルなソリューションを提供する。これらのデータベースは、ダイナミックでエンタープライズグレードの環境向けに設計されており、大規模で進化するデータセットをシームレスに管理するために必要な機能を備えている。

ScaNNのFAQ

ScaNNとは何ですか?

ScaNN は Google によって開発されたベクトル類似性検索ライブラリで、推薦エンジン、画像検索、NLP などのアプリケーションのために、大規模で高次元のデータセットを効率的に扱うように設計されています。

ScaNN のアーキテクチャのコアコンポーネントは何ですか?

ScaNNのアーキテクチャは、パーティショニング、量子化、再ランキングの3つの主要コンポーネントで構成されています。これらのステージはベクトル類似検索の速度と精度を向上させるために協働します。

MilvusやZilliz Cloudのような完全なベクトルデータベースではなく、ScaNNを選択するのはどのような場合ですか?

ScaNNは、永続的なストレージや複雑なクエリーを必要とせず、効率的でスケーラブルな類似性検索が必要な場合や、ベクトル検索のプロトタイプや実験をしたい場合に最適な選択です。本番環境向けのアプリを構築したり、数十億ベクトルにも及ぶ大規模なデータセットを扱うには、Milvusのような専用に構築されたベクトルデータベースや、より手間のかからないサービスであるZilliz Cloudの方が適しているかもしれません。

その他のリソース

  • ScaNNの発表:効率的なベクトル類似度検索](https://research.google/blog/announcing-scann-efficient-vector-similarity-search/)

  • Faiss(フェイスブックAI類似検索)とは - Zillizブログ](https://zilliz.com/learn/faiss)

  • ANNベンチマークを理解する](https://zilliz.com/glossary/ann-benchmarks)

  • ベンチマークベクターデータベースのパフォーマンス:テクニックと洞察](https://zilliz.com/learn/benchmark-vector-database-performance-techniques-and-insights)

  • VectorDBBench: オープンソースのベクトルデータベースベンチマークツール](https://zilliz.com/learn/open-source-vector-database-benchmarking-your-way)

  • ベクターデータベースとは何か?