可能なすべてのペアを比較する必要なく、類似した候補アイテムのペアを見つけることができるように、コサイン局所性に敏感なハッシュを作成しようとしています。基本的には機能していますが、データ内のほとんどのペアは-0.2から+0.2の範囲でコサイン類似度を持っているようですので、細かくダイシングしてコサイン類似度0.1以上のものを選択しようとしています。
私は大量データセットのマイニングの第3章を読んでいます。これは、局所性に敏感なファミリーを増幅することにより、候補ペアの選択の精度を高めることについて説明しています。私は数学的な説明を理解するところだと思いますが、これを実際に実装する方法を見るのに苦労しています。
これまでのところは次のとおりです
- 100万人のユーザーの一部の選択からの評価付きの1000本の映画と言っています。各映画は、ユーザースコアのスパースベクトルで表されます(行番号=ユーザーID、値=ユーザーのスコア)
- N個のランダムなベクトルを作成します。ベクトルの長さは、映画のベクトルの長さ(つまり、ユーザー数)と一致します。ベクトル値は+1または-1です。私は実際にこれらのベクトルをバイナリとしてエンコードしてスペースを節約し、+ 1を1に、-1を0にマッピングします
- 映画とN個のランダムベクトルのそれぞれのドット積をとって、各映画のスケッチベクトルを構築します(または、N個のランダムベクトルを水平に配置し、それらを互いの上に重ねてからスケッチで行列Rを作成した場合は、スケッチ映画mはR * m)であり、結果のベクトルの各要素の符号を取るので、+ 1と-1の各映画のスケッチベクトルで終わります。各ベクトルは長さNビットです。
- 次に、次のようにして類似のスケッチを探します
- スケッチベクトルをrビットのbバンドに分割します
- rビットの各バンドは数値です。その番号をバンド番号と組み合わせて、その番号の下のハッシュバケットに映画を追加します。各ムービーは複数のバケットに追加できます。
- 次に、各バケットを調べます。同じバケットにある映画はすべて候補ペアです。
これをmmdsの3.6.3と比較すると、私のANDステップは、rビットのバンドを見るときです。rビットの値が同じであれば、2つのムービーがANDステップを通過します。私のORステップはバケットで発生します。両方のバケットに含まれている映画は候補ペアです。
この本は、ANDとORのステップを追加することで結果を「増幅」できることを示唆していますが、追加のレイヤーの構築プロセスの説明は、ペアワイズの同等性のチェックではなく、バケット番号を考え出す。
誰かがこれを行う方法を理解するのを手伝ってくれる?