통계의 공평한 저울: TF-IDF 기술
특정 문서의 핵심을 파악하기 위해 카운트를 무작정 올려주는 행위(TF)와, 여러 문서에 널리 퍼진 바퀴벌레 같은 스팸 단어들에게 치명적인 로그 함수 패널티 감점을 부여하는(IDF) 양팔 저울형 수학 공식을 깨우칩니다.
00. TF-IDF 의 탄생 철학
결국 인간이 원하는 것은 “이 긴 문서 안에서 제일 중요하고 특색 있는 황금 키워드 3개가 뭐지?” 를 묻는 구조입니다.
지프의 법칙(롱테일)로 인해 쓸데없는 문법 관사(the, a)가 랭킹 1위를 먹는 오류를 타파하기 위해 학자들은 영리한 곱셈 공식을 창안했습니다.
01. 앞부분 저울 TF (Term Frequency, 단어 빈도)
- 내가 지금 들고 있는 바로 이 책(특정 문서) 안에서 해당 단어가 과연 몇 번이나 자주 거론(Count)되었는가?
- 가중치: ( + 플러스 점수 가산 )
- 논리: “당연히 주인공 이름처럼 내 책에서 많이 불렸으면 일단 중요한 정답일 확률이 높음!” $\to$ 점수를 마구마구 줍니다.
02. 뒷부분 저울 IDF (Inverse Document Frequency, 역문서 빈도)
- 세상의 수많은 책들을 펼쳐봤더니 저 단어가 개나 소나 다 쓰는 흔해 빠진 쓰레기 단어(
The,아) 인가? - 가중치: ( - 무자비한 감점 / 패널티 )
- 논리: “어? 너 내 책에서도 한 100번 나왔길래 핵심 키워드인 줄 알았더니, 저기 옆집 요리책이랑 신문 기사에도 죄다 100번씩 쓰인 스팸 문자(불용어)였어? 넌 가짜다 아웃!” $\to$ 점수를 무참히 깎아버립니다.
[!TIP]
📖 초심자를 위한 쉬운 해설: IDF의 희소성 보상
반대로인공지능이라는 단어는 세상 모든 책을 뒤져도 요리책이나 소설에는 한 번도 등장하지 않습니다!
오직 IT 관련 공학 논문에만 바짝 등장하는 초-레어템입니다.
기계는 다른 문서에 한 번도 안 쓰이는 이 진귀한 단어를 발견하면, 패널티를 주는 대신 무지막지한 IDF 가중치 칭찬 뻥튀기 보너스를 줍니다!
03. 충격과 공포의 IDF 세부 수학 공식 해부
이 똑똑한 역문서 패널티 기능을 구현하기 위해 우리는 고등학교 2학년 때 배운 루트 로그 수학 기호 ($\log$) 를 소환해야만 합니다!
\text{TF-IDF}(w, d) = \text{TF}(w, d) \times \left( \log \left( \frac{N}{df(w) + 1} \right) + 1 \right)
\[\text{IDF}(d, t) = \log\left(\frac{n}{1 + \text{df}(d, t)}\right) + 1\]
(1) $n$ : 우주에 있는 세상의 총 문서 갯수 (예: 국회 도서관의 100만 권 장서수) (2) $\text{df}(t)$ : 타겟 단어가 등장한 문서의 갯수 (예: 너 지금 몇 권에서 출몰했어?)
왜 로그(log) 함수를 분수에 씌우나요?
만약 세상에 문서가 100만 권이나 있는데 특정 단어가 딱 1권에서만 등장했다면? 그 역전 분수 값이 자그마치 1,000,000배로 튀어 나갑니다. 패널티를 준답시고 엄청난 분수 곱셈값 뻥튀기 에러가 나면 데이터가 통째로 괴물이 되어 망가집니다. 로그는 아무리 분수 숫자가 1억, 10억으로 커져도 그 크기를 [1~20] 사이의 아주 작고 귀여운 숫자로 압축하여 스무스하게 만들어버리는 마법의 곡선 도구입니다.
왜 분모에 뜬금없이 +1 (스무딩, Smoothing) 을 더해주나요?
이게 파이썬 코딩할 때 진짜 눈물이 나는 구간입니다!!!! 만약 새로운 단어라서, 아직 세상 어떤 문서에서도 언급된 적이 없는 미지의 타겟 단어가 분모에 들어간다면요?
- $\text{df}(t) = 0$ 이 됩니다.
- 컴퓨터, 특히 파이썬은 수학적으로 분모가 $0$ 이 되는 순간 가차 없이 DivisionByZero 핵폭탄 에러를 띄우고 즉시 서버를 강제 종료 시킵니다!!
- 이것을 예방하기 위해, 분모가 최소한 $0$이 되지 않게 억지로 맹장 수술하듯
1을 강제로 더해주는 꼼수 장치를 부착합니다. 이를 부드럽게 에러를 피해간다 하여 스무딩(Smoothing) 이라고 부릅니다.
TF-IDF 저울 공식에 넣어서 산출하면 우리는 마침내 쓰레기 관사를 0점 처리하고 세상에서 가장 아름다운 문서 핵심 벡터 엑셀표를 손에 넣게 됩니다. 그리고 마지막, 우리는 이제 이 숫자 벡터들의 “유사도”를 측정하여 정답을 추출합니다!