Information Retrieval and Web Search まとめ(23): 重複検知
前回は Web クローラの要件やそのアーキテクチャについて解説した。今回は、重複した文書の検知について扱う。
この記事は Information Retrieval and Web Search Advent Calendar 2020 の23日目の記事です。
重複ページの検知
- Web には重複コンテンツがたくさんある
- 厳密な重複検知(= 完全一致 (exact match))は一般的ではない
- だが、準重複 (near duplicate) 検知の例は非常に多い
- 例:ページ内容は同じだが更新日だけが違う
重複・準重複検知
- 重複 (duplication): 完全一致はフィンガープリント (fingerprint) によって検知できる
- 準重複 (near-duplication): 近似マッチ (approximate match)
- 構文的な類似度を編集距離によって計算する
- その類似度の閾値で準重複コンテンツを検知する
- これは推移的にはならないが、推移的として扱うこともある
- A と B、B と C がそれぞれ準重複だったとして、A と C は準重複とは限らない
類似度の計算
- 特徴量
- 文書のセグメント
- 自然な、もしくは人工的な場所で分割
- shingles
- 単語 n-gram などを使う
- 文書のセグメント
- 類似度の指標
- それぞれの文書の shingles に対して定義される
- ジャッカード係数 (Jaccard coefficient)
共通集合の要素数 / 和集合の要素数
- 文書
のshingleを
で表すとすると、文書
と
のジャッカード係数は
スケッチ
- shingles どうしの正確な共通集合 (intersection)
を計算するのは高コスト
- それぞれの shingles から、部分集合を賢く選んで近似する
- 近似した shingles の部分集合をスケッチ (sketch) と呼ぶ
共通集合の要素数 / 和集合の要素数
()を、スケッチから推定する
スケッチベクトルの計算とジャッカード係数の推定
- 各文書に対してスケッチベクトル (sketch vector) を作成する
- スケッチベクトルの次元数 m は ~200 次元
- スケッチベクトルの要素が t 以上(80% 以上など)かぶっている文書は準重複 (near duplicate) であるとみなせる
- 準備
- 文書
の
によるスケッチ
は
(
のうち最小の整数)で計算される
- このスケッチの計算を 200 個のランダム置換
に対して行う
- 200 次元のスケッチベクトルを計算する場合
- このようにして得られた 200 個のスケッチ
を並べたものを、文書 j のスケッチベクトル
とする
- 文書 i と文書 j のペアに対するジャッカード係数
を
で推定する
置換の効率化
- ランダムな置換は計算コストが高い
- 線形の置換でも実用上はうまくいく
- 大きな素数 p に対して、以下のような
{0, ..., p-1}
上の置換の集合を考える
- 大きな素数 p に対して、以下のような
まとめ
- shingling は乱択アルゴリズム (randomized algorithm) である
- なんの確率モデルも仮定していない
- ある確率で正しい答えを返す
- 文書のペアに対して準重複検知を行う方法を示した