Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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


Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

おさらい

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

主な変更点について

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

主な変更点について - Approximate kNNのサポート dense_vector type指定時のオプションが追加 ● index : trueにすると、kNN Search APIで利用可能に ● similarity : ベクトルの類似度計算の際に用いる尺度 ○ l2_norm, dot_product, cosine をサポート ● index_option : ベクトルのindexing algorithmの設定詳細 前処理を加えることでkNNの計算対象範囲を狭め高速化

Slide 13

Slide 13 text

主な変更点について - Approximate kNNのサポート kNNとANNの違い kNN : クエリが与えられた時、全候補に対しベクトル間の類似度を 正確に計算 ANN : クエリが与えられた時、近似的に最も近いベクトルを探す ANNで用いられるアルゴリズム例 [1] ● Locality Sensitive Hashing ● Tree / Space Partitioning ● Graph traversal ○ 今回採用されたHNSWもこの一種

Slide 14

Slide 14 text

主な変更点について - Approximate kNNのサポート Hierarchical Navigable Small Worlds (HNSW) 画像引用元 : [2]

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

ベンチマーク

Slide 18

Slide 18 text

ベンチマーク データセット ● 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]

Slide 19

Slide 19 text

ベンチマーク : 1. インデキシング性能 比較条件 ● # docs : 60,000 ● docs/req : 100 ● 並列数 : 4 ● 比較対象 ○ index=falseのdense_vector ○ index=trueのdense_vector

Slide 20

Slide 20 text

ベンチマーク : 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.”

Slide 21

Slide 21 text

ベンチマーク : 2. 検索性能 比較条件 ● 対象インデックス : 1で作成したもの(784次元 × 60,000件) ● Top K : 10 ● ANNの際のnum_candidates : 100 ○ 各shard内で何件候補を選出するか

Slide 22

Slide 22 text

ベンチマーク : 2. 検索性能 比較結果 精度は落ちるが、速度面では圧倒的に有利 間違って出たケース kNN ANN 正確性 100% 99.7% 50%ile 60 ms 9 ms 90%ile 60 ms 10 ms

Slide 23

Slide 23 text

ベンチマーク : 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は穏やか

Slide 24

Slide 24 text

まとめ

Slide 25

Slide 25 text

まとめ 👍メリット: ● 多少の検索精度を引き換えに、検索が高速に ● (scriptと比較して)直感的なAPI ● 類似度の尺度が事前に定義可能、誤用の防止 👎デメリット: ● インデキシング速度の低下 (?) ● メモリ・データサイズの増加 ● Query DSLとの併用不可

Slide 26

Slide 26 text

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/

Slide 27

Slide 27 text

Thanks!

Slide 28

Slide 28 text

Appendix

Slide 29

Slide 29 text

参考文献 ● [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