이번에는 BoW를 여러 문서로 확장하여 비교할 수 있도록 만든
**문서 단어 행렬(Document-Term Matrix, DTM)**과,
단어의 중요도를 반영하는 TF-IDF를 배워봅니다.
정의
예시:
과일이 | 길고 | 노란 | 먹고 | 바나나 | 사과 | ... | |
---|---|---|---|---|---|---|---|
문서1 | 0 | 0 | 0 | 1 | 0 | 1 | ... |
문서2 | 0 | 0 | 0 | 1 | 1 | 0 | ... |
문서3 | 0 | 1 | 1 | 0 | 2 | 0 | ... |
문서4 | 1 | 0 | 0 | 0 | 0 | 0 | ... |
한계
희소 표현(Sparse representation)
단순 빈도 기반
목적
아이디어
모든 문서에 자주 등장하는 단어는 가중치를 낮추고,
특정 문서에서만 자주 등장하는 단어는 가중치를 높임.
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_)
from sklearn.feature_extraction.text import TfidfVectorizer
tfidfv = TfidfVectorizer()
tfidf = tfidfv.fit_transform(corpus).toarray()
print("TF-IDF:\n", tfidf)
print("Vocabulary:", tfidfv.vocabulary_)
구분 | 특징 | 장점 | 단점 |
---|---|---|---|
BoW | 단어 순서 무시, 빈도 기반 | 구현 간단 | 단어 중요도 반영 불가 |
DTM | 여러 문서 BoW 결합 | 문서 간 비교 가능 | 희소행렬, 불용어 문제 |
TF-IDF | 단어 중요도 반영 | 불필요 단어 영향 감소 | 여전히 문맥 정보 없음 |
💡 다음 단계
다음 챕터에서는 이렇게 만든 TF-IDF 행렬을 이용한 문서 유사도 계산을 배워봅니다.
→ 코사인 유사도를 활용한 추천 시스템 구현으로 연결됩니다.