🔖

Information Retrieval |07 Computing scores in a complete search system

2024/03/03に公開

Efficient scoring and ranking

  • コンセプトは、重要な文書のみをスコア計算の対象として、計算を効率化・高速化しよう。
    • 計算する文書をどうやって絞り込むかが重要。

Inexact top K document retrieval

概要

  1. 競合する文書のセットAを見つける。
    • K < |A| \leqq N
    • Aがクエリに対する上位スコアの文書を必ずしも含んでいるわけではない点に留意。
    • ただし、Aには上位K件のスコアに近い多くの文書を含んでいる可能性がある。
  2. Aの中からスコアが最も高いK件の文書を返す。

スコアリング効率化&高速化のアイディア

  • これまで、N個の全ての文書をスコアリングして、その中からクエリに対するスコアが最も高い上位K件の文書を正確に取得する方法を解説。

    • すなわち、全てのN個の全ての文書をスコアリングする必要があった。
    • 「正確」なTop-K文書
    • 正確ではあるが計算コストが大きくなる
  • 代案として、クエリに対するスコアが最も高い上位K件の文書に含まれる可能性のあるK件の文書を生成する手法を検討。

    • 「不正確」なTop-K文書
    • 出力するK件の文書の計算コストを大幅に低減
    • ユーザーが感じる上位K件の結果の関連性を実質的に変更しない。
    • 最適なK件のスコアに非常に近いK件の文書を取得することで十分であることがわかります。
    • コレクション内のN件の文書のほとんどのスコアを計算せずに、そのようなK件の文書を取得する手法について詳しく説明します。
  • コサイン類似度はユーザーが感じる関連性の代理指標に過ぎない。

  • ここでは、コサインスコアを計算せずに大量の文書を除外することを目的とした一連のアイデアを検討。

Index elimination

  • 複数の用語を含むクエリqに対して、少なくとも1つのクエリ用語を含む文書のみを考慮する。
    • 1つもクエリ用語を含まない文書は検索の結果候補から除外。
  1. クエリ用語qが複数ある場合、少なくとも1つのクエリ用語を含む文書のみを走査対象とする。

    • IDFが事前に設定された閾値を超える用語を含むドキュメントのみをスコア計算。
      • IDFは文書dにおける用語tの希少性。
    • IDF値が低い用語の投稿リストは一般に長いので、これらが走査対象から除外されると、コサインを計算するドキュメントのセットが大幅に減る。
    • IDF値が低い用語はストップワードとして扱われ、スコアには寄与しない。
    • カットオフの閾値はクエリに応じて調整できる。
  2. 多くの (特殊な場合としてはすべて) クエリ用語を含むドキュメントのみを走査対象とする。

    • クエリ用語のすべて (または多数) を含むドキュメントのみをスコア計算。
    • 出力に含まれるドキュメントの数が候補ドキュメントKよりも少なくなるリスクがある。

Champion lists

Champion Lists = 用語tに関して最もIDF値の高いr個の文書のサブセット

あるクエリqに含まれる各用語tによって作成されるChhampionListのセットをAとする。
例:Aは複数のChampionList(t_1のChampionList_1、t_2のChampionList_2…)から構成される。

  • rはチャンピオンリストに含めるか否かの閾値
    • IDF値が上位rの文書を用語tのChampionListに含める。
    • rはパラメータ。
    • rK(クエリ検索によって結果として表示されるドキュメントの数。自然数。)よりも大きい値である必要がある。
      • Kはアプリケーションに依存し、クエリを受信するまでわからない。
    • rはインデックスを生成するタイミングで設定される。
    • ChampionListのサイズ(r)は用語毎に異なっていてもOK
      • 希少な用語が含まれるドキュメントは、その用語に関連している可能性が高く、検索結果としてユーザーに提示されるべき

Static quality scores and ordering

  • 文書dに対して、クエリqの内容に依存しない静的な品質スコア(static quality score)を付与することができる。
    • 例:ユーザーからのレビュー数の多い記事に高いscoreを付与。
  • 静的な品質スコア(static quality score)をg(d)として表現する。
    • g(d)は0から1の間の値をとる。

net-score

net\_score(q,d) = g(d) + \frac{\vec{V}(d_1) \cdot \vec{V}(d_2)} {|\vec{V}(d_1)| |\vec{V}(d_2)|}
  • g(d)sim(q,d)は等しい寄与とする。すなわち、いずれも0〜1の範囲の値。
    • 他の重み付けも可能。ヒューリスティックな有効性。

