문서 단어 행렬(DTM)과 TF-IDF

허허맨·2025년 8월 1일
0

LLM

목록 보기
8/12
post-thumbnail

📌 [NLP 입문] 문서 단어 행렬(DTM)과 TF-IDF

이번에는 BoW를 여러 문서로 확장하여 비교할 수 있도록 만든
**문서 단어 행렬(Document-Term Matrix, DTM)**과,
단어의 중요도를 반영하는 TF-IDF를 배워봅니다.


1. 문서 단어 행렬(Document-Term Matrix, DTM)

정의

  • 여러 문서의 BoW를 하나의 행렬로 표현한 것
  • 행(Row) = 문서
  • 열(Column) = 단어
  • 값(Value) = 해당 문서에서 단어의 등장 횟수

예시:

과일이길고노란먹고바나나사과...
문서1000101...
문서2000110...
문서3011020...
문서4100000...

한계

  1. 희소 표현(Sparse representation)

    • 대부분의 값이 0 → 저장·계산 비효율
  2. 단순 빈도 기반

    • 불용어(the, 그리고 등)도 높은 빈도로 반영 → 문서 구분에 방해

2. TF-IDF (Term Frequency - Inverse Document Frequency)

목적

  • DTM의 단순 빈도 한계를 보완
  • 단어의 중요도를 반영

아이디어

  • TF: 문서 내 단어 빈도
  • DF: 해당 단어가 등장한 문서 수
  • IDF: DF의 역수에 로그 적용
  • TF-IDF = TF × IDF

모든 문서에 자주 등장하는 단어는 가중치를 낮추고,
특정 문서에서만 자주 등장하는 단어는 가중치를 높임.


3. 파이썬 실습

(1) DTM 만들기

from sklearn.feature_extraction.text import CountVectorizer

corpus = [
    'you know I want your love',
    'I like you',
    'what should I do'
]

vector = CountVectorizer()
dtm = vector.fit_transform(corpus).toarray()

print("DTM:\n", dtm)
print("Vocabulary:", vector.vocabulary_)

(2) TF-IDF 만들기

from sklearn.feature_extraction.text import TfidfVectorizer

tfidfv = TfidfVectorizer()
tfidf = tfidfv.fit_transform(corpus).toarray()

print("TF-IDF:\n", tfidf)
print("Vocabulary:", tfidfv.vocabulary_)

4. 정리

구분특징장점단점
BoW단어 순서 무시, 빈도 기반구현 간단단어 중요도 반영 불가
DTM여러 문서 BoW 결합문서 간 비교 가능희소행렬, 불용어 문제
TF-IDF단어 중요도 반영불필요 단어 영향 감소여전히 문맥 정보 없음

💡 다음 단계
다음 챕터에서는 이렇게 만든 TF-IDF 행렬을 이용한 문서 유사도 계산을 배워봅니다.
코사인 유사도를 활용한 추천 시스템 구현으로 연결됩니다.


profile
사람은 망각의 동물입니다. 때로는 기록으로 과거의 나를 데려옵니다.

0개의 댓글