TF-IDF
TF-IDF(Term Frequency-Inverse Document Frequency)는 정보 검색(Information Retrieval) 및 텍스트 마이닝(Text Mining)에서 특정 단어가 문서 집단(Corpus) 내 특정한 문서에서 갖는 중요도를 수치화한 통계적 가중치 지표다.
자연어 처리에서 문서를 벡터 형식으로 변환할 때 관측된 단어의 빈도만 사용할 경우 발생하는 한계(관사, 조사 등 불용어가 높은 중요도를 차지하는 문제)를 해결하기 위해 고안되었다.
핵심 개념 및 계산 구조 (Core Concepts and Calculation)
TF-IDF 값은 단어 빈도(TF)와 역문서 빈도(IDF)를 곱하여 산출한다.
- TF (Term Frequency): 특정 단어가 개별 문서 내에 등장하는 횟수다. 이 값이 높을수록 해당 단어는 그 문서 내에서 중요한 개념일 확률이 높다.
- DF (Document Frequency) 및 IDF (Inverse Document Frequency): DF는 특정 단어가 나타나는 전체 문서의 수를 의미한다. IDF는 전체 문서의 수를 DF로 나눈 뒤 로그(log)를 취한 역수 값이다. ‘the’, ‘is’, ‘a’와 같이 거의 모든 문서에 등장하는 범용적인 단어는 IDF 값이 0에 가까워지며 수학적인 페널티를 받게 된다.
결과적으로 TF-IDF는 특정 문서 내에서는 자주 등장하지만 다른 문서들에서는 거의 등장하지 않는 단어(희소성 있는 핵심어)에 높은 가중치를 부여한다.
텍스트 표현 모델 간 비교 (Comparison of Text Representation Models)
자연어 처리에서 문서를 수치화된 기계 판독 데이터로 변환하는 대표적인 모델들은 다음과 같은 차이가 있다.
| 비교 항목 | Bag of Words (BoW) | TF-IDF | 단어 임베딩 (Word2Vec, GloVe) |
|---|---|---|---|
| 표현 방식 (Representation) | 단어의 출현 횟수 단순 카운트 | 출현 횟수 및 역문서 빈도를 조합한 가중치 | 단어의 주변 문맥을 반영한 밀집 벡터(Dense Vector) |
| 핵심 목적 (Primary Focus) | 단어 사전 기준 유무 및 빈도 매핑 | 문서 내 핵심 키워드 식별 및 정보 검색(IR) 최적화 | 단어 간의 의미적 유사성 및 구문적 관계 학습 |
| 범용 단어 처리 (Frequent Words) | 페널티 부여 불가 (사전 전처리로 제거 필수) | IDF 연산을 통해 자동 페널티 부여 및 가중치 축소 | 문맥 정보에 따라 임베딩 공간 내 분포 위치 결정 |
| 의미적 관계 (Semantic Meaning) | 단어 간의 순서와 문맥적 의미 완전 무시 | 문맥적 의미 파악 부재 (단어 간 상호 연관성 무시) | 단어 간의 유의미한 거리 계산 및 연관성 파악 가능 |
| 벡터 형태 (Vector Structure) | 고차원 희소 행렬 (Sparse Matrix, 대부분이 0) | 고차원 희소 행렬 (Sparse Matrix, 대부분이 0) | 저차원 밀집 행렬 (Dense Matrix, 실수값으로 구성) |
출처 (Sources):
- Spärck Jones, K. (1972). “A statistical interpretation of term specificity and its application in retrieval.” Journal of Documentation. (IDF 개념을 최초로 제안한 논문)
- Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval, Cambridge University Press: Chapter 6 on Scoring, term weighting, and the vector space model. (https://nlp.stanford.edu/IR-book/html/htmledition/tf-idf-weighting-1.html)
- Scikit-learn Documentation: “Feature extraction from text - Tf–idf term weighting” (https://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction)
- Towards Data Science: “TF-IDF For Document Ranking from scratch in python on real world dataset” (https://towardsdatascience.com/)