문서를 군집화하려면 문서 쌍 간의 유사성을 측정하는 방법이 필요합니다.
두 가지 대안이 있습니다 :
코사인 유사성 -및 TF / IDF를 항의 가중치로 사용하여 문서를 항 벡터로 비교합니다 .
f-divergence를 사용하여 각 문서 확률 분포를 비교하십시오 (예 : Kullback-Leibler divergence)
한 가지 방법을 다른 방법보다 선호하는 직관적 인 이유가 있습니까 (평균 문서 크기가 100 항이라고 가정)?
문서를 군집화하려면 문서 쌍 간의 유사성을 측정하는 방법이 필요합니다.
두 가지 대안이 있습니다 :
코사인 유사성 -및 TF / IDF를 항의 가중치로 사용하여 문서를 항 벡터로 비교합니다 .
f-divergence를 사용하여 각 문서 확률 분포를 비교하십시오 (예 : Kullback-Leibler divergence)
한 가지 방법을 다른 방법보다 선호하는 직관적 인 이유가 있습니까 (평균 문서 크기가 100 항이라고 가정)?
답변:
텍스트 문서의 경우 피처 벡터는 표준 표현 (단어 또는 TF-IDF 등)에서 매우 차원이 높고 희박 할 수 있습니다. 이러한 표현에서 직접 거리를 측정하는 것은 매우 높은 치수에서 두 점 사이의 거리가 동일하게 보이기 시작한다는 알려진 사실이므로 신뢰할 수 없습니다. 이 문제를 해결하는 한 가지 방법은 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