static quality-ordered index

  • g(d)の値を降順にソートする。
  • Doc1、Doc2、Doc3 それぞれのstatic quality scoreがg(1)=0.25, g(2)=0.5, g(3)=1とすると、上記のようにソートされる。
  • 全てのposting listを共通ルールでソートすることによって効率的なポスティング交差アルゴリズムが実現可能。

チャンピオンリストの拡張方法

  1. 特定の用語に関連する文書の中からスコアが高いもの(Global Champion List)を選択して計算する方法。
  2. 高リストと低リストを用いることで、より関連性の高い文書(g(d)の上位m)から選択して計算する方法。
    -> いずれの方法も検索プロセスの速度と効率を向上させることが可能になる。

以下に2種類の具体的な手順を整理する。注:いずれも用語t単位での処理。

① Global Champion Listに対して計算

  • まず、適切に選ばれた値rに基づいて、各用語tについて、g(d)+tf\_idf(t,d)の値が最も高いr個の文書を含むグローバルチャンピオンリストを維持。
    • このリストは全ての用語において共通の順序(文書IDまたはstatic quality scoreによる)でソートされている。
  • クエリ時には、これらのグローバルチャンピオンリストの和集合に含まれる文書のみに対してネットスコアを計算
    • ネットスコアが大きくなりそうな文書に焦点を当てて効率的に計算。

g(d)の上位m個を優先して計算

  • 各用語tについて、g(d)の値によってソートされた、互いに素な(=互いの文書セットに含まれる文書が重複しない)文書セットからなる2つのポスティングリストを維持。
    • 一方のリスト(高リストと呼ぶ)には、用語tに対するtf値(=ある文書における用語tの出現回数)が最も高いm個の文書が含まれる。
    • もう一方のリスト(低リストと呼ぶ)には、tを含む他のすべての文書が含まれます。
  • クエリを処理する際には、まずクエリ用語の高リストのみをスキャンして、ある数以上のクエリ用語の高リストに載っている任意の文書のネットスコアを計算。
  • このプロセスでK個の文書のスコアが得られた場合は、処理を終了します。
  • そうでない場合は、低リストのスキャンを続け、これらのポスティングリストにある文書のスコアを計算します。

Impact ordering

  • Index elimination、Champion lists、Static quality scores and orderingを一般化した方法
  • インパクト順序付けは、スコアリングにおいて用語頻度{tf}_{t,d}以外の要素(idf(=用語tの希少性))を考慮する際に特に有用な概念
  • 用語tのposting list内の文書dが共通ルールでソートされていない場合の検索技術。
    • キーワードは「用語毎のスコアリング」。
    • 共通ルールでソートされておらず、同時トラバースを行うことができないInexact top-K retrieval(不正確なトップK検索)に対して適用可能。
    • 用語tのポスティングリスト内の文書dを、{tf}_{t,d}(=ある用語tが文書d内に何回出現するか)の降順でソートした場合。
      • 文書の順序はポスティングリストごとに異なる(=用語毎に異なる)。したがって、全てのクエリ用語のポスティングリストを同時に走査してスコアを計算することができない。
      • 用語ごとにスコアを積み上げ計算する。

計算を効率化するアイディア

1. r個の文書を計算またはtf(t,d)(=文書dにおける用語tの出現回数)の値が閾値以下となったら計算終了

  • クエリ用語tのポスティングリストを走査する際に、ポスティングリストのプレフィックスを考慮した後に停止する。
  • 固定数rの文書を見た後、または{tf}_{t,d}の値が閾値以下に下がった後に停止する。

2. idf(=用語tの希少性)が閾値以下となったら計算終了

  • 外部ループでスコアを蓄積する際に、idfの降順でクエリ用語を考慮することで、最終スコアに最も貢献する可能性のあるクエリ用語から先に考慮します。
  • idf(=用語tの希少性)が低いクエリ用語に到達すると、前のクエリ用語の処理からの文書スコアの変化に基づいて進行するかどうかを判断。
    • これらの変化が最小であれば、残りのクエリ用語からの蓄積を省略するか、またはポスティングリストの短いプレフィックスを処理。

Cluster pruning

