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

8.0からのkNNはどう変わったのか / How kNN search changed in the Elasticsearch 8.0

8.0からのkNNはどう変わったのか / How kNN search changed in the Elasticsearch 8.0

F73ac5e3ccf3d4dbfffff61b14d2335c?s=128

Kazuma Arimura

February 16, 2022
Tweet

More Decks by Kazuma Arimura

Other Decks in Technology

Transcript

  1. 8.0からのkNNはどう変わったの か 第46回 Elasticsearch勉強会 Kazuma Arimura February 16th, 2022

  2. Kazuma Arimura (pakio) 株式会社メルカリ Software Engineer US@Tokyo 好きなこと : カレー/Elasticsearch/日本語

    苦手なこと : 英語 @pakio / @paki0o
  3.    US事業について
 Got stuff you don’t use? Sell or buy

    almost anything from home. メルカリは、ミッションである「新たな価値を生みだす世界的なマーケットプレイスを創る」ことを目指し、創業翌年から海外展開を推 し進めています。2014年9月にUS事業を開始し、現地の嗜好やマーケットの特徴に合わせたブランディングやUI・UXの改良、配送 網の構築等に取り組んでいます。巨大かつ多様性に富む人口基盤を有するUSでの成功が、メルカリのミッションを実現する上で重 要なマイルストーンであると認識しており、注力しています。
 3 Your Marketplace Factbookより引用

  4. Contents • これまでのおさらい • 主な変更点について • ベンチマーク • まとめ

  5. はじめに 今回取り上げる機能は8.0リリース時点でTechnical Previewとなっています !

  6. おさらい

  7. おさらい - これまでのkNNについて これまでサポートされていた方法 1. マッピング時にdense_vector typeを指定し、ベクトルをそのまま保存 2. script_scoreでquery_vectorを指定し、クエリとドキュメントの類似度を計算

  8. おさらい - これまでのkNNについて これまでサポートされていた方法 1. マッピング時にdense_vector typeを指定し、ベクトルをそのまま保存 2. script_scoreでquery_vectorを指定し、クエリとドキュメントの類似度を計算 全探索をするため計算量が候補数に比例

  9. 主な変更点について

  10. 主な変更点について HNSW AlgorithmベースのApproximate kNNのサポート kNN Search APIの追加 1 2

  11. 主な変更点について - Approximate kNNのサポート dense_vector type指定時のオプションが追加 • index : trueにすると、kNN

    Search APIで利用可能に • similarity : ベクトルの類似度計算の際に用いる尺度 ◦ l2_norm, dot_product, cosine をサポート • index_option : ベクトルのindexing algorithmの設定詳細
  12. 主な変更点について - Approximate kNNのサポート dense_vector type指定時のオプションが追加 • index : trueにすると、kNN

    Search APIで利用可能に • similarity : ベクトルの類似度計算の際に用いる尺度 ◦ l2_norm, dot_product, cosine をサポート • index_option : ベクトルのindexing algorithmの設定詳細 前処理を加えることでkNNの計算対象範囲を狭め高速化
  13. 主な変更点について - Approximate kNNのサポート kNNとANNの違い kNN : クエリが与えられた時、全候補に対しベクトル間の類似度を 正確に計算 ANN

    : クエリが与えられた時、近似的に最も近いベクトルを探す ANNで用いられるアルゴリズム例 [1] • Locality Sensitive Hashing • Tree / Space Partitioning • Graph traversal ◦ 今回採用されたHNSWもこの一種
  14. 主な変更点について - Approximate kNNのサポート Hierarchical Navigable Small Worlds (HNSW) 画像引用元

    : [2]
  15. 主な変更点について - kNN Search APIの追加 script_scoreを利用したベクトル検索

  16. 主な変更点について - kNN Search APIの追加 kNN Search APIによるベクトル検索

  17. ベンチマーク

  18. ベンチマーク データセット • ann-benchmark の Fashion-MNIST (784次元) https://github.com/erikbern/ann-benchmarks https://github.com/zalandoresearch/fashion-mnist 環境:

    • 環境 : EC2 c5a.2xlarge × 1 node • バージョン: Elasticsearch 8.0 引用元 : [3]
  19. ベンチマーク : 1. インデキシング性能 比較条件 • # docs : 60,000

    • docs/req : 100 • 並列数 : 4 • 比較対象 ◦ index=falseのdense_vector ◦ index=trueのdense_vector
  20. ベンチマーク : 1. インデキシング性能 比較結果 60,000件程度では差異なし 件数が増えると影響あるかも? What's new in

    8.0 # New kNN search API “In exchange for slower indexing and imperfect accuracy, the new kNN search API lets you run approximate kNN searches on larger datasets and at faster speeds.”
  21. ベンチマーク : 2. 検索性能 比較条件 • 対象インデックス : 1で作成したもの(784次元 ×

    60,000件) • Top K : 10 • ANNの際のnum_candidates : 100 ◦ 各shard内で何件候補を選出するか
  22. ベンチマーク : 2. 検索性能 比較結果 精度は落ちるが、速度面では圧倒的に有利 間違って出たケース kNN ANN 正確性

    100% 99.7% 50%ile 60 ms 9 ms 90%ile 60 ms 10 ms
  23. ベンチマーク : 2. 検索性能 ドキュメント数N倍 kNN ANN 50%ile (original) 60

    ms 9 ms 90%ile (original) 60 ms 10 ms 50%ile (# doc × 2) 119 ms 10 ms 90%ile (# doc × 2) 119 ms 11 ms 50%ile (# doc × 3) 178 ms 11 ms 90%ile (# doc × 3) 179 ms 12 ms kNN(script)はドキュメント数に比例、ANNは穏やか
  24. まとめ

  25. まとめ 👍メリット: • 多少の検索精度を引き換えに、検索が高速に • (scriptと比較して)直感的なAPI • 類似度の尺度が事前に定義可能、誤用の防止 👎デメリット: •

    インデキシング速度の低下 (?) • メモリ・データサイズの増加 • Query DSLとの併用不可
  26. We are hiring!! • Software Engineer, Search - US App

    https://apply.workable.com/mercari/j/7C11672DDA/ • Engineering Manager, Search - US App https://apply.workable.com/mercari/j/1CDC7D5CEF/
  27. Thanks!

  28. Appendix

  29. 参考文献 • [1] : [CVPR20 Tutorial] Billion-scale Approximate Nearest Neighbor

    Search https://speakerdeck.com/matsui_528/cvpr20-tutorial-billion-scale-approximate-nearest-neighbor-search • [2] : Hierarchical Navigable Small Worlds (HNSW) https://www.pinecone.io/learn/hnsw/ • [3] : Fashion-MNIST https://github.com/zalandoresearch/fashion-mnist • [4] : kNN Search API | Elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/8.0/knn-search-api.html