TF-IDF 계산 과정 뜯어보기: DTM·IDF 산출부터 한계까지

TF-IDF를 4개 문서로 이루어진 예시로 직접 계산하며 DTM·IDF 산출 과정을 짚고, 응용 분야와 한계, LSA·임베딩 등 대안 기법을 정리한다.

2026-08-14 · 최초 발행 2025-05-23

텍스트 데이터에서 중요한 단어를 골라내는 문제는 단순해 보이지만, 어떤 단어가 "중요한지"를 정의하는 순간부터 까다로워진다. TF-IDF는 이 문제를 단어 빈도와 문서 집합 전체에서의 희소성이라는 두 축으로 수치화하는 통계적 방법이며, 검색 엔진부터 추천 시스템까지 다양한 분야에서 활용된다.

왜 단순 빈도로는 부족한가

TF-IDF는 단어 빈도(Term Frequency)와 역 문서 빈도(Inverse Document Frequency)의 조합으로, 특정 문서 내에서 단어의 중요도를 수치화하는 통계적 방법이다.

  • 기본 아이디어: 특정 문서에서 자주 등장하지만, 전체 문서군에서는 드물게 등장하는 단어가 해당 문서의 주제를 잘 나타낸다
  • 기존 방식의 한계: 단순 BoW(Bag of Words)나 DTM(Document Term Matrix)은 단어의 출현 빈도만 고려하여 'the', 'is'와 같은 불용어도 높은 점수를 받는 문제가 있다
  • 해결 방안: TF-IDF는 여러 문서에 공통적으로 등장하는 단어의 가중치를 낮추고, 특정 문서에만 집중적으로 나타나는 단어에 높은 가중치를 부여한다

TF·DF·IDF를 조합하는 계산식

TF-IDF는 다음 세 가지 요소의 계산값을 조합하여 도출한다.

  1. 단어 빈도(TF): 특정 문서 d에서 단어 t의 등장 횟수

    • 문서의 길이에 따라 정규화하기도 한다
    • TF(d,t) = 문서 d에서 단어 t의 출현 횟수
  2. 문서 빈도(DF): 특정 단어 t가 등장한 문서의 수

    • DF(t) = 단어 t가 출현한 문서의 수
  3. 역 문서 빈도(IDF): 단어의 희소성을 나타내는 지표

    • IDF(t) = log(N/(1+DF(t)))
    • N: 전체 문서 수
    • 분모에 1을 더하는 것은 0으로 나누는 것을 방지한다(스무딩)
  4. 최종 TF-IDF 값: TF와 IDF의 곱

    • TF-IDF(d,t) = TF(d,t) × IDF(t)

문서 4개로 직접 계산해보기

아래 4개의 문서로 구성된 말뭉치를 살펴보자.

  • 문서1: "사과를 먹고 싶어요"
  • 문서2: "바나나를 먹고 싶어요"
  • 문서3: "바나나는 길고 노란 바나나예요"
  • 문서4: "저는 과일이 좋아요"

DTM(Document Term Matrix) 생성

DTM은 각 문서에서 단어의 출현 빈도를 나타내는 행렬이다.

과일이 길고 노란 먹고 바나나 사과 싶은 저는 좋아요
문서1 0 0 0 1 0 1 1 0 0
문서2 0 0 0 1 1 0 1 0 0
문서3 0 1 1 0 2 0 0 0 0
문서4 1 0 0 0 0 0 0 1 1

단어별 IDF 계산

각 단어에 대한 IDF 값을 계산한다.

단어 출현 문서 수(DF) IDF = ln(N/(1+DF))
과일이 1 ln(4/(1+1)) ≈ 0.693
길고 1 ln(4/(1+1)) ≈ 0.693
노란 1 ln(4/(1+1)) ≈ 0.693
먹고 2 ln(4/(2+1)) ≈ 0.288
바나나 2 ln(4/(2+1)) ≈ 0.288
사과 1 ln(4/(1+1)) ≈ 0.693
싶은 2 ln(4/(2+1)) ≈ 0.288
저는 1 ln(4/(1+1)) ≈ 0.693
좋아요 1 ln(4/(1+1)) ≈ 0.693

TF에 IDF를 곱해 TF-IDF 행렬 만들기

DTM의 각 값(TF)에 해당 단어의 IDF를 곱하면 TF-IDF 행렬이 나온다.