cluster pruning

  1. クラスタリングプルーニングでは、文書ベクトルをクラスタリングする前処理ステップがある。
  2. クエリ時には、少数のクラスタ内の文書のみを候補として考慮し、それらの文書に対してコサインスコアを計算する。

① 前処理ステップ

  • N個の文書からなる集合からランダムに\sqrt{N}個の文書を選び出し、これらをリーダーと呼びます。
  • リーダーではない各文書について、最も近いリーダーを計算します。
  • リーダーではない文書をフォロワーと呼びます。直感的には、ランダムに選ばれた\sqrt{N}個のリーダーを使用したフォロワーの分割では、各リーダーに対するフォロワーの期待数は\approx N/\sqrt{N} = \sqrt{N}となります。

② クエリ処理

  • クエリqに最も近いリーダーLを見つけます。これには、qから\sqrt{N}個のリーダーへのコサイン類似度を計算することが含まれます。
  • 候補セットAは、Lとそのフォロワーで構成されます。この候補セット内の全文書に対してコサインスコアを計算します。

ランダムに選ばれたリーダーを使用したクラスタリングは、ベクトル空間内の文書ベクトルの分布を反映する可能性が高く、文書が密集しているベクトル空間の領域は、複数のリーダーを生み出し、より細かいサブリージョンに分割する可能性があります。

クラスタリングプルーニングのバリエーションでは、追加のパラメータb_1b_2(どちらも正の整数)を導入します。前処理ステップでは、各フォロワーを単一の最も近いリーダーではなく、b_1個の最も近いリーダーに関連付けます。クエリ時には、クエリqに最も近いb_2個のリーダーを考慮します。明らかに、上記の基本的なスキームはb_1=b_2=1の場合に対応します。さらに、b_1またはb_2を増やすことで、より多くの計算を伴いますが、真のトップスコアリングK個の文書のセットに含まれる可能性のあるK個の文書を見つける可能性が高まります。(このアプローチはクラスタリングを説明する際に紹介)。

Components of an information retrieval system

  • これまでに開発されたアイデアを組み合わせて、ドキュメントを取得してスコアを付ける基本的な検索システムを説明。
  • ベクトル空間だけでなく、他のクエリ演算子を用いた検索にも触れる。

Tiered indexes

  • Top-K検索でヒューリスティックス(例:インデックス削除)を使用する際、文書のセットAK個未満の文書しか含まない状況に遭遇することがある。
    -> 問題の一般的な解決策は、Tiered indexesの使用です。
  • Tiered Indexesはチャンピオンリストの一般化。

概要

  • Tiered indexesは、異なる品質(下記具体例においてはtf値)の文書を階層的に管理する方法
  • より高いtf値を持つ文書(より関連性が高い可能性がある文書)は上位のTierに配置され、tf値が低い文書は下位のTierに配置される。
  • これにより、検索クエリを処理する際に、まず上位のTierから関連する文書を探す。上位のTierではK個の文書を見つけられなかった場合、下位のTierへと探索を拡大する。
  • Tiered indexesを使用することで、効率的にTop-Kの文書を見つけることができ、同時に検索処理の負荷を軽減することが可能になる。

具体例

tiered index

  • 上記例では、Tier1のtf閾値を20、Tier2のtf閾値を10に設定。
    • すなわちTier1インデックスはtf値が20を超えるPosting(=文書)のみを含み、Tier2インデックスはtf値が10を超えるPosting(=文書)のみを含むことを意味する。
    • この例では、Tier内のPostingを文書IDによって順序付けることを選択。

Query-term proximity

  • ユーザーは、クエリ用語が互いに近い位置で現れる文書を好む傾向にある。
  • その文書がユーザーのクエリ意図に焦点を当てたテキストを含んでいる証拠だから。
    • クエリ用語の近接性は、特にウェブ上でのフリーテキストクエリ(第19章)において重要。

