빈도수 벡터와 요약
본문학교 급식에 관한 글에서 낱말을 세어 보면 '은', '는', '학교' 같은 낱말이 가장 많이 나온다. 그런데 이 낱말들은 어느 글에나 흔히 나오므로 이 글만의 특징이 아니다. 이 글에서는 자주 나오지만 다른 글에는 잘 나오지 않는 '급식', '메뉴' 같은 낱말이 진짜 요점일 것이다. 이 생각을 수로 나타낼 수 있을까?
2.2.1빈도수 벡터
앞에서는 낱말이 있으면 1, 없으면 0을 적었다. 이번에는 낱말이 나온 횟수를 적는다. 사전의 각 낱말 자리에 그 글에서 나온 횟수를 적은 벡터를 빈도수 벡터라 한다. 같은 낱말이 여러 번 나오는 긴 글의 특징을 더 잘 담는다. 빈도가 높은 낱말 몇 개를 뽑으면 글의 대강을 짐작할 수 있다.
그러나 '은', '는', '이다'처럼 문법적인 낱말이나 '학교'처럼 주제와 상관없이 흔한 낱말은 어느 글에서나 빈도가 높다. 그래서 단순 빈도로 요점을 뽑으면 이런 낱말이 맨 위에 온다.
2.2.2TF-IDF
요점이 되는 낱말은 이 글에서는 자주 나오고(빈도가 높고), 다른 글에서는 드물게 나와야 한다. 앞의 것을 낱말 빈도(TF), 뒤의 것을 역문서 빈도(IDF)로 나타내 둘을 곱한다.
전체 문서 \(N\)편 가운데 낱말 \(w\)가 들어 있는 문서가 \(n_w\)편일 때 \[\text{TF-IDF}(w) = \text{TF}(w) \times \log\frac{N}{n_w}\] 이다. 모든 문서에 나오는 낱말은 \(\log 1 = 0\)이 되어 점수가 0이다.
그림 1에서 점수 방식을 바꾸어 보자. '은/는'은 9번이나 나왔지만 5편 모두에 나오므로 \(\log\frac{5}{5} = 0\)이 곱해져 점수가 0이 된다. '급식'은 5번 나왔고 이 글에만 있으므로 \(5 \times \log 5 \approx 3.49\)로 가장 높다. 로그를 쓰는 것은 문서가 아주 많을 때 희귀한 낱말의 가중치가 지나치게 커지지 않게 하려는 것이다.1
2.2.3예제 풀이
글 5편이 있다. 어떤 글에서 '학교'가 6번, '맛있다'가 4번 나왔고, '학교'는 5편 가운데 4편에, '맛있다'는 2편에 나온다. 두 낱말의 TF-IDF를 구하여 어느 쪽이 이 글의 특징에 가까운지 판단하여라. (\(\log 1.25 \approx 0.097\), \(\log 2.5 \approx 0.398\))
'학교'는 \(6 \times \log\dfrac{5}{4} = 6 \times 0.097 \approx 0.58\)이다. '맛있다'는 \(4 \times \log\dfrac{5}{2} = 4 \times 0.398 \approx 1.59\)이다.
빈도는 '학교'가 더 높지만 TF-IDF는 '맛있다'가 약 2.7배 높다. '학교'는 대부분의 글에 나오는 흔한 낱말이라 이 글을 다른 글과 구별해 주지 못하기 때문이다. 이렇게 고른 낱말들이 검색 엔진의 색인이나 글의 자동 요약에 쓰인다.
아래 탐구 카드에서 낱말을 세어 글의 요점을 찾고, 가장 많이 나온 낱말이 요점인지 TF-IDF로 따져 보자.
- 로그의 밑은 10이나 \(e\)를 쓰는데, 밑을 바꾸어도 모든 낱말의 점수가 같은 비율로 바뀌므로 순위는 달라지지 않는다.
빈도수 벡터는 낱말이 나온 횟수를 담지만, 어느 글에나 흔한 낱말이 위로 온다. TF-IDF는 낱말 빈도에 \(\log\frac{N}{n_w}\)를 곱해, 이 글에서 자주 나오고 다른 글에서 드문 낱말에 높은 점수를 준다. 그래서 처음 질문의 답은 '아니다'이며, 가장 많이 나온 낱말보다 TF-IDF가 높은 낱말이 그 글의 요점에 더 가깝다.