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

グラフを用いた近似最近傍探索の理論と応用

 グラフを用いた近似最近傍探索の理論と応用

NLP若手の会 (YANS) 第18回シンポジウム (2023) チュートリアル https://yans.anlp.jp/entry/yans2023

松井 勇佑(東京大学)https://yusukematsui.me/

近似最近傍探索とは、「似ているベクトルを探す」というシンプルかつ基盤的な技術である。近傍探索技術は古くから様々な分野で研究が進められてきたが、現在でも活発に技術革新が進んでいる。近年ではCLIPを用いたマルチモーダル検索や、埋め込み探索によるLLMへの知識追加方式として、近傍探索技術は注目を集めている。本チュートリアルでは、特に2010年代後半から目覚ましく発展を遂げ、多くのVector Databaseのバックエンドにもなっている「グラフを用いた探索方式」に焦点を当て、その理論と応用について解説する。

Yusuke Matsui

August 30, 2023
Tweet

More Decks by Yusuke Matsui

Other Decks in Research

Transcript

  1. 2 松井勇佑 ✓ コンピュータビジョン ✓ 大規模探索 http://yusukematsui.me 東京大学 情報理工学系研究科 講師

    @utokyo_bunny ARM 4-bit PQ [Matsui+, ICASSP 22] Relative NN-Descent [Ono & Matsui, ACMMM 23] @matsui528
  2. 本日の発表 CVPR 2023 Tutorial “Neural Search in Action” のうち松井発表分である ”Theory

    and Applications of Graph-based Search“ の日本語版 https://matsui528.github.io/cvpr2023_tutorial_neural_search/ https://speakerdeck.com/matsui_528/cvpr23-tutorial-theory-and-applications-of-graph-based-search + NLPに関する内容
  3. 4 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  4. 5 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  5. Search 𝒙1 , 𝒙2 , … , 𝒙𝑁 𝒙𝑛 ∈

    ℝ𝐷 6 ➢𝑁 本の𝐷次元データベースベクトル: 𝒙𝑛 𝑛=1 𝑁 最近傍探索 (Nearest Neighbor Search; NN)
  6. 0.23 3.15 0.65 1.43 Search 0.20 3.25 0.72 1.68 𝒒

    ∈ ℝ𝐷 𝒙74 argmin 𝑛∈ 1,2,…,𝑁 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 𝒙𝑛 ∈ ℝ𝐷 7 ➢𝑁 本の𝐷次元データベースベクトル: 𝒙𝑛 𝑛=1 𝑁 ➢クエリ𝒒が与えられたとき、似ているものを データベースベクトル中から探す ➢コンピュータ科学における基本的な処理の1つ ➢ナイーブ解法は線形探索:𝑂 𝑁𝐷 で遅い  最近傍探索 (Nearest Neighbor Search; NN) 「argmax + 内積」もよく使われます。 本発表ではこの部分は気にしません。
  7. 0.23 3.15 0.65 1.43 Search 0.20 3.25 0.72 1.68 𝒒

    ∈ ℝ𝐷 𝒙74 argmin 𝑛∈ 1,2,…,𝑁 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 𝒙𝑛 ∈ ℝ𝐷 近似最近傍探索 (Approximate NN; ANN) ➢より高速な探索 ➢答えは厳密な最近傍でなくてもいい ➢トレードオフ:速度・精度・メモリ消費 ➢色々な分野で発達:CV, NLP, DB, Web, Math, … 8
  8. 0.23 3.15 0.65 1.43 Search 0.20 3.25 0.72 1.68 𝒒

    ∈ ℝ𝐷 𝒙74 argmin 𝑛∈ 1,2,…,𝑁 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 𝒙𝑛 ∈ ℝ𝐷 近似最近傍探索 (Approximate NN; ANN) ➢より高速な探索 ➢答えは厳密な最近傍でなくてもいい ➢トレードオフ:速度・精度・メモリ消費 ➢色々な分野で発達:CV, NLP, DB, Web, Math, … 9 ➢ 今日の話題では 𝑁 < 109 ➢ 全データはメモリに載る
  9. 12 ユースケース1:マルチモーダル検索 Image are from: https://github.com/haltakov/natural-language-image-search Credit: Photos by Genton

    Damian, bruce mars, Dalal Nizam, and Richard Burlton on Unsplash CLIP Image Encoder 𝒙1 , 𝒙2 ,
  10. 13 ユースケース1:マルチモーダル検索 Image are from: https://github.com/haltakov/natural-language-image-search Credit: Photos by Genton

    Damian, bruce mars, Dalal Nizam, and Richard Burlton on Unsplash 𝒙1 , 𝒙2 , … , 𝒙𝑁 … CLIP Image Encoder
  11. 14 ユースケース1:マルチモーダル検索 Image are from: https://github.com/haltakov/natural-language-image-search Credit: Photos by Genton

    Damian, bruce mars, Dalal Nizam, and Richard Burlton on Unsplash “Two dogs playing in the snow” 0.23 3.15 0.65 1.43 Search 𝒙1 , 𝒙2 , … , 𝒙𝑁 CLIP Text Encoder … CLIP Image Encoder
  12. 15 ユースケース1:マルチモーダル検索 Image are from: https://github.com/haltakov/natural-language-image-search Credit: Photos by Genton

    Damian, bruce mars, Dalal Nizam, and Richard Burlton on Unsplash “Two dogs playing in the snow” 0.23 3.15 0.65 1.43 Search 0.20 3.25 0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 CLIP Text Encoder … CLIP Image Encoder
  13. 16 ユースケース1:マルチモーダル検索 Image are from: https://github.com/haltakov/natural-language-image-search Credit: Photos by Genton

    Damian, bruce mars, Dalal Nizam, and Richard Burlton on Unsplash “Two dogs playing in the snow” 0.23 3.15 0.65 1.43 Search 0.20 3.25 0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 CLIP Text Encoder … CLIP Image Encoder ➢ エンコーダーはシステムの精度の上限を決める ➢ 近似最近傍探索は精度・速度・メモリのトレードオフを決める
  14. 17 ユースケース2:LLM + embedding Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit:

    https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021)
  15. 18 ユースケース2:LLM + embedding Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit:

    https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) “I'm sorry, but as an AI language model, I don't have information about the future events.” Ask 
  16. 19 ユースケース2:LLM + embedding Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit:

    https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021)
  17. 20 ユースケース2:LLM + embedding Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit:

    https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … “Chinami Yoshida¥n¥n==Personal…”
  18. 21 ユースケース2:LLM + embedding 𝒙1 , Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb

    Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … “Chinami Yoshida¥n¥n==Personal…” Text Encoder
  19. 22 ユースケース2:LLM + embedding 𝒙1 , 𝒙2 , Texts are

    from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … “Chinami Yoshida¥n¥n==Personal…” Text Encoder
  20. 23 ユースケース2:LLM + embedding 𝒙1 , 𝒙2 , … ,

    𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … “Chinami Yoshida¥n¥n==Personal…” Text Encoder
  21. 24 ユースケース2:LLM + embedding 0.23 3.15 0.65 1.43 𝒙1 ,

    𝒙2 , … , 𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … Text Encoder “Chinami Yoshida¥n¥n==Personal…” Text Encoder
  22. 25 ユースケース2:LLM + embedding 0.23 3.15 0.65 1.43 0.20 3.25

    0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" ChatGPT 3.5 (trained in 2021) Search “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … Text Encoder “Chinami Yoshida¥n¥n==Personal…” Text Encoder “List of 2022 Winter Olympics medal winners…”
  23. 26 ユースケース2:LLM + embedding 0.23 3.15 0.65 1.43 0.20 3.25

    0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" Search Update “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … Text Encoder “Chinami Yoshida¥n¥n==Personal…” Text Encoder “Who won curling gold at the 2022 Winter Olympics? Use the bellow articles: List of 2022 Winter Olympics medal winners…” “List of 2022 Winter Olympics medal winners…” ChatGPT 3.5 (trained in 2021)
  24. 27 ユースケース2:LLM + embedding 0.23 3.15 0.65 1.43 0.20 3.25

    0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" “Niklas Edin, Oskar Eriksson, …” Search Update ☺ “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … Text Encoder “Chinami Yoshida¥n¥n==Personal…” Text Encoder “Who won curling gold at the 2022 Winter Olympics? Use the bellow articles: List of 2022 Winter Olympics medal winners…” “List of 2022 Winter Olympics medal winners…” ChatGPT 3.5 (trained in 2021)
  25. 28 ユースケース2:LLM + embedding 0.23 3.15 0.65 1.43 0.20 3.25

    0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" “Niklas Edin, Oskar Eriksson, …” Search Update ☺ “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … Text Encoder “Chinami Yoshida¥n¥n==Personal…” Text Encoder “Who won curling gold at the 2022 Winter Olympics? Use the bellow articles: List of 2022 Winter Olympics medal winners…” “List of 2022 Winter Olympics medal winners…” ChatGPT 3.5 (trained in 2021) Embedding+探索はLLMに知識を 追加するもっとも簡単な方法
  26. 29 ユースケース2:LLM + embedding 0.23 3.15 0.65 1.43 0.20 3.25

    0.72 1.68 argmin 𝒒 − 𝒙𝑛 2 2 Result 𝒙1 , 𝒙2 , … , 𝒙𝑁 Texts are from: https://github.com/openai/openaicookbook/blob/main/examples/Question_answering_using_embeddings.ipynb Icon credit: https://ja.wikipedia.org/wiki/ChatGPT "Who won curling gold at the 2022 Winter Olympics?" “Niklas Edin, Oskar Eriksson, …” Search Update ☺ “Damir Sharipzyanov¥n¥n=Career…” “Lviv bid for the 2022 Winter…” … Text Encoder “Chinami Yoshida¥n¥n==Personal…” Text Encoder “Who won curling gold at the 2022 Winter Olympics? Use the bellow articles: List of 2022 Winter Olympics medal winners…” “List of 2022 Winter Olympics medal winners…” ChatGPT 3.5 (trained in 2021) Embedding+探索はLLMに知識を 追加するもっとも簡単な方法 Vector DB???
  27. 30 技術を議論する際の3つのレベル Milvus Pinecone Qdrant ScaNN (4-bit PQ) [Guo+, ICML

    2020] アルゴリズム ➢ 科学技術論文 ➢ 数学の話(が多い) ➢ 多くの場合、by 研究者 ライブラリ ➢ アルゴリズムの実装 ➢ 普通、探索機能のみ ➢ By 研究者、開発者、など サービス (例: vector DB) ➢ ライブラリ + (メタデータ扱い、 サービング、スケーリング、 IO、CRUD、など) ➢ 普通、by 会社 Product Quantization + Inverted Index (PQ, IVFPQ) [Jégou+, TPAMI 2011] Hierarchical Navigable Small World (HNSW) [Malkov+, TPAMI 2019] Weaviate Vertex AI Matching Engine faiss NMSLIB hnswlib Vald ScaNN jina
  28. 31 技術を議論する際の3つのレベル Milvus Pinecone Qdrant ScaNN (4-bit PQ) [Guo+, ICML

    2020] アルゴリズム ➢ 科学技術論文 ➢ 数学の話(が多い) ➢ 多くの場合、by 研究者 ライブラリ ➢ アルゴリズムの実装 ➢ 普通、探索機能のみ ➢ By 研究者、開発者、など サービス (例: vector DB) ➢ ライブラリ + (メタデータ扱い、 サービング、スケーリング、 IO、CRUD、など) ➢ 普通、by 会社 Weaviate Vertex AI Matching Engine NMSLIB hnswlib Vald ScaNN jina 1つのライブラリは複数の アルゴを実装することもある  “faissは速い” ☺ “faissのPQは速い” Product Quantization + Inverted Index (PQ, IVFPQ) [Jégou+, TPAMI 2011] Hierarchical Navigable Small World (HNSW) [Malkov+, TPAMI 2019] faiss
  29. 32 技術を議論する際の3つのレベル Milvus Pinecone Qdrant ScaNN (4-bit PQ) [Guo+, ICML

    2020] アルゴリズム ➢ 科学技術論文 ➢ 数学の話(が多い) ➢ 多くの場合、by 研究者 ライブラリ ➢ アルゴリズムの実装 ➢ 普通、探索機能のみ ➢ By 研究者、開発者、など サービス (例: vector DB) ➢ ライブラリ + (メタデータ扱い、 サービング、スケーリング、 IO、CRUD、など) ➢ 普通、by 会社 Product Quantization + Inverted Index (PQ, IVFPQ) [Jégou+, TPAMI 2011] Weaviate Vertex AI Matching Engine Vald ScaNN jina 1つのアルゴリズムは複数のライブラリに 実装されていることがある Hierarchical Navigable Small World (HNSW) [Malkov+, TPAMI 2019] faiss NMSLIB hnswlib
  30. 33 技術を議論する際の3つのレベル Milvus Pinecone Qdrant アルゴリズム ➢ 科学技術論文 ➢ 数学の話(が多い)

    ➢ 多くの場合、by 研究者 ライブラリ ➢ アルゴリズムの実装 ➢ 普通、探索機能のみ ➢ By 研究者、開発者、など サービス (例: vector DB) ➢ ライブラリ + (メタデータ扱い、 サービング、スケーリング、 IO、CRUD、など) ➢ 普通、by 会社 Product Quantization + Inverted Index (PQ, IVFPQ) [Jégou+, TPAMI 2011] Hierarchical Navigable Small World (HNSW) [Malkov+, TPAMI 2019] Weaviate Vertex AI Matching Engine faiss NMSLIB hnswlib Vald jina 1ライブラリ=1アルゴ もよくある ScaNN (4-bit PQ) [Guo+, ICML 2020] ScaNN
  31. 34 技術を議論する際の3つのレベル Pinecone Qdrant ScaNN (4-bit PQ) [Guo+, ICML 2020]

    アルゴリズム ➢ 科学技術論文 ➢ 数学の話(が多い) ➢ 多くの場合、by 研究者 ライブラリ ➢ アルゴリズムの実装 ➢ 普通、探索機能のみ ➢ By 研究者、開発者、など サービス (例: vector DB) ➢ ライブラリ + (メタデータ扱い、 サービング、スケーリング、 IO、CRUD、など) ➢ 普通、by 会社 Product Quantization + Inverted Index (PQ, IVFPQ) [Jégou+, TPAMI 2011] Vertex AI Matching Engine NMSLIB Vald ScaNN jina 1つのサービスは複数のライブラリを 使うことがある … また、アルゴリズムを フルスクラッチすること もある (例: Goで書き直す) Hierarchical Navigable Small World (HNSW) [Malkov+, TPAMI 2019] faiss hnswlib Milvus Weaviate
  32. 35 技術を議論する際の3つのレベル Milvus Pinecone Qdrant ScaNN (4-bit PQ) [Guo+, ICML

    2020] アルゴリズム ➢ 科学技術論文 ➢ 数学の話(が多い) ➢ 多くの場合、by 研究者 ライブラリ ➢ アルゴリズムの実装 ➢ 普通、探索機能のみ ➢ By 研究者、開発者、など サービス (例: vector DB) ➢ ライブラリ + (メタデータ扱い、 サービング、スケーリング、 IO、CRUD、など) ➢ 普通、by 会社 Product Quantization + Inverted Index (PQ, IVFPQ) [Jégou+, TPAMI 2011] Hierarchical Navigable Small World (HNSW) [Malkov+, TPAMI 2019] Weaviate Vertex AI Matching Engine faiss NMSLIB hnswlib Vald ScaNN jina 今回は主にアルゴリズムを 解説します
  33. 36 𝑁 109 106 billion-scale million-scale Locality Sensitive Hashing (LSH)

    Tree / Space Partitioning Graph traversal 0.34 0.22 0.68 0.71 0 1 0 0 ID: 2 ID: 123 0.34 0.22 0.68 0.71 Space partition Data compression ➢ k-means ➢ PQ/OPQ ➢ Graph traversal ➢ etc… ➢ Raw data ➢ Scalar quantization ➢ PQ/OPQ ➢ etc… Look-up-based Hamming-based Linear-scan by Asymmetric Distance … Linear-scan by Hamming distance Inverted index + data compression For raw data: Acc. ☺, Memory:  For compressed data: Acc. , Memory: ☺
  34. 37 𝑁 109 106 billion-scale million-scale Locality Sensitive Hashing (LSH)

    Tree / Space Partitioning Graph traversal 0.34 0.22 0.68 0.71 0 1 0 0 ID: 2 ID: 123 0.34 0.22 0.68 0.71 Space partition Data compression ➢ k-means ➢ PQ/OPQ ➢ Graph traversal ➢ etc… ➢ Raw data ➢ Scalar quantization ➢ PQ/OPQ ➢ etc… Look-up-based Hamming-based Linear-scan by Asymmetric Distance … Linear-scan by Hamming distance Inverted index + data compression For raw data: Acc. ☺, Memory:  For compressed data: Acc. , Memory: ☺ 今日のトピック
  35. 38 𝑁 109 106 billion-scale million-scale Locality Sensitive Hashing (LSH)

    Tree / Space Partitioning Graph traversal 0.34 0.22 0.68 0.71 0 1 0 0 ID: 2 ID: 123 0.34 0.22 0.68 0.71 Space partition Data compression ➢ k-means ➢ PQ/OPQ ➢ Graph traversal ➢ etc… ➢ Raw data ➢ Scalar quantization ➢ PQ/OPQ ➢ etc… Look-up-based Hamming-based Linear-scan by Asymmetric Distance … Linear-scan by Hamming distance Inverted index + data compression For raw data: Acc. ☺, Memory:  For compressed data: Acc. , Memory: ☺ 松井CVPR20/MIRU2019 のチュートリを参照 ➢ https://speakerdeck.com/matsui_528/c vpr20-tutorial-billion-scale- approximate-nearest-neighbor-search ➢ https://speakerdeck.com/matsui_528/ji n-si-zui-jin-bang-tan-suo-falsezui-qian- xian 今日のトピック
  36. 39 𝑁 109 106 billion-scale million-scale Locality Sensitive Hashing (LSH)

    Tree / Space Partitioning Graph traversal 0.34 0.22 0.68 0.71 0 1 0 0 ID: 2 ID: 123 0.34 0.22 0.68 0.71 Space partition Data compression ➢ k-means ➢ PQ/OPQ ➢ Graph traversal ➢ etc… ➢ Raw data ➢ Scalar quantization ➢ PQ/OPQ ➢ etc… Look-up-based Hamming-based Linear-scan by Asymmetric Distance … Linear-scan by Hamming distance Inverted index + data compression For raw data: Acc. ☺, Memory:  For compressed data: Acc. , Memory: ☺ CVPR23チュートリのマーティン スライドを参照 松井CVPR20/MIRU2019 のチュートリを参照 ➢ https://speakerdeck.com/matsui_528/c vpr20-tutorial-billion-scale- approximate-nearest-neighbor-search ➢ https://speakerdeck.com/matsui_528/ji n-si-zui-jin-bang-tan-suo-falsezui-qian- xian 今日のトピック https://matsui528.github.io/cvpr 2023_tutorial_neural_search/ass ets/pdf/billion_scale_ann.pdf
  37. 40 ➢ 探索が活きる場面 ✓ 難しい問題を大規模だが単純な探索問題に落とし込めるとき ✓ 例:複雑な画像認識器 vs 単純kNN認識 ✓

    例:LLM + fine-tuning vs LLM + embedding ➢ 「大量データ」は世の中に案外ない ✓ 画像検索の場合、1 billion毎の意味のある画像は、実際は中々ない ✓ NLPでは1 billionの単語はありうる→相対的に探索が活きやすい?? 探索技術とNLPは相性が良い?? [Asai+, ACL 2023 Tutorial] Subset Retrieval Nearest Neighbor Machine Translation [Deguchi, Watanabe, Matsui, Utiyama, Tanaka, Sumita, ACL 2023]
  38. 41 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  39. 42 グラフ探索 ➢ データが全部メモリに載るなら、デファクトの方式 ➢ 実データに対し高速で高精度 ➢ billion級(メモリに載らない)でもやはり重要 ✓ グラフ探索アルゴリズムはbillion級探索システムの

    ビルディングブロック Images are from [Malkov+, Information Systems, 2013] ➢ クエリに向かってグラフを辿る ➢ 直感的に見えるが、結構ムズい ➢ アルゴリズムを詳細に見ます
  40. 43 グラフ探索 ➢ データが全部メモリに載るなら、デファクトの方式 ➢ 実データに対し高速で高精度 ➢ billion級(メモリに載らない)でもやはり重要 ✓ グラフ探索アルゴリズムはbillion級探索システムの

    ビルディングブロック Images are from [Malkov+, Information Systems, 2013] ➢ クエリに向かってグラフを辿る ➢ 直感的に見えるが、結構ムズい ➢ アルゴリズムを詳細に見ます 本チュートリの目的は、グラフ探索を ブラックボックスにしないこと
  41. 44 構築 Images are from [Malkov+, Information Systems, 2013] and

    [Subramanya+, NeruIPS 2019] 逐次追加アプローチ 改善アプローチ ➢ 現在のグラフに新しい 要素を逐次追加する ➢ 初期グラフを何度も改善する
  42. 45 構築 Images are from [Malkov+, Information Systems, 2013] and

    [Subramanya+, NeruIPS 2019] 逐次追加アプローチ 改善アプローチ ➢ 現在のグラフに新しい 要素を逐次追加する ➢ 初期グラフを何度も改善する
  43. 46 Images are from [Malkov+, Information Systems, 2013] 𝒙13 Graph

    of 𝒙1 , … , 𝒙90 構築:逐次追加アプローチ ➢1つのノードは、1本のデータベースベクトル
  44. 47 𝒙13 𝒙91 Graph of 𝒙1 , … , 𝒙90

    Images are from [Malkov+, Information Systems, 2013] 構築:逐次追加アプローチ ➢1つのノードは、1本のデータベースベクトル ➢新しいベクトルに対し、
  45. 48 𝒙13 𝒙91 Graph of 𝒙1 , … , 𝒙90

    Images are from [Malkov+, Information Systems, 2013] 構築:逐次追加アプローチ ➢1つのノードは、1本のデータベースベクトル ➢新しいベクトルに対し、近傍ノードにエッジを張る
  46. 49 𝒙13 𝒙91 Graph of 𝒙1 , … , 𝒙90

    Images are from [Malkov+, Information Systems, 2013] 構築:逐次追加アプローチ ➢1つのノードは、1本のデータベースベクトル ➢新しいベクトルに対し、近傍ノードにエッジを張る
  47. 構築:逐次追加アプローチ 50 ➢1つのノードは、1本のデータベースベクトル ➢新しいベクトルに対し、近傍ノードにエッジを張る 𝒙13 𝒙91 Graph of 𝒙1 ,

    … , 𝒙90 Images are from [Malkov+, Information Systems, 2013] ➢ たくさんエッジを持つノードがあれば、エッジを削る ➢ 様々な戦略がある(例:RNG-pruning)
  48. 51 構築 Images are from [Malkov+, Information Systems, 2013] and

    [Subramanya+, NeruIPS 2019] 逐次追加アプローチ 改善アプローチ ➢ 現在のグラフに新しい 要素を逐次追加する ➢ 初期グラフを何度も改善する
  49. 53 構築:改善アプローチ Images are from [Subramanya+, NeruIPS 2019] ➢ まず初期グラフを作る(例:ランダムグラフや近似kNNグラフ)

    ➢ それを何度も改善する(エッジを消したり足したり) ➢ ある程度疎である必要アリ(密すぎると遅い) ➢ ショートカットのために、たまに「長い」エッジがあると良い
  50. 54 探索 Images are from [Malkov+, Information Systems, 2013] A

    B C D E F G H I J K L N M ➢ クエリが来る Candidates (size = 3) Close to the query 説明のため、ノードに アルファベットを振りました
  51. 55 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query 探索 ➢ クエリが来る ➢ エントリポイント(例: )から始める。 M
  52. 56 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M ➢ クエリが来る ➢ エントリポイント(例: )から始める。qまでの距離を記録 Candidates (size = 3) Close to the query M M 23.1 探索
  53. 57 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query 23.1 M 探索
  54. 58 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query M 23.1 探索 1st iteration
  55. 59 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query M 23.1 Best Best 探索 ➢ 未チェックの最良候補を選ぶ( ) M
  56. 60 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query M 23.1 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! M
  57. 61 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query 23.1 Best Best M check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す M
  58. 62 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query 23.1 Best N M check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 M
  59. 63 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query Best N J 11.1 N 15.3 K 19.4 M 23.1 check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 M
  60. 64 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query Best N J 11.1 N 15.3 K 19.4 M 23.1 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 M
  61. 65 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query Best N J 11.1 N 15.3 K 19.4 M 23.1 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) M
  62. 66 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query Best ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) N M J 11.1 N 15.3 K 19.4 探索
  63. 67 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N J 11.1 N 15.3 K 19.4 探索
  64. 68 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N J 11.1 N 15.3 K 19.4 探索 2nd iteration
  65. 69 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N J 11.1 N 15.3 K 19.4 Best Best 探索 ➢ 未チェックの最良候補を選ぶ( ) J
  66. 70 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N J 11.1 N 15.3 K 19.4 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! J
  67. 71 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N J 11.1 N 15.3 K 19.4 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す J
  68. 72 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N J 11.1 N 15.3 K 19.4 Best 13.2 9.7 check! Already visited 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 J
  69. 73 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N Best 13.2 9.7 J 11.1 N 15.3 B 2.3 G 3.5 I 9.7 F 10.2 L 13.2 check! Already visited 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 J
  70. 74 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N Best J 11.1 N 15.3 B 2.3 G 3.5 I 9.7 F 10.2 L 13.2 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 J
  71. 75 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N Best J 11.1 N 15.3 B 2.3 G 3.5 I 9.7 F 10.2 L 13.2 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) J
  72. 76 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N Best B 2.3 G 3.5 I 9.7 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) J
  73. 77 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N B 2.3 G 3.5 I 9.7 探索
  74. 78 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N B 2.3 G 3.5 I 9.7 探索 3rd iteration
  75. 79 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N B 2.3 G 3.5 I 9.7 Best Best 探索 ➢ 未チェックの最良候補を選ぶ( ) B
  76. 80 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N B 2.3 G 3.5 I 9.7 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! B
  77. 81 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N B 2.3 G 3.5 I 9.7 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す B
  78. 82 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N B 2.3 G 3.5 I 9.7 Best 0.5 2.1 check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 B
  79. 83 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N Best 0.5 2.1 C 0.5 D 2.1 A 3.6 B 2.3 G 3.5 I 9.7 check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 B
  80. 84 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 A 3.6 B 2.3 G 3.5 I 9.7 Best 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 B
  81. 85 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 A 3.6 B 2.3 G 3.5 I 9.7 Best 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) B
  82. 86 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) B
  83. 87 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 探索
  84. 88 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 探索 4th iteration
  85. 89 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best Best 探索 ➢ 未チェックの最良候補を選ぶ( ) C
  86. 90 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! C
  87. 91 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す C
  88. 92 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best check! Already visited Already visited Already visited Already visited 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 C
  89. 93 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) C
  90. 94 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 探索
  91. 95 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 探索 5th iteration
  92. 96 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best Best 探索 ➢ 未チェックの最良候補を選ぶ( ) D
  93. 97 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! D
  94. 98 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best Best check! 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す D
  95. 99 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best check! Already visited Already visited 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 D
  96. 100 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best check! Already visited Already visited H 3.9 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 D
  97. 101 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best H 3.9 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 D
  98. 102 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best H 3.9 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) D
  99. 103 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 Best 探索 ➢ 未チェックの最良候補を選ぶ( ) チェック! ➢ 隣接点を探す ➢ qへの距離を記録 ➢ 候補を調整 (size=3) D
  100. 104 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 ➢ 全候補はチェック済み。終わり。 ➢ ここでは がクエリ( )に一番近い C 探索
  101. 105 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 ➢ 全候補はチェック済み。終わり。 ➢ ここでは がクエリ( )に一番近い C 探索 最終出力1:候補集合 ➢ ここからtopkを選択
  102. 106 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 ➢ 全候補はチェック済み。終わり。 ➢ ここでは がクエリ( )に一番近い C 探索 最終出力1:候補集合 ➢ ここからtopkを選択 最終出力2:チェックノード ➢ つまり、探索経路
  103. 107 Images are from [Malkov+, Information Systems, 2013] A B

    C D E F G H I J K L N M Candidates (size = 3) Close to the query N C 0.5 D 2.1 B 2.3 ➢ 全候補はチェック済み。終わり。 ➢ ここでは がクエリ( )に一番近い C 探索 最終出力1:候補集合 ➢ ここからtopkを選択 最終出力2:チェックノード ➢ つまり、探索経路 最終出力3:訪問フラグ ➢ それぞれのノードに対し、 訪れたかどうか
  104. 108 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  105. 109 基本的特性:速度 ➢ アイテム比較は𝑂 𝐷 ➢ 全体の計算量 ~ #item_comparison ∼

    length_of_search_path * average_outdegree 𝒒 ∈ ℝ𝐷 𝒙13 ∈ ℝ𝐷 start query start query start query 1st path 2nd path 3rd path 2.1 1.9 outdegree = 1 outdegree = 2 outdegree = 2 #item_comparison = 3 * (1 + 2 + 2)/3 = 5 2.4
  106. 110 基本的特性:速度 ➢ アイテム比較は𝑂 𝐷 ➢ 全体の計算量 ~ #item_comparison ∼

    length_of_search_path * average_outdegree 𝒒 ∈ ℝ𝐷 𝒙13 ∈ ℝ𝐷 start query start query start query 1st path 2nd path 3rd path 2.1 1.9 outdegree = 1 outdegree = 2 outdegree = 2 #item_comparison = 3 * (1 + 2 + 2)/3 = 5 2.4 探索を高速化するには、、、 (1) 探索経路を短くする? ➢ 例:たまに長いエッジ(ショートカット) ➢ 例:階層構造 (2) グラフを疎にする? ➢ 例:冗長エッジを削る
  107. 111 A D C B query 基本的特性:候補サイズ E start Candidates

    (size = 1) C A D C B query E start Candidates (size = 3) C D E size = 1: Greedy search size > 1: Beam search ➢ 候補サイズが大きい➡精度良いが遅い ➢ トレードオフを担うオンラインパラメータ ➢ HNSWでは“ef”と呼ばれる 速いが、局所解 遅いが、より良い解
  108. 113 疑似コード ➢ 全ての論文が全然違う疑似コードを載せている ➢ 原則は同じだが詳細が異なる ➢ ヒント:データ構造を明示するかどうか NSG [Cong+,

    VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] NSG [Cong+, VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] 配列を明示的にソート 候補は集合で保持 候補はヒープで保持。 自動的にソート 候補は配列で保持 ソートの際「closest L points」と表現
  109. 114 疑似コード ➢ 全ての論文が全然違う疑似コードを載せている ➢ 原則は同じだが詳細が異なる ➢ ヒント:データ構造を明示するかどうか NSG [Cong+,

    VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] NSG [Cong+, VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] 単に“check” チェック済みアイテムは集合で管理 (この“visit”は我々のノテーションでは”check”)
  110. 115 疑似コード ➢ 全ての論文が全然違う疑似コードを載せている ➢ 原則は同じだが詳細が異なる ➢ ヒント:データ構造を明示するかどうか NSG [Cong+,

    VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] 訪問済みアイテムは単に”visited” 隠れデータ構造(配列)で管理 訪問済みアイテムは 集合で管理
  111. 117 疑似コード ➢ 全ての論文が全然違う疑似コードを載せている ➢ 原則は同じだが詳細が異なる ➢ ヒント:データ構造を明示するかどうか NSG [Cong+,

    VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] 今回のトークではこのNSGを元に少し修正したものを紹介: ➢ 候補は自動ソート配列で管理 ➢ 終了条件は「全候補がチェックされたら」
  112. 118 疑似コード ➢ 全ての論文が全然違う疑似コードを載せている ➢ 原則は同じだが詳細が異なる ➢ ヒント:データ構造を明示するかどうか NSG [Cong+,

    VLDB 19] DiskANN [Subramanya+, NeurIPS 19] Learning to route [Baranchuk+, ICML 19] フォーマルな(?)定義が出来ればみんな嬉しい
  113. 119 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  114. 120 基本グラフ Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ 多くのグラフ手法があるが、基本となる4つのグラフがある ➢ これらの基本グラフは(1)構築に時間がかかり、(2) 密であることが多い ➢ 各手法は、どれかの基本グラフを発展させたものであることが多い
  115. 121 基本グラフ Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ 多くのグラフ手法があるが、基本となる4つのグラフがある ➢ これらの基本グラフは(1)構築に時間がかかり、(2) 密であることが多い ➢ 各手法は、どれかの基本グラフを発展させたものであることが多い 原則: ➢ 密すぎない:密グラフは探索遅い ➢ しかし適度に密:各点は到達可能
  116. 122 基本グラフ Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ 多くのグラフ手法があるが、基本となる4つのグラフがある ➢ これらの基本グラフは(1)構築に時間がかかり、(2) 密であることが多い ➢ 各手法は、どれかの基本グラフを発展させたものであることが多い 原則: ➢ 密すぎない:密グラフは探索遅い ➢ しかし適度に密:各点は到達可能 有名なドロネーグラフ ☺ 必ず正解にたどり着く  𝐷が大きいとほとんど全結合グラフ
  117. 123 基本グラフ Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ 多くのグラフ手法があるが、基本となる4つのグラフがある ➢ これらの基本グラフは(1)構築に時間がかかり、(2) 密であることが多い ➢ 各手法は、どれかの基本グラフを発展させたものであることが多い 原則: ➢ 密すぎない:密グラフは探索遅い ➢ しかし適度に密:各点は到達可能 相対近傍グラフ(Relative Neighborhood Graph; RNG) [Toussaint, PR 80] ➢ 定義:𝑥 と 𝑦 間にエッジがあるとき、「lune」の間に点が無い ➢ 冗長なエッジを削れる ➢ 一般に有名ではないが、ANNではよく使われる ➢ あとで振り返ります
  118. 124 基本グラフ Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ 多くのグラフ手法があるが、基本となる4つのグラフがある ➢ これらの基本グラフは(1)構築に時間がかかり、(2) 密であることが多い ➢ 各手法は、どれかの基本グラフを発展させたものであることが多い 原則: ➢ 密すぎない:密グラフは探索遅い ➢ しかし適度に密:各点は到達可能 K近傍グラフ ☺ 近傍点の数を制限できる(最大K)なのでグラフを疎にできる  各点に到達可能かわからない
  119. 125 基本グラフ Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ 多くのグラフ手法があるが、基本となる4つのグラフがある ➢ これらの基本グラフは(1)構築に時間がかかり、(2) 密であることが多い ➢ 各手法は、どれかの基本グラフを発展させたものであることが多い 原則: ➢ 密すぎない:密グラフは探索遅い ➢ しかし適度に密:各点は到達可能 最小全域木(Minimum Spanning Tree; MST) ☺ グローバルな接続性が確保。かつ次数も小さい  ショートカット無し
  120. 126 グラフ探索方式 Images are from an excellent survey paper [Wang+,

    VLDB 2021] ➢ めちゃくちゃたくさんある ➢ 基本的な構造:良いグラフを設計 + ビームサーチ(先ほど述べたアルゴ)
  121. 127 開始点は重要 Start here? Start here? v.s. ➢ 良い開始点から始める ➡

    経路が短い ➡ 高速な探索 ➢ 良い開始点を見つけることそのものもANN ➢ 小さいANN問題を解く:by tree [NST; Iwasaki+, arXiv 18], hash [Effana; Fu+, arXiv 16] or LSH [LGTM; Arai+, DEXA 21]
  122. 128 エッジ選択:RNG-pruning A Aを追加する際、 どうエッジを張る? A All neighbors? ➢ エッジ多すぎ

    ➢ 探索遅くなる A Top-K? ➢ 到達できない ➢ 精度低い A   ☺ たぶんこいつら はつながってる なのでこの枝は なくてもヨシ RNG-pruning: 良い感じ のエッジ
  123. 132 C B D A E エッジ選択:RNG-pruning Aの最近傍 ➢ Aの全ての近傍点について、

    と を比べる ➢ もし が一番短ければ、エッジを張る
  124. 133 C B D A ➢ Aの全ての近傍点について、 と を比べる ➢

    もし が一番短ければ、エッジを張る 今回は近傍点が無い。なのでエッジを張る E エッジ選択:RNG-pruning Aの最近傍
  125. 136 C B D A done E エッジ選択:RNG-pruning Aの第二近傍 ➢

    Aの全ての近傍点について、 と を比べる ➢ もし が一番短ければ、エッジを張る
  126. 137 C B D A done エッジ選択:RNG-pruning 一番短い!エッジ張らない E Aの第二近傍

    ➢ Aの全ての近傍点について、 と を比べる ➢ もし が一番短ければ、エッジを張る
  127. 140 C B D A done done エッジ選択:RNG-pruning E Aの第三近傍

    ➢ Aの全ての近傍点について、 と を比べる ➢ もし が一番短ければ、エッジを張る
  128. 141 C B D A done done エッジ選択:RNG-pruning 一番短い!エッジ張る E

    Aの第三近傍 ➢ Aの全ての近傍点について、 と を比べる ➢ もし が一番短ければ、エッジを張る
  129. 144 C B D A done done done E エッジ選択:RNG-pruning

    Aの第四近傍 ➢ Aの全ての近傍点について、 と を比べる ➢ もし が一番短ければ、エッジを張る
  130. 145 C B D A done done done E エッジ選択:RNG-pruning

    Aの第四近傍 一番短い!エッジ張らない ➢ Aの全ての近傍点について、 と を比べる ➢ もし が一番短ければ、エッジを張る
  131. 146 C B D A done done done E done

    エッジ選択:RNG-pruning
  132. 147 C B D A done done done E done

    ➢ RNG-pruningは効果的なエッジ削減法。 色々な方式で広く使われる Pros: 実装が簡単 Cons: 距離計算が多いので時間はかかる エッジ選択:RNG-pruning
  133. 148 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  134. 149 Hierarchical Navigable Small World; HNSW [Malkov and Yashunin, TPAMI,

    2019] ➢ グラフを階層的に作る [Malkov and Yashunin, TPAMI, 2019] ➢ RNG-pruningにより、#edge per nodeを固定する ➢ 最も有名。実データにとても強い 疎なグラフで探索 より密なグラフの同じ点に移動 繰り返す
  135. 150 ➢ 多くのサービスの標準的ANNアルゴリズム ✓ milvus, weaviate, qdrant, vearch, elasticsearch, OpenSearch,

    vespa, redis, Lucene… ➢ 有名な3つの実装 ✓ NMSLIB (オリジナル) ✓ hnswlib (NMSLIBから必要部分を取り出した軽量実装) ✓ Faiss (faissチームによる再実装) Hierarchical Navigable Small World; HNSW [NMSLIB] https://github.com/nmslib/nmslib [hnswlib] https://github.com/nmslib/hnswlib [Faiss] https://github.com/facebookresearch/faiss/blob/main/faiss/IndexHNSW.h
  136. 151 https://www.facebook.com/groups/faissusers/posts/917143142043306/?comment_id=917533385337615&reply_comment_id=920542105036743 Any implementation difference between NMSLIB, hnswlib, and faiss-hnsw?

    My view on the implementation differences (I might forgot something): 1) nmslib’s HNSW requires internal index conversion step (from nmslib’s format to an internal one) to have good performance, and after the conversion the index cannot be updated with new elements. nmslib also has a simple "graph diversification" postprocessing after building the index (controlled by the "post" parameter) and sophisticated queue optimizations which makes it a bit faster compared to other implementations. Another advantage of nmslib is out-of-the box support for large collection of distance functions, including some exotic distances. 2) hnswlib is a header-only C++ library reimplementation of nmslib's hnsw. It does not have the index conversion step, thus - the Pros (compared to nmslib): much more memory efficient and faster at build time. It also supports index insertions, element updates (with incremental graph rewiring - added recently) and fake deletions (mark elements as deleted to avoid returning them during the graph traversal). Cons (compared to nnmslib): It is a tad slower than nmslib due to lack of graph postprocessing and queue optimization; out-of-the box version supports only 3 distance functions, compared to many distance functions in nmslib. Overall, I've tried to keep hnswlib as close as possible to a distributed index (hence no index postprocessing). 3) Faiss hnsw is a different reimplementation. It has its own algorithmic features, like having the first elements in the upper layers on the structure (opposed to random in other implementations). It is a bit more memory efficient compared to hnswlib with raw vectors and optimized for batch processing. Due to the latter it is noticeably slower at single query processing (opposed to nmslib or hnswlib) and generally a bit slower for batch queries (the last time I’ve tested, but there were exceptions). The implementation also supports incremental insertions (also preferably batched), quantized data and two-level encoding, which makes it much less memory hungry and the overall best when memory is a big concern. Yury Malkov (HNSW論文の 著者) Faisbook上のFaiss User Forumでの議論 注意:この議論は2020のものなので、現在のライブラリと異なるかもです
  137. 152 ➢ HNSW詳細については多数の技術ブログあり https://www.pinecone.io/learn/hnsw/ James Briggs, PINECONE, Faiss: The Missing

    Manual, 6. Hierarchical Navigable Small Worlds (HNSW) Hierarchical Navigable Small World; HNSW https://zilliz.com/blog/hierarchical- navigable-small-worlds-HNSW Frank Liu, zilliz, Vector Database 101, Hierarchical Navigable Small Worlds (HNSW) https://towardsdatascience.com /ivfpq-hnsw-for-billion-scale- similarity-search-89ff2f89d90e Peggy Chang, IVFPQ + HNSW for Billion-scale Similarity Search
  138. 153 Navigating Spreading-out Graph (NSG) ➢ Monotonic RNG ➢ 「HNSWより少し精度良い」ことが多々ある

    ➢ AlibabaのTaobaoで使われてるらしい RNG Monotonic RNG ➢ RNGの定義は“lune中に点ナシ” ➢ “p -> q”の経路は長い  Monotonic RNGはより 多くのエッジを張れる [Fu+, VLDB 19] Images are from [Fu+, VLDB 19]
  139. 154 Navigating Spreading-out Graph (NSG) ➢ オリジナル実装: ➢ Faissにも実装がある ➢

    もしfaiss-hnswを使っていて ✓ もう少し精度が欲しいが別ライブラリ使いたくない ✓ faissのhnswと同じインタフェースがいい ✓ …という場合、試す価値アリ https://github.com/ZJULearning/nsg IndexHNSWFlat(int d, int M, MetricType metric) IndexNSGFlat(int d, int R, MetricType metric) [Fu+, VLDB 19]
  140. 155 Neighborhood Graph and Tree (NGT) ➢ 構築時に範囲探索を使う ➢ 開始点をVP-treeで求める

    ➢ 現在ann-benchmarksでベスト方式は NGTベースのもの ➢ 量子化もサポート ➢ Repository: ➢ Yahoo Japanが開発 ➢ Valdに使われている [Iwasaki+, arXiv 18] Image are from the original repository https://github.com/yahoojapan/NGT
  141. 156 DiskANN (Vamana) ➢ Vamana: グラフを用いた探索手法名 ➢ DiskANN: Vamanaを用いたDisk-friendlyな探索システム ➢

    MSR Indiaより ➢ 巨大データでは試す価値アリ(このチュートリのフォーカスではないですが) ➢ 同じチーが活発に開発中(特殊機能持ち探索方式) ✓ Data update: FreshDiskANN [Singh+, arXiv 21] ✓ Filter: Filtered-DiskANN [Gollapudi+, WWW 23] [Subramanya+, NeurIPS 19] https://github.com/microsoft/DiskANN
  142. 157 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論
  143. 158 ただの探索?Vector DB? ➢ Vector DBの会社は「Vector DBはイケてる!」と言ってます ➢ 自分の考え: ➢

    どのvector DB? ➡ まだ結論無し(みんな戦っている) ➢ クリーン軽量APIが良いなら、Jina AIのdocarrayおよびvectordb もいいかも(CVPR23チュートリのHanのトーク参照) ✓ https://weaviate.io/blog/vector-library-vs-vector-database ✓ https://codelabs.milvus.io/vector-database-101-what-is-a-vector-database/index#2 ✓ https://zilliz.com/learn/what-is-vector-database 一番単純なnumpy only探索を試す 遅い? HNSW in faissのような 速いANNを試す Try Vector DB 速度のみが問題であれば、 単にライブラリを使えばいい https://matsui528.github.io/cvpr2023_tutorial_neural_search/assets/pdf/CVPR2023%20Tutorial_%20Neural%20Search%20i n%20Action%20-%20Representing,%20transiting%20&%20searching%20multimodal%20data,%20Han%20Xiao.pdf
  144. 159 有用リソース ➢ Vector DB会社は有用ブログシリーズを多数執筆 ➢ Pinecone Blog ✓ https://www.pinecone.io/learn/

    ➢ Weaviate Blog ✓ https://weaviate.io/blog ➢ Jina AI Blog ✓ https://jina.ai/news/ ➢ Zilliz Blog ✓ https://zilliz.com/blog ➢ Romain Beaumont Blog ✓ https://rom1504.medium.com/
  145. 160 過去3年の進展 ➢ 以前CVPR 2020でチュートリアルをしてから3年たった ➢ この3年でANN分野はどう進展したか? Y. Matasui, “Billion-scale

    Approximate Nearest Neighbor Search”, CVPR 2020 Tutorial ➢ Slide: https://speakerdeck.com/matsui_528/cvpr20-tutorial-billion-scale- approximate-nearest-neighbor-search ➢ Video: https://youtu.be/SKrHs03i08Q
  146. 161 過去3年の進展 ➢ 以前CVPR 2020でチュートリアルをしてから3年たった ➢ この3年でANN分野はどう進展したか? Y. Matasui, “Billion-scale

    Approximate Nearest Neighbor Search”, CVPR 2020 Tutorial ➢ Slide: https://speakerdeck.com/matsui_528/cvpr20-tutorial-billion-scale- approximate-nearest-neighbor-search ➢ Video: https://youtu.be/SKrHs03i08Q ➢ 基本技術は同じ(HNSWとIVFPQ!) ➢ HNSWは今でもデファクト(多くの論文がHNSWを超 えたと主張しているにもかかわらず) ➢ ディスクまで考慮する話が増えている印象 ➢ LLM応用のためVector DBがなぜか急に大注目 ➢ LLMを考えると次元Dは~1000ぐらい(~100ではなく) ➢ GPU-ANNは強いが、思ったより広まっていない。LLM 応用などではやはりCPUでやりたい ➢ コンペ開催 (SISAP、bigann-benchmarks 2021、2023) ➢ 新しいbillion-scale datasets ➢ アルゴ的にはちょっと落ち着いた印象がある。グラフ 探索を超えたブレイクスルー方式が待たれる・・!?
  147. 162 過去3年の進展 ➢ 以前CVPR 2020でチュートリアルをしてから3年たった ➢ この3年でANN分野はどう進展したか? Y. Matasui, “Billion-scale

    Approximate Nearest Neighbor Search”, CVPR 2020 Tutorial ➢ Slide: https://speakerdeck.com/matsui_528/cvpr20-tutorial-billion-scale- approximate-nearest-neighbor-search ➢ Video: https://youtu.be/SKrHs03i08Q ➢ 基本技術は同じ(HNSWとIVFPQ!) ➢ HNSWは今でもデファクト(多くの論文がHNSWを超 えたと主張しているにもかかわらず) ➢ ディスクまで考慮する話が増えている印象 ➢ LLM応用のためVector DBがなぜか急に大注目 ➢ LLMを考えると次元Dは~1000ぐらい(~100ではなく) ➢ GPU-ANNは強いが、思ったより広まっていない。LLM 応用などではやはりCPUでやりたい ➢ コンペ開催 (SISAP、bigann-benchmarks 2021、2023) ➢ 新しいbillion-scale datasets ➢ アルゴ的にはちょっと落ち着いた印象がある。グラフ 探索を超えたブレイクスルー方式が待たれる・・!? ➢ SISAPコンペのいくつかのタスクで2位獲得 ➢ 近くレポート公開 Team UTokyo: Yutaro Oguri & Yusuke Matsui
  148. 163 ◼ [Jégou+, TPAMI 2011] H. Jégou+, “Product Quantization for

    Nearest Neighbor Search”, IEEE TPAMI 2011 ◼ [Guo+, ICML 2020] R. Guo+, “Accelerating Large-Scale Inference with Anisotropic Vector Quantization”, ICML 2020 ◼ [Malkov+, TPAMI 2019] Y. Malkov+, “Efficient and Robust Approximate Nearest Neighbor search using Hierarchical Navigable Small World Graphs,” IEEE TPAMI 2019 ◼ [Malkov+, IS 13] Y, Malkov+, “Approximate Nearest Neighbor Algorithm based on Navigable Small World Graphs”, Information Systems 2013 ◼ [Fu+, VLDB 19] C. Fu+, “Fast Approximate Nearest Neighbor Search With The Navigating Spreading-out Graphs”, 2019 ◼ [Subramanya+, NeurIPS 19] S. J. Subramanya+, “DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node”, NeurIPS 2019 ◼ [Baranchuk+, ICML 19] D. Baranchuk+, “Learning to Route in Similarity Graphs” ◼ [Wang+, VLDB 21] M. Wang+, “A Comprehensive Survey and Experimental Comparison of Graph-Based Approximate Nearest Neighbor Search”, VLDB 2021 ◼ [Toussaint, PR 80] G. T. Toussaint, “The Relative Neighbouhood Graph of A Finite Planar Set”, Pattern Recognition 1980 ◼ [Fu+, arXiv 16] C. Fu and D. Cai, “Efanna: An Extremely Fast Approximate Nearest Neighbor Search Algorithm based on knn Graph”, arXiv 2016 ◼ [Arai+, DEXA 21] Y. Arai+, “LGTM: A Fast and Accurate kNN Search Algorithm in High-Dimensional Spaces”, DEXA 2021 ◼ [Iwasaki+, arXiv 18] M. Iwasaki and D. Miyazaki, “Optimization if Indexing Based on k-Nearest Neighbor Graph for Proximity Search in High-dimensional Data”, arXiv 2018 ◼ [Singh+, arXiv 21] A. Singh+, “FreshDiskANN: A Fast and Accurate Graph-Based ANN Index for Streaming Similarity Search”, arXiv 2021 ◼ [Gollapudi+, WWW 23] S. Gollapudi+, “Filtered-DiskANN: Graph Algorithms for Approximate Nearest Neighbor Search with Filters”, WWW 2023 Reference
  149. 164 Reference ◼ [Pinecone] https://www.pinecone.io/ ◼ [Milvus] https://milvus.io/ ◼ [Qdrant]

    https://qdrant.tech/ ◼ [Weaviate] https://weaviate.io/ ◼ [Vertex AI Matching Engine] https://cloud.google.com/vertex-ai/docs/matching-engine ◼ [Vald] https://vald.vdaas.org/ ◼ [Vearch] https://vearch.github.io/ ◼ [Elasticsearch] https://www.elastic.co/jp/blog/introducing-approximate-nearest-neighbor-search-in-elasticsearch-8-0 ◼ [OpenSearch] https://opensearch.org/docs/latest/search-plugins/knn/approximate-knn/ ◼ [Vespa] https://vespa.ai/ ◼ [Redis] https://redis.com/solutions/use-cases/vector-database/ ◼ [Lucene] https://lucene.apache.org/core/9_1_0/core/org/apache/lucene/util/hnsw/HnswGraphSearcher.html ◼ [SISAP] SISAP 2023 Indexing Challenge https://sisap-challenges.github.io/ ◼ [Bigann-benchmarks] Billion-Scale Approximate Nearest Neighbor Search Challenge: NeurIPS'21 competition track https://big-ann-benchmarks.com/
  150. 165 ➢ 背景 ➢ グラフを用いた近似最近傍探索 ✓ 基本 (構築と探索) ✓ 基本的特性

    ✓ 特徴的な性質 ➢ 代表的手法 ✓ HNSW, NSG, NGT, Vamana ➢ 議論 謝辞 ➢ フィードバックを頂いた天方大地先生、小野直樹君、金海智大君に感謝を申し上げます。 ➢ 本研究はJST AIP加速課題JPMJCR23U2の支援を受けたものです。