引言
Vector Search(ベクター検索)は、高次元データを効率的に検索するための技術であり、近年、自然言語処理や畫像認識など、大規模な非構造化データの検索ニーズに対応するための中心的な技術として注目されています。Uber は、リアルタイムなデータ処理と高精度な検索を実現するため、Vector Search を中心とした技術スタックを構築し、多様な業務シーンで活用しています。本記事では、Uber における Vector Search の技術的実裝とその特徴を解説します。
技術定義と基本概念
Vector Search は、ベクター空間モデルに基づき、データポイント間の類似度を計算して検索を行う技術です。これにより、語義的検索(Semantic Search)や個人化推薦など、従來のキーワード検索(Lexical Search)では困難なニーズに対応可能です。Uber では、この技術をリアルタイムデータ処理と組み合わせ、高スケーラビリティと低遅延を実現しています。
技術スタックと特徴
Uber が採用している技術スタックは、Apache Kafka、Flink、Pinecone、Apache Lucene、Apache Spark、S3、HDFS などから構成されています。このスタックは、以下の特徴を持っています。
- リアルタイムデータ処理:Apache Kafka と Flink を用いて、秒単位でのデータ処理を実現。
- 分層型インデックス構造:基底インデックス(Base Index)、スナップショット(Snapshot)、活體インデックス(Live Index)を組み合わせ、データの新鮮度とスケーラビリティを確保。
- 動的シャーディング:GE Sharding を採用し、大規模なデータ量に対応。
- GPU 加速:NVIDIA Kagra アルゴリズムや Lucene cuvs プロジェクトを活用し、検索性能を大幅に向上。
実際の応用ケース
1. Uber Eats 検索
ユーザーがアプリを通じてレストランや料理を検索する際、語義的検索が活用されます。例えば、「熱飲」というキーワードが入力されると、熱可可やスターバックスコーヒーなどの結果が返されます。これは、従來のキーワード検索では得られない柔軟性を提供します。
2. マップ検索
地理情報(GPS座標、地図範囲)を処理し、逆地理コード(Reverse Geocoding)や地図変換を実行します。また、誤った入力(例:"car" が "ca" に誤って入力)に対応する語義的検索も実裝されています。
3. ドライバーマッチング
ドライバーの移動データをリアルタイムで処理し、ユーザーのニーズに応じたマッチングを実現します。このプロセスは、検索問題としてモデル化され、ベクター検索を活用して最適な結果を提供します。
技術的詳細
データ処理フロー
- リアルタイムデータストリーム:Kafka から Flink がデータを処理し、リアルタイムなインデックス更新を実行。
- オフラインインデックス:Spark Job が S3 または HDFS にインデックスを生成。
- インデックス構造:基底インデックス、スナップショット、活體インデックスの組み合わせにより、データの新鮮度とスケーラビリティを確保。
- 動的シャーディング:S3 を基盤とした軽量シャーディングと高スループットシャーディングを実現。
リアルタイム更新メカニズム
- 活體インデックス:リアルタイムデータの注入をサポート。
- スナップショットファイル:メモリ負荷を軽減。
- Delta 更新:変更內容のみを再インデックス化。
- トゥームストーンメカニズム:削除されたファイルを追跡。
検索アルゴリズムと最適化
- HNSW アルゴリズム:Lucene で実裝され、リアルタイム語義検索を可能に。
- GPU 加速技術:NVIDIA Kagra アルゴリズムにより、検索性能が 10-20 倍向上し、遅延が 50 倍改善。
- Lucin cuvs プロジェクト:GPU 加速の検索プラグインとして、今後の展開が期待。
技術的課題と解決策
- データ新鮮度:Lucene の NRT と區別し、リアルタイム処理を確保。
- 語義的検索:ベクター空間モデルと語義的類似度計算を組み合わせ。
- リソース効率:靜的ランキングと早期終了により、計算リソースを削減。
- 拡張性:多層インデックス構造により、億単位のデータ量をサポート。
今後の方向性
- GPU 加速アルゴリズムの統合:Kagra や Lucene cuvs との連攜を進める。
- ベクター検索と LLM の統合:Retrieval Augmentation による検索精度の向上。
- リアルタイム処理と語義検索の深層統合:技術の融合により、より高度な検索機能を実現。
- オープンソース貢獻:Apache Lucene や Pinecone との協力で、技術の普及を図る。
結論
Uber における Vector Search の実裝は、リアルタイムデータ処理と高精度検索を実現するための革新的なアプローチです。技術スタックの選定とアルゴリズムの最適化により、大規模なデータ量に対応しつつ、ユーザー體験を向上させています。今後、GPU 加速技術や LLM との統合により、さらなる進化が期待されます。