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

転置インデックスと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