개발/문서 요약

TF-IDF(Term Frequency - Inverse Document Frequency)

 

TF-IDF(Term Frequency - Inverse Document Frequency)는 단어의 빈도와 역 문서 빈도를 사용하여 단어의 가중치를 나타내는 방법입니다.

 

간단하게 보겠습니다. 문서는 문장으로 이루어져 있습니다. 그리고 문장은 단어(term)로 구성됩니다. TF-IDF는 문서의 어떤 단어가 중요한지를 수치로 알려줍니다. 반대로 보면 단어가 문서에 대한 정보를 얼마나 가지고 있는가?를 의미합니다. 따라서 TF-IDF를 사용하여 문서와 단어의 관계를 수치로 확인할 수 있습니다.


TF(Term Frequency)

  • \(t\) : term
  • \(d\) : document
  • tf\((t,d)\) : \(d\)에 \(t\)가 나온 횟수

TF는 문서에 나온 단어의 빈도를 사용합니다. 문서에 어떤 단어가 많이 나온다면 그 단어는 중요한 단어일 것입니다.

예를 들어, 상어 가족 노래 일부를 보겠습니다.

아기 상어 귀여운 바닷속 아기 상어
엄마 상어 어여쁜 바닷속 엄마 상어

총 12개의 단어로 이루어진 가사에서 '상어'라는 단어가 가장 많이 나온 것으로 보아 상어가 중요한 단어라고 볼 수 있습니다.

\(t\) tf\((t,d)\)  \(t)\ tf\((t,d)\) 
아기 2/12 바닷속 2/12
상어 4/12 엄마 2/12
귀여운 1/12 어여쁜 1/12

 

하지만 TF를 적용할 수 없는 문장들도 있습니다. 다음은 엘빈 토플러의 명언입니다.

The illiterate of the 21st century will not be those who cannot read and write, but those who cannot learn, unlearn and relearn. 

 

the, those, who, and 가 각각 2번씩 가장 많이 등장합니다. 이 문장에서 중요한 단어는 learn이지만 관련 없는 단어들이 높은 점수를 나타내고 있습니다.

 

이를 보완하기 위한 방법으로 IDF를 적용합니다.


IDF (Inverse Document Frequency)

  • \(t\) : term
  • \(D\) : document
  • idf\((t,D)\) : \(log\) (\(D\)의 등장하는 \(t\)의 개수 / 전체 \(D\)의 개수/ )

TF-IDF는 다음과 같이 계산됩니다.

\( tdidf(t, d, D) = tf(t,d) \dot idf(t, D) \)

 

 

위키의 예시를 보겠습니다.

\(D1\) \(D2\)
\(t\) \(t \) count \(t\) \(t \) count
this 1 this 1
is 1 is 1
a 2 another 2
sample 1 example 3

\( log\) 의 밑을 10으로 계산했습니다.

\(D1\) \(D2\)
\(t\) tf\((t,d)\)  idf\((t,D)\) tdidf(t, d, D) \(t\) tf\((t,d)\)  idf\((t,D)\) tdidf(t, d, D)
this 1/5 \( log(2/2) = 0 \) 0 this 1/7 \( log(2/2) = 0 \) 0
is 1/5 \( log(2/2) = 0 \) 0 is 1/7 \( log(2/2) = 0 \) 0
a 2/5 \( log(2/1) = 0.3 \) 0.12 another 2/7 \( log(2/1) = 0.3 \) 0.08
sample 1/5 \( log(2/1) = 0.3 \) 0.06 example 3/7 \( log(2/1) = 0.3 \) 0.12

 

\(D1\)에서 a가, \(D2\)에서 example이 가장 중요한 단어라고 볼 수 있습니다.

 

 

혹시 잘못된 내용을 알려주시면 감사하겠습니다.


참고 자료

'개발 > 문서 요약' 카테고리의 다른 글

텍스트랭크 알고리즘(TextRank Algorithm)  (0) 2020.12.25
페이지랭크 알고리즘 (PageRank algorithm)  (0) 2020.12.11
pytube 설치  (0) 2020.12.02