Spotifyは公式ブログで、同社が開発した新しい近傍検索ライブラリーVoyagerについて紹介した。Voyagerは実稼働環境でのSpotify推奨の最近傍検索ライブラリとしてAnnoyの後継となることを目的としているもので、GitHubで公開されている。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
音楽配信サービス事業者のSpotifyは2023年10月25日、公式ブログで同社が開発した新しい近傍検索ライブラリー「Voyager」について紹介した。
2010年代からおよそ10年間に渡って、Spotifyはパーソナライゼーション、レコメンデーションおよび検索システムを強化するために最近傍検索テクノロジーを使用してきたという。
これらのテクノロジーを使用することで、エンジニアや研究者は、低速で高価な機械学習アルゴリズムをリアルタイムで実行することなく、類似のアイテム(類似のトラック、アーティスト、アルバムなど)を推奨するシステムを構築できる。
Spotifyは2013年に、最近傍検索ライブラリである「Annoy」を構築し、オープンソース化した。それ以来、Annoyの機能を多数強化してきたという。
過去10年間で、最近傍検索の最先端技術は大幅に進歩した。Spotifyによると、最近傍検索では技術的な進歩に加え、エコシステムの急速な成長が見られる。
最近傍技術を比較する際に主要な要素となるのが精度と速度の2つだが、Spotifyのエンジニアにとっては他の要素も重要だという。
最近傍検索の各アプリケーションには、異なるニーズと制約がある。検索アルゴリズムのあらゆる部分をカスタマイズできることは、最大のパフォーマンス、最大のスループット、最小の遅延、最小のコストの間でバランスを取ることができるため、非常に便利だ。
Spotifyのシステムの多くはメモリ内で最近傍検索を実行しており、Kubernetes経由でステートレスデプロイメントを可能にし、ステートフルデータベースクラスタを維持するためのメンテナンスとコストの負担をほぼ完全に排除する。
Spotifyのバックエンドおよびデータエンジニアは、パフォーマンスを最大化するために、JavaやScalaなどのJVMベースの言語で運用システムをデプロイすることを好むが、多くの機械学習ユースケースはPythonで動作する。新しい最近傍テクノロジーの多くは、Python以外の言語のサポートが不十分であるか、多くの言語に対応するクライアントライブラリを提供しているものの、展開と同時にデータベースプロセスを実行する必要がある。
最先端の最近傍アルゴリズムは信じられないほど高速で、非常に高品質の出力を生成する。しかし、そのためには多くの場合、大量のメモリが必要になる。ほとんどの使用例では、コストを大幅に削減するために、極度の精度が犠牲になる可能性がある。
2018年以来、Spotify内のチームの多くでhnswlibと呼ばれる最近傍検索用のオープンソースライブラリの実験が行われた。このライブラリはAnnoyに比べて10倍の速度向上を実現し、高次元の埋め込みを必要とするユースケースにスケールアップする際に役立ったという。
しかし、これを大規模に展開するにつれて、hnswlibに加えるべき変更が多数判明した。これらの変更には、コードベースの保守を容易にするためのディスク上のデータ形式とAPIの変更および大幅なアーキテクチャの変更が含まれている。このような変更により下位互換性が失われるが、ソフトウェアパッケージに多くのユーザーがいる場合、これを行うのは非常に困難だという。
この問題を回避するために、Spotifyは完全に新しいライブラリであるVoyagerを構築した。
Voyagerは、hnswlibに基づく新しい最近傍検索ライブラリだ。実稼働環境でのSpotify推奨の最近傍検索ライブラリとしてAnnoyの後継となることを目的としている。Voyagerは、HNSW(Hierarchical Navigable Small World)アルゴリズムによって向上した精度と速度を、十分にテスト、文書化されたJavaとPythonの両方で本番環境に対応したバインディングを兼ね備えている。
SpotifyによるとVoyagerの理念は、誰でもPythonまたはJavaで最近傍インデックス検索をアプリケーションに追加できる、堅牢(けんろう)で安定した実稼働対応ライブラリを提供することだ。特徴は下記の通り。
Voyagerは、2022年以来、実稼働トラフィックを提供するためにSpotifyの多くのチームによって使用されている。また、GitHubでオープンソースとして公開されており、誰でも使用可能だ。
Copyright © ITmedia, Inc. All Rights Reserved.