2014-11-15 6 views
0

이것은 내 코드의 일부입니다.쿼리의 idf는 문서의 idf와 동일합니까?

  idf=self.getInverseDocFre(word) ##this idf is from the collection 
      qi=count*idf 
      di=self.docTermCount[docid][word]*idf 
      similiarity+=qi*di 
      similiarity/=self.docSize[docid] 

는이 웹 http://www.site.uottawa.ca/~diana/csi4107/cosine_tf_idf_example.pdf

내 질문의 예입니다 https://en.wikipedia.org/wiki/Vector_space_model#Example:_tf-idf_weights

위키 피 디아는 경우 쿼리에 대한 IDF 컬렉션에서 같은 IDF하다는 것을이다?

그래서 내가 similiarity에 대해 idf를 두 번 곱해야하는 이유는 무엇입니까?

내가 쿼리 부분에 대한 idf의 개념에 대해 틀렸을 까봐 두렵다.

답변

1

당신은 당신의 콜렉션의 문서와 같은 공간에 쿼리를 표현해야합니다. 즉, 워드 -> 벡터의 변환이 문서와 쿼리 모두에 동일해야합니다. 그렇지 않으면 당신은 사과를 오렌지. 이 변환은 용어를 추출하고 컬렉션에서 IDF를 계산하면 해결됩니다. 일단 이것을 사용하면 새로운 표현을이 표현으로 나타낼 수 있습니다.

는 쿼리 정확하게 문서 (예를 들어, D2) 중 하나라고 상상 :

d2 = [0 0 0.584 1.584 0 0.584] # new york post 
query = [0 0  1  1 0  1] # new york post 

당신이 유사성이 하나가 될 것으로 예상이 경우. 쿼리 TF에 해당 IDF (컬렉션에서 가져온 IDF)를 곱하면이 방법이 사용되지 않습니다. 카운트 (용어 빈도) 만있는 벡터는 각 구성 요소가 해당 idf로 곱해진 벡터와 병렬이되지 않습니다 (모든 idf가 같은 특수한 경우 제외). 그래서 문서가 이미 곱해 졌기 때문에 쿼리를 곱해야하는 이유이기도합니다.