과일이 길고 노란 먹고 바나나 사과 싶은 저는 좋아요
문서1 0 0 0 0.288 0 0.693 0.288 0 0
문서2 0 0 0 0.288 0.288 0 0.288 0 0
문서3 0 0.693 0.693 0 0.575 0 0 0 0
문서4 0.693 0 0 0 0 0 0 0.693 0.693

문서1에서는 '사과'의 TF-IDF 값이 가장 높아 이 문서의 핵심 단어로 드러난다. 문서3에서는 '길고', '노란'의 TF-IDF 값이 높고, '바나나'도 2회 등장해 0.575라는 값을 가지면서 문서의 특성을 잘 반영한다. '먹고', '싶은'은 여러 문서에 등장하므로 IDF가 낮아 상대적으로 낮은 TF-IDF 값을 갖는다.

검색부터 추천까지, TF-IDF가 쓰이는 자리

  • 검색 엔진: 구글의 초기 알고리즘은 TF-IDF를 기반으로 했다. 사용자 쿼리와 문서 간의 관련성 계산에 활용하며, 검색 결과 순위화와 관련 문서 찾기에 쓰인다
  • 문서 분류 및 클러스터링: 문서의 TF-IDF 벡터를 특성으로 사용해 SVM·나이브 베이즈 같은 분류기를 학습시키고, 문서 간 유사도 계산(코사인 유사도 등)에도 활용한다. 스팸 필터링, 뉴스 카테고리 분류가 대표 사례다
  • 정보 검색 시스템: 사용자 질의와 가장 관련 있는 문서를 검색하고, 초기 검색 결과에서 높은 TF-IDF 값을 가진 단어를 추가 쿼리로 사용하는 질의 확장(Query Expansion)에도 쓰인다
  • 텍스트 요약 및 핵심어 추출: 문서에서 TF-IDF 값이 높은 단어나 문장을 추출해 요약문을 만들고, 문서의 주요 키워드를 자동으로 추출하는 자동 태깅 시스템에도 활용한다
  • 추천 시스템: 사용자가 좋아한 콘텐츠의 TF-IDF 벡터와 유사한 다른 콘텐츠를 추천하는 콘텐츠 기반 필터링, 상품 설명·리뷰 등의 텍스트에서 특징을 추출하는 데 쓰인다

TF-IDF가 놓치는 것들

  1. 의미론적 관계 무시: 동의어, 유의어 등 단어 간 의미적 관계를 고려하지 않는다
  2. 단어 순서 무시: Bag of Words 기반이므로 문맥 정보가 손실된다
  3. 희소 벡터: 대규모 어휘에서는 고차원의 희소 벡터가 생성되어 계산 효율성이 떨어진다
  4. 새로운 단어 처리 어려움: 학습되지 않은 단어에 대한 처리가 불가능하다

대안 및 개선 방법

  1. LSA(Latent Semantic Analysis): 특이값 분해(SVD)를 활용해 차원을 축소하고 잠재적 의미 구조를 파악한다
  2. Word Embeddings: Word2Vec, GloVe 등 단어의 의미적 관계를 벡터 공간에 매핑한다
  3. BM25: TF-IDF를 확장한 확률적 모델로, 문서 길이 정규화를 추가한다
  4. 신경망 기반 모델: BERT, GPT 등의 트랜스포머 모델은 문맥을 고려한 단어 표현이 가능하다

실무에 적용할 때 챙길 것들

  1. 전처리의 중요성: 불용어 제거, 어간 추출, 품사 태깅 등의 전처리가 TF-IDF의 효과성에 큰 영향을 미친다
  2. IDF 스무딩: 0으로 나누기를 방지하기 위해 분모에 1을 더하는 스무딩을 적용한다
  3. 정규화 방법: L2 정규화를 적용해 문서 길이에 따른 영향을 최소화한다
  4. 희소 행렬 활용: 대규모 데이터에서는 scipy.sparse 등의 희소 행렬 구현을 사용한다
  5. 하이퍼파라미터 최적화: 최소/최대 문서 빈도 설정, n-gram 범위 등을 튜닝한다

TF-IDF는 단순하면서도 강력한 텍스트 분석 기법으로, 복잡한 딥러닝 모델이 등장한 지금도 여전히 많은 NLP 파이프라인의 기본 요소로 활용된다. 문서에서 중요한 단어를 식별하고 문서 간 유사성을 측정하는 데 효과적이며, 초기 특성 추출 단계에서 Word Embeddings·딥러닝 모델과 결합해 더 정교한 분석을 수행하는 경우가 많다.

TF-IDF텍스트마이닝정보검색DTM가중치기법