2012-08-08 6 views
6

좋아, 그래서 나는 약간 혼란 스럽다. 그러나 이것은 단순한 직접적인 질문이어야합니다. 검색에 대한 가장 유사한 문서를 얻을 수TF-IDF 간단한 사용법 - NLTK/Scikit Learn

array([[ 0.85..., 0. ..., 0.52...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 1. ..., 0. ..., 0. ...], 
     [ 0.55..., 0.83..., 0. ...], 
     [ 0.63..., 0. ..., 0.77...]]) 

가 어떻게이 결과를 사용합니까 :

은 전체 코퍼스에 대한 문서의 TF-IDF 매트릭스를 계산 한 후,이 매우 유사한 결과를 얻을 수 질문? 기본적으로 위키피디아 검색 창을 다시 만들려고합니다. 검색 쿼리를 기반으로 Wikipedia에서 가장 관련있는 기사를 반환하고 싶습니다. 이 시나리오에는 6 개의 기사 (행)가 있으며 검색어에는 3 단어 (열)가 포함되어 있습니다.

모든 결과를 열에 추가하거나 모든 행을 추가합니까? 더 큰 가치가 가장 관련성이 있습니까? 아니면 가장 낮은 가치가 가장 관련성이 있습니까?

답변

4

cosine similarity에 익숙하십니까? 각 기사 (벡터 A)에 대해 쿼리 (벡터 B)와의 유사성을 계산합니다. 그런 다음 내림차순으로 순위를 정하고 가장 높은 결과를 선택하십시오. 리팩터링을 원하는 경우 gensim 라이브러리가 우수합니다.

+1

글쎄 실제로이 튜토리얼을 따르고 있습니다 : http : //pyevolve.sourceforge.net/wordpress/? p = 1589 ... 원래 기사와 검색 쿼리 사이에 TF-IDF 벡터를 사용하는 방법은 무엇입니까? . – tabchas

+1

tf-idf를 가중치 체계로 사용한다면 여전히 쿼리를 표준화하고 싶을 것입니다. 행렬에는 세 가지 용어가 포함되어 있으며이 용어는 모두 쿼리에 표시됩니다. 따라서 질의의 원시 주파수 벡터는 (1,1,1)이다. sqrt ((1^2) + (1^2) + (1^2)) = 1.73 및 1/1.73 = 0.57이다. 따라서 쿼리 벡터는 (0.57,0.57,0.57)입니다. 이제 쿼리를 다른 문서로 처리 할 수 ​​있습니다. 이 쿼리 벡터와 다른 문서 벡터의 코사인 유사성은 내적입니다. 첫 번째 기사는 ((.57 * .85) + (.57 * 0) + (.57 * .52)) = 0.2964입니다. 모든 기사에 대해 이것을 반복하고 가장 높은 점수를 얻습니다. – verbsintransit

+0

그래서 일종의 분류기를 훈련 할 필요가 없습니까? – tabchas