TfidfVectorizer
TfidfVectorizer
개요
TfidfVectorizer는 자연어 처리(Natural Language Processing, NLP)에서 텍스트 데이터를 수치화하는 데 널리 사용되는 도구 중 하나로, scikit-learn 라이브러리에 포함된 클래스입니다. 이 클래스는 텍스트 문서의 집합을 입력으로 받아, 각 문서 내 단어들의 TF-IDF(Term Frequency-Inverse Document Frequency) 값을 계산하여 문서-단어 행렬로 변환합니다. 이 행렬은 머신러닝 모델에 입력할 수 있는 수치형 데이터 형태로, 문서 분류, 유사도 측정, 정보 검색 등 다양한 응용 분야에서 핵심적인 역할을 합니다.
TF-IDF는 단어의 빈도(문서 내 등장 횟수)와 전체 문서 집합에서의 희귀성(레어함)을 조합하여 각 단어의 중요도를 평가하는 통계적 척도입니다. TfidfVectorizer는 이러한 TF-IDF 가중치를 자동으로 계산하고, 전처리 기능(예: 소문자 변환, 불용어 제거, 토큰화 등)도 내장하고 있어 사용이 간편합니다.
작동 원리
TF-IDF 개념
TF-IDF는 다음 두 요소의 곱으로 정의됩니다:
-
TF(Term Frequency): 특정 단어가 한 문서 내에서 얼마나 자주 등장하는지를 나타냅니다.
[ \text{TF}(t, d) = \frac{\text{단어 } t \text{의 문서 } d \text{ 내 등장 횟수}}{\text{문서 } d \text{의 전체 단어 수}} ] -
IDF(Inverse Document Frequency): 특정 단어가 전체 문서 집합에서 얼마나 희귀한지를 나타냅니다. 자주 등장하는 일반적인 단어(예: '그리고', '또는')는 낮은 가중치를 받습니다.
[ \text{IDF}(t, D) = \log \left( \frac{\text{전체 문서 수}}{\text{단어 } t \text{가 포함된 문서 수}} \right) ]
최종적으로, 각 단어의 TF-IDF 값은 다음과 같이 계산됩니다:
[ \text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \text{IDF}(t, D) ]
주요 기능 및 파라미터
TfidfVectorizer는 다음과 같은 주요 파라미터를 제공하여 유연한 텍스트 전처리와 벡터화를 가능하게 합니다.
| 파라미터 | 설명 |
|---|---|
[max_features](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%20%EC%84%A4%EC%A0%95/max_features) |
사용할 최대 단어 수 (빈도 순 상위 N개 선택) |
[stop_words](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%20%EC%84%A4%EC%A0%95/stop_words) |
제거할 불용어 목록 (예: '는', '의', '가') |
[ngram_range](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%20%EC%84%A4%EC%A0%95/ngram_range) |
사용할 n-gram 범위 (예: (1,2) → 단어와 2-gram 모두 포함) |
[min_df](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%20%EC%84%A4%EC%A0%95/min_df) |
최소 문서 빈도 (해당 단어가 최소한 몇 개 문서에 등장해야 포함되는지) |
[max_df](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%20%EC%84%A4%EC%A0%95/max_df) |
최대 문서 빈도 (너무 자주 등장하는 단어 제외, 예: 0.8 → 80% 이상 문서에 등장하면 제외) |
[lowercase](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%20%EC%84%A4%EC%A0%95/lowercase) |
텍스트를 소문자로 변환할지 여부 (기본값: True) |
[tokenizer](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%EC%A0%84%EC%B2%98%EB%A6%AC/tokenizer) |
사용자 정의 토큰화 함수 지정 가능 |
[analyzer](/doc/%EA%B8%B0%EC%88%A0/%EC%9E%90%EC%97%B0%EC%96%B4%EC%B2%98%EB%A6%AC/%EC%A0%84%EC%B2%98%EB%A6%AC/analyzer) |
'word' 또는 'char'로 설정 가능 (문자 기반 n-gram도 지원) |
사용 예시
다음은 Python에서 TfidfVectorizer를 사용하는 간단한 예제입니다:
from sklearn.feature_extraction.text import TfidfVectorizer
# 샘플 문서
documents = [
"자연어 처리는 인공지능의 핵심 기술입니다.",
"TF-IDF는 텍스트를 수치화하는 데 유용합니다.",
"머신러닝 모델은 텍스트 데이터를 학습할 수 있습니다."
]
# TfidfVectorizer 초기화
vectorizer = TfidfVectorizer(
max_features=10,
stop_words=['은', '는', '은', '를', '이', '가', '의'],
ngram_range=(1, 2)
)
# 문서를 TF-IDF 행렬로 변환
tfidf_matrix = vectorizer.fit_transform(documents)
# 결과 출력
print("피처 이름:", vectorizer.get_feature_names_out())
print("TF-IDF 행렬:\n", tfidf_matrix.toarray())
이 코드는 주어진 문서들을 전처리한 후, 각 단어/2-그램에 대해 TF-IDF 값을 계산하여 희소 행렬 형태로 출력합니다.
장점과 한계
✅ 장점
- 직관적이고 해석이 쉬움: TF-IDF는 단어의 중요도를 수치로 표현하므로 모델의 결과를 해석하기 용이합니다.
- 전처리 기능 통합: 토큰화, 불용어 제거, 정규화 등을 내장하고 있어 별도 전처리가 필요 없습니다.
- 효율적인 계산: 희소 행렬(sparse matrix) 형식으로 저장되어 메모리 사용이 효율적입니다.
❌ 한계
- 의미 반영 부족: 단어 간 의미적 유사성(예: '자동차'와 '차량')을 반영하지 못합니다.
- 문서 길이 편향: 긴 문서는 단어 빈도가 높아져 불균형이 발생할 수 있습니다.
- 동의어 문제: 같은 의미를 가진 다른 단어는 별개의 피처로 처리됩니다.
활용 분야
TfidfVectorizer는 다음과 같은 NLP 작업에서 널리 사용됩니다:
- 문서 분류: 스팸 탐지, 감성 분석, 주제 분류
- 유사도 계산: 코사인 유사도를 이용한 문서 간 유사도 측정
- 정보 검색: 검색 쿼리와 문서 간 관련도 평가
- 클러스터링: K-means 등 군집화 알고리즘의 입력으로 활용
관련 도구 및 대안
- CountVectorizer: 단어 빈도만 사용 (TF-IDF의 전 단계)
- Word2Vec, GloVe, FastText: 분산 표현 기반의 단어 임베딩 (의미 반영 가능)
- BERT, Sentence-BERT: 문맥을 고려한 고급 임베딩 모델
참고 자료
- scikit-learn TfidfVectorizer 공식 문서
- Jurafsky, D., & Martin, J. H. (2023). Speech and Language Processing (3rd ed.)
- Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.
TfidfVectorizer는 여전히 실용적이며 강력한 도구로, 고급 임베딩 기법과 함께 사용될 때 더욱 효과적인 NLP 파이프라인을 구성할 수 있습니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.