Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

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

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

Yusuke Matsui

March 24, 2020
Tweet

More Decks by Yusuke Matsui

Other Decks in Research

Transcript

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

    View Slide

  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

    View Slide

  3. どのライブラリ、どの手法を選べばいい?
    https://github.com/erikbern/ann-benchmarks
    ・・・などなど

    View Slide

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

    View Slide

  5. 5
    ベンチマーク
    ➢ https://github.com/erikbern/ann-benchmarks
    ➢ 右上なほど良い
    ➢ 2020/3現在、トップはNMSLIBと
    NGT (yahoo japan)で競っている
    ➢このベンチマークは網羅的で非常に素晴らしいが、
    ✓全て実行すると10時間以上かかる
    ✓パラメータを網羅的に調べた結果なので、解釈しにくい
    ✓faissに厳しい(ちゃんとパラメータ設定していない)

    View Slide

  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
    精度高い
    速い
    シンプル!

    View Slide

  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による
    パラメータ
    スイープ
    ➢ コンマで
    区切るだけ

    View Slide

  8. algo:
    name: ivfpq
    param_index:
    - M: 8
    nlist: 100
    - M: 16
    nlist: 100
    param_query:
    nprobe:
    - 1
    - 2
    - 4
    - 8
    - 16
    ivfpq.yaml
    パラメータ設定

    View Slide

  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]

    View Slide

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

    View Slide