본문 바로가기

Learning/Natural Language Processing

TF-IDF algorithm

Term Frequency-Inverse Document Frequency

WHY 

특정 단어가 특정 문서에서"만" 얼마나 자주 출현하는지 알아내기 위해 

 

WHAT 

특정 단어가 특정 문서에서 TF-IDF 값이 높으면 그 단어는 그 특정 문서에서만 높은 출현 빈도 

특정 단어가 특정 문서에서 TF-IDF 값이 낮으면 그 단어는 여러 문서에서 여러번 나타나거나 아니면, 특정 그 문서에 출현 빈도가 낮음 

 

HOW 

* TF 를 DF 로 나눈 것 -> 그래서 TF x inverse DF 

* TF : 특정 단어가 특정 문서에 등장한 횟수 

* DF : 특정 단어를 가지는 "문서" 자체의 수 / 모든 문서의 수 ( 모든 문서의 수  = 고정 값 = 상수 )

 

LIMITATIONs

* 긴 문서에는 각 단어들이 높은 빈도수, 짧은 문서는 각 단어들이 낮은 빈도수를 가질 수 있음 -> 즉, 문서의 길이가 TF-IDF 값에 영향을 줌 -> 그래서 DF에 log를 취해서 TF-IDF 의 scale 이 커지는 것을 막는다고 함 

 

INPUTs

DOC1: I am a student and he is not a student. 

DOC2: She is a student.
DOC3 : This is a desk. 

OUTPUTs

* pseudo count is 0 in this caes. 

Term TF in DOC1 TF in DOC2 TF in DOC3 IDF across 3 DOCs
TF-IDF
in DOC1
TF-IDF
in DOC2
TF-IDF 
in DOC3
I 1 0 0 log( 3 / (1 + pseudo count )) 
= 1.098612
1.098612 0 0
am 1 0 0 log( 3 / (1 + pseudo count ))
= 1.098612
1.098612 0 0
a 2 1 1 log( 3 / (3 + pseudo count ))
= 0
0 0 0
student 2 1 0 log( 3 / (2 + pseudo count ))
= 0.4054651
0.8109302 0.4054651 0
and 1 0 0 log( 3 / (1 + pseudo count )) 
= 1.098612
1.098612 0 0
he 1 0 0 log( 3 / (1 + pseudo count )) 
= 1.098612
1.098612 0 0
not 1 0 0 log( 3 / (1 + pseudo count ))
= 1.098612
1.098612 0 0
she 0 1 0 log( 3 / (1 + pseudo count ))
= 1.098612
0 1.098612 0
is 1 1 1 log( 3 / (3 + pseudo count )) 
= 0
0 0 0
this  0 0 1 log( 3 / (1 + pseudo count )) 
= 1.098612
0 0 1.098612
desk 0 0 1 log( 3 / (1 + pseudo count )) 
= 1.098612
0 0 1.098612

 

INTERPRETATIONs

* TF-IDF in DOC1, DOC2, DOC3를 보면 

1. 어떤 term이 각 문서에 unique하게 존재하는지 알 수 있다. 

2. 'a'와 'is' 는 모든 문서에 나타나서 TF-IDF가 0 이다 

3. 'student'는 DOC1에서 DOC2에 비해 두 배 더 많이 나타난다. 

4. TF-IDF profiles 이 DOC3과 비교했을 때  DOC1과  DOC2는 비슷한 경향을 보인다. 

 

APPLICATIONs

* TF-IDF matrix ( term x TF-IDF ) 는 문서간의 유사도를 계산하는 데 쓰인다고 함 ( with cosine similairty ) 

* sckit-learn 은 TF-IDF module 제공

scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html

 

sklearn.feature_extraction.text.TfidfVectorizer — scikit-learn 0.23.1 documentation

 

scikit-learn.org

 

COMMENTs
* 이 문서는 아래 웹사이트에서 얻은 정보들을 참조한 후 요약해놓은 것입니다. 

* 혹시나 잘못 설명된 부분이 있다면, 댓글을 달아주세요. 

 

REFERENCEs 
http://bcho.tistory.com/1216 (2017) 

wiki.hash.kr/index.php/TF-IDF (2019)

www.slideshare.net/chiwanpark/presentation-31773587 (2014)