TF-IDF (Term Frequency – Inverse Document Frequency)

📌 TF-IDF (Term Frequency – Inverse Document Frequency)란?

TF-IDF는 문서 내 단어의 중요도를 평가하는 대표적인 방법입니다. 특정 단어가 문서에서 얼마나 중요한지를 수치화하여, 문서 간 유사도를 측정하거나 검색 엔진에서 검색 결과를 랭킹하는 데 사용됩니다.

1️⃣ 개념 정리

(1) TF (Term Frequency, 단어 빈도)

문서 내에서 특정 단어가 등장하는 빈도를 나타냅니다.TF(t,d)=f(t,d)NTF(t, d) = \frac{f(t, d)}{N}TF(t,d)=Nf(t,d)​

  • f(t,d)f(t, d)f(t,d) : 특정 문서 ddd에서 단어 ttt의 등장 횟수
  • NNN : 문서 ddd에 등장하는 모든 단어의 총 개수

✅ TF의 의미: 자주 등장하는 단어일수록 해당 문서에서 중요하게 사용될 가능성이 높음.

(2) IDF (Inverse Document Frequency, 역문서 빈도)

해당 단어가 여러 문서에서 등장하는 정도를 조정하는 계수입니다. 너무 많은 문서에서 등장하는 단어(예: “the”, “is”, “and” 같은 불용어)는 정보 가치가 낮기 때문에 이를 반영하여 가중치를 낮춥니다.IDF(t)=log⁡(D1+df(t))IDF(t) = \log \left(\frac{D}{1 + df(t)}\right)IDF(t)=log(1+df(t)D​)

  • DDD : 전체 문서 개수
  • df(t)df(t)df(t) : 단어 ttt가 등장한 문서 개수

✅ IDF의 의미: 특정 문서에서만 등장하는 단어일수록(희귀할수록) 더 높은 가중치를 부여.

(3) TF-IDF 공식

TF와 IDF를 곱한 값이 해당 단어의 최종 중요도 점수가 됩니다.TF−IDF(t,d)=TF(t,d)×IDF(t)TF-IDF(t, d) = TF(t, d) \times IDF(t)TF−IDF(t,d)=TF(t,d)×IDF(t)

✅ TF-IDF의 의미:

  • 특정 문서에서 자주 등장하지만, 전체 문서에서는 드물게 등장하는 단어의 점수가 높음.
  • 문서 전체에서 흔한 단어(“the”, “is”, “and”)는 자동으로 가중치가 낮아짐.

2️⃣ Python을 활용한 TF-IDF 계산(1) Scikit-learn을 활용한 TF-IDF 벡터화

from sklearn.feature_extraction.text import TfidfVectorizer

# 샘플 문서
documents = [
"I love machine learning. Machine learning is amazing.",
"Natural language processing is a part of AI.",
"Deep learning advances AI and machine learning."
]

# TF-IDF 변환기 생성
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)

# 단어 목록 출력
print("TF-IDF 단어 목록:", vectorizer.get_feature_names_out())

# 각 문서의 TF-IDF 값 출력
print("TF-IDF 행렬:\n", tfidf_matrix.toarray())

✅ 설명:

  • TfidfVectorizer()를 사용해 문서를 벡터로 변환.
  • fit_transform()을 통해 TF-IDF 값을 계산.
  • toarray()를 이용해 변환된 행렬을 출력.

(2) 특정 단어의 TF-IDF 값 확인

import pandas as pd

# TF-IDF 결과를 데이터프레임으로 변환
df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out())
print(df)

📌 출력 예시

aiadvancesamazingdeepislearninglovemachinenaturalpartprocessing
문서 1000.52000.370.520.37000
문서 20.420000.420000.420.420.42
문서 30.330.4600.4600.3300.33000

✅ 설명:

  • 특정 단어(예: “machine”)가 특정 문서에서 얼마나 중요한지를 수치로 확인 가능.
  • 문서마다 단어의 가중치가 다르게 부여됨.

(3) 코사인 유사도를 이용한 문서 비교

TF-IDF 벡터를 사용하면 문서 간 유사도를 측정할 수도 있습니다.

from sklearn.metrics.pairwise import cosine_similarity

# 문서 간 코사인 유사도 계산
cos_sim = cosine_similarity(tfidf_matrix)
print("문서 간 코사인 유사도:\n", cos_sim)

✅ 출력 예시

문서 간 코사인 유사도:
[[1. 0.118 0.529]
[0.118 1. 0.206]
[0.529 0.206 1. ]]

✅ 설명:

  • cosine_similarity()를 이용해 문서 간 유사도를 측정.
  • 1에 가까울수록 유사한 문서, 0에 가까울수록 연관성이 낮음.

3️⃣ TF-IDF의 장점과 단점

✅ 장점

  1. 불필요한 단어 가중치 감소: “the”, “is”, “and” 같은 불용어의 영향력을 자동으로 낮춤.
  2. 문서 내 중요한 단어 강조: 특정 문서에서만 자주 등장하는 단어의 가중치를 높게 부여.
  3. 간단하고 효율적: 계산이 빠르고 문서 검색, 문서 비교 등의 다양한 NLP 작업에 사용 가능.

❌ 단점

  1. 문맥 정보 부족: TF-IDF는 단어의 순서나 의미를 고려하지 않음. (예: “apple”과 “fruit”의 관계를 인식 못함)
  2. 희귀 단어 가중치 문제: 너무 드문 단어는 필요 이상으로 높은 가중치를 받을 수 있음.
  3. 데이터 크기에 민감: 문서 개수가 증가하면 IDF 계산이 변화하여 가중치가 변할 수 있음.

📌 TF-IDF vs 다른 NLP 기법 비교

기법설명장점단점
TF-IDF단어 빈도 기반 가중치 부여빠르고 간단함문맥 고려 X
Word2Vec단어의 의미를 벡터로 변환의미적 관계 반영 가능문장 전체 분석 어려움
BERT문장 단위의 의미 학습문맥을 고려한 의미 분석 가능모델이 크고 느림

✅ TF-IDF는 빠르고 효율적이지만, 단어 간 의미를 반영하지 못하므로 Word2Vec, BERT 같은 방법과 함께 사용하면 더욱 정교한 NLP 분석이 가능!

🚀 TF-IDF 활용 예시

✔ 검색 엔진: 검색어와 문서 간 유사도를 계산하여 결과 정렬
✔ 문서 분류: 뉴스, 이메일, 리뷰 등의 자동 분류
✔ 스팸 필터링: 스팸 메일과 정상 메일의 TF-IDF 패턴을 비교하여 분류
✔ 감정 분석: 텍스트에서 긍정/부정 키워드의 중요도 분석

✅ 결론

  • TF-IDF는 단어 중요도 측정 및 문서 비교를 위한 기본적인 방법.
  • 빠르고 간단하며, 검색 엔진, 추천 시스템, 문서 분류 등 다양한 곳에서 사용됨.
  • 문맥을 고려하지 못하므로, Word2Vec, BERT 같은 기법과 함께 활용하면 더욱 정교한 분석 가능.

Leave a Comment