2012-02-27 6 views
3

은 (TF-IDF는 어떻게 python으로 gensim 도구로 구현 되었습니까? 난 코퍼스에서 용어 용어 빈도 및 역 문서 빈도 가중치를 결정하는 데 사용되는 식 냈 그물로부터 검색된 문서의

TF-IDF (중량) = TF의 * 로그 될 | N |/d);

나는 gensim에서 언급 한 tf-idf 구현을 진행하고있었습니다. 문서에 주어진 예는 분명히 TF - IDF의 표준 구현을 따르지 않는

>>> doc_bow = [(0, 1), (1, 1)] 
>>> print tfidf[doc_bow] # step 2 -- use the model to transform vectors 
[(0, 0.70710678), (1, 0.70710678)] 

입니다. 두 모델의 차이점은 무엇입니까?

참고 : 0.70710678은 일반적으로 고유 값 계산에 사용되는 값 2^(- 1/2)입니다. 고유 값은 TF-IDF 모델에 어떻게 들어 옵니까?

위키

답변

4

:

주어진 문서의 용어 수는 단순히 주어진 용어는 해당 문서에 표시되는 횟수입니다. 이 계수는 일반적 gensim source 라인 126-127 가입일 (문서에 관계없이 상기 용어의 실제 중요도 높은 기간 카운트를 가질 수있다) 긴 문서 향해 바이어스

않도록 정규화 :

if self.normalize: 
     vector = matutils.unitvec(vector) 
0

단어 (doc_bow), t0 및 t1 봉지에는 두 개의 토큰이 있습니다. t0와 t1이 하나의 문서 또는 두 개의 문서에 나타나는지는 알 수 없습니다. 그리고 모델 (tfidf)이 토큰을 포함하는 문서 위에 구축되었는지 여부조차도 알지 못합니다. bag 인 doc_bow는 단지 쿼리 (테스트 데이터)이며 t0 또는 t1을 포함하거나 포함하지 않을 수있는 교육 데이터로 작성된 모델입니다.

그럼 가정 해 봅시다. 2 개의 문서 d0와 d1에 구축 된 모델 tfidf는 d0에 t0, d1에 t1을 포함합니다. 따라서 총 문서 수 (N)는 2이고 용어 빈도와 문서 빈도는 1이됩니다.

Gensim은 기본값으로 IDF를 계산할 때 로그 기반 2를 사용하고 (df2idf 함수 참조) 변환 된 tfidf 벡터를 doc_bow는 [(0, 1), (0, 1)]과 같을 것입니다. (예 : tfidf (t0) = 1 * log_2 (| 2 |/1) = 1)

더하기 우리는 기본적으로 수행되는 L2 정규화를 고려해야하며 최종 출력은 [(0, 1/2^(1/2)), (0, 1/2^(1/2))]이다.