728x90
반응형
SMALL

Bag Of Words(BoW) 란 무엇인가요 ?

단어 가방 모델 또는 단어 집합 모델

Bag Of Words(BoW)는 단어들의 순서는 완전히 무시한 채, 오로지 단어의 출현 빈도(Frequency)에만 집중하여 텍스트를 수치화하는 방법이다. 

마치 가방 (Bag) 안에 단어들을 마구 집어넣고 흔든 뒤, 각 단어가 몇 개씩 들어있는지 세는 것과 같다. 이 과정에서 문법이나 단어의 위치 정보는 사라지지만, 어떤 단어가 많이 쓰였는지를 통해 텍스트의 성격을 파악할 수 있다. 

"Bag"

"Bag"은 여기서 순서를 무시하고 담아놓은 집합이라는 의미이다. 

 

 

BoW를 만드는 과정

BoW를 생성하는 과정은 크게 두 단계로 나뉜다. 

  1. 단어 사전(Vocabulary) 구축 : 전체 문서에 등장하는 모든 고유 단어를 중복 없이 모아 번호(인덱스)를 매긴다. 
  2. 빈도 측정 : 각 단어 인덱스 위치에 해당 단어가 문서에 몇 번 등장했는지 기록한다. 

예: 

  • 문장 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
반응형

+ Recent posts