CountVectorizer와 TfidfVectorizer는 둘 다 텍스트 데이터를 벡터화하는 데 사용되지만, 중요한 차이점은 단어의 빈도에 대한 가중치를 어떻게 처리하느냐입니다. 아래에서 두 가지 방법의 차이와 TfidfVectorizer의 개선된 점을 설명하겠습니다.
1. CountVectorizer
- 텍스트 데이터에서 단어의 빈도수(count)를 기반으로 벡터를 생성합니다.
- 각 단어의 등장 횟수를 세어 피처 벡터를 생성하며, 문서마다 단어의 빈도를 단순히 나타냅니다.
- 특징:
- 단순한 벡터화 방법.
- 단어의 중요도를 고려하지 않습니다.
- 자주 등장하는 단어(
the, is와 같은 불용어)가 모든 문서에서 높은 값을 가지며, 문서 간의 차별화가 어렵습니다.
2. TfidfVectorizer
- TF-IDF(단어 빈도-역문서 빈도)를 활용하여 단어에 가중치를 부여합니다.
- TF-IDF는 두 가지 요소를 기반으로 계산됩니다:
- TF (Term Frequency): 단어가 특정 문서에 얼마나 자주 등장하는지 (빈도수).
- IDF (Inverse Document Frequency): 단어가 전체 문서에서 얼마나 희귀한지를 측정. 자주 등장하는 단어일수록 낮은 가중치를 부여.
IDF(t)=log(1+df(t)N)
여기서 N은 전체 문서의 수, df(t)는 단어 t가 등장한 문서 수.
- 특징:
- 단어의 중요도를 반영하여 벡터를 생성합니다.
- 흔히 등장하는 단어(불용어 등)의 영향력을 줄이고, 특정 문서에만 나타나는 단어에 더 높은 가중치를 부여합니다.
- 단순 빈도 기반인 CountVectorizer보다 문서 간 차별화를 더 잘 수행합니다.
3. TfidfVectorizer의 개선된 점
-
불용어 영향 감소:
CountVectorizer는 단순히 빈도를 계산하므로 자주 등장하는 단어가 높은 값을 갖지만, TfidfVectorizer는 IDF를 활용해 자주 등장하는 단어의 가중치를 낮춥니다.
- 예: "the", "and" 같은 단어는 거의 모든 문서에 등장하므로 중요한 단어로 간주되지 않음.
-
문서 간 유사도 계산에 유리:
- TF-IDF는 각 단어의 중요도를 반영하므로, 유사한 문서를 구분하거나 문서 간 차이를 측정하는 데 더 적합합니다.
- 예: 검색 엔진에서 키워드의 중요도를 반영해 결과를 정렬.
-
차별화된 단어 강조:
- 특정 문서에서만 자주 나타나는 단어에 더 높은 가중치를 부여합니다.
- 이는 문서의 고유한 특성을 드러내는 데 유리합니다.
-
스케일링 효과:
- TF-IDF는 벡터 값이 정규화되어 있어 머신러닝 모델이 데이터를 처리하기 쉬운 형태로 만듭니다.
4. 간단한 비교 예제
문서:
- "I love machine learning"
- "Machine learning is amazing"
CountVectorizer:
| Word | 문서1 | 문서2 |
|---|
| I | 1 | 0 |
| love | 1 | 0 |
| machine | 1 | 1 |
| learning | 1 | 1 |
| is | 0 | 1 |
| amazing | 0 | 1 |
TfidfVectorizer:
| Word | 문서1 | 문서2 |
|---|
| I | 0.707 | 0.000 |
| love | 0.707 | 0.000 |
| machine | 0.500 | 0.500 |
| learning | 0.500 | 0.500 |
| is | 0.000 | 0.707 |
| amazing | 0.000 | 0.707 |
5. 비교 정리
CountVectorizer는 단어 빈도만 단순히 세지만, TfidfVectorizer는 빈도와 문서 간 희귀성을 반영하여 단어의 중요도를 계산합니다.
TfidfVectorizer는 검색, 문서 분류, 클러스터링 등에서 더 나은 성능을 제공합니다.
TfidfVectorizer는 텍스트 데이터의 중요도를 반영하는데 효과적인 도구지만, 한계점과 문제점도 존재합니다. 아래에서 주요 문제점과 이를 개선하기 위해 등장한 방법들을 설명하겠습니다.
6. TfidfVectorizer의 문제점
1. 문맥 정보를 무시
TfidfVectorizer는 단어의 개별적인 중요도만 평가하며, 단어 간의 문맥적 관계를 고려하지 않습니다.
- 예: "Apple"이 과일인지 기업인지 문맥에 따라 달라지지만, TF-IDF는 이를 구분하지 못합니다.
- 단어 순서나 구문 구조를 반영하지 않기 때문에, 문장 구조를 이해하지 못합니다.
2. 어휘 크기에 따른 희소 행렬(sparse matrix) 문제
- TF-IDF로 생성된 벡터는 고차원 희소 행렬이 됩니다.
- 어휘가 많아질수록 벡터의 차원이 커지고, 메모리 소모와 연산 속도에 문제가 생깁니다.
- 특히 대규모 텍스트 데이터에서 효율성이 떨어질 수 있습니다.
3. 희귀 단어 가중치의 부정확성
- 희귀 단어에 높은 가중치를 부여하는데, 이는 항상 이상적인 결과를 보장하지는 않습니다.
- 희귀하지만 중요하지 않은 단어(예: 오탈자, 잘못된 데이터)도 높은 가중치를 받을 수 있습니다.
4. 문서의 길이 차이 반영 부족
- 긴 문서와 짧은 문서 간의 단어 빈도 차이를 제대로 보정하지 못합니다.
- 긴 문서는 단어가 더 자주 등장할 가능성이 높아 TF-IDF 값이 왜곡될 수 있습니다.
5. 정확한 의미 파악 불가
- 단어의 다의성(같은 단어가 여러 의미를 가질 수 있음)이나 동의어(다른 단어가 같은 의미를 가질 수 있음)를 처리하지 못합니다.
7. 이 문제를 개선하기 위해 등장한 기법들
1. Word Embeddings (단어 임베딩)
주요 방법: Word2Vec, GloVe, FastText
- 특징:
- 단어를 고차원 벡터가 아닌 저차원 밀집 벡터(dense vector)로 표현.
- 단어 간의 문맥적 관계를 반영하여 의미적으로 유사한 단어를 가까운 벡터로 표현.
- 예: "king" - "man" + "woman" ≈ "queen"
- 희소 행렬 문제를 해결하며, 의미적 유사성을 더 잘 포착.
- 제약:
- 단어 수준에서의 표현만 가능하며 문장이나 문서 단위의 문맥 정보는 부족.
2. Sentence Embeddings (문장 임베딩)
주요 방법: InferSent, Universal Sentence Encoder, Sentence-BERT
- 특징:
- 단어를 넘어서 문장 전체를 하나의 벡터로 표현.
- 문맥적 의미를 더 잘 포착하여 문장 간 유사도를 계산하거나 분류에 사용.
- TF-IDF보다 문장의 의미적 정보 전달에 훨씬 강력함.
3. Contextualized Word Embeddings (문맥화된 단어 임베딩)
주요 방법: ELMo, BERT, GPT, RoBERTa
- 특징:
- 단어의 문맥적 의미를 반영하여 단어마다 다른 벡터를 생성.
- 같은 단어라도 문맥에 따라 다른 벡터로 표현(예: "Apple"이 과일인지 기업인지 구분 가능).
- 자연어 처리(NLP)에서 가장 강력한 모델로 자리잡음.
- 장점:
- 문장 구조와 단어의 순서를 모두 반영.
- 텍스트의 의미를 이해하며 번역, 요약, 질의응답 등 고차원 작업 가능.
4. Latent Semantic Analysis (LSA) 및 Latent Dirichlet Allocation (LDA)
- LSA (Latent Semantic Analysis):
- TF-IDF에서 생성된 희소 행렬에 SVD(특이값 분해)를 적용하여 저차원 공간으로 축소.
- 단어와 문서 간의 잠재 의미를 반영.
- 노이즈를 줄이고 데이터의 차원을 줄이는데 유용.
- LDA (Latent Dirichlet Allocation):
- 문서를 여러 주제(topic)의 혼합으로 표현.
- 문서 내 단어의 분포를 기반으로 잠재 주제를 추론.
5. Hybrid Approaches (혼합 접근법)
- TF-IDF와 Word Embeddings를 결합하는 방법.
- 예: TF-IDF로 단어 가중치를 계산한 뒤, 이를 Word2Vec 벡터와 결합하여 의미와 빈도를 모두 반영.
8. 결론
TfidfVectorizer는 단어의 빈도와 희귀성을 기반으로 가중치를 계산하는 효과적인 방법이지만, 문맥 정보와 단어 간 의미적 관계를 반영하지 못하는 한계가 있습니다.
- 이를 해결하기 위해 Word Embeddings, Sentence Embeddings, 그리고 Contextualized Word Embeddings(BERT 등)과 같은 의미 기반 임베딩 기법들이 발전해왔습니다.
- 실제 NLP 작업에서는
TfidfVectorizer를 단독으로 사용하는 경우가 줄어들고, 현대적인 임베딩 방법 또는 이를 결합한 하이브리드 접근법이 주로 사용됩니다.