728x90
반응형
SMALL
CBOW란 무엇인가?
CBOW(Continuous Bag of Words)는 주변에 있는 단어들 (Context) 을 입력으로 주었을 때, 그 중앙에 위치한 단어 (Target) 가 무엇인지 예측하는 모델이다.
예
"맛있는 **[ ? ]**를 먹었다"라는 문장이 있다면, '맛있는'과 '를', '먹었다'라는 주변 단어들을 통해 **[ ? ]**에 들어갈 말이 '사과' 혹은 '배'일 확률이 높다고 학습하는 방식이다.
반응형
CBOW의 구조 (작동 메커니즘)
BOW는 단순한 3층 구조의 신경망으로 이루어져 있다.
- 입력층 (Input Layer) : 중심 단어 주변의 단어들을 원-핫 벡터로 받아들인다. (이 범위를 Window Size라고 한다.)
- 투사층 (Project Layer) : 입력된 단어들의 벡터를 가중치 행렬과 곱한 뒤, 그 값들의 평균을 구한다. 이 과정에서 차원이 축소되며 단어의 의미가 압축된다.
- 출력층(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 |