CounterVectorizer, TfidfVectorizer

jsuccessj·2025년 1월 26일

CountVectorizerTfidfVectorizer는 둘 다 텍스트 데이터를 벡터화하는 데 사용되지만, 중요한 차이점은 단어의 빈도에 대한 가중치를 어떻게 처리하느냐입니다. 아래에서 두 가지 방법의 차이와 TfidfVectorizer의 개선된 점을 설명하겠습니다.


1. CountVectorizer

  • 텍스트 데이터에서 단어의 빈도수(count)를 기반으로 벡터를 생성합니다.
  • 각 단어의 등장 횟수를 세어 피처 벡터를 생성하며, 문서마다 단어의 빈도를 단순히 나타냅니다.
  • 특징:
    • 단순한 벡터화 방법.
    • 단어의 중요도를 고려하지 않습니다.
    • 자주 등장하는 단어(the, is와 같은 불용어)가 모든 문서에서 높은 값을 가지며, 문서 간의 차별화가 어렵습니다.

2. TfidfVectorizer

  • TF-IDF(단어 빈도-역문서 빈도)를 활용하여 단어에 가중치를 부여합니다.
  • TF-IDF는 두 가지 요소를 기반으로 계산됩니다:
    1. TF (Term Frequency): 단어가 특정 문서에 얼마나 자주 등장하는지 (빈도수).
    2. IDF (Inverse Document Frequency): 단어가 전체 문서에서 얼마나 희귀한지를 측정. 자주 등장하는 단어일수록 낮은 가중치를 부여.
IDF(t)=log(N1+df(t))\text{IDF}(t) = \log\left(\frac{N}{1 + \text{df}(t)}\right)
		여기서 N은 전체 문서의 수, df(t)는 단어 t가 등장한 문서 수.
  • 특징:
    • 단어의 중요도를 반영하여 벡터를 생성합니다.
    • 흔히 등장하는 단어(불용어 등)의 영향력을 줄이고, 특정 문서에만 나타나는 단어에 더 높은 가중치를 부여합니다.
    • 단순 빈도 기반인 CountVectorizer보다 문서 간 차별화를 더 잘 수행합니다.

3. TfidfVectorizer의 개선된 점

  1. 불용어 영향 감소:

    • CountVectorizer는 단순히 빈도를 계산하므로 자주 등장하는 단어가 높은 값을 갖지만, TfidfVectorizer는 IDF를 활용해 자주 등장하는 단어의 가중치를 낮춥니다.
    • 예: "the", "and" 같은 단어는 거의 모든 문서에 등장하므로 중요한 단어로 간주되지 않음.
  2. 문서 간 유사도 계산에 유리:

    • TF-IDF는 각 단어의 중요도를 반영하므로, 유사한 문서를 구분하거나 문서 간 차이를 측정하는 데 더 적합합니다.
    • 예: 검색 엔진에서 키워드의 중요도를 반영해 결과를 정렬.
  3. 차별화된 단어 강조:

    • 특정 문서에서만 자주 나타나는 단어에 더 높은 가중치를 부여합니다.
    • 이는 문서의 고유한 특성을 드러내는 데 유리합니다.
  4. 스케일링 효과:

    • TF-IDF는 벡터 값이 정규화되어 있어 머신러닝 모델이 데이터를 처리하기 쉬운 형태로 만듭니다.

4. 간단한 비교 예제

문서:

  1. "I love machine learning"
  2. "Machine learning is amazing"

CountVectorizer:

Word문서1문서2
I10
love10
machine11
learning11
is01
amazing01

TfidfVectorizer:

Word문서1문서2
I0.7070.000
love0.7070.000
machine0.5000.500
learning0.5000.500
is0.0000.707
amazing0.0000.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를 단독으로 사용하는 경우가 줄어들고, 현대적인 임베딩 방법 또는 이를 결합한 하이브리드 접근법이 주로 사용됩니다.
profile
Machine Learning, Data Science, Data Engineering, Large Language Model

0개의 댓글