SlideShare a Scribd company logo
坪坂正志
mail : m.tsubosaka(at)gmail(dot)com
今回の話の概要
   転置インデックスに対してdisjunctiveなクエ
    リで問い合わせを行った際に上位k件を取っ
    てくるためのDAAT(Document-at-a-time)
    ベースの効率的な手法について紹介する
ようするに
   大規模な文章セットに対する”watch OR iwc
    OR rolex”というクエリに関連度の高い文章
    を高速に持ってきたい
話の流れ
 転置インデックスについて
 TAAT, DAAT
 Top-k Query
     max-score
     inteval-based prunning
     other method
      ○ wand
      ○ layered-index
転置インデックスとは
   単語がどの文章に出現するかを格納した索引
    構造
     例えば下の構造から”iwc”が含まれる文章は文章1,5
      の2つであることが分かる
     また単語に紐づいてるリストを転置リストと呼ぶ

     iwc     1   5


    rolex    2   3   5


    watch    1   2   4   5
転置インデックスの利点
   全体の文章に対してはるかに少ない量のリ
    ストを見るだけでよい
     例えば英語版Wikipediaの記事は約397万あるが、
     そのうちiwcが含まれる記事は284件
   ANDやORなどの論理演算が含まれるクエリ
    と相性が良い
代表的なクエリのタイプ
   AND検索 (Conjunctive query)
     クエリ = (1 , … ,  )が与えられた時に全ての
      が含まれる文章を返す
     例 :  = (ℎ, , )ならば”watch”, “iwc”,
      “rolex”全てが含まれる文章を返す
   OR検索 (Disjunctive query)
     クエリ = (1 , … ,  )が与えられた時に のいず
      れかが含まれる文章を返す
     例 :  = (ℎ, , )ならば”watch”, “iwc”,
      “rolex”いずれかが含まれる文章を返す
ANDクエリとORクエリ
 一般にANDクエリとORクエリの場合ANDク
  エリの方が高速
 また、簡単な絞り込み用途としての検索エ
  ンジンであればANDクエリのみで十分なこ
  とが多い
 一方でORクエリが有用なケースも多い
ORクエリが有用な例
   クエリ拡張
     代表的な検索エンジンで”algorithm”と検索する
      と”アルゴリズム”が含まれる記事もヒットしたり
      する
     このようにシノニムなどが含まれる記事もヒッ
      トするようにしたい場合はORクエリが使われる
     ○ この場合は”algorithm” OR “アルゴリズム”などのよ
       うになる
     ○ *検索エンジンの中の人ではないので本当にこうし
       てるかは知りません
ORクエリが有用な例
   類似検索
     表示されてる文章から類似の文章を検索する
     ex : コンテンツ連動型広告、関連文表示
     文章中の単語が全部含まれてるというのはあり
    えないので、ANDクエリでは文章がヒットしな
    い
話の流れ
 転置インデックスについて
 TAAT, DAAT
 Top-k Query
     max-score
     inteval-based prunning
     other method
      ○ wand
      ○ layered-index
ORクエリの実装
 ORクエリの高速化について見ていく前に
  naiveな実装について説明する
 代表的な手法として
     TAAT(Term-at-a-time)
     DAAT(Document-at-a-time)
   の2つが存在する
TAATについて
 Termごとに順番に処理していく手法
 処理の結果はアキュムレータという中間
  データに格納されていく
TAATの例
 例として”iwc OR rolex OR watch”というクエリ
  を考える
 初めに空のアキュムレータを作成する


accumulator = {}

     iwc       1   5


    rolex      2   3   5


    watch      1   2   4   5
TAATの例
   iwcに関する転置リストをaccumulatorに入
    れる

accumulator = {1,5}

     iwc       1   5


    rolex      2   3   5


    watch      1   2   4   5
TAATの例
   rolexに関する転置リストをaccumulatorと
    マージする

accumulator = {1,2,3,5}

     iwc       1   5


    rolex      2   3   5


    watch      1   2   4   5
TAATの例
   watchに関する転置リストをaccumulatorと
    マージする

accumulator = {1,2,3,4,5}

     iwc       1   5


    rolex      2   3   5


    watch      1   2   4   5
TAATの例
   結果文章1,2,3,4,5がクエリに適合すること
    が分かる

accumulator = {1,2,3,4,5}

     iwc       1   5


    rolex      2   3   5


    watch      1   2   4   5
TAATのメリット・デメリット
 実装が簡単
 シーケンシャルアクセス中心になるので
  データがファイルに格納されてる時に割と
  性能がよい
 最近流行してるsuffix treeなどのデータ構造
  系と相性が良い [G. Navarro and Y. Nekrich
  2012]
 アキュムレータがORの結果が多くなるほど
  負荷が大きくなる
DAATについて
   クエリに関する転置インデックスを文章番
    号順に処理していく
DAATの例
   各単語の転置インデックスの先頭にカーソ
    ルを設定する


     iwc    1   5



    rolex   2   3   5



    watch   1   2   4   5
DAATの例
   カーソル上の文章番号の最も小さい文章を
    処理する
     この場合は1


     iwc       1   5



    rolex      2   3   5



    watch      1   2   4   5
DAATの例
   カーソルを次に進める



     iwc    1   5



    rolex   2   3   5



    watch   1   2   4   5
DAATの例
   カーソル上の文章番号の最も小さい文章を
    処理する
     この場合は2


     iwc       1   5



    rolex      2   3   5



    watch      1   2   4   5
DAATの例
   カーソルを次に進める



     iwc    1   5



    rolex   2   3   5



    watch   1   2   4   5
DAATの例
   カーソル上の文章番号の最も小さい文章を
    処理する
     この場合は3


     iwc       1   5



    rolex      2   3   5



    watch      1   2   4   5
DAATの例
   カーソルを次に進める



     iwc    1   5



    rolex   2   3   5



    watch   1   2   4   5
DAATの例
   カーソル上の文章番号の最も小さい文章を
    処理する
     この場合は4


     iwc       1   5



    rolex      2   3   5



    watch      1   2   4   5
DAATの例
   カーソルを次に進める



     iwc    1   5



    rolex   2   3   5



    watch   1   2   4   5
