stop-the-world

takuya-a のブログ

Information Retrieval and Web Search まとめ(23): 重複検知

前回は Web クローラの要件やそのアーキテクチャについて解説した。今回は、重複した文書の検知について扱う。

この記事は Information Retrieval and Web Search Advent Calendar 2020 の23日目の記事です。

adventar.org

重複ページの検知

  • Web には重複コンテンツがたくさんある
  • 厳密な重複検知(= 完全一致 (exact match))は一般的ではない
  • だが、準重複 (near duplicate) 検知の例は非常に多い
    • 例:ページ内容は同じだが更新日だけが違う

重複・準重複検知

  • 重複 (duplication): 完全一致はフィンガープリント (fingerprint) によって検知できる
  • 準重複 (near-duplication): 近似マッチ (approximate match)
    • 構文的な類似度を編集距離によって計算する
    • その類似度の閾値で準重複コンテンツを検知する
    • これは推移的にはならないが、推移的として扱うこともある
      • A と B、B と C がそれぞれ準重複だったとして、A と C は準重複とは限らない

類似度の計算

  • 特徴量
    • 文書のセグメント
      • 自然な、もしくは人工的な場所で分割
    • shingles
      • 単語 n-gram などを使う
  • 類似度の指標
    • それぞれの文書の shingles に対して定義される
    • ジャッカード係数 (Jaccard coefficient)
      • 共通集合の要素数 / 和集合の要素数
  • 文書 dj のshingleを S(dj) で表すとすると、文書 d1d2 のジャッカード係数は
J(S(d1),S(d2))=|S(d1)S(d2)||S(d1)S(d2)|

スケッチ

  • shingles どうしの正確な共通集合 (intersection) S(di)S(dj) を計算するのは高コスト
  • それぞれの shingles から、部分集合を賢く選んで近似する
    • 近似した shingles の部分集合をスケッチ (sketch) と呼ぶ
  • 共通集合の要素数 / 和集合の要素数J(S(d1),S(d2)))を、スケッチから推定する

スケッチベクトルの計算とジャッカード係数の推定

  • 各文書に対してスケッチベクトル (sketch vector) を作成する
    • スケッチベクトルの次元数 m は ~200 次元
    • スケッチベクトルの要素が t 以上(80% 以上など)かぶっている文書は準重複 (near duplicate) であるとみなせる
  • 準備
    • 文書の shingles を 1..2m のいずれかの値に写像する、以下のような集合関数 H() を用意する
      • H(dj) は、文書 dj の shingles S(dj) の各要素のハッシュ値からなる集合
      • m=64 のとき、H(dj) の要素は 64 ビット非負整数のいずれかの値をとる
    • 1..2m のランダムな置換 (permutation) π() を用意する
      • 1..2m1..2m のいずれかの値にランダムに入れ替える写像
      • 置換は全単射なので異なる値が同じ値に写像されることはない
    • H(dj) の各要素を π によって置換したものを Π(dj) とする
      • H(dj) の各要素 hH(dj) に対して、対応する値 π(h)Π(dj) が存在する
  • 文書 djπ によるスケッチ xjπmin(Π(dj))Π(dj) のうち最小の整数)で計算される

f:id:takuya-a:20201223235614p:plain
(IIR p.439 Figure 19.8) スケッチ計算の例

  • このスケッチの計算を 200 個のランダム置換 π1,π2,...,π200 に対して行う
    • 200 次元のスケッチベクトルを計算する場合
  • このようにして得られた 200 個のスケッチ xjπ1,xjπ2,...,xjπ200 を並べたものを、文書 j のスケッチベクトル ϕj とする
  • 文書 i と文書 j のペアに対するジャッカード係数 J(S(di),S(dj))|ϕiϕj|/200 で推定する

置換の効率化

  • ランダムな置換は計算コストが高い
  • 線形の置換でも実用上はうまくいく
    • 大きな素数 p に対して、以下のような {0, ..., p-1} 上の置換の集合を考える
Fp={πa,b:1ap1,0bp1}whereπa,b(x)=ax+bmodp

まとめ

  • shingling は乱択アルゴリズム (randomized algorithm) である
    • なんの確率モデルも仮定していない
    • ある確率で正しい答えを返す
  • 文書のペアに対して準重複検知を行う方法を示した

講義資料

参考資料