NLP/AI/Statistics

Word Representation: TF-IDF 본문

NLP

Word Representation: TF-IDF

Danbi Cho 2020. 10. 15. 19:17

앞서 Bag-of-Words 에 대하여 설명하였는데, 이 때 빈도 기반의 bag-of-words에서 주의해야할 점이 있다.

 

Bag-of-Words는 빈도 기반이기 때문에 문서 혹은 문장에서 자주 등장할 수 밖에 없는 관사, 조사, 지칭어 같은 불용어가 존재한다.

 

예를 들어, 영어에서는 the나 a, 한국어에서는 그, 이, 이다. 등이 불용어에 포함된다.

 

이 때 불용어를 처리하는 방법으로는 stop words를 정의하여 특정 단어를 제거한 상태에서 텍스트를 처리하거나

 

영어에서는 대문자를 소문자로 통일시켜 처리하는 방법이 있지만,

 

이처럼 특정 단어를 제거하거나 다른 단어로 대체하는 불용어는 텍스트의 의미를 갖지 않아 제거해도 문장의 의미를 흐트리지 않는 용어를 말한다.

 

하지만 자주 등장한다고 해서 무조건 무의미한 단어로 판단할 수는 없다.

 

이러한 문제를 해결하여 유의미하게 자주 등장하는 단어에 가중치를 처리하는 방법인 TF-IDF가 소개되었다.

 

TF-IDF(Term Frequency-Inverse Document Frequency)는 단어의 빈도와 문서의 빈도를 조합하여 

 

문서 내의 단어가 얼마나 중요한 값을 나타내는지 가중치를 부여하는 방법이다.

 

TF-IDF는 문서의 유사도를 구하거나 검색 엔진 시스템에서 키워드에 따른 중요도를 나타내는 작업으로 활용되며, 

 

문서 내의 중요 단어를 추출하는 방법으로도 사용된다.

 

TF-IDF를 구하기 위해 우선적으로 TF와 IDF를 구한다.

 

1) TF (Term Frequency): tf(d, t)

 

TF는 말 그대로, 단어의 빈도를 의미한다.

 

특정 문서 d에 대하여 특정 단어 t의 빈도를 의미하며,

 

tf(d, t)의 인자로 구현된다.

 

이 부분까지는 앞의 Bag-of-Words와 동일하다.

 

2) DF (Document Frequency): df(t)

 

DF는 특정 단어 t가 등장한 문서의 수를 의미한다.

 

예를 들어, 

 

1) 나는 바나나를 좋아해

2) 나는 포도를 좋아해

3) 나는 딸기를 싫어해

 

와 같이 3개의 문서에서 '좋아해'라는 단어는 총 2번 (1, 2번 문장) 등장한다. (df = 2)

 

이처럼 특정 단어가 총 몇개의 문서에서 등장했는가를 의미한다.

 

이 때, 특정 단어가 특정 문서에서 발생한 빈도는 고려하지 않는다.

 

즉, 2번 문장에서 '좋아해'라는 단어가 2번 혹은 100번이 나오더라도 문서 내의 빈도는 고려하지 않고,

 

단지 특정 단어가 등장한 문서의 수 만을 고려하기 때문에 df는 2이다.

 

3) IDF (Inverse Document Frequency): idf(d, t)

 

IDF는 df의 역수를 의미하지만 구체적인 식은 다음과 같다.

 

$$idf(d, t) = log(\frac{n}{df(t)})$$

 

이 때 df의 역수$(\frac{n}{df(t)}),\ n\ =\ 전체\ 문서\ 수$에서

 

총 문서의 수(n)가 커질수록 IDF 값이 기하급수적으로 증가하는 것을 막기 위해 log를 취해준다.

 

위에서 정의한 TF와 IDF를 곱하여 결론적으로 TF-IDF를 구할 수 있다.

$$TF-IDF(d, t) = tf(d, t) * log(\frac{n}{df(t)})$$

 

TF-IDF는 sklearn 패키지에서 구현된 모듈을 제공하고 있다.

 

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

 

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

 

scikit-learn.org

 

Comments