コンピュータサイエンスとデータマイニングにおいて、MinHash(または最小独立順列局所性敏感ハッシュ方式)は、2つのセットの類似性を迅速に推定するための手法です。この方式は、1997年の会議でAndrei Broderによって発表され[ 1 ] 、当初はAltaVista検索エンジンで重複するWebページを検出して検索結果から除外するために使用されました[ 2 ] 。また、単語セットの類似性に基づいて文書をクラスタリングするなど、大規模なクラスタリング問題にも適用されています[ 1 ] 。
ジャッカード類似度係数は、2つの集合間の類似性を示す指標としてよく用いられます。Uを集合とし、AとBをUの部分集合とすると、ジャッカード指数は、それらの共通部分の要素数と和集合の要素数の比として定義されます。
この値は、2 つの集合が互いに素な場合は 0 、等しい場合は 1、それ以外の場合は 0 から 1 の間の値をとります。2 つの集合の Jaccard 指数が 1 に近いほど、類似性が高い(つまり、共通する要素が相対的に多い)と言えます。MinHash の目的は、J ( A , B )を明示的に計算することなく、迅速に推定することです。
h を集合Uの要素を異なる整数にマッピングするハッシュ関数とし、 perm を集合Uの要素のランダムな順列とする。また、 Uの任意の部分集合Sに対して、 h min ( S )をh ∘ permに関してSの最小要素、すなわちh ( perm ( x ))の値が最小となるSの要素xと定義する。(使用するハッシュ関数が擬似乱数性を持つと仮定される場合は、ランダムな順列は使用しない。)
ここで、h minをAとB の両方に適用し、ハッシュ衝突がないと仮定すると、すべての要素の中で、値が等しい ( h min ( A ) = h min ( B ) ) のは、最小ハッシュ値を持つ要素は、交差部分にあります。このことが真である確率はジャッカード係数と全く同じであるため、次のようになる。
つまり、h min ( A ) = h min ( B )が真である確率は、一様分布からパームを抽出すると仮定すると、類似度J ( A , B )に等しくなります。言い換えれば、rがh min ( A ) = h min ( B )のときに 1 、それ以外のときに 0 となる確率変数である場合、 rはJ ( A , B )の不偏推定量です。rは分散が大きすぎるため、単独では Jaccard 類似度の有用な推定量にはなりません。は常にゼロかイチです。MinHash方式の考え方は、同じ方法で構築された複数の変数を平均化することで、このばらつきを低減することです。
minhash スキームの最も単純なバージョンでは、 k 個の異なるハッシュ関数を使用します。ここで、kは固定の整数パラメータであり、各セットSは、これらのk個の関数に対するh min ( S )のk個の値によって表されます。
このバージョンのスキームを使用してJ ( A , B )を推定するには、 h min ( A ) = h min ( B )となるハッシュ関数の数をyとし、y / k を推定値として使用します。この推定値はk 個の異なる 0-1 確率変数の平均であり、それぞれはh min ( A ) = h min ( B )のときに 1 、それ以外の場合は 0 となり、それぞれが J ( A , B )の不偏推定値です。したがって、それらの平均も不偏推定値であり、0-1 確率変数の和の標準偏差により、期待誤差はO(1/ √ k )となります。[ 3 ]
したがって、任意の定数ε > 0に対して、推定値の期待誤差が最大でεとなるような定数k = O(1/ ε 2 )が存在します。例えば、期待誤差が 0.05 以下となるようにJ ( A , B )を推定するには、400 回のハッシュが必要になります。
複数のハッシュ関数を計算すると計算コストが高くなる可能性があるが、関連する MinHash スキームのバージョンでは、単一のハッシュ関数のみを使用し、ハッシュ関数ごとに最小値を 1 つだけ選択するのではなく、各セットから複数の値を選択するためにそれを使用することで、このペナルティを回避している。h をハッシュ関数とし、k を固定整数とする。S が h の定義域内の k 個以上の値の任意のセットである場合、h ( k ) ( S ) を、h の最小値を持つ S の k 個の要素のサブセットとして定義する。このサブセットh ( k ) ( S )はセットSの署名として使用され、任意の2つのセットの類似性は、それらの署名を比較することによって推定される。
具体的には、AとBを任意の 2 つの集合とします。このとき、X = h ( k ) ( h ( k ) ( A ) ∪ h ( k ) ( B )) = h ( k ) ( A ∪ B )はA ∪ Bのk個の要素の集合であり、h がランダム関数である場合、 k個の要素の任意の部分集合が等しい確率で選択されます。つまり、XはA ∪ Bの単純ランダムサンプルです。部分集合Y = X ∩ h ( k ) ( A ) ∩ h ( k ) ( B )は、 Xの要素のうち、共通部分A ∩ Bに属する要素の集合です。したがって、| Y |/ kはJ ( A , B )の不偏推定量です。この推定器と複数のハッシュ関数によって生成される推定器との違いは、Xは常に正確にk個の要素を持つのに対し、複数のハッシュ関数では、2つの異なるハッシュ関数が同じ最小値を持つ可能性があるため、サンプリングされる要素の数が少なくなる可能性がある点です。ただし、kが集合のサイズに比べて小さい場合、この違いは無視できる程度です。
非復元抽出における標準的なチェルノフ境界によれば、この推定量の期待誤差はO(1/ √k )であり、多重ハッシュ関数方式の性能に匹敵する。
推定値| Y | / kは、このスキームのどちらのバリアントでも、与えられたセットの 2 つのシグネチャからO( k )の時間で計算できます。したがって、 εとkが定数の場合、シグネチャから推定類似度を計算する時間も定数になります。各セットのシグネチャはセットのサイズに対して線形時間で計算できるため、多数のペアワイズ類似度を推定する必要がある場合、この方法は各セットのメンバーの完全な比較を行う場合と比較して、実行時間を大幅に節約できます。具体的には、セットサイズnの場合、多ハッシュバリアントはO( n k ) の時間を必要とします。単一ハッシュバリアントは一般的に高速で、n >> kを仮定すると、最小ハッシュ値のキューを維持するためにO( n )の時間が必要です。[ 1 ]
MinHashの計算に重みを導入するためのさまざまな手法が開発されてきた。最も単純な方法は、それを整数重みに拡張するものである。[ 4 ] ハッシュ関数hを拡張して、セットの要素と整数の両方を受け入れるようにし、各項目の重みに応じて複数のハッシュを生成する。項目iがn回出現する場合、ハッシュを生成する。拡張されたハッシュ値のセットに対して、元のアルゴリズムを実行します。そうすることで、衝突確率として重み付きジャッカード係数が得られます。
実数重みに対してより優れた実行時間でこの衝突確率を実現するさらなる拡張機能が開発されており、1つは密なデータ用[ 5 ] 、もう1つは疎なデータ用[ 6 ]である。
別の拡張機能群では、指数分布ハッシュを使用します。0から1の間の均一乱数ハッシュは、累積分布関数(CDF)の逆変換によって指数分布に従うように変換できます。この方法は、指数変数の集合の最小値が持つ多くの優れた特性を活用しています。
これにより、衝突確率として確率ジャッカード指数[ 7 ]が得られます。
上述のMinHashスキームを実装するには、ハッシュ関数hがn個の要素に対するランダムな順列を定義する必要があります。ここでnは、比較対象となるすべての集合の和集合に含まれる異なる要素の総数です。しかし、n !通りの異なる順列が存在するため、真にランダムな順列を指定するだけでもΩ ( n log n )ビットが必要となり、 nの値が中程度であっても、これは非現実的なほど大きな数になります。このため、ユニバーサルハッシュ理論になぞらえて、「最小値独立」な順列の族を見つける研究が盛んに行われてきました。これは、ドメインの任意の部分集合に対して、どの要素も最小値になる確率が等しいことを意味します。最小値独立な順列の族には、少なくとも
異なる順列が存在するため、単一の順列を指定するにはΩ ( n )ビットが必要となり、依然として非現実的に大きい。 [ 2 ]
上記の非実用性のため、最小値独立性の 2 つの変形概念が導入されました。制限付き最小値独立順列族と近似最小値独立族です。制限付き最小値独立性とは、最大でk の濃度を持つ特定の集合に制限された最小値独立性の性質です。[ 8 ] 近似最小値独立性とは、完全な独立性から変動する確率が最大で固定εであるものです。[ 9 ]
1999年にPiotr Indykは[ 10 ]、任意のk個の独立なハッシュ関数の族は、近似的に最小値独立でもあることを証明した。十分に大きい。特に定数がある。もし、 それから
すべてのセットについてそして(注:ここ)確率はせいぜい要因であることを意味する大きすぎる、そして最大小さすぎる。)
この保証は、とりわけ、MinHashアルゴリズムで必要とされるJaccard限界を与えるのに十分である。つまり、そして集合である場合、
k 個の独立したハッシュ関数は、ビットの場合、このアプローチは、完全に最小値で独立した順列を使用するよりもはるかに実用的です。
近似的に最小値独立性を提供するもう 1 つの実用的なハッシュ関数のファミリーは、表形式ハッシュです。
MinHash の当初の用途は、Web ドキュメント内の単語の集合として表現される、それらのドキュメント間のほぼ重複する単語のクラスタリングと削除でした。[ 1 ] [ 2 ] [ 11 ]同様の手法は、画像などの他のタイプのデータのクラスタリングとほぼ重複する単語の削除にも使用されています。画像データの場合、画像は、そこから切り取られたより小さなサブ画像の集合、またはより複雑な画像特徴記述の集合として表現できます。[ 12 ]
データマイニングにおいて、Cohen ら (2001)は MinHash をアソシエーションルール学習のツールとして使用しています。各エントリに複数の属性を持つデータベース (データベースエントリごとに 1 行、属性ごとに 1 列を持つ0-1 行列として見なされる) が与えられた場合、彼らは MinHash に基づく Jaccard インデックスの近似値を使用して、頻繁に共起する属性の候補ペアを特定し、それらのペアのみのインデックスの正確な値を計算して、共起頻度が特定の厳密な閾値を下回るペアを決定します。[ 13 ]
MinHash アルゴリズムはバイオインフォマティクスに応用されており、ゲノム配列の比較問題は、ウェブ上のドキュメントの比較問題と同様の理論的根拠に基づいています。MinHash ベースのツール[ 14 ] [ 15 ]を使用すると、全ゲノムシーケンスデータと参照ゲノム を迅速に比較できます(1 つのゲノムをRefSeqの 90000 個の参照ゲノムと比較するのに約 3 分)。また、種分類や、おそらく限定的な微生物のサブタイピングにも適しています。メタゲノミクス[ 14 ]や、ゲノムアライメントとゲノムアセンブリのための MinHash 由来のアルゴリズムの使用にも応用されています。[ 16 ] MinHash ベースのアルゴリズムを使用すると、正確な平均ヌクレオチド同一性 (ANI) 値を非常に効率的に生成できます。[ 17 ]
MinHash スキームは、局所性に敏感なハッシュ化の一例と見なすことができます。局所性に敏感なハッシュ化とは、ハッシュ関数を使用してオブジェクトの大きなセットをより小さなハッシュ値にマッピングする一連の手法であり、2 つのオブジェクト間の距離が小さい場合、それらのハッシュ値は同じになる可能性が高くなります。この場合、セットのシグネチャはそのハッシュ値と見なすことができます。セット間のハミング距離やベクトル間のコサイン距離についても、局所性に敏感なハッシュ化手法が存在します。局所性に敏感なハッシュ化は、最近傍探索アルゴリズムにおいて重要な応用があります。 [ 18 ]大規模な分散システム、特にMapReduceでは、点次元に依存しない類似性を計算するのに役立つ MinHash の修正バージョンが存在します。[ 19 ]
2006年にGoogleは、MinhashとSimHash [ 21 ]アルゴリズム の性能を比較する大規模な評価を実施しました[ 20 ] 。2007年には、GoogleはWebクローリングの重複検出にSimhashを使用し[ 22 ] 、 GoogleニュースのパーソナライゼーションにMinhashとLSHを使用していると報告しました[ 23 ] 。