概要

  • 2つ以上のクエリ用語t_1, t_2, \ldots, t_kを含むクエリを考る。
    • 文書d内で全てのクエリ用語を含む最小のウィンドウの幅を\omegaとする。この幅はウィンドウ内の単語数で測る。
      • 例えば、文書が単に「The quality of mercy is not strained」という文から構成されている場合、クエリ「strained mercy」に対する最小のウィンドウは4となる。
        • 「mercy」から「strained」までのウィンドウには、合計で4つの単語(「mercy」、「is」、「not」、「strained」)が含まれる。
    • 直感的に、\omegaが小さいほど、文書dはクエリによくマッチしている。
    • 文書が全てのクエリ用語を含んでいない場合は、\omegaを非常に大きな数値に設定することができる。
    • また、ストップワードを除外して\omegaを計算する方法も考えられる。
      • 上記例の場合は、「is」、「not」をストップワードとして除外して、合計で2つの単語(「mercy」、「strained」)が含まれることとなる。
    • このような近接性に重み付けされたスコアリング関数は、純粋なコサイン類似度からの逸脱であり、Googleや他のウェブ検索エンジンが明らかに使用している「ソフトな論理積」セマンティクスにより近いもの。

\omegaに依存する近接性に重み付けされたスコアリング関数をどのように設計できるか?

  • 最も単純な答えは、以下の第7.2.3節で紹介する「hand coding(手作業によるコーディング)」技術に依存。
  • よりスケーラブルなアプローチは、整数\omegaをスコアリング関数の別の特徴として扱い、その重要性は機械学習によって割り当てられる。

Designing parsing and scoring functions

  • 検索インターフェース、特にWeb上の消費者向け検索アプリケーションでは、エンドユーザーからクエリオペレータを隠蔽する傾向がある。

issues

  • さまざまな検索オペレータ用のインデックスを備えた検索システムがどのように扱うべきか
  • 文書のスコアに影響を与える可能性のあるさまざまな要因をどのように組み合わせるべきか

概要

  • 通常、クエリパーサーを使用してユーザーが指定したキーワードをさまざまなオペレータを含むクエリに変換し、それを基礎となるインデックスに対して実行する。
  • この実行には、複数のクエリが基礎となるインデックスに対して行われることがあり、例えば、クエリパーサーは以下のような一連のクエリを発行する:
  1. ユーザーが生成したクエリ文字列をフレーズクエリとして実行し、3つの用語「rising interest rates」から成るベクトルをクエリとしてベクトル空間スコアリングでランク付けする。
  2. 「rising interest rates」というフレーズを含む文書が10件未満の場合、「rising interest」と「interest rates」の2つの2語フレーズクエリを実行し、これらもベクトル空間スコアリングでランク付けする。
  3. それでも10件未満の結果しか得られない場合、3つの個別のクエリ用語から成るベクトル空間クエリを実行する。

集約スコアリング関数の必要性

  • これらのステップが発動されると、それぞれのスコア付けされた文書リストが得られ、それぞれの文書に対してスコアを計算。
  • このスコアは例えば以下の計算方法の組み合わせを組み合わせる必要がある
    • ベクトル空間スコアリング
    • 静的品質
    • 近接性の重み付け
    • その他の要因からの寄与
  • これらを組み合わせて最終的なスコアを計算するには、各スコアを蓄積する集約スコアリング関数が必要。

スコアリング関数とクエリパーサーを設計するための機械学習の利用

  • クエリパーサーと集約スコアリング関数をどのように設計するかは設定によって異なる。
  • 多くのエンタープライズ環境では、アプリケーションビルダーが利用可能なスコアリングオペレータのツールキットとクエリパーシングレイヤーを使用して、スコアリング関数とクエリパーサーを手動で設定する。
  • 一方、Web検索では、文書コレクションが常に変化しており、スコアリング要因が数百に及ぶことがあり、手動でのスコアリングが困難である。
  • これに対処するため、機械学習によるスコアリングの使用が一般的になりつつあり、これについては別の章で紹介。

Putting it all together

all together

処理のステップを箇条書きにすると、以下のようになります:

  1. 文書はパーシングと言語処理(言語および形式の検出、トークン化、ステミング)のために入力される。
  2. パースされた文書のコピーが文書キャッシュに保持され、クエリの結果リストに各文書を伴うテキストスニペットの生成が可能になる。
    • スニペットとは、検索結果に表示される文書の小さなテキストの断片であり、ユーザーにその文書がクエリにどのようにマッチするかの簡潔な説明を提供することを目的とする。
  3. トークンのストリームがインデクサーの銀行に供給され、各文書のメタデータを格納するゾーンおよびフィールドインデックス、(階層的な)位置インデックス、スペリング修正やその他の許容検索のためのインデックス、および不正確なTop-K検索を加速するための構造を含むインデックスの銀行が作成される。
  4. フリーテキストユーザークエリが直接およびスペリング修正候補を生成するモジュールを通じてインデックスに送られる。
  5. 検索された文書がスコアリングモジュールに渡され、機械学習に基づくランキング(MLR)を使用して文書のスコアが計算される。
  6. ランク付けされた文書が結果ページとして表示される。

