私の意図は、HDBSCANを使用してdoc2vecからドキュメントベクトルをクラスター化することです。セマンティックとテキストの重複がある小さなクラスターを見つけたいと思います。
これを行うために、私はgensimを使用してドキュメントベクトルを生成しています。結果のdocvecsの要素はすべて[-1,1]の範囲にあります。
2つのドキュメントを比較するために、角度の類似性を比較したいと思います。これを行うには、ベクトルのコサイン類似度を計算します。これは正常に機能します。
ただし、ドキュメントをクラスター化するには、HDBSCANには、類似性マトリックスではなく、距離マトリックスが必要です。コサイン類似度からコサイン距離へのネイティブ変換sklearn
は1-similarity
です。ただし、この式を使用すると、三角不等式が破られ、真の距離メトリックになることができなくなる可能性があることを理解しています。同様のタスクについて他の人のコードを検索して見ると、ほとんどの人がsklearn.metrics.pairwise.pairwise_distances(data, metric='cosine')
コサイン距離を定義するものを使用しているよう1-similarity
です。適切な結果が得られるようです。
これが正しいのか、それとも代わりに角距離を使用する必要があるのか、として計算されnp.arccos(cosine similarity)/pi
ます。また、l2で正規化されたドキュメントベクトルでユークリッド距離を使用する人もいます。これはコサイン類似度と同等のようです。
クラスタリングのためにドキュメントベクトル間の距離を計算するための最も適切な方法を教えてください:)
適切なメトリックではないコーナーケースがあるにもかかわらず、実際にはコサイン距離が使用されていると思います。
「結果のドキュメントの要素はすべて[-1,1]の範囲にあります」とおっしゃっています。通常、これが当てはまるとは限りません。ただし、すべての生のdocベクトルをすでにユニット正規化した場合はそうなります。
その単位正規化を実行した場合、または実行したい場合、そのような正規化の後、ユークリッド距離は常にコサイン距離と同じ最近傍のランク付けされた順序を与えます。絶対値、およびそれらの間の相対的な比率は少し異なりますが、すべての「XはZよりもYに近い」テストは、コサイン距離に基づくテストと同じになります。したがって、クラスタリングの品質は、コサイン距離を直接使用する場合とほぼ同じである必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加