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)