728x90
반응형
SMALL

CBOW란 무엇인가?

CBOW(Continuous Bag of Words)는 주변에 있는 단어들 (Context) 을 입력으로 주었을 때, 그 중앙에 위치한 단어 (Target) 가 무엇인지 예측하는 모델이다. 

"맛있는 **[ ? ]**를 먹었다"라는 문장이 있다면, '맛있는'과 '를', '먹었다'라는 주변 단어들을 통해 **[ ? ]**에 들어갈 말이 '사과' 혹은 '배'일 확률이 높다고 학습하는 방식이다. 

 

 

반응형

 

CBOW의 구조 (작동 메커니즘)

BOW는 단순한 3층 구조의 신경망으로 이루어져 있다. 

  1. 입력층 (Input Layer) : 중심 단어 주변의 단어들을 원-핫 벡터로 받아들인다. (이 범위를 Window Size라고 한다.)
  2. 투사층 (Project Layer) : 입력된 단어들의 벡터를 가중치 행렬과 곱한 뒤, 그 값들의 평균을 구한다. 이 과정에서 차원이 축소되며 단어의 의미가 압축된다. 
  3. 출력층(Output Layer) : 평균값이 계산된 벡터에 다시 가중치를 곱하고 Softmax 함수를 적용하여, 사전의 모든 단어 중 어떤 단어가 중심 단어일지 확률을 출력한다. 

수식 느낌

주변 단어 벡터 평균:

v = (w1 + w2 + w3) / 3
 

출력 확률:

P(target | context) = softmax(W · v)
 

CBOW의 특징: 왜 쓸까?

  • 학습 속도가 빠름 : 여러 주변 단어의 평균치를 계산하여 하나의 단어를 예측하기 때문에, 계산량이 상대적으로 적다. 데이터 양이 방대할 때 효율적이다. 
  • 분포 가설의 충실한 구현 : "함께 나타나는 단어들이 의미를 결정한다"는 원칙을 가장 직접적으로 모델링한다. 
  • 빈번한 단어에 강함 : 데이터셋에 자주 등장하는 단어들에 대해서는 매우 정확한 벡터를 생성해 낸다. 

 

728x90

 

Skip-gram과의 결정적 차이

가장 큰 차이는 "무엇으로 무엇을 맞추느냐" 입니다. 

 

  • CBOW: 주변 단어(다수) → 중심 단어(하나) 예측. (다대일)
  • Skip-gram: 중심 단어(하나) → 주변 단어(다수) 예측. (일대다)

일반적으로 성능은 Skip-gram이 더 좋다고 알려져 있지만(특히 드문 단어 처리에서), 학습 데이터가 매우 많고 전반적인 맥락의 의미를 빠르게 파악하고 싶을 때는 CBOW가 좋은 선택지가 된다. 

 

Python 코드(Gensim)

from gensim.models import Word2Vec

sentences = [
    ["나는", "밥을", "먹는다"],
    ["나는", "커피를", "마신다"]
]

# CBOW: sg=0
model = Word2Vec(
    sentences,
    vector_size=100,
    window=2,
    min_count=1,
    sg=0
)

print(model.wv["나는"])

 

 

핵심 포인트 3가지

  • 주변 단어 평균으로 의미를 압축 
  • 중심 단어를 맞추도록 학습
  • 학습된 weight = 단어 임베딩

 

요약: CBOW는 '맥락'의 평균이다

-> 중심 단어 추론 

-> 주변 단어(context) → 중심 단어(target)를 예측하는 모델

-> 특징: 단어장이 작을 때 유리하며 학습 속도가 빠릅다. 

CBOW는 주변 단어들의 정보를 하나로 뭉쳐(평균 내어) 중심 단어를 추론합니다. 비록 단어 하나하나의 세밀한 특징은 Skip-gram보다 조금 뭉툭하게 잡힐 수 있지만, 전체적인 단어 간의 유사도 공간을 만드는 데는 아주 훌륭한 도구이다. 

 

 

 

제미나이, 챗지피티 등을 이용 하여 작성

728x90
반응형

'LLM' 카테고리의 다른 글

13. GloVe  (0) 2026.04.27
12. Skip-gram  (0) 2026.04.24
10. Word2Vec  (0) 2026.04.22
9. 원-핫 인코딩(One-hot Encoding)  (0) 2026.04.21
8. 임베딩(Embedding)  (0) 2026.04.17

+ Recent posts