728x90
반응형
SMALL
Bag Of Words(BoW) 란 무엇인가요 ?
단어 가방 모델 또는 단어 집합 모델
Bag Of Words(BoW)는 단어들의 순서는 완전히 무시한 채, 오로지 단어의 출현 빈도(Frequency)에만 집중하여 텍스트를 수치화하는 방법이다.
마치 가방 (Bag) 안에 단어들을 마구 집어넣고 흔든 뒤, 각 단어가 몇 개씩 들어있는지 세는 것과 같다. 이 과정에서 문법이나 단어의 위치 정보는 사라지지만, 어떤 단어가 많이 쓰였는지를 통해 텍스트의 성격을 파악할 수 있다.
"Bag"
"Bag"은 여기서 순서를 무시하고 담아놓은 집합이라는 의미이다.
BoW를 만드는 과정
BoW를 생성하는 과정은 크게 두 단계로 나뉜다.
- 단어 사전(Vocabulary) 구축 : 전체 문서에 등장하는 모든 고유 단어를 중복 없이 모아 번호(인덱스)를 매긴다.
- 빈도 측정 : 각 단어 인덱스 위치에 해당 단어가 문서에 몇 번 등장했는지 기록한다.
예:
- 문장 1: "사과가 맛있다 사과가 최고다"
- 문장 2: "바나나가 맛있다"
[단어 사전]
["사과가":0, "맛있다":1, "최고다":2, "바나나가":3]
[BoW 결과 벡터]
- 문장 1: [2, 1, 1, 0] (사과가 2번, 맛있다 1번, 최고다 1번 ...)
- 문장 2: [0, 1, 0, 1] (맛있다 1번, 바나나가 2번...)
반응형
BoW의 특징과 장점
- 직관적이고 단순함 : 구현이 매구 쉽고, 어떤 단어가 핵심인지 파악하기 좋다.
- 문서 분류에 효율적 : 텍스트의 주제를 분류할 때(예: 스팸 메일 차단), 특정 단어의 빈도만으로도 꽤 높은 정확도를 보여준다.
BoW의 치명적인 한계
- 순서 무시 : "내가 너를 사랑한다"와 "너가 나를 사랑한다"는 완전히 다른 뜻이지만, BoW에서는 동일한 벡터로 표현된다.
- 희소성(Sparsity) 문제 : 단어 사전이 커질수록 0이 너무 많은 '희소 행렬'이 되어 메모리 낭비가 심해진다.
- 단어의 의미 미반영 : 단어 간의 유사성을 알 수 없다.
728x90
파이썬 실습: Scikit-learn의 CountVectorizer
파이썬에서는 CountVectorizer를 사용해 아주 쉽게 BoW를 구현할 수 있다.
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
'AI is a developer best friend.',
'AI models are amazing.'
]
vectorizer = CountVectorizer()
bow_vector = vectorizer.fit_transform(corpus)
print(f"단어 사전: {vectorizer.vocabulary_}")
print(f"BoW 행렬:\n{bow_vector.toarray()}")
요약
BoW는 현대의 복잡한 LLM에 비하면 아주 단순한 방식이지만, TF-IDF나 문서 검색 시스템의 기초가 되는 매우 중요한 개념이다.
Bag of Words(BoW, 단어 가방 모델)는 문장에서 단어의 순서를 무시하고, 각 단어의 등장 빈도만을 기반으로 문서를 벡터화하는 방법이다.
제미나이, 챗지피티 등을 이용 하여 작성
728x90
반응형
'LLM' 카테고리의 다른 글
| 23. Dense Matrix vs Sparse Matrix 비교 (0) | 2026.05.13 |
|---|---|
| 22. 밀집 행렬(Dense Matrix) (1) | 2026.05.12 |
| 20. 예측 기반(Prediction-based) (0) | 2026.05.08 |
| 19. 예측 기반 vs 카운트 기반 임베딩 비교 (0) | 2026.05.07 |
| 18. CSC ( Compressed Sparse Column ) (0) | 2026.05.06 |