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. 1
    グラフを用いた近似最近傍探索の
    理論と応用
    松井勇佑
    東京大学
    YANS第18回シンポジウム チュートリアル 2023/8/30

    View Slide

  2. 2
    松井勇佑
    ✓ コンピュータビジョン
    ✓ 大規模探索
    http://yusukematsui.me
    東京大学 情報理工学系研究科 講師
    @utokyo_bunny
    ARM 4-bit PQ [Matsui+, ICASSP 22] Relative NN-Descent
    [Ono & Matsui, ACMMM 23]
    @matsui528

    View Slide

  3. 本日の発表
    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に関する内容

    View Slide

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

    View Slide

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

    View Slide

  6. Search 𝒙1
    , 𝒙2
    , … , 𝒙𝑁
    𝒙𝑛
    ∈ ℝ𝐷
    6
    ➢𝑁 本の𝐷次元データベースベクトル: 𝒙𝑛 𝑛=1
    𝑁
    最近傍探索 (Nearest Neighbor Search; NN)

    View Slide

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

    View Slide

  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, …
    8

    View Slide

  9. 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
    ➢ 全データはメモリに載る

    View Slide

  10. 10
    ユースケース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

    View Slide

  11. 11
    ユースケース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

    View Slide

  12. 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
    ,

    View Slide

  13. 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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
    ➢ エンコーダーはシステムの精度の上限を決める
    ➢ 近似最近傍探索は精度・速度・メモリのトレードオフを決める

    View Slide

  17. 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)

    View Slide

  18. 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

    View Slide

  19. 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)

    View Slide

  20. 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…”

    View Slide

  21. 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

    View Slide

  22. 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

    View Slide

  23. 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

    View Slide

  24. 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

    View Slide

  25. 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…”

    View Slide

  26. 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)

    View Slide

  27. 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)

    View Slide

  28. 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に知識を
    追加するもっとも簡単な方法

    View Slide

  29. 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???

    View Slide

  30. 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

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

  33. 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

    View Slide

  34. 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

    View Slide

  35. 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
    今回は主にアルゴリズムを
    解説します

    View Slide

  36. 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: ☺

    View Slide

  37. 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: ☺
    今日のトピック

    View Slide

  38. 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
    今日のトピック

    View Slide

  39. 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

    View Slide

  40. 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]

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  50. 構築:逐次追加アプローチ
    50
    ➢1つのノードは、1本のデータベースベクトル
    ➢新しいベクトルに対し、近傍ノードにエッジを張る
    𝒙13
    𝒙91
    Graph of
    𝒙1
    , … , 𝒙90
    Images are from [Malkov+, Information Systems, 2013]
    ➢ たくさんエッジを持つノードがあれば、エッジを削る
    ➢ 様々な戦略がある(例:RNG-pruning)

    View Slide

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

    View Slide

  52. 52
    Images are from [Subramanya+, NeruIPS 2019]
    構築:改善アプローチ
    ➢ まず初期グラフを作る(例:ランダムグラフや近似kNNグラフ)
    ➢ それを何度も改善する(エッジを消したり足したり)

    View Slide

  53. 53
    構築:改善アプローチ Images are from [Subramanya+, NeruIPS 2019]
    ➢ まず初期グラフを作る(例:ランダムグラフや近似kNNグラフ)
    ➢ それを何度も改善する(エッジを消したり足したり)
    ➢ ある程度疎である必要アリ(密すぎると遅い)
    ➢ ショートカットのために、たまに「長い」エッジがあると良い

    View Slide

  54. 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
    説明のため、ノードに
    アルファベットを振りました

    View Slide

  55. 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

    View Slide

  56. 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
    探索

    View Slide

  57. 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
    探索

    View Slide

  58. 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

    View Slide

  59. 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

    View Slide

  60. 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

    View Slide

  61. 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

    View Slide

  62. 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

    View Slide

  63. 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

    View Slide

  64. 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

    View Slide

  65. 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

    View Slide

  66. 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
    探索

    View Slide

  67. 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
    探索

    View Slide

  68. 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

    View Slide

  69. 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

    View Slide

  70. 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

    View Slide

  71. 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

    View Slide

  72. 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

    View Slide

  73. 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

    View Slide

  74. 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

    View Slide

  75. 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

    View Slide

  76. 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

    View Slide

  77. 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
    探索

    View Slide

  78. 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

    View Slide

  79. 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

    View Slide

  80. 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

    View Slide

  81. 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

    View Slide

  82. 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

    View Slide

  83. 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

    View Slide

  84. 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

    View Slide

  85. 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

    View Slide

  86. 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

    View Slide

  87. 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
    探索

    View Slide

  88. 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

    View Slide

  89. 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

    View Slide

  90. 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

    View Slide

  91. 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

    View Slide

  92. 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

    View Slide

  93. 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

    View Slide

  94. 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
    探索

    View Slide

  95. 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

    View Slide

  96. 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

    View Slide

  97. 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

    View Slide

  98. 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

    View Slide

  99. 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

    View Slide

  100. 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

    View Slide

  101. 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

    View Slide

  102. 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

    View Slide

  103. 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

    View Slide

  104. 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
    探索

    View Slide

  105. 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を選択

    View Slide

  106. 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:チェックノード
    ➢ つまり、探索経路

    View Slide

  107. 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:訪問フラグ
    ➢ それぞれのノードに対し、
    訪れたかどうか

    View Slide

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

    View Slide

  109. 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

    View Slide

  110. 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) グラフを疎にする?
    ➢ 例:冗長エッジを削る

    View Slide

  111. 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”と呼ばれる
    速いが、局所解
    遅いが、より良い解

    View Slide

  112. 112
    疑似コード
    ➢ 全ての論文が全然違う疑似コードを載せている
    ➢ 原則は同じだが詳細が異なる
    ➢ ヒント:データ構造を明示するかどうか
    NSG [Cong+, VLDB 19]
    DiskANN [Subramanya+, NeurIPS 19]
    Learning to route [Baranchuk+, ICML 19]

    View Slide

  113. 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」と表現

    View Slide

  114. 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”)

    View Slide

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

    View Slide

  116. 116
    疑似コード
    ➢ 全ての論文が全然違う疑似コードを載せている
    ➢ 原則は同じだが詳細が異なる
    ➢ ヒント:データ構造を明示するかどうか
    NSG [Cong+, VLDB 19]
    DiskANN [Subramanya+, NeurIPS 19]
    Learning to route [Baranchuk+, ICML 19]
    終了条件???

    View Slide

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

    View Slide

  118. 118
    疑似コード
    ➢ 全ての論文が全然違う疑似コードを載せている
    ➢ 原則は同じだが詳細が異なる
    ➢ ヒント:データ構造を明示するかどうか
    NSG [Cong+, VLDB 19]
    DiskANN [Subramanya+, NeurIPS 19]
    Learning to route [Baranchuk+, ICML 19]
    フォーマルな(?)定義が出来ればみんな嬉しい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  126. 126
    グラフ探索方式
    Images are from an excellent survey paper [Wang+, VLDB 2021]
    ➢ めちゃくちゃたくさんある
    ➢ 基本的な構造:良いグラフを設計 + ビームサーチ(先ほど述べたアルゴ)

    View Slide

  127. 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]

    View Slide

  128. 128
    エッジ選択:RNG-pruning
    A
    Aを追加する際、
    どうエッジを張る?
    A
    All
    neighbors?
    ➢ エッジ多すぎ
    ➢ 探索遅くなる
    A
    Top-K?
    ➢ 到達できない
    ➢ 精度低い
    A

     ☺ たぶんこいつら
    はつながってる
    なのでこの枝は
    なくてもヨシ
    RNG-pruning: 良い感じ
    のエッジ

    View Slide

  129. 129
    C
    B
    D
    A
    Aが来た。B, C, D, Eの
    どれにエッジを張る?
    ?
    ?
    ? E
    エッジ選択:RNG-pruning

    View Slide

  130. 130
    C
    B
    D
    A
    E
    エッジ選択:RNG-pruning

    View Slide

  131. 131
    B
    D
    A
    C E
    エッジ選択:RNG-pruning
    Aの最近傍

    View Slide

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

    View Slide

  133. 133
    C
    B
    D
    A
    ➢ Aの全ての近傍点について、 と を比べる
    ➢ もし が一番短ければ、エッジを張る
    今回は近傍点が無い。なのでエッジを張る
    E
    エッジ選択:RNG-pruning
    Aの最近傍

    View Slide

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

    View Slide

  135. 135
    C
    B
    D
    A
    Aの第二近傍
    done
    E
    エッジ選択:RNG-pruning

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  139. 139
    C
    B
    D
    A
    done
    done
    エッジ選択:RNG-pruning Aの第三近傍
    E

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  143. 143
    C
    B
    D
    A
    done
    done
    done
    E
    エッジ選択:RNG-pruning Aの第四近傍

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  147. 147
    C
    B
    D
    A
    done
    done
    done
    E
    done
    ➢ RNG-pruningは効果的なエッジ削減法。
    色々な方式で広く使われる
    Pros: 実装が簡単
    Cons: 距離計算が多いので時間はかかる
    エッジ選択:RNG-pruning

    View Slide

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

    View Slide

  149. 149
    Hierarchical Navigable Small World; HNSW
    [Malkov and Yashunin, TPAMI, 2019]
    ➢ グラフを階層的に作る [Malkov and Yashunin, TPAMI, 2019]
    ➢ RNG-pruningにより、#edge per nodeを固定する
    ➢ 最も有名。実データにとても強い
    疎なグラフで探索
    より密なグラフの同じ点に移動
    繰り返す

    View Slide

  150. 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

    View Slide

  151. 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のものなので、現在のライブラリと異なるかもです

    View Slide

  152. 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

    View Slide

  153. 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]

    View Slide

  154. 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]

    View Slide

  155. 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

    View Slide

  156. 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

    View Slide

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

    View Slide

  158. 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

    View Slide

  159. 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/

    View Slide

  160. 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

    View Slide

  161. 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
    ➢ アルゴ的にはちょっと落ち着いた印象がある。グラフ
    探索を超えたブレイクスルー方式が待たれる・・!?

    View Slide

  162. 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

    View Slide

  163. 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

    View Slide

  164. 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/

    View Slide

  165. 165
    ➢ 背景
    ➢ グラフを用いた近似最近傍探索
    ✓ 基本 (構築と探索)
    ✓ 基本的特性
    ✓ 特徴的な性質
    ➢ 代表的手法
    ✓ HNSW, NSG, NGT, Vamana
    ➢ 議論 謝辞
    ➢ フィードバックを頂いた天方大地先生、小野直樹君、金海智大君に感謝を申し上げます。
    ➢ 本研究はJST AIP加速課題JPMJCR23U2の支援を受けたものです。

    View Slide