DAATの例
   カーソル上の文章番号の最も小さい文章を
    処理する
     この場合は5


     iwc       1   5



    rolex      2   3   5



    watch      1   2   4   5
DAATの例
 カーソルが最後まで来たので終了
 一連の処理では1,2,3,4,5の順で文章を処理
  した

     iwc    1   5



    rolex   2   3   5



    watch   1   2   4   5
DAATのメリット・デメリット
   文章番号の小さい順に処理をするところは
    Priority Queueというデータ構造を使うと効率
    的に処理できる
     例えばLuceneのorg.apache.lucene.search.
     DisjunctionSumScorerの実装が参考になる
 アキュムレータを持つ必要がない
 文章ごとに処理していくので、フィルタ処理な
  どとの相性が良い
     例えば値段が50万円以下のもののみ出力する、メン
      ズ用品のみ出力するなど
     Luceneの実装もDAATになっている
   ファイルへのランダムアクセスが多い
話の流れ
 転置インデックスについて
 TAAT, DAAT
 Top-k Query
     max-score
     inteval-based prunning
     other method
      ○ wand
      ○ layered-index
OR検索をどうやって高速化するか
 単純にORでマッチする全部を取る必要があ
  る場合は候補数が多い時にどうやっても処
  理に時間を要する
 しかし、検索結果の上位数件だけ必要であ
  れば上位に来る可能性がない文章の評価を
  スキップすることにより、処理の高速化が
  可能となる
 このような問い合わせに対して上位k件のみ
  取り出すことをtop-k query processingと呼
  ぶ
文章のランク付け
 上位k件を出力するためには、クエリに対して
  どの文章の順位が高いかを決定する必要がある
 どういった文章が適合してるかを考えてみる
     例えば“watch”のみ含まれる文章では置時計や動詞の
      watchが含まれる文章もヒットし、また数も大量にあ
      るため、”iwc”のみが含まれる文章の方が関連性が高
      いと考えられる
     また”iwc”のみ含まれるページより”iwc”と”rolex”を含
      むページの方が関連性が高い
     “iwc”を1回含む文章よりも2回含む文章の方が関連度
      が高い
文章のランク付け
 クエリ = (1 , … ,  )に対して、文章のス
  コアを ,  =  ( , )の形で
  表す
 ( , )は文章における の出現頻度、
   の珍しさなどが加味された値となる
 またこの後の議論の都合上  ,  ≥ 0
  を仮定する
 この形のスコアリング関数にはTF-IDF,
  BM25などの多くの代表的なものが含まれる
転置インデックスの拡張
   転置インデックスに対して、scoreの値およ
    び各単語のscoreの最大値を付与する
     図では(文章番号, スコア)という形式で書く


     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,3)   (5,1)

max_score=3

    watch     (1,1)   (2,2)   (4,1)   (5,1)

max_score=2
話の流れ
 転置インデックスについて
 TAAT, DAAT
 Top-k Query
     max-score
     inteval-based prunning
     other method
      ○ wand
      ○ layered-index
max_score [H.R. Turtle and J. Flood, 1995]

    今上位k位に入るための閾値が4だとすると
     watchのみ含む文章はmax_score=2から絶対
     に候補に入ることが無いことを利用する

      iwc       (1,5)   (5,2)
max_score=5

     rolex      (2,2)   (3,3)   (5,1)

max_score=3

     watch      (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例1
 上位1件のみ取ることを考える
 最初の文章1を評価するとスコアは6になる


     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,3)   (5,1)

max_score=3

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例1
   1位のスコアが6のため”watch”+”rolex”ではスコ
    アが5にしかならないので、候補となる文章は
    必ず”iwc”を含まなければならない

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,3)   (5,1)

max_score=3

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例1
   ”iwc”のカーソルを進める



     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,3)   (5,1)

max_score=3

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例1
   他の2つに関しては”iwc”を含まないものを評価しても意
    味が無いので文章5まで飛ばす
     実装上ここで効率的に飛ばすためには転置インデックスに100
      個先までのポインタなどを持たせる必要がある


     iwc       (1,5)   (5,2)
max_score=5

    rolex      (2,2)   (3,3)   (5,1)

max_score=3

    watch      (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例1
   文章5を評価してスコアが4であることを得
    る

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,3)   (5,1)

max_score=3

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例1
   全て見たので終了
   処理の中で文章1,5のみを評価しており、2,3,4
    の評価を飛ばせている

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,3)   (5,1)

max_score=3

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   上位1件のみ取ることを考える
     ただ前のとスコアの設定が違う
   最初の文章1を評価するとスコアは6になる

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   1位のスコアが6のため”watch”のみではスコア
    が2にしかならないので、候補となる文章は必
    ず”iwc”か”rolex”を含まなければならない

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   “iwc”のカーソルを進める



     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   “watch”の方は文章2まで飛ばす



     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   文章2を評価してスコアが3であることを得
    る

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   “rolex”のカーソルを進める
     “watch”の方は3以降に飛ばす


     iwc       (1,5)   (5,2)
max_score=5

    rolex      (2,2)   (3,5)   (5,1)

