Skip to content

dmae3/redisearch-embedding-search-sample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

redisearch-embedding-search-sample

このリポジトリは、RediSearchを使用してベクトル検索(embedding search)を行うサンプルアプリケーションです。AirBnBのリスティングデータとそのテキスト埋め込みを使用して、類似のリスティングを検索する機能を提供します。

主な特徴

  • RediSearchを使用したベクトル検索(FLATとHNSWの両方のインデックスタイプをサポート)
  • Hugging Faceのデータセット(MongoDB/airbnb_embeddings)の利用
  • OpenAI API(text-embedding-3-small モデル)を使用したテキスト埋め込みの生成
  • テキスト埋め込みを使用した類似性検索
  • 価格範囲によるフィルタリング機能
  • FLATとHNSW検索結果の比較機能

必要条件

  • Docker
  • Docker Compose
  • OpenAI API キー

セットアップと使用方法

  1. リポジトリのクローン:

    git clone https://github.com/dmae3/redisearch-embedding-search-sample.git
    cd redisearch-embedding-search-sample
    
  2. OpenAI API キーの設定: ホストマシンで環境変数を設定します:

    export OPENAI_API_KEY=your_actual_api_key_here
    
  3. Docker Composeを使用してビルドと起動:

    docker-compose up --build
    

    注: docker-compose.ymlファイルは環境変数 OPENAI_API_KEY を使用してAPIキーをコンテナに渡します。

  4. アプリケーションの実行: アプリケーションは自動的に起動し、インタラクティブなプロンプトが表示されます。

  5. 検索の実行:

    • プロンプトに従って、検索クエリを入力します。
    • 最小価格と最大価格を入力してフィルタリングします。
    • WiFiの要件を指定します。
    • FLATとHNSWの両方の検索結果が表示されます。
  6. アプリケーションの終了: 検索プロンプトで 'quit' と入力するか、Ctrl+Cを押してDocker Composeを終了します。

内部の動作

  1. データのロード:

    • Hugging Faceの"MongoDB/airbnb_embeddings"データセットをロードします。
    • 各リスティングのデータ、埋め込み、およびアメニティ情報をRedisに保存します。
  2. インデックスの作成:

    • RediSearchを使用して、複数のインデックスを作成します:
      • テキスト埋め込みに対するFLATベクトルインデックス
      • テキスト埋め込みに対するHNSWベクトルインデックス(近似最近傍探索用)
      • アメニティはJSON形式で保存
      • 価格に対する数値インデックス
  3. 検索プロセス: a. クエリ処理:

    • ユーザーの入力クエリに対してOpenAI APIを使用して埋め込みを生成

    b. プレフィルタリング:

    • 指定された価格範囲でフィルタリング(RediSearchのクエリ内で実行)
    • 効率的なデータベースレベルでのフィルタリング

    c. ベクトル類似性検索:

    • FLATインデックスを使用した完全な精度の検索
    • HNSWインデックスを使用した高速な近似検索
    • 各検索方式で上位K件の類似リスティングを取得

    d. ポストフィルタリング:

    • WiFi要件がある場合、アメニティリストを確認
    • メモリ上でJSONパースされたアメニティリストを検証
    • 要件を満たさないリスティングを除外
    • 指定された件数(top_k)に達するまで結果を表示
  4. 結果の表示:

    • FLAT検索とHNSW検索の結果を別々に表示
    • 各リスティングについて:
      • 基本情報(名前、説明、価格、収容人数)
      • 類似度スコア
      • 利用可能なアメニティの一覧(3列で整形)
      • WiFiの利用可能性を明示的に表示
    • フィルタリング後の最終的な検索結果数を表示

ベクトル検索の比較

このアプリケーションでは、2つの異なるベクトル検索方式を実装し、パフォーマンスを比較できます:

  1. FLAT検索:

    • 完全な精度を提供
    • すべてのベクトルとの比較を行うため、データセットが大きい場合は遅くなる可能性がある
    • 正確な最近傍探索が必要な場合に適している
  2. HNSW検索:

    • 近似最近傍探索を使用
    • FLATよりも高速な検索が可能
    • わずかな精度の低下と引き換えに、大規模データセットでも効率的な検索が可能
    • 高速な検索が必要で、完全な精度が必須でない場合に適している

パフォーマンス比較機能

各検索実行時に、以下のパフォーマンス指標が表示されます:

  1. 検索時間の計測:

    • FLAT検索の実行時間(秒)
    • HNSW検索の実行時間(秒)
    • 両者の速度差(HNSWがFLATの何倍速いか)
  2. 結果の比較:

    • 両方の検索方式による結果を並べて表示
    • 類似度スコアの違いを確認可能
    • 検索結果の順序や内容の違いを比較可能

この比較機能により、以下のような分析が可能です:

  • データセットサイズによる性能の違い
  • クエリの複雑さが検索時間に与える影響
  • フィルタリング条件による検索時間の変化
  • HNSW近似検索の精度と速度のトレードオフ

ライセンス

このプロジェクトは MITライセンス の下で公開されています。