Ⅱ단원 · 3 / 5차시

TF-IDF로 중요한 단어 찾기

빈도수가 높지 않아도 문맥상 중요한 단어를 찾아내는 방법, TF-IDF를 계산해 봅니다.

학습목표

  • 빈도수 벡터만으로 중요한 단어를 찾기 어려운 경우를 설명할 수 있다.
  • 단어 빈도수(TF), 문서 빈도수(DF), 역문서 빈도수(IDF)를 구할 수 있다.
  • TF-IDF를 계산하여 문맥상 중요한 단어를 추출할 수 있다.

시간 배분

단계활동
도입빈도수 벡터의 한계5분
활동1TF, DF, IDF 구하기15분
활동2TF-IDF 계산하고 중요 단어 찾기20분
활동3다른 문서로 TF-IDF 확인하기10분
정리TF-IDF 기준값과 로그를 이용한 IDF5분
도입 · 5분

빈도수 벡터의 한계

"그 드라마를 보는 시간은 정말 지루했어요."와 "그 드라마를 보는 시간은 정말 낭비였어요."를 비교해 봅시다. '그', '정말'과 같은 불용어가 각 2번씩, '드라마', '보는', '시간'처럼 의미 파악에 중요하지 않은 단어도 2번씩 등장했지만, 정작 드라마 평가에 해당하는 '지루', '낭비'는 1번씩만 등장했습니다.

단순히 빈도수만으로는 텍스트 데이터의 의미를 정확히 파악하기 어렵습니다. 많이 등장하지는 않지만 의미 파악에 중요한 역할을 하는 단어를 찾는 방법이 필요합니다.
활동 1 · 15분

TF, DF, IDF 구하기

어느 치킨집 배달 애플리케이션 후기 A, B, C를 살펴봅시다.

후기
A배달도 정말 빨랐고 양은 저한테 살짝 많은 편이었어요. 개인적으로 여기는 프라이드치킨을 추천합니다.
B배달 빠르고요. 프라이드치킨이 맛있어서 추천합니다.
C누가 프라이드치킨 먹고 싶다고 할 때마다 추천하는데 양도 많고 맛있습니다.

불용어를 제거하면 $A=\{$프라이드치킨, 추천, 배달, 빠르다, 양, 많다$\}$, $B=\{$프라이드치킨, 추천, 배달, 빠르다, 맛있다$\}$, $C=\{$프라이드치킨, 추천, 양, 많다, 맛있다$\}$이고 $U=\{$프라이드치킨, 추천, 배달, 빠르다, 양, 많다, 맛있다$\}$(7개)입니다.

TF(단어 빈도수, Term Frequency)는 단어가 문서에 등장하는 횟수, DF(문서 빈도수, Document Frequency)는 단어가 등장하는 문서의 개수, IDF(역문서 빈도수, Inverse Document Frequency)는 상대도수 $\dfrac{\text{DF}}{n}$($n$은 전체 문서 개수)의 역수, 즉 $\text{IDF}=\dfrac{n}{\text{DF}}$입니다.

활동 2 · 20분

TF-IDF 계산하고 중요 단어 찾기

TF-IDF = TF × IDF입니다. 이 값이 클수록 그 문서에서만 도드라지게 등장하는(중요도가 높은) 단어이고, 값이 작을수록 여러 문서에 고르게 등장해 중요도가 낮은 단어입니다.

TF-IDF 계산기
① 단어 빈도수 (TF)
② 문서 빈도수(DF)와 상대도수 DF/n
③ 역문서 빈도수(IDF = n/DF)
④ TF-IDF = TF × IDF (문서별 최댓값 강조)
활동 3 · 10분

다른 문서로 TF-IDF 확인하기

위 계산기에서 확인하기 1 · 날씨함께하기 1 · 텍스트 마이닝 버튼을 눌러 다른 문서에서도 TF-IDF로 중요 단어를 찾을 수 있는지 확인해 보세요. 각 문서에서 중요도가 높은 단어가 무엇인지 계산기의 ④ 표에서 초록색으로 표시됩니다.

정리 · 5분

TF-IDF 기준값과 로그를 이용한 IDF

TF-IDF가 크다·작다의 절대적인 기준값은 없습니다. 분석 목적에 따라 문서 내에서 상대적인 기준값을 설정해야 합니다.

인공지능이 다루는 전체 문서의 개수 $n$이 매우 클 때는 $\text{IDF}=\dfrac{n}{\text{DF}}$의 값이 지나치게 커질 수 있습니다. 이런 경우 로그를 이용해 $\text{IDF}=\log\dfrac{n}{\text{DF}}$로 계산하면 값을 간결하게 나타낼 수 있습니다. (예: $n=10^{20}, \text{DF}=10^5$이면 $\dfrac{n}{\text{DF}}=10^{15}$이지만 $\log\dfrac{n}{\text{DF}}=15$)

차시 예고

오늘은 TF-IDF로 문맥상 중요한 단어를 찾는 방법을 배웠습니다. 다음 시간에는 두 텍스트 데이터가 얼마나 비슷한지를 나타내는 유사도(자카드 유사도, 유클리드 유사도)를 배웁니다.

← 2차시 — 텍스트 데이터를 벡터로 표현하기 4차시 — 자카드 유사도와 유클리드 유사도 →