max_score=5

    watch      (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   文章3を評価して、スコアが5であることを
    得る

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   “rolex”のカーソルを進める
     “watch”の方は5以降に飛ばす


     iwc       (1,5)   (5,2)
max_score=5

    rolex      (2,2)   (3,5)   (5,1)

max_score=5

    watch      (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   文章5を評価してスコアが4であることを得
    る

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_scoreの例2
   一連の流れで文章1,2,3,5の評価を行なって
    いる

     iwc      (1,5)   (5,2)
max_score=5

    rolex     (2,2)   (3,5)   (5,1)

max_score=5

    watch     (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
max_score 補足
 今上げた2つの例では文章1が最も大きいス
  コアになる例であったが、文章の途中のも
  のが1番になった場合、閾値もそれにあわせ
  て変化していく
 例2では閾値が6のときに”iwc”と”rolex”を含
  むの代わりに”iwc”と”watch”を含むとしても
  良かったが、通常は転置リストの長いもの
  もしくはスコアが低いものから候補から除
  外していく
max_scoreの性能
   例えば[M. Fontoura+, 2011] では約340万文
    章、3GBの広告データに対して平均長57.76
    のクエリ検索を行った場合
     Naive DAAT 26778.3 μsec
     DAAT max_score 9321.3 μsec
 と2.8倍近い性能改善が報告されている
 * この辺りの性能改善率に関しては検索エン
  ジンの性能および文章の性質に強く依存す
  る
topdocsの利用[T. Stohman+, 2005]
    極端にスコアが大きい文章のみ別の転置インデックスに
     分ける
      実装によってはメタデータに格納することもある
      下の例ではこれにより文章2より先は”iwc”もしくは”rolex_2”が
       入った文章のみ評価すれば良いことが分かる

     iwc          (1,5)   (5,2)
max_score=5

    rolex_1       (2,2)   (5,1)
max_score=2

    rolex_2       (3,5)

max_score=5
    watch         (1,1)   (2,1)   (4,2)   (5,1)

max_score=2
話の流れ
 転置インデックスについて
 TAAT, DAAT
 Top-k Query
     max-score
     inteval-based prunning
     other method
      ○ wand
      ○ layered-index
閑話:
modernな転置インデックスの機能
 多くの場合転置リストはブロックごとに圧
  縮されて格納されている
 例えば転置リストの内容が{1,3,6,8,15,16}で
  あれば{1,3},{6,8},{15,16}と分けられており、
  内部は圧縮されている
 圧縮アルゴリズムはVbyte, Simple9,
  PForDeltaなどがある.
     例えば[H. Yan+, 2009]などが参考になる
ブロック圧縮された転置インデックス
に対する検索手法
 ブロックは圧縮されているのでなるべく
  decode処理を飛ばしたい
 またデータをブロック単位で持ってるので
  ブロックごとのスコアの最大値や最小値を
  持つことができる
 ブロック圧縮された転置インデックスに対
  する検索手法はここ最近2件ほど独立に手法
  が提案されている
     [K. Chakrabarti+, 2011] [S. Ding and T. Suel,
      2011]
     今回は主に[K. Chakrabarti+, 2011]の紹介を行う
Interval-based pruning for top-k processing
over compressed lists
    ここからは最近の研究である
      K. Chakrabarti, S. Chaudhuri and V. Ganti :
      Interval-based pruning for top-k processing over
      compressed lists, ICDE, 2011
  の紹介を行う
  著者はMicrosoft Researchの研究者
モチベーション
 k=1のとき、通常のmax_scoreを実行すると文章9
  の時点でスコアが8になり、1 の転置リストのみ
  では1位に届かないのでブロックDは飛ばせる
 一方で文章3を見た時にスコアが3になり、ブロッ
  クBの最大値は2であるため本来はdecodeしなく
  てもよいが通常のmax_scoreではここをdecodeし
  てしまう

                                       max_score=5



                                       max_score=6




           [K. Chakrabarti+, 2011]より
提案手法
   与えられたクエリに対するブロックから区
    間を作成して、Upper boundが現在の閾値以
    上の区間のみ評価する




                     [K. Chakrabarti+, 2011]より
例
       論文のFig1の例、数値は一部変えてある




        A                 B               C                D                 E
(1,3)       (3,3) (5,1)       (8,1)   (9,5)   (11,2)   (12,1)   (14,2)   (15,1)   (16,1)

                  F
                                                                             G

(1,2)                             (9,3)                                  (15,6)   (16,1)
例
       区間を生成して、取り得る最大のスコアを
        計算する
区間           [1,3]      (3,5)    [5,8]      (8,9]      (9,11] (11,12] (12,14] (14,15) [15,16]

max
score
              6          3         4         8          5       1        2         0       7
               A                   B                    C                D                 E
     (1,3)           (3,3) (5,1)         (8,1)      (9,5)   (11,2)   (12,1)   (14,2)   (15,1) (16,1)

                             F
                                                                                           G

     (1,2)                                   (9,3)                                     (15,6)   (16,1
例
       始めの区間に関して, max_scoreを実行する
         このときブロックA,Fをデコードする
区間           [1,3]      (3,5)    [5,8]      (8,9]      (9,11] (11,12] (12,14] (14,15) [15,16]

max
score
              6          3         4         8          5       1        2         0       7
               A                   B                    C                D                 E
     (1,3)           (3,3) (5,1)         (8,1)      (9,5)   (11,2)   (12,1)   (14,2)   (15,1) (16,1)

                             F
                                                                                           G

     (1,2)                                   (9,3)                                     (15,6)   (16,1
例
       一位のスコアが5となるので、続く2つの区
        間は見なくてよい
         ブロックBのデコードはスキップされる
区間           [1,3]      (3,5)    [5,8]      (8,9]      (9,11] (11,12] (12,14] (14,15) [15,16]

max
score
              6          3         4         8          5       1        2         0       7
               A                   B                    C                D                 E
     (1,3)           (3,3) (5,1)         (8,1)      (9,5)   (11,2)   (12,1)   (14,2)   (15,1) (16,1)

                             F
                                                                                           G

     (1,2)                                   (9,3)                                     (15,6)   (16,1
例
       区間(8,9]を処理して、文章9のスコアが8で
        あることを得る
         このときブロックCがデコードされる
区間           [1,3]      (3,5)    [5,8]      (8,9]      (9,11] (11,12] (12,14] (14,15) [15,16]

max
score
              6          3         4         8          5       1        2         0       7
               A                   B                    C                D                 E
     (1,3)           (3,3) (5,1)         (8,1)      (9,5)   (11,2)   (12,1)   (14,2)   (15,1) (16,1)

                             F
                                                                                           G

     (1,2)                                   (9,3)                                     (15,6)   (16,1
例
       残りは全てスキップできる

区間           [1,3]      (3,5)    [5,8]      (8,9]      (9,11] (11,12] (12,14] (14,15) [15,16]

max
score
              6          3         4         8          5       1        2         0       7
               A                   B                    C                D                 E
     (1,3)           (3,3) (5,1)         (8,1)      (9,5)   (11,2)   (12,1)   (14,2)   (15,1) (16,1)

                             F
                                                                                           G

     (1,2)                                   (9,3)                                     (15,6)   (16,1
Interval-baseの利点
 max_scoreがglobalな最大値のみ使うのに対
  して、ブロックごとの最大値を利用できる
  のでより枝刈りが利用できる
 区間の数は高々ブロックの数の2倍程度にし
  かならない
     通常ブロックには100個程度の文章idが格納され
    ているので、長さ10万程度の転置リストでもブ
    ロックは1000個程度しかないので、区間の生成
    はほとんど負荷にならない
区間へのアクセス方法
 例では前から順に区間にアクセスしていっ
  たが論文ではこれをPruneSeqと言っている
 他にはPruneScoreOrder, PruneHybrid,
  PruneLazyというアクセス方法を提案してい
  る
PruneScoreOrder
       スコアが高い区間から順にアクセスする
         下の例では最初の区間で最大値を得るので、残
             りは全てスキップできる
区間           [1,3]      (3,5)    [5,8]      (8,9]      (9,11] (11,12] (12,14] (14,15) [15,16]

max
score
              6          3         4         8          5       1        2         0       7
               A                   B                    C                D                 E
     (1,3)           (3,3) (5,1)         (8,1)      (9,5)   (11,2)   (12,1)   (14,2)   (15,1) (16,1)

                             F
                                                                                           G

     (1,2)                                   (9,3)                                     (15,6)   (16,1
PruneHybrid
   PruneScoreOrderの欠点として、
     ランダムアクセスが多く発生すること
     同じ転置リストのブロックに何回もアクセスするこ
     とがある
     ○ これに関して論文ではキャッシュを用意して、なるべ
      くディスクから読む回数及びデコード回数を少なくす
      るという工夫が成されている
   これに対してPruneHybridでは上位x%の区間の
    みPruneScoreOrderを実施し、そこで得た閾値
    を元にPruneSeqを実施するというのが
    PruneHybridである
     x=0のときPruneSeqと一致し
     x=100のときPruneScoreOrderと一致する
PruneLazy
 転置リストのIOがランダムになることを防
  ぐため
 1. 一定量の区間のブロックをメモリに読み
  込む
     このときdecodeは行わない
   2. 読み込んだ区間に関して、スコア順に区
    間を処理していく
     閾値によってはいくつかの読み込んだブロック
     に関してはdecodeは飛ばされる
   を繰り返す
実験結果
   TREC Terabyte (800万ページ)のデータセッ
    トで実験
     max_scoreに近い手法に比べて3-6倍の性能改善




              [K. Chakrabarti+, 2011]より
話の流れ
 転置インデックスについて
 TAAT, DAAT
 Top-k Query
     max-score
     inteval-based prunning
     other method
      ○ wand
      ○ layered-index
WAND [A. Broder+, 2003]
   転置リストを先頭の文章番号の順に並べて、
    pivotとなるtermの文章番号より前にある転置リ
    ストのカーソルを進める手法
     今閾値が7であるとすると”rolex”のみでは閾値に届か
      ないので”iwc”も必要になる. このため”rolex”のカーソ
      ルを5以降に飛ばしてよいことが分かる
     max_scoreだと”watch”の方を除外してしまうので文
      章2,3を評価してしまう
    rolex      (1,1)   (2,5)   (3,1)

max_score=5

     iwc       (1,5)   (5,2)      pivot term
max_score=5
    watch      (1,1)   (6,1)   (7,2)   (8,3)

max_score=3
WANDの変形
   WANDの改良としては
     メモリ上の実行に適したmWAND [M. Fontoura+,
      2011]
     ブロック情報を利用したBlock-max WAND (BMW)
      [S. Ding and T. Suel, 2011]
 がある
 両論文とも割と読みやすい
Layered-index [T. Stohman and W. Croft, 2007]
     スコアに応じて、転置リストを複数に分ける
     クエリの評価はTAATベースで行い、スコアが高いリスト
      から順にマージしていく
       途中でこれ以上アキュムレータにないものを追加しても上位k件
        に入らないときはアキュムレータ内のみで評価する. アキュム
        レータ内のものでも上位k件に入る可能性の無いものを除外する
        などの最適化が行われる


     iwc_1        (1,8)           max_score=8

     rolex_1      (2,5)   (4,6)   max_score=6


     rolex_2      (5,4)   (6,4)   max_score=4


     iwc_2        (4,3)   (5,2)   max_score=3

     rolex_3      (1,1)   (3,1)   max_score=1
まとめ
 転置インデックスに対してdisjunctiveなクエ
  リで問い合わせを行った際に上位k件を取っ
  てくるためのDAAT(Document-at-a-time)
  ベースの効率的な手法について述べた
 この辺りの論文はquery-processingという
  キーワードでSIGIRなどの情報検索系の会議
  によく投稿される
参考文献
   情報検索の基本的な教科書
       [S. Büttcher+ 2010] Information Retrieval: Implementing and Evaluating Search Engines,
        MIT Press
   Max-score
       [H.R. Turtle and J. Flood, 1995] Query evaluation: strategies and optimization. Information
        processing and management
       [T. Stohman+, 2005] Optimization strategies for complex queries, SIGIR
       [K. Chakrabarti+, 2011] Interval-based pruning for top-k processing over compressed lists,
        ICDE
   WAND
       [A. Broder+, 2003] Efficient query evaluation using a two-level retrieval process, CIKM
       [M. Fontoura+, 2011] Evaluation strategies for top-k queries over memory-resident inverted
        indexes, VLDB
       [S. Ding and T. Suel, 2011] Faster top-k document retrieval using block-max indexes, SIGIR
   Layered Index
       [V. N. Anh and A. Moffat, 2006] Pruned query evaluation using pre-computed impacts,
        SIGIR
       [T. Stohman and W. Croft, 2007] Efficient document retrieval in main memory, SIGIR
   その他
       [H.Yan+ 2009] Inverted index compression and query processing with optimized document
        ordering, WWW
       [G. Navarro and Y. Nekrich 2012] Top-k Document Retrieval in Optimal Time and Linear
        Space, SODA

More Related Content

PDF
最適輸送の解き方
PPTX
分散システムについて語らせてくれ
PDF
Deep Learning Lab 異常検知入門
PDF
Optimistic Rollupとは何か
PDF
例外設計における大罪
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
PDF
Union find(素集合データ構造)
最適輸送の解き方
分散システムについて語らせてくれ
Deep Learning Lab 異常検知入門
Optimistic Rollupとは何か
例外設計における大罪
Python 3.9からの新定番zoneinfoを使いこなそう
Union find(素集合データ構造)

What's hot (20)

PDF
一般向けのDeep Learning
PPTX
トランザクションの設計と進化
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
暗号技術の実装と数学
PDF
指数時間アルゴリズム入門
PPTX
zk-SNARKsの仕組みについて
PDF
暗号文のままで計算しよう - 準同型暗号入門 -
PDF
グラフネットワーク〜フロー&カット〜
PDF
ChatGPTは思ったほど賢くない
PPTX
Apache Avro vs Protocol Buffers
PDF
分散学習のあれこれ~データパラレルからモデルパラレルまで~
PDF
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
PPTX
先駆者に学ぶ MLOpsの実際
PPTX
差分プライバシーとは何か? (定義 & 解釈編)
PDF
LCA and RMQ ~簡潔もあるよ!~
PDF
ゼロから始める転移学習
PDF
技術者が知るべき Gröbner 基底
PDF
プログラミングコンテストでの動的計画法
一般向けのDeep Learning
トランザクションの設計と進化
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
暗号技術の実装と数学
指数時間アルゴリズム入門
zk-SNARKsの仕組みについて
暗号文のままで計算しよう - 準同型暗号入門 -
グラフネットワーク〜フロー&カット〜
ChatGPTは思ったほど賢くない
Apache Avro vs Protocol Buffers
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
先駆者に学ぶ MLOpsの実際
差分プライバシーとは何か? (定義 & 解釈編)
LCA and RMQ ~簡潔もあるよ!~
ゼロから始める転移学習
技術者が知るべき Gröbner 基底
プログラミングコンテストでの動的計画法
Ad

Viewers also liked (20)

PDF
How to Run Solr on Docker and Why
PPTX
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
PDF
DSIRNLP#1 ランキング学習ことはじめ
PDF
リクルートにおける画像解析事例紹介
PPTX
Java 9 and Future #jjug
PDF
Java libraries you can't afford to miss
PDF
VMの歩む道。 Dalvik、ART、そしてJava VM
PDF
2017spring jjug ccc_f2
PPTX
Jjug ccc
PPTX
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
PDF
Arachne Unweaved (JP)
PPTX
Kotlin is charming; The reasons Java engineers should start Kotlin.
PDF
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
PDF
Jjugccc2017spring-postgres-ccc_m1
PDF
Introduction of Project Jigsaw
PDF
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
PDF
Polyglot on the JVM with Graal (English)
PDF
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
PPTX
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
How to Run Solr on Docker and Why
ディープラーニングでおそ松さんの6つ子は見分けられるのか? FIT2016
DSIRNLP#1 ランキング学習ことはじめ
リクルートにおける画像解析事例紹介
Java 9 and Future #jjug
Java libraries you can't afford to miss
VMの歩む道。 Dalvik、ART、そしてJava VM
2017spring jjug ccc_f2
Jjug ccc
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
Arachne Unweaved (JP)
Kotlin is charming; The reasons Java engineers should start Kotlin.
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Jjugccc2017spring-postgres-ccc_m1
Introduction of Project Jigsaw
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Polyglot on the JVM with Graal (English)
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Ad

Similar to 転置インデックスとTop k-query (20)

PDF
質問応答システム入門
PPTX
Information retrieval model
PPTX
Approximate Scalable Bounded Space Sketch for Large Data NLP
PPTX
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
PDF
bigdata2012ml okanohara
PDF
Information Retrieval
PPT
Big data解析ビジネス
PDF
全文検索入門
PDF
PFI Christmas seminar 2009
PPTX
情報検索の基礎 第1章 論理検索
PDF
DSLによる要求獲得でスーパーアジャイル
PPTX
企業等に蓄積されたデータを分析するための処理機能の提案
PPTX
情報検索の基礎
PDF
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
PDF
SIGIR2011読み会 3. Learning to Rank
PPTX
検索評価ツールキットNTCIREVALを用いた様々な情報アクセス技術の評価方法
PDF
マイニング探検会#09 情報レコメンデーションとは
PDF
The Anatomy of Large-Scale Social Search Engine
PPTX
今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)
PDF
あなたが知らない リレーショナルモデル
質問応答システム入門
Information retrieval model
Approximate Scalable Bounded Space Sketch for Large Data NLP
Data-driven Design: 4つの技法 InfoPathを用いたスケーラブル SharePointソリューション
bigdata2012ml okanohara
Information Retrieval
Big data解析ビジネス
全文検索入門
PFI Christmas seminar 2009
情報検索の基礎 第1章 論理検索
DSLによる要求獲得でスーパーアジャイル
企業等に蓄積されたデータを分析するための処理機能の提案
情報検索の基礎
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
SIGIR2011読み会 3. Learning to Rank
検索評価ツールキットNTCIREVALを用いた様々な情報アクセス技術の評価方法
マイニング探検会#09 情報レコメンデーションとは
The Anatomy of Large-Scale Social Search Engine
今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)
あなたが知らない リレーショナルモデル

More from 正志 坪坂 (20)

PDF
Recsys2018 unbiased
PDF
WSDM2018Study
PDF
Recsys2016勉強会
PPTX
KDD 2016勉強会 Deep crossing
PDF
Deeplearning輪読会
PDF
WSDM 2016勉強会 Geographic Segmentation via latent factor model
PDF
Deeplearning勉強会20160220
PDF
OnlineMatching勉強会第一回
PDF
Recsys2015
PDF
KDD 2015読み会
PDF
Recsys2014 recruit
PDF
EMNLP2014_reading
PDF
Tokyowebmining ctr-predict
PDF
KDD2014_study
PDF
Riak Search 2.0を使ったデータ集計
PDF
Contexual bandit @TokyoWebMining
PDF
Introduction to contexual bandit
PDF
確率モデルを使ったグラフクラスタリング
PDF
Big Data Bootstrap (ICML読み会)
PDF
Tokyowebmining2012
Recsys2018 unbiased
WSDM2018Study
Recsys2016勉強会
KDD 2016勉強会 Deep crossing
Deeplearning輪読会
WSDM 2016勉強会 Geographic Segmentation via latent factor model
Deeplearning勉強会20160220
OnlineMatching勉強会第一回
Recsys2015
KDD 2015読み会
Recsys2014 recruit
EMNLP2014_reading
Tokyowebmining ctr-predict
KDD2014_study
Riak Search 2.0を使ったデータ集計
Contexual bandit @TokyoWebMining
Introduction to contexual bandit
確率モデルを使ったグラフクラスタリング
Big Data Bootstrap (ICML読み会)
Tokyowebmining2012

転置インデックスとTop k-query

  • 2. 今回の話の概要  転置インデックスに対してdisjunctiveなクエ リで問い合わせを行った際に上位k件を取っ てくるためのDAAT(Document-at-a-time) ベースの効率的な手法について紹介する
  • 3. ようするに  大規模な文章セットに対する”watch OR iwc OR rolex”というクエリに関連度の高い文章 を高速に持ってきたい
  • 4. 話の流れ  転置インデックスについて  TAAT, DAAT  Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 5. 転置インデックスとは  単語がどの文章に出現するかを格納した索引 構造  例えば下の構造から”iwc”が含まれる文章は文章1,5 の2つであることが分かる  また単語に紐づいてるリストを転置リストと呼ぶ iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 6. 転置インデックスの利点  全体の文章に対してはるかに少ない量のリ ストを見るだけでよい  例えば英語版Wikipediaの記事は約397万あるが、 そのうちiwcが含まれる記事は284件  ANDやORなどの論理演算が含まれるクエリ と相性が良い
  • 7. 代表的なクエリのタイプ  AND検索 (Conjunctive query)  クエリ = (1 , … , )が与えられた時に全ての が含まれる文章を返す  例 : = (ℎ, , )ならば”watch”, “iwc”, “rolex”全てが含まれる文章を返す  OR検索 (Disjunctive query)  クエリ = (1 , … , )が与えられた時に のいず れかが含まれる文章を返す  例 : = (ℎ, , )ならば”watch”, “iwc”, “rolex”いずれかが含まれる文章を返す
  • 8. ANDクエリとORクエリ  一般にANDクエリとORクエリの場合ANDク エリの方が高速  また、簡単な絞り込み用途としての検索エ ンジンであればANDクエリのみで十分なこ とが多い  一方でORクエリが有用なケースも多い
  • 9. ORクエリが有用な例  クエリ拡張  代表的な検索エンジンで”algorithm”と検索する と”アルゴリズム”が含まれる記事もヒットしたり する  このようにシノニムなどが含まれる記事もヒッ トするようにしたい場合はORクエリが使われる ○ この場合は”algorithm” OR “アルゴリズム”などのよ うになる ○ *検索エンジンの中の人ではないので本当にこうし てるかは知りません
  • 10. ORクエリが有用な例  類似検索  表示されてる文章から類似の文章を検索する  ex : コンテンツ連動型広告、関連文表示  文章中の単語が全部含まれてるというのはあり えないので、ANDクエリでは文章がヒットしな い
  • 11. 話の流れ  転置インデックスについて  TAAT, DAAT  Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 12. ORクエリの実装  ORクエリの高速化について見ていく前に naiveな実装について説明する  代表的な手法として  TAAT(Term-at-a-time)  DAAT(Document-at-a-time)  の2つが存在する
  • 14. TAATの例  例として”iwc OR rolex OR watch”というクエリ を考える  初めに空のアキュムレータを作成する accumulator = {} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 15. TAATの例  iwcに関する転置リストをaccumulatorに入 れる accumulator = {1,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 16. TAATの例  rolexに関する転置リストをaccumulatorと マージする accumulator = {1,2,3,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 17. TAATの例  watchに関する転置リストをaccumulatorと マージする accumulator = {1,2,3,4,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 18. TAATの例  結果文章1,2,3,4,5がクエリに適合すること が分かる accumulator = {1,2,3,4,5} iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 19. TAATのメリット・デメリット  実装が簡単  シーケンシャルアクセス中心になるので データがファイルに格納されてる時に割と 性能がよい  最近流行してるsuffix treeなどのデータ構造 系と相性が良い [G. Navarro and Y. Nekrich 2012]  アキュムレータがORの結果が多くなるほど 負荷が大きくなる
  • 20. DAATについて  クエリに関する転置インデックスを文章番 号順に処理していく
  • 21. DAATの例  各単語の転置インデックスの先頭にカーソ ルを設定する iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 22. DAATの例  カーソル上の文章番号の最も小さい文章を 処理する  この場合は1 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 23. DAATの例  カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 24. DAATの例  カーソル上の文章番号の最も小さい文章を 処理する  この場合は2 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 25. DAATの例  カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 26. DAATの例  カーソル上の文章番号の最も小さい文章を 処理する  この場合は3 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 27. DAATの例  カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 28. DAATの例  カーソル上の文章番号の最も小さい文章を 処理する  この場合は4 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 29. DAATの例  カーソルを次に進める iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 30. DAATの例  カーソル上の文章番号の最も小さい文章を 処理する  この場合は5 iwc 1 5 rolex 2 3 5 watch 1 2 4 5
  • 32. DAATのメリット・デメリット  文章番号の小さい順に処理をするところは Priority Queueというデータ構造を使うと効率 的に処理できる  例えばLuceneのorg.apache.lucene.search. DisjunctionSumScorerの実装が参考になる  アキュムレータを持つ必要がない  文章ごとに処理していくので、フィルタ処理な どとの相性が良い  例えば値段が50万円以下のもののみ出力する、メン ズ用品のみ出力するなど  Luceneの実装もDAATになっている  ファイルへのランダムアクセスが多い
  • 33. 話の流れ  転置インデックスについて  TAAT, DAAT  Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 34. OR検索をどうやって高速化するか  単純にORでマッチする全部を取る必要があ る場合は候補数が多い時にどうやっても処 理に時間を要する  しかし、検索結果の上位数件だけ必要であ れば上位に来る可能性がない文章の評価を スキップすることにより、処理の高速化が 可能となる  このような問い合わせに対して上位k件のみ 取り出すことをtop-k query processingと呼 ぶ
  • 35. 文章のランク付け  上位k件を出力するためには、クエリに対して どの文章の順位が高いかを決定する必要がある  どういった文章が適合してるかを考えてみる  例えば“watch”のみ含まれる文章では置時計や動詞の watchが含まれる文章もヒットし、また数も大量にあ るため、”iwc”のみが含まれる文章の方が関連性が高 いと考えられる  また”iwc”のみ含まれるページより”iwc”と”rolex”を含 むページの方が関連性が高い  “iwc”を1回含む文章よりも2回含む文章の方が関連度 が高い
  • 36. 文章のランク付け  クエリ = (1 , … , )に対して、文章のス コアを , = ( , )の形で 表す  ( , )は文章における の出現頻度、 の珍しさなどが加味された値となる  またこの後の議論の都合上 , ≥ 0 を仮定する  この形のスコアリング関数にはTF-IDF, BM25などの多くの代表的なものが含まれる
  • 37. 転置インデックスの拡張  転置インデックスに対して、scoreの値およ び各単語のscoreの最大値を付与する  図では(文章番号, スコア)という形式で書く iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,2) (4,1) (5,1) max_score=2
  • 38. 話の流れ  転置インデックスについて  TAAT, DAAT  Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 39. max_score [H.R. Turtle and J. Flood, 1995]  今上位k位に入るための閾値が4だとすると watchのみ含む文章はmax_score=2から絶対 に候補に入ることが無いことを利用する iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 40. max_scoreの例1  上位1件のみ取ることを考える  最初の文章1を評価するとスコアは6になる iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 41. max_scoreの例1  1位のスコアが6のため”watch”+”rolex”ではスコ アが5にしかならないので、候補となる文章は 必ず”iwc”を含まなければならない iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 42. max_scoreの例1  ”iwc”のカーソルを進める iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 43. max_scoreの例1  他の2つに関しては”iwc”を含まないものを評価しても意 味が無いので文章5まで飛ばす  実装上ここで効率的に飛ばすためには転置インデックスに100 個先までのポインタなどを持たせる必要がある iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 44. max_scoreの例1  文章5を評価してスコアが4であることを得 る iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 45. max_scoreの例1  全て見たので終了  処理の中で文章1,5のみを評価しており、2,3,4 の評価を飛ばせている iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,3) (5,1) max_score=3 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 46. max_scoreの例2  上位1件のみ取ることを考える  ただ前のとスコアの設定が違う  最初の文章1を評価するとスコアは6になる iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 47. max_scoreの例2  1位のスコアが6のため”watch”のみではスコア が2にしかならないので、候補となる文章は必 ず”iwc”か”rolex”を含まなければならない iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 48. max_scoreの例2  “iwc”のカーソルを進める iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 49. max_scoreの例2  “watch”の方は文章2まで飛ばす iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 50. max_scoreの例2  文章2を評価してスコアが3であることを得 る iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 51. max_scoreの例2  “rolex”のカーソルを進める  “watch”の方は3以降に飛ばす iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 52. max_scoreの例2  文章3を評価して、スコアが5であることを 得る iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 53. max_scoreの例2  “rolex”のカーソルを進める  “watch”の方は5以降に飛ばす iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 54. max_scoreの例2  文章5を評価してスコアが4であることを得 る iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 55. max_scoreの例2  一連の流れで文章1,2,3,5の評価を行なって いる iwc (1,5) (5,2) max_score=5 rolex (2,2) (3,5) (5,1) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 56. max_score 補足  今上げた2つの例では文章1が最も大きいス コアになる例であったが、文章の途中のも のが1番になった場合、閾値もそれにあわせ て変化していく  例2では閾値が6のときに”iwc”と”rolex”を含 むの代わりに”iwc”と”watch”を含むとしても 良かったが、通常は転置リストの長いもの もしくはスコアが低いものから候補から除 外していく
  • 57. max_scoreの性能  例えば[M. Fontoura+, 2011] では約340万文 章、3GBの広告データに対して平均長57.76 のクエリ検索を行った場合  Naive DAAT 26778.3 μsec  DAAT max_score 9321.3 μsec  と2.8倍近い性能改善が報告されている  * この辺りの性能改善率に関しては検索エン ジンの性能および文章の性質に強く依存す る
  • 58. topdocsの利用[T. Stohman+, 2005]  極端にスコアが大きい文章のみ別の転置インデックスに 分ける  実装によってはメタデータに格納することもある  下の例ではこれにより文章2より先は”iwc”もしくは”rolex_2”が 入った文章のみ評価すれば良いことが分かる iwc (1,5) (5,2) max_score=5 rolex_1 (2,2) (5,1) max_score=2 rolex_2 (3,5) max_score=5 watch (1,1) (2,1) (4,2) (5,1) max_score=2
  • 59. 話の流れ  転置インデックスについて  TAAT, DAAT  Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 60. 閑話: modernな転置インデックスの機能  多くの場合転置リストはブロックごとに圧 縮されて格納されている  例えば転置リストの内容が{1,3,6,8,15,16}で あれば{1,3},{6,8},{15,16}と分けられており、 内部は圧縮されている  圧縮アルゴリズムはVbyte, Simple9, PForDeltaなどがある.  例えば[H. Yan+, 2009]などが参考になる
  • 61. ブロック圧縮された転置インデックス に対する検索手法  ブロックは圧縮されているのでなるべく decode処理を飛ばしたい  またデータをブロック単位で持ってるので ブロックごとのスコアの最大値や最小値を 持つことができる  ブロック圧縮された転置インデックスに対 する検索手法はここ最近2件ほど独立に手法 が提案されている  [K. Chakrabarti+, 2011] [S. Ding and T. Suel, 2011]  今回は主に[K. Chakrabarti+, 2011]の紹介を行う
  • 62. Interval-based pruning for top-k processing over compressed lists  ここからは最近の研究である  K. Chakrabarti, S. Chaudhuri and V. Ganti : Interval-based pruning for top-k processing over compressed lists, ICDE, 2011  の紹介を行う  著者はMicrosoft Researchの研究者
  • 63. モチベーション  k=1のとき、通常のmax_scoreを実行すると文章9 の時点でスコアが8になり、1 の転置リストのみ では1位に届かないのでブロックDは飛ばせる  一方で文章3を見た時にスコアが3になり、ブロッ クBの最大値は2であるため本来はdecodeしなく てもよいが通常のmax_scoreではここをdecodeし てしまう max_score=5 max_score=6 [K. Chakrabarti+, 2011]より
  • 64. 提案手法  与えられたクエリに対するブロックから区 間を作成して、Upper boundが現在の閾値以 上の区間のみ評価する [K. Chakrabarti+, 2011]より
  • 65. 例  論文のFig1の例、数値は一部変えてある A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1)
  • 66.  区間を生成して、取り得る最大のスコアを 計算する 区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16] max score 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 67.  始めの区間に関して, max_scoreを実行する  このときブロックA,Fをデコードする 区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16] max score 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 68.  一位のスコアが5となるので、続く2つの区 間は見なくてよい  ブロックBのデコードはスキップされる 区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16] max score 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 69.  区間(8,9]を処理して、文章9のスコアが8で あることを得る  このときブロックCがデコードされる 区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16] max score 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 70.  残りは全てスキップできる 区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16] max score 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 71. Interval-baseの利点  max_scoreがglobalな最大値のみ使うのに対 して、ブロックごとの最大値を利用できる のでより枝刈りが利用できる  区間の数は高々ブロックの数の2倍程度にし かならない  通常ブロックには100個程度の文章idが格納され ているので、長さ10万程度の転置リストでもブ ロックは1000個程度しかないので、区間の生成 はほとんど負荷にならない
  • 72. 区間へのアクセス方法  例では前から順に区間にアクセスしていっ たが論文ではこれをPruneSeqと言っている  他にはPruneScoreOrder, PruneHybrid, PruneLazyというアクセス方法を提案してい る
  • 73. PruneScoreOrder  スコアが高い区間から順にアクセスする  下の例では最初の区間で最大値を得るので、残 りは全てスキップできる 区間 [1,3] (3,5) [5,8] (8,9] (9,11] (11,12] (12,14] (14,15) [15,16] max score 6 3 4 8 5 1 2 0 7 A B C D E (1,3) (3,3) (5,1) (8,1) (9,5) (11,2) (12,1) (14,2) (15,1) (16,1) F G (1,2) (9,3) (15,6) (16,1
  • 74. PruneHybrid  PruneScoreOrderの欠点として、  ランダムアクセスが多く発生すること  同じ転置リストのブロックに何回もアクセスするこ とがある ○ これに関して論文ではキャッシュを用意して、なるべ くディスクから読む回数及びデコード回数を少なくす るという工夫が成されている  これに対してPruneHybridでは上位x%の区間の みPruneScoreOrderを実施し、そこで得た閾値 を元にPruneSeqを実施するというのが PruneHybridである  x=0のときPruneSeqと一致し  x=100のときPruneScoreOrderと一致する
  • 75. PruneLazy  転置リストのIOがランダムになることを防 ぐため  1. 一定量の区間のブロックをメモリに読み 込む  このときdecodeは行わない  2. 読み込んだ区間に関して、スコア順に区 間を処理していく  閾値によってはいくつかの読み込んだブロック に関してはdecodeは飛ばされる  を繰り返す
  • 76. 実験結果  TREC Terabyte (800万ページ)のデータセッ トで実験  max_scoreに近い手法に比べて3-6倍の性能改善 [K. Chakrabarti+, 2011]より
  • 77. 話の流れ  転置インデックスについて  TAAT, DAAT  Top-k Query  max-score  inteval-based prunning  other method ○ wand ○ layered-index
  • 78. WAND [A. Broder+, 2003]  転置リストを先頭の文章番号の順に並べて、 pivotとなるtermの文章番号より前にある転置リ ストのカーソルを進める手法  今閾値が7であるとすると”rolex”のみでは閾値に届か ないので”iwc”も必要になる. このため”rolex”のカーソ ルを5以降に飛ばしてよいことが分かる  max_scoreだと”watch”の方を除外してしまうので文 章2,3を評価してしまう rolex (1,1) (2,5) (3,1) max_score=5 iwc (1,5) (5,2) pivot term max_score=5 watch (1,1) (6,1) (7,2) (8,3) max_score=3
  • 79. WANDの変形  WANDの改良としては  メモリ上の実行に適したmWAND [M. Fontoura+, 2011]  ブロック情報を利用したBlock-max WAND (BMW) [S. Ding and T. Suel, 2011]  がある  両論文とも割と読みやすい
  • 80. Layered-index [T. Stohman and W. Croft, 2007]  スコアに応じて、転置リストを複数に分ける  クエリの評価はTAATベースで行い、スコアが高いリスト から順にマージしていく  途中でこれ以上アキュムレータにないものを追加しても上位k件 に入らないときはアキュムレータ内のみで評価する. アキュム レータ内のものでも上位k件に入る可能性の無いものを除外する などの最適化が行われる iwc_1 (1,8) max_score=8 rolex_1 (2,5) (4,6) max_score=6 rolex_2 (5,4) (6,4) max_score=4 iwc_2 (4,3) (5,2) max_score=3 rolex_3 (1,1) (3,1) max_score=1
  • 81. まとめ  転置インデックスに対してdisjunctiveなクエ リで問い合わせを行った際に上位k件を取っ てくるためのDAAT(Document-at-a-time) ベースの効率的な手法について述べた  この辺りの論文はquery-processingという キーワードでSIGIRなどの情報検索系の会議 によく投稿される
  • 82. 参考文献  情報検索の基本的な教科書  [S. Büttcher+ 2010] Information Retrieval: Implementing and Evaluating Search Engines, MIT Press  Max-score  [H.R. Turtle and J. Flood, 1995] Query evaluation: strategies and optimization. Information processing and management  [T. Stohman+, 2005] Optimization strategies for complex queries, SIGIR  [K. Chakrabarti+, 2011] Interval-based pruning for top-k processing over compressed lists, ICDE  WAND  [A. Broder+, 2003] Efficient query evaluation using a two-level retrieval process, CIKM  [M. Fontoura+, 2011] Evaluation strategies for top-k queries over memory-resident inverted indexes, VLDB  [S. Ding and T. Suel, 2011] Faster top-k document retrieval using block-max indexes, SIGIR  Layered Index  [V. N. Anh and A. Moffat, 2006] Pruned query evaluation using pre-computed impacts, SIGIR  [T. Stohman and W. Croft, 2007] Efficient document retrieval in main memory, SIGIR  その他  [H.Yan+ 2009] Inverted index compression and query processing with optimized document ordering, WWW  [G. Navarro and Y. Nekrich 2012] Top-k Document Retrieval in Optimal Time and Linear Space, SODA