min-wise 独立性による文書類似度の算出とランダムサンプリング手法 (1998)
Min-Wise Independent Permutations
Brahms サンプリング[1] の論文に出てきた Min-Wise Independent Permutations[2] (1998) という特性を使ったアルゴリズムが興味深かったのでその論文を読み解いたまとめと昔話。
論文は AltaVista Search が文書の類似度を効率的に算出するために提案した min-wise 独立置換族 (min-wise independent permutation family; 最小値独立置換族) の特性と、実際にそれを使用した類似度の算出方法やランダムサンプリングの方法について書かれていた。紙面の多くが証明と置換族
AltaVista の前夜話
昔々、DEC というコンピュータ企業があった。Intel の Pentium プロセッサがいよいよ 100MHz を超えたと騒いでいた時期に DEC Alpha シリーズは 500MHz を達成していて当時は非常に高い技術力を持った企業だった。しかし往時の Sun Microsystems と同じく、企業が独自のアーキテクチャを売りとする時代は終焉を迎え、惜しまれながら Compaq に合併吸収された企業である (その後に Compaq も合併吸収され現 HP に至る)。
また DEC は黎明期のインターネットを支えた企業で、ネットを構成するサーバやルーターに DEC の VAX マシンがよく使われていた。ポピュラーな通信プロトコルの改行コードが CRLF を採用していたりバイト順序がビッグエンディアンを採用しているあたりは当時の VAX の名残である。
そんな DEC は Google ができる以前に AltaVista Search という強力な Web 検索サービスを持っていた。日本語が使い物にはならなかったので国内では依然として goo、Excite、Yahoo! などが主流だったが、当時の英語圏での全文検索エンジンとしての評判は抜きん出て高かったことを記憶してる。
さて、全文検索では 2 つの文書
当時の AltaVista は重複文書の検出のために
ここで問題がある。愚直に w-shingling を適用するにはすべての文書に含まれるすべての単語を保存しておく必要がある。しかし世界中から収集した膨大な量の文書をそのような形で保存するのは現実的ではない。そこで DEC のエンジニアは、1 文書ごとに min-wise で 1000 程度の単語をランダムに抽出してそれを比較すれば良いんじゃね? 🤔といううまい方法 (後述) を思いついたようである。そのランダムサンプリングと類似度算出に必要な数学的特徴を説明するために min-wise 独立という特徴が導入された。
min-wise 独立置換族
まず min-wise 独立とはどういう性質かを定義しよう。
定義 1: ある集合
に含まれる任意の要素 X を範囲 x \in X に写す写像の族を \{0,\ldots,M-1\} とする。 \mathcal{F} から一様にランダムに選んだ写像 \mathcal{F} が次の条件を満たすとき、族 \pi は min-wise 独立である。 \mathcal{F}
{\rm Pr}\left(\min\{\pi(X)\}=\pi(x)\right)=\frac{1}{|X|}
min-wise 独立性を持つ置換族を min-wise 独立置換族 (min-wise independent permutations family; 最小値独立置換族) と呼ぶ。 \mathcal{F}
ここでの置換 (permutation) とは "並べ換え", "入れ替え", "交換" の意味で、写像、つまり関数や変換マップのようなものを指している。族とは同じ数学的特徴を持った集まりである。
\pi と置換族 \mathcal{F}
置換 厳密さは置いておいて、置換
import secrets
import hashlib
def choose_pi_at_random_from_f():
sigma = secrets.token_bytes(16)
return lambda x: hashlib.sha256(sigma + x).digest()
pi = choose_pi_at_random_from_f()
print(pi(b"abc").hex()) // 実行ごとに変わるが同じπとxに対して同一の値となる256-bit 値
SHA-256 のハッシュ値は 256-bit なので上記の
min-wise 独立の意味と応用
さらに集合
この性質がランダムサンプリングとどう関係しているのだろうか? 🤔 上記を逆に説明すると「min-wise 独立な性質を持つハッシュ関数
異なる
近似 min-wise 独立性
我々は SHA-256 のような暗号論的ハッシュ関数がおおむねランダムなハッシュ値を生成することを経験的に知っているが、しばしばそれが数学的に証明および保証された性質ではないことに注意する必要がある。少なくとも (現実的に困難な頻度ながらも) 強衝突を持つハッシュ関数は定義 1 を満たすことはできないだろう。したがって、厳密にはここまでの説明で使用した
しかし、
定義 2: ある集合
に含まれる任意の要素 X を範囲 x \in X に写す写像の族を \{0,\ldots,M-1\} とする。 \mathcal{F} から一様にランダムに選んだ写像 \mathcal{F} が次の条件を満たすとき、族 \pi は近似 min-wise 独立である。 \mathcal{F}
\left|Pr(\min\{\pi(X)\}=\pi(x)) - \frac{1}{|X|}\right| \le \frac{\epsilon}{|X|}
定義 2 での緩和は、最小値となる確率がそれぞれの要素で異なることを許すが、その差はある (微少な) 定数の範囲内であるということを述べている。
なお、この近似 min-wise 独立に対して定義 1 の性質を厳密 min-wise 独立と呼ぶ。
制約 min-wise 独立性
定義 3: ある集合
に含まれる任意の要素 X を範囲 x \in X に写す写像の族を \{0,\ldots,M-1\} とする。 \mathcal{F} から一様にランダムに選んだ写像 \mathcal{F} が次の条件を満たすとき、族 \pi は制限 min-wise 独立である。 \mathcal{F}
Pr(\min\{\pi(X)\}=\pi(x)) = \frac{1}{|X|},\;\; |X|\le k
AltaVista での局所性に依存する応用
さて話を戻して、AltaVista Search は min-wise 独立の性質をどのように文章の類似度計算に応用したのだろうか。論文によれば先の w-shingling 類似度は min-wise 独立な
つまり「文書
とりあえずこの式が成立すると仮定すると、次のようなアルゴリズムで文書の類似度を求めることができる。
- 設定: min-wise 独立な族
から異なる\mathcal{F} を\pi 個用意し、それぞれをn とする (おおむね\pi_i 程度)。n=1000 - 保存: 文書
をインデックスするときに、各A に対して最小となる単語\pi_i を算出して保存する。\min\{\pi_i(S_A)\}=w_{A,i} - 比較: 文書
とA の類似度は、各B に対してi とw_{A,i} が等しい数÷w_{B,i} である。n
この比較ステップは単語集合の和と積を都度構築しなければならない愚直な Jaccard 係数算出より遙かに低コストであることは明らかだろう。
さらに、AltaVista Search が実際に採用していた置換族
min-wise 独立置換族の応用
AltaVista Search の話題で min-wise 独立の性質が文書の類似度を算出するのに大きく役立つことを示した。この AltaVista の類似度算出スキームは MinHash という名前で知られている。しかし、いま時点で自然言語処理において古典的と言われる手法でも TF-IDF + コサイン類似度を使うのが一般的であるように思うため、w-shingling に依存するこの方法がどこまで現代に向いているかは分からない。
また min-wise 独立性で任意の集合からランダムサンプリングに使用できることも示した。この利点は、まず、集合
現代の min-wise 独立は、どちらかというと文書類似度の算出よりも大規模データ処理の方が適用局面は多いかも知れない。
-
BORTNIKOV, Edward, et al. Brahms: Byzantine resilient random membership sampling. In: Proceedings of the twenty-seventh ACM symposium on Principles of distributed computing. 2008. p. 145-154. ↩︎
-
BRODER, Andrei Z., et al. Min-wise independent permutations. In: Proceedings of the thirtieth annual ACM symposium on Theory of computing. 1998. p. 327-336. ↩︎
Discussion