annbench: 近似最近傍探索アルゴリズムのベンチマーク

annbench: 近似最近傍探索アルゴリズムのベンチマーク

ML@Loft #11. 類似画像/テキスト検索 https://ml-loft.connpass.com/event/169623/

松井 勇佑(東京大学生産技術研究所)http://yusukematsui.me/index_jp.html

annbench: https://github.com/matsui528/annbench

画像検索を考える上で近傍探索アルゴリズムの選択は重要ですが難しいです。既存の有名なベンチマーキングライブラリは網羅的ですが実行に十数時間かかるという問題がありました。そこで私は軽量でシンプルなベンチマークのライブラリを作りました。これにより手軽に手法を比較出来ます。是非使ってみてください。

6bd63bb363d2cb9933b263463f6305cf?s=128

Yusuke Matsui

March 24, 2020
Tweet

Transcript

  1. annbench: 近似最近傍探索 アルゴリズムのベンチマーク 松井勇佑 東京大学 生産技術研究所 助教 http://yusukematsui.me 2020/3/24, ML@Loft

    #11. 類似画像/テキスト検索, LT 1
  2. 0.23 3.15 0.65 1.43 探索 0.20 3.25 0.72 1.68 ∈

    ℝ 74 argmin ∈ 1,2,…, − 2 2 結果 1 , 2 , … , ∈ ℝ 近似最近傍探索 ➢個のベクトルがある ➢クエリが与えられたとき,一番近いベクトルを (近似的に)探す ➢速度,メモリ,精度のトレードオフ 2
  3. どのライブラリ、どの手法を選べばいい? https://github.com/erikbern/ann-benchmarks ・・・などなど

  4. 4 ベンチマーク ➢ https://github.com/erikbern/ann-benchmarks ➢ 右上なほど良い ➢ 2020/3現在、トップはNMSLIBと NGT (yahoo

    japan)で競っている
  5. 5 ベンチマーク ➢ https://github.com/erikbern/ann-benchmarks ➢ 右上なほど良い ➢ 2020/3現在、トップはNMSLIBと NGT (yahoo

    japan)で競っている ➢このベンチマークは網羅的で非常に素晴らしいが、 ✓全て実行すると10時間以上かかる ✓パラメータを網羅的に調べた結果なので、解釈しにくい ✓faissに厳しい(ちゃんとパラメータ設定していない)
  6. annbench: simple and lightweight benchmark for approximate nearest neighbor search

    https://github.com/matsui528/annbench # Install libraries pip install -r requirements.txt # Download dataset on ./dataset python download.py dataset=siftsmall # Evaluate algos. Results are on ./output python run.py dataset=siftsmall algo=annoy # Visualize python plot.py 精度高い 速い シンプル!
  7. # Download dataset on ./dataset python download.py --multirun dataset=siftsmall,sift1m #

    Evaluate algos. Results are on ./output python run.py --multirun dataset=siftsmall,sift1m algo=linear,annoy,ivfpq,hnsw 複数データセットで複数アルゴリズムを試す ➢ Hydraによる パラメータ スイープ ➢ コンマで 区切るだけ
  8. algo: name: ivfpq param_index: - M: 8 nlist: 100 -

    M: 16 nlist: 100 param_query: nprobe: - 1 - 2 - 4 - 8 - 16 ivfpq.yaml パラメータ設定
  9. インタラクティブにパラメータ上書き # Use ivfpq.yaml (nprobe=[1,2,4,8,16]) python run.py algo=ivfpq dataset=sift1m #

    Override python run.py algo=ivfpq dataset=sift1m param_query.nprobe=[1,5,25]
  10. annbench: simple and lightweight benchmark for approximate nearest neighbor search

    https://github.com/matsui528/annbench ➢ 是非使ってみてください! ➢ PR歓迎です! ➢ 探索の理論/応用の研究に興味がある企業の方、 学生の方、お声がけください http://yusukematsui.me