Vector Search と Uber の技術的実裝

引言

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 との統合により、さらなる進化が期待されます。