(テキスト)ドキュメントをクラスタ化するには、ドキュメントのペア間の類似性を測定する方法が必要です。
次の2つの選択肢があります。
コサイン類似性とTF / IDFを用語の重み付けとして使用して、文書を用語ベクトルとして比較します。
カルバック・ライブラー発散など、 f発散を使用して各ドキュメントの確率分布を比較する
1つの方法を他の方法よりも好む直感的な理由はありますか(100語の平均ドキュメントサイズを想定)。
(テキスト)ドキュメントをクラスタ化するには、ドキュメントのペア間の類似性を測定する方法が必要です。
次の2つの選択肢があります。
コサイン類似性とTF / IDFを用語の重み付けとして使用して、文書を用語ベクトルとして比較します。
カルバック・ライブラー発散など、 f発散を使用して各ドキュメントの確率分布を比較する
1つの方法を他の方法よりも好む直感的な理由はありますか(100語の平均ドキュメントサイズを想定)。
回答:
テキストドキュメントの場合、特徴ベクトルは非常に高次元であり、標準的な表現(バッグオブワードまたはTF-IDFなど)のいずれかの下でスパースになる可能性があります。このような表現の直下の距離を測定することは、非常に高い次元では2点間の距離が同じように見えることが知られているため、信頼できない場合があります。これに対処する1つの方法は、PCAまたはLSA(潜在セマンティック分析、潜在セマンティックインデックス付けとも呼ばれます)を使用してデータの次元を減らし、新しい空間で距離を測定することです。PCAではなくLSAのようなものを使用すると、低次元の空間で距離を測定する以外に、「セマンティックコンセプト」の観点から意味のある表現を提供できるため、有利です。
確率分布に基づいてドキュメントを比較するには、通常、最初に各ドキュメントのトピック分布を計算し(Latent Dirichlet Allocationのようなものを使用)、次にドキュメントのペアのトピック分布間の何らかの分岐(KL分岐など)を計算します。ある意味では、実際にはLSAを最初に実行してから、ベクトル間のKL発散を使用して(コサインの類似性の代わりに)LSA空間の距離を測定することに似ています。
KL発散は、分布を比較するための距離の尺度であるため、ドキュメント表現が何らかの分布の観点から望ましい場合があります(多くの場合、実際にそうです-たとえば、LDAのようにトピックの分布として表されるドキュメント)。また、このような表現では、特徴ベクトルのエントリの合計が1になることに注意してください(基本的に、ドキュメントはトピックまたはセマンティックコンセプトの分布として扱われるため)。
こちらの関連スレッドもご覧ください。
コサインドキュメントの類似性については、このオンラインサービスをお試しください。http://www.scurtu.it/documentSimilarity.html
import urllib,urllib2
import json
API_URL="http://www.scurtu.it/apis/documentSimilarity"
inputDict={}
inputDict['doc1']='Document with some text'
inputDict['doc2']='Other document with some text'
params = urllib.urlencode(inputDict)
f = urllib2.urlopen(API_URL, params)
response= f.read()
responseObject=json.loads(response)
print responseObject