본문 바로가기

딥러닝/[딥 러닝을 이용한 자연어 처리 입문]딥러닝

TF-IDF(Term Frequency-Inverse Document Frequency)

DTM 내에 있는 각 단어에 대한 중요도를 계산할 수 있는 TF-IDF 가중치

TF-IDF를 사용하면, 기존의 DTM을 사용하는 것보다 보다 많은 정보,  성능을 얻을 수 있습니다.

 

1. TF-IDF(단어 빈도-역 문서 빈도, Term Frequency-Inverse Document Frequency)

 

 단어의 빈도와 역 문서 빈도(문서의 빈도에 특정 식을 취함)를 사용하여 DTM 내의 각 단어들마다 중요한 정도를 가중치로 주는 방법

 

주로 문서의 유사도를 구하는 작업

검색 시스템에서 검색 결과의 중요도를 정하는 작업

문서 내에서 특정 단어의 중요도를 구하는 작업

 

TF-IDF는 TF와 IDF를 곱한 값

문서를 d, 단어를 t, 문서의 총 개수를 n이라고 표현할 때

 

(1) tf(d,t) : 특정 문서 d에서의 특정 단어 t의 등장 횟수.

 

각 단어들이 가진 값

DTM이 각 문서에서의 각 단어의 등장 빈도를 나타내는 값

 

(2) df(t) : 특정 단어 t가 등장한 문서의 수.

 

특정 단어 t가 등장한 문서의 수

 

(3) idf(d, t) : df(t)에 반비례하는 수.

 

idf(d,t)=log(n1+df(t))

 

 log를 사용하지 않았을 때, IDF를 DF의 역수(ndf(t)라는 식)로 사용한다면 총 문서의 수 n이 커질 수록, IDF의 값은 기하급수적으로 커지게 됩니다. 그렇기 때문에 log를 사용합니다.

log를 씌워주지 않으면, 희귀 단어들에 엄청난 가중치가 부여될 수 있습니다. 

log 안의 식에서 분모에 1을 더해주는 이유는 첫번째 이유로는 특정 단어가 전체 문서에서 등장하지 않을 경우에 분모가 0이 되는 상황을 방지하기 위함입니다.

 

TF-IDF는 모든 문서에서 자주 등장하는 단어는 중요도가 낮다고 판단하며, 특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단합니다.

 

 IDF 계산을 위해 사용하는 로그의 밑은 TF-IDF를 사용하는 사용자가 임의로 정할 수 있는데, 여기서 로그는 마치 기존의 값에 곱하여 값의 크기를 조절하는 상수의 역할을 합니다.

각종 프로그래밍 언어에서 패키지로 지원하는 TF-IDF의 로그는 대부분 자연 로그를 사용합니다.

자연 로그는 로그의 밑을 자연 상수 e(e=2.718281...)를 사용하는 로그를 말합니다. 

자연 로그는 보통 log라고 표현하지 않고, ln이라고 표현합니다.

 

분모의 경우에는 각 단어가 등장한 문서의 수(DF)를 의미

IDF는 여러 문서에서 등장한 단어의 가중치를 낮추는 역할을 하기 때문입니다.

 

2. 파이썬으로 TF-IDF 직접 구현하기

 

IDF의 값이 0이 되어 더 이상 가중치의 역활을 수행하지 못하는 경우를 막기 위해 조정식 사용.

 

 

3. 사이킷런을 이용한 DTM과 TF-IDF 실습

 

 CountVectorizer를 사용하면 DTM을 만들 수 있습니다.

사이킷런은 TF-IDF를 자동 계산해주는 TfidfVectorizer를 제공합니다.