$30 off During Our Annual Pro Sale. View Details »

論文紹介: Accelerating Learned Sparse Indexes Via Term Impact Decomposition (Findings of EMNLP 2022)

Yu Nakano
June 09, 2023

論文紹介: Accelerating Learned Sparse Indexes Via Term Impact Decomposition (Findings of EMNLP 2022)

IR Reading 2023 春 での論文紹介に使用したスライドです.
https://sigir.jp/post/2023-06-10-irreading_2023spring/

紹介した論文
Accelerating Learned Sparse Indexes Via Term Impact Decomposition (Findings of EMNLP 2022)

Yu Nakano

June 09, 2023
Tweet

More Decks by Yu Nakano

Other Decks in Science

Transcript

  1. 論⽂紹介する⼈: 中野 優
    https://sites.google.com/view/yu-nakano
    図表は基本的に論⽂より引⽤
    私⾒・感想・コメントは薄い灰⾊で記述
    Accelerating Learned Sparse Indexes Via Term
    Impact Decomposition (Findings of EMNLP 2022)
    Joel Mackenzie (University of Queensland), Antonio Mallia (Amazon Alexa, Italy),
    Alistair Moffat (University of Melbourne), Matthias Petri (Amazon Alexa, USA)
    URL: https://aclanthology.org/2022.findings-emnlp.205/

    View Slide

  2. 学習済み疎検索で特に有効な
    既存の top-k OR 検索をさらに⾼速化する
    Term Impact Decomposition を提案
    論⽂の概要
    MaxScore や WAND など
    データセットから学習した単語重要度を
    転置インデックスに格納し検索する⼿法
    2

    View Slide

  3. • データセットから単語重要度を学習する⼿法
    ◦ 単語重要度: 単語 𝑤 に対する重み(スコア)
    • TF-IDF の tf 𝑤 $ idf 𝑤 や BM25 の !!"# $% &
    !! #'( "("# $
    %&'"#
    "$% &
    $ idf 𝑤
    ◦ 学習済み疎検索ではこの重み(単語重要度)をデータセットから学習
    • 主に Transformer モデルを⽤いて学習
    ◦ 推論時は学習した重み(単語重要度)を転置インデックスに格納し検索
    • 利点
    ◦ ⽂脈を考慮した単語重要度を設定可能(次ページ)
    • これにより BM25 などよりも精度良く検索可能に
    ◦ 転置インデックスが利⽤可能
    • これにより既存の様々な知識やツールが容易に利⽤できる(例: 効率的な検索,イン
    デックスの作成・更新,フレーズ検索などの複雑なクエリ処理など)
    背景: 学習済み疎検索(Learned Sparse Retrieval) 3
    (term impact)
    Elastic Cloud でも
    Elasticsearch 8.8
    から利⽤可能に!
    Elasticsearch 8.8 のリリースの記事: https://www.elastic.co/jp/blog/whats-new-elasticsearch-8-8-0
    Elastic Learned Sparse Encoder の紹介記事: https://www.elastic.co/jp/blog/may-2023-launch-sparse-encoder-ai-model

    View Slide

  4. ⽂脈を考慮した単語重要度
    正規化された
    単語重要度
    DeepImpact で学習された単語 “does” に対する単語重要度と⽂書の例
    “doe”(⿅や兎など
    の雌)の複数形
    同形異義語の解説
    頭字語 (acronyms)
    dose(投薬)の
    ミススペル
    do の三⼈称単数
    4

    View Slide

  5. • 通常の BM25 と⽐べて検索が遅い
    ◦ top-k OR 検索において数倍〜数⼗倍
    • なぜか?: 既存の top-k OR 検索と相性が悪い
    ◦ 単語重要度の最⼤値の傾向が BM25 と学習済み疎検索で異なる
    →既存の top-k OR 検索⼿法でうまく⾼速化されない
    学習済み疎検索の問題点
    DeepImpact uniCOIL
    MSMARCO-v1
    (8.8M)
    約 4.8 倍 約 8.1 倍
    MSMARCO-v2
    (138.4M)
    約 75.3 倍 約 15.0 倍
    MaxScore を使った場合の⽐較(Table 4 と 5 をもとに計算)
    5

    View Slide

  6. • ⼀般的な転置インデックス+クエリ処理を想定
    ◦ ポスティングリストは⽂書 ID の昇順に単語重要度を持つ
    ◦ Document-at-a-time にポスティングリストを処理していく
    転置インデックスにおける top-k OR 検索 6
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    ID: 1 ID: 3 ID: 5 ID: 20
    重要度: 2 重要度: 3 重要度: 5 重要度: 6
    ID: 2 ID: 3 ID: 4 ID: 7 ID: 9 ID: 10 ID: 13 ID: 15 ID: 19 ID: 21
    重要度: 1 重要度: 4 重要度: 3 重要度: 2 重要度: 3 重要度: 1 重要度: 2 重要度: 2 重要度: 3 重要度: 1

    View Slide

  7. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 7
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア
    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)


    View Slide

  8. 転置インデックスにおける top-k OR 検索 8
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア


    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)
    クエリ例: search OR engine

    View Slide

  9. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 9
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2


    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  10. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 10
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1


    1 位 2 位
    ID: 1 ID: 2
    スコア: 2 スコア: 1
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  11. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 11
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7


    1 位 2 位
    ID: 3 ID: 1
    スコア: 7 スコア: 2
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  12. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 12
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3


    1 位 2 位
    ID: 3 ID: 4
    スコア: 7 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  13. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 13
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  14. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 14
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 2


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  15. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 15
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 2 3


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  16. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 16
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 2 3 1


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  17. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 17
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 2 3 1 2 2 3 6 1


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  18. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 18
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 2 3 1 2 2 3 6 1


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ⻑いリストでも最後まで
    全て⾒る必要があり遅い
    OR 検索の問題点

    View Slide

  19. クエリ例: search OR engine
    転置インデックスにおける top-k OR 検索 19
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 2 3 1 2 2 3 6 1


    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ⻑いリストでも最後まで
    全て⾒る必要があり遅い
    OR 検索の問題点
    Good News!: top-k 検索の場合は⾼速化可能
    動的枝刈り: 追加の情報を事前に転置インデックスに格納し
    その情報を利⽤して⼀部のスコア計算を(安全に)スキップする
    ⼿法: MaxScore,WAND,Block-Max WAND,…
    dynamic pruning
    (注釈) ここで考慮する
    ⾼速化はナイーブな
    top-k 検索と全く同じ
    結果を返す「安全な」
    ⾼速化⼿法のみに着⽬

    View Slide

  20. MaxScore による動的枝刈り(⾼速化) 20
    MaxScore
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    (の 1 つ)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア


    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  21. MaxScore による動的枝刈り(⾼速化) 21
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)
    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)

    View Slide

  22. MaxScore による動的枝刈り(⾼速化) 22
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  23. MaxScore による動的枝刈り(⾼速化) 23
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 1 ID: 3
    スコア: 2 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  24. MaxScore による動的枝刈り(⾼速化) 24
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 1 ID: 2
    スコア: 2 スコア: 1
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  25. MaxScore による動的枝刈り(⾼速化) 25
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 3 ID: 1
    スコア: 7 スコア: 2
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  26. MaxScore による動的枝刈り(⾼速化) 26
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 3 ID: 4
    スコア: 7 スコア: 3
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  27. MaxScore による動的枝刈り(⾼速化) 27
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  28. MaxScore による動的枝刈り(⾼速化) 28
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  29. MaxScore による動的枝刈り(⾼速化) 29
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    現時点での第 𝑘(= 2) 位のスコアが 5
    スコアが 5 以下の⽂書が
    最終的な上位 𝒌(= 𝟐) 件の
    ランキングに⼊る可能性が消滅
    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  30. MaxScore による動的枝刈り(⾼速化) 30
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine (k=2)
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑼𝐬𝐞𝐚𝐫𝐜𝐡 = 𝟒
    現時点での第 𝑘(= 2) 位のスコアが 5
    スコアが 5 以下の⽂書が
    最終的な上位 𝒌(= 𝟐) 件の
    ランキングに⼊る可能性が消滅
    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)
    𝑡 = search の単語重要度の最⼤値は 4
    𝑡 = search のみに存在する⽂書
    (つまり 𝑡 = engine には存在しない⽂書)
    は最終的な上位 𝒌(= 𝟐) 件の
    ランキングに⼊る可能性が消滅した!

    View Slide

  31. MaxScore による動的枝刈り(⾼速化) 31
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5


    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑼𝐬𝐞𝐚𝐫𝐜𝐡 = 𝟒
    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  32. MaxScore による動的枝刈り(⾼速化) 32
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 skip skip skip skip skip skip

    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑼𝐬𝐞𝐚𝐫𝐜𝐡 = 𝟒
    1 位 2 位
    ID: 3 ID: 5
    スコア: 7 スコア: 5
    検索結果
    (上位 𝑘 = 2 件)

    これらの⽂書は 𝒕 = 𝐬𝐞𝐚𝐫𝐜𝐡 のみに
    しか出現しないためスキップ可能!
    補⾜: skiplist などの
    データ構造で
    スキップ⾃体も
    ⾼速に可能
    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  33. MaxScore による動的枝刈り(⾼速化) 33
    MaxScore
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    クエリ例: search OR engine
    単語 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 6
    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 3 ID: 20
    スコア: 7 スコア: 6
    検索結果
    (上位 𝑘 = 2 件)


    ポスティングリスト中の単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法(の 1 つ)

    View Slide

  34. MaxScore による動的枝刈り(⾼速化) 34
    MaxScore
    ポスティングリストの単語重要度の最⼤値を利⽤して
    ⼀部のスコアの計算をスキップするクエリ処理⼿法
    (単語重要度の最⼤値はインデックス構築時に事前計算しておく)
    (の 1 つ)
    クエリ例: search OR engine (k=2)
    Term 𝑡
    𝑡 = engine
    𝑡 = search
    2 3 5 6
    1 4 3 2 3 1 2 2 3 1
    1 2 3 4 5 7 9 10 13 15 19 20 21
    ⽂書 ID
    スコア 2 1 7 3 5 6
    最⼤値 𝑈!"#$"!
    = 6
    最⼤値 𝑈%!&'()
    = 4
    1 位 2 位
    ID: 3 ID: 20
    スコア: 7 スコア: 6
    検索結果
    (上位 𝑘 = 2 件)


    単語重要度の最⼤値 𝑼𝒕

    ⼩さい単語 𝒕 はスキップされやすい
    MaxScore の性質
    e.g. さきほどの 𝑡 = search

    View Slide

  35. • なぜか?: 単語重要度の最⼤値の分布が BM25 と学習済み疎検索で異なる
    学習済み疎検索の問題点: 通常の BM25 より遅い
    ポスティングリストの⻑さの log (底 2)
    (→右にいくほど⽂書頻度が⼤きい)
    正規化済み
    単語重要度の
    最⼤値の分布
    ポスティングリスト : ⻑い
    単語重要度の最⼤値 𝑼𝒕
    : ⼩さい
    (逆⽂書頻度の影響)
    スキップが発⽣しやすいので
    ⽐較的⾼速に処理される
    BM25 の場合
    35
    🙆
    🙅
    🙆

    View Slide

  36. • なぜか?: 単語重要度の最⼤値の分布が BM25 と学習済み疎検索で異なる
    学習済み疎検索の問題点: 通常の BM25 より遅い
    正規化済み
    単語重要度の
    最⼤値の分布
    ポスティングリスト : ⻑い
    単語重要度の最⼤値 𝑼𝒕
    : ⼤きい
    スキップが発⽣しづらく遅い
    学習済み疎検索(DeepImpact, uniCOIL)の場合
    36
    ポスティングリストの⻑さの log (底 2)
    (→右にいくほど⽂書頻度が⼤きい)
    🙅
    🙅
    🙅

    View Slide

  37. • リスト分割(List Splitting)ベースの⾼速化⼿法
    提案⼿法: Term Impact Decomposition 37
    適当な割合で重要度の⾼い順にポスティングリスト を
    Low List ℒ 𝑡 と High List ℋ 𝑡 の 2 つに分割
    単語重要度
    単語重要度
    単語重要度

    View Slide

  38. • リスト分割(List Splitting)ベースの⾼速化⼿法
    提案⼿法: Term Impact Decomposition
    スキップが発⽣しやすい
    →⽐較的⾼速に処理可能
    38
    ポスティングリスト ℒ 𝑡 : ⻑い
    単語重要度の最⼤値 𝑈ℒ 1
    : ⼩さい
    Low List
    適当な割合で重要度の⾼い順にポスティングリスト を
    Low List ℒ 𝑡 と High List ℋ 𝑡 の 2 つに分割
    🙆
    🙅
    単語重要度
    単語重要度
    単語重要度
    🙆

    View Slide

  39. • リスト分割(List Splitting)ベースの⾼速化⼿法
    提案⼿法: Term Impact Decomposition
    スキップが発⽣しやすい
    →⽐較的⾼速に処理可能
    そもそも短いので⾼速に処理可能
    39
    ポスティングリスト ℒ 𝑡 : ⻑い
    単語重要度の最⼤値 𝑈ℒ 1
    : ⼩さい
    Low List
    ポスティングリスト ℋ 𝑡 : 短い
    単語重要度の最⼤値 𝑈ℋ 1
    : ⼤きい
    High List
    適当な割合で重要度の⾼い順にポスティングリスト を
    Low List ℒ 𝑡 と High List ℋ 𝑡 の 2 つに分割
    🙆
    🙅
    🙅
    🙆
    単語重要度
    単語重要度
    単語重要度
    🙆
    🙆

    View Slide

  40. • 𝒎 ≥ 𝟐 個以上の単語に対する MaxScore のスキップ
    ◦ 基準: 𝑚 個の単語重要度の最⼤値の和 ∑!"#
    $ 𝑈%%
    が 𝑘 位の⽂書のスコア以下か?
    ◦ ⾜し合わせる 𝑚 個の単語の選び⽅: 𝑈5
    の⼩さい順 or の⼤きい順
    • リスト分割の場合
    ◦ 性質: 必ず Low List ℒ 𝑡 は High List ℋ 𝑡 より先に⾜し合わされる
    • 単語重要度の最⼤値では 𝑈ℒ 1 < 𝑈ℋ 1
    ,ポスティングリストでは ℒ 𝑡 > ℋ 𝑡
    ◦ 問題点: High List の 𝑈ℋ 5
    をそのまま⾜し合わせるとスキップする基準
    を⼤きく取りすぎる
    • なぜか?: 先に Low List の 𝑈ℒ 1
    をスキップする基準に⾜し合わせているため
    ◦ 解決策: 𝑈ℋ 5
    ではなく差分 𝑈ℋ 5
    − 𝑈ℒ 5
    を⾜し合わせる
    • この⾜し合わせ⽅を Smart Bounds と呼ぶ
    Smart Bounds 40
    ポスティングリストの⻑さ
    単語重要度の最⼤値
    (スキップする)基準: 閾値 (threshold) のこと

    View Slide

  41. (Smart Bounds とは違って差分を考える必要がなくなったので)
    Postings Clipping では High List での特別な処理が不要
    Postings Clipping 41
    • Smart Bounds の問題点
    ◦ High List の 𝑈ℋ 5
    を⾜し合わせる際に 𝑈ℋ 5
    ではなく
    𝑈ℋ 5
    − 𝑈ℒ 5
    を⾜し合わせるという特別な処理が必要
    • 提案: Postings Clipping
    High List ℋ 𝑡 には
    Low List ℒ 𝑡 から
    はみ出た分だけを格納

    View Slide

  42. • データセット
    ◦ MSMARCO-v1 (8.8 M),MSMARCO-v2 (138.4 M)
    • 実装
    ◦ PISA (https://github.com/pisa-engine/pisa)
    • Anserini より⾼速らしい
    • ⽐較する検索⼿法
    ◦ BM25,DocT5Query (+BM25)
    ◦ 学習済み疎検索: DeepImpact, uniCOIL
    • インデックスサイズに関する実験(右図)
    ◦ Postings clipping ありでも
    最⼤ +1.8% の増加のみ
    実験 42
    カッコ内はパッセージ数
    インデックスのサイズ
    (単位は GiB)

    View Slide

  43. • MSMARCO-v1 + DeepImpact で実験
    ◦ MaxScore,WAND,Variable Block-Max WAND (VBMW) で⽐較
    ◦ ⼯夫: List Splitting,Priming,Smart Bounds,Postings Clipping
    学習済み疎検索に対する⼯夫要素ごとの⽐較 43
    ⻘字は同じ⼿法内で最速の値

    View Slide

  44. • MSMARCO-v1 + DeepImpact で実験
    ◦ MaxScore,WAND,Variable Block-Max WAND (VBMW) で⽐較
    ◦ ⼯夫: List Splitting,Priming,Smart Bounds,Postings Clipping
    学習済み疎検索に対する⼯夫要素ごとの⽐較 44
    提案⼿法全体としては
    ⼯夫を適⽤しない場合と⽐較して
    最⼤約 2.6 倍の改善
    VBMW は改善の度合いはかなり⼩さい
    もとからかなり⼯夫がなされていて改善の余地が少なかった
    せいかも?もしくは提案⼿法と相性が悪い?実装の違い?
    提案⼿法適⽤前: VBMW
    最速
    提案⼿法適⽤後: MaxScore
    感想: MaxScore
    よりBMW の⽅が
    速いイメージ
    なので少し意外
    ⻘字は同じ⼿法内で最速の値

    View Slide

  45. • さきほどと同様の傾向
    ◦ 学習済み疎検索で改善の傾向: DeepImpact で最⼤ 9.65 倍の⾼速化
    より⼤規模なデータ (MSMARCO-v2) での⽐較 45
    学習済み疎検索
    BM25 ベース
    ⻘字は提案⼿法で最速の値

    View Slide

  46. • 学習済み疎検索で特に有効な,既存の top-k OR 検索を
    さらに⾼速化する Term Impact Decomposition を提案
    ◦ リスト分割ベースの⾼速化⼿法に Postings Clipping と呼ばれる
    新たな技術を導⼊
    ◦ MSMARCO-v2 で学習済み疎検索⼿法を最⼤ 9.65 倍⾼速化
    • 感想
    ◦ クエリ処理の⾼速化についてあまり知らなかったので読んで勉強になった
    • DeepImpact や uniCOIL だと top-k OR 検索が遅くなるというのも知らなかった
    ◦ ⼀⽅で⼿法⾃体の新規性はそこまで⼤きくない
    • 真に新しい技術は Postings Clipping のみ
    • (最近流⾏っていてコミュニティの関⼼が⾼い)学習済み疎検索という検索モデル
    の課題に対して,⽐較的広く適⽤可能な新しい⼿法を提案した点が評価された?
    まとめ 46

    View Slide

  47. • top-k OR クエリ処理の⽇本語⽂献
    ◦ 情報検索 検索エンジンの実装と評価: 5 章 クエリ処理
    ◦ 検索システム 実務者のための開発改善ガイドブック: 第 4 章
    ◦ Efficient top-k query processing in Lucene 8
    • Apache Lucene 8のTop-k クエリプロセッシング最適化
    ◦ 転置インデックスとtop-k query
    ◦ 浅野さんのブログ・論⽂紹介
    • Accelerated Query Processing Via Similarity Score Prediction (SIGIR 2019)
    • Finding the Best of Both Worlds: Faster and More Robust Top-k Document
    Retrieval (SIGIR 2020)
    • Information Retrieval and Web Search まとめ(16): 検索システムの効率性
    関連⽂献 47

    View Slide

  48. View Slide

  49. • 適切なはじめに閾値を決めることで(安全な)⾼速化が可能
    ◦ top-k OR 検索である閾値 𝜃 が安全であるか?は検索結果の⽂書集合に
    スコアが 𝜃 以上の⽂書が k 個以上存在するか?で決まる
    • ⾃明な閾値は 𝜃 = 0
    ◦ より良い閾値を事前に決めることでより多くの⽂書をスキップできるので
    ⾼速化が可能(Priming)
    • リスト分割で利⽤可能な閾値
    ◦ これはなぜ安全な閾値か?
    • 閾値をある単語 t の Low List の単語重要度の最⼤値と取ったとする
    • このとき閾値以上の⽂書集合は,単語 t のHigh List に含まれる⽂書集合を含む
    • 閾値の取り⽅から,単語 t のHigh List に含まれる⽂書集合は k 以上であるため,
    この閾値は安全
    リスト分割における閾値の初期化(Priming) 49
    Low List の
    単語重要度の最⼤値
    クエリ 𝑄 中の
    単語 𝑡
    High List の⻑さが k 以上
    単語重要度の最⼤値
    正確には min(k, |検索結果の⽂書集合|) 個以上

    View Slide

  50. • MSMARCO-v1 + DeepImpact で実験
    ◦ MaxScore,WAND,Variable Block-Max WAND (VBMW) で⽐較
    ◦ ⼯夫: List Splitting,Priming,Smart Bounds,Postings Clipping
    ⼯夫要素ごとの⽐較 50
    (⼀⽅で)List Splitting で既に
    かなりの改善が得られている
    感想: (全くの新規の提案である)
    Postings Clipping の効果は
    (実⽤上は)そこまで…?

    View Slide