Vector space scoring and query operator interaction

  • この章ではベクトル空間スコアリングモデルがクエリオペレータとどのように関連しているかについて議論する。
  • ベクトル空間モデルはフリーテキストクエリのためのパラダイムとして導入された。
  • 検索エンジン構築時には、複数のクエリオペレータをサポートすることが考慮される。
  • さまざまなクエリオペレータを実行するためにインデックスのどのコンポーネントを共有できるか、及びさまざまなクエリオペレータを混在させたユーザークエリをどのように扱うかを理解する必要がある。
  • ベクトル空間スコアリングはフリーテキスト検索をサポートし、クエリオペレータなしで単語のセットとしてクエリが指定されることを可能にする。
  • 古典的なフリーテキストクエリの解釈は、検索された文書に少なくとも1つのクエリ用語が存在することであった。
  • 近年、Googleなどのウェブ検索エンジンは、クエリボックスに入力された用語のセットが、全てまたはほとんどのクエリ用語を含む文書のみを検索する論理積クエリの意味論を持つという概念を普及させている。

Boolean retrieval

復習

  • ブール検索は、AND、OR、NOTのような論理演算子を用いて、特定の条件を満たす文書を正確に選び出すのに適した検索アルゴリズム

Vector space indexとの関係

  • ブールインデックスはデフォルトで用語の重み情報を保持しない
  • ベクトル空間インデックスにおける非ゼロのベクトル成分をブールインデックスのTrueとして扱うことで、ベクトル空間インデックスを用いてブールインデックスと同様の機能を実現できる。
  • しかし、ブールインデックスを用いてベクトル空間インデックスを実現することはできない。
    • 標準的なブールインデックスは重み情報を保持しないから
      • 数学的には、いわゆるp-ノルムを使用してブールクエリとベクトル空間クエリを組み合わせることは可能。しかしこの事実を利用するシステムは現在のところ存在しない。

Wildcard queries

復習

  • ワイルドカードクエリは、特にテキスト検索において柔軟な検索を可能にする強力な機能。
  • ユーザーは、不明瞭な部分をワイルドカード(通常は*や?)で置き換えることによって、部分一致や前方一致など、あいまいなクエリを構成することができる。
    • ワイルドカードで置き換えられた後の用語が複数あれば、全てクエリベクトル空間に追加される。

Vector space indexとの関係

  • どちらも基本的に投稿と辞書(例えば、ワイルドカードクエリのためのトライグラムの辞書)を使用して実装できる。
  • それ以外は異なる実装。
  • 標準的なベクトル空間クエリに、例えばワイルドカードクエリのためのトライグラムの辞書を追加保持することで、ベクトル空間クエリを用いてワイルドカードクエリを実装できる。
    • ワイルドカードクエリによって生成される複数の用語をベクトル空間内で扱い、それらをクエリベクトルに追加して、通常のベクトル空間検索と同様に文書をスコアリングしランク付けする。

Phrase queries

復習

  • フレーズクエリは、文書内で特定の単語や用語が特定の順序で連続して出現することを検索条件とするクエリ。

Vector space indexとの関係

  • ベクトル空間検索は用語の出現頻度や文書内での分布を重視し、フレーズ検索は用語の正確な配置や順序を重視する。

  • 一般的には、ベクトル空間検索用に構築されたインデックスは、フレーズクエリには使用できない。さらに、フレーズクエリに対するベクトル空間スコアを要求する方法はなく、文書内の各用語の相対的な重みのみがわかる。

    • フレーズクエリについて、文書をベクトルとして表現することは本質的に情報の損失を伴う。文書内の用語の相対的な順序は、文書をベクトルとしてエンコードする際に失われる。
  • これら2つの検索パラダイム(フレーズとベクトル空間)は、場合によっては有用に組み合わせることができる(セクション7.2.3のクエリ解析の3ステップの例)。

参考文献

Christopher D. Manning, Prabhakar Raghavan and Hinrich Schütze, Introduction to Information Retrieval, Cambridge University Press. 2008.
https://nlp.stanford.edu/IR-book/html/htmledition/computing-scores-in-a-complete-search-system-1.html

Discussion