Word2Vec은 어떻게 단어를 예측으로 학습하는가: CBOW·Skip-gram과 네거티브 샘플링

Word2Vec의 CBOW·Skip-gram 학습 방식과 계층적 소프트맥스·네거티브 샘플링 최적화, 벡터 연산으로 드러나는 의미 관계와 한계·응용을 정리한다.

2026-08-14 · 최초 발행 2025-05-23

2013년 구글의 Tomas Mikolov가 내놓은 이 모델의 목표 자체는 낯설지 않았다 — 단어를 실수 벡터로 바꾸는 것. 새로웠던 건 그 벡터를 '예측'이라는 과제를 풀면서 학습시킨다는 접근이었다. Word2Vec은 단어를 의미적 관계를 보존하면서 고정된 차원의 밀집 벡터(dense vector)로 변환하는 방법을 제공한다.

분산 표현이라는 아이디어

단어 임베딩은 단어를 실수 벡터로 변환하는 과정이고, 분산 표현(Distributed Representation)은 단어의 의미가 여러 차원에 분산되어 표현되는 방식을 말한다. 의미적으로 유사한 단어들은 벡터 공간 모델 상에서 서로 가깝게 위치하며, 희소 표현(sparse representation)에 비해 훨씬 적은 차원으로 단어의 의미 정보를 압축한다(차원 축소).

주변 단어로 중심을 맞히는 CBOW

CBOW(Continuous Bag of Words)는 주변 단어들(context words)로 중심 단어(target word)를 예측하는 방식이다. 중심 단어를 둘러싼 주변 단어들을 입력으로 받아 중심 단어의 확률 분포를 출력한다. 작은 데이터셋에서 효율적이며 빈번한 단어에 대해 좋은 표현을 만든다.

단어 t-2Projection Layer단어 t-1단어 t+1단어 t+2Output Layer단어 t 예측

중심 단어로 주변을 맞히는 Skip-gram

Skip-gram은 반대로 중심 단어로 주변 단어들을 예측한다. 중심 단어를 입력으로 받아 주변 단어들의 확률 분포를 출력하며, 큰 데이터셋에서 효과적이고 드문 단어에 대해서도 좋은 표현을 만든다는 점에서 CBOW와 대비된다.

단어 tProjection LayerOutput Layer단어 t-2 예측단어 t-1 예측단어 t+1 예측단어 t+2 예측

가중치 행렬을 오가며 학습이 진행되는 과정

각 단어에 대해 랜덤 벡터로 초기화된 두 개의 가중치 행렬(W와 W')을 만드는 것에서 시작한다. 주어진 입력 단어(들)에 대해 목표 단어(들)의 확률을 계산하는 순방향 전파를 거쳐, 예측된 확률과 실제 목표 단어 간의 차이를 측정하는 손실 함수를 계산하고, 손실을 최소화하도록 가중치를 업데이트하는 역방향 전파를 수행한다. 이 과정을 학습 데이터 전체에 대해 여러 번 반복한다.

계층적 소프트맥스와 네거티브 샘플링으로 계산량을 줄이는 법

계층적 소프트맥스(Hierarchical Softmax)는 기존 소프트맥스의 계산 복잡도(O(V), V는 어휘 크기)를 O(log V)로 줄인다. 허프만 트리(Huffman Tree)로 어휘를 이진 트리로 구성하고, 경로 상의 결정(이진 분류)을 통해 확률을 계산하는 방식이다.

RootInternal NodeInternal Nodecatdogbookcomputer

네거티브 샘플링(Negative Sampling)은 정답 단어(Positive Sample)와 소수의 오답 단어(Negative Sample)만을 사용해 로그우도 대신 이진 분류 문제로 접근한다. 단어 빈도에 기반한 샘플링 전략을 쓰며, 이 방식으로 계산 효율성이 크게 향상된다.

Gensim으로 확인하는 실제 구현

Word2Vec 구현은 토큰화·불용어 제거·어간 추출 등의 텍스트 전처리, 고유 단어 목록을 만드는 어휘 구축, 중심 단어와 문맥 단어 쌍을 뽑는 학습 데이터 생성, CBOW 또는 Skip-gram 아키텍처를 고르는 모델 구성, 최적화 기법을 적용하는 모델 학습, 학습된 가중치에서 단어 벡터를 뽑는 임베딩 추출 순서로 진행된다.

Python에서는 Gensim 라이브러리로 간단하게 구현할 수 있다.

from gensim.models import Word2Vec

# 학습 데이터 (토큰화된 문장 리스트)
sentences = [["cat", "sat", "on", "the", "mat"], ["dog", "barked", "at", "cat"]]

# 모델 학습 (Skip-gram)
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, sg=1)

# 단어 벡터 확인
vector = model.wv['cat']
print(vector)

# 유사 단어 찾기
similar_words = model.wv.most_similar('cat')
print(similar_words)

벡터가 의미와 문법을 동시에 담아내는 방식

코사인 유사도를 통해 단어 간 의미적 유사성을 계산할 수 있다 — "king"과 "queen"의 벡터는 높은 유사도를 갖는다. 더 흥미로운 건 벡터 연산으로 관계를 표현할 수 있다는 점이다: Vector("king") - Vector("man") + Vector("woman") ≈ Vector("queen"), Vector("paris") - Vector("france") + Vector("italy") ≈ Vector("rome").

King - ManVector SpaceWomanQueen

이런 관계는 단수-복수(cat→cats, dog→dogs), 시제(go→going, run→running), 비교급(good→better, bad→worse), 국가-수도(japan→tokyo, france→paris) 같은 다양한 언어 관계에서도 나타난다.

미등록 단어와 다의어 앞에서 드러나는 한계

Word2Vec은 학습 데이터에 없는 단어를 처리하지 못하는 미등록 단어(OOV) 문제, "bank"(은행/강둑)처럼 다의어의 의미를 구분하지 못하는 문제, 단어별로 고정된 벡터 하나만 할당해 문맥을 반영하지 못하는 문제, 형태학적 정보를 활용하지 못하는 문제를 안고 있다.

이에 대한 개선 방안으로 FastText는 단어를 n-gram으로 분해해 OOV 문제를 해결하고, ELMo/BERT는 문맥을 고려한 동적 임베딩을 제공한다. 형태소 수준 정보를 활용하는 Subword 임베딩, 다양한 언어 간 공통 벡터 공간을 구축하는 다국어 임베딩도 개선 방향으로 꼽힌다.

실무에 쓰일 때 마주치는 응용과 선택

추천 시스템에서는 사용자가 본 상품과 의미적으로 유사한 상품을 추천한다(예: "신발을 구매한 사용자에게 양말 추천"). 문서 분류에서는 문서의 단어 벡터를 평균내어 문서 벡터를 만든 뒤 감성 분석·스팸 필터링 등에 활용한다. 정보 검색에서는 쿼리와 문서 간 의미적 유사성을 계산해 키워드 기반 검색의 한계를 넘어서고, 기계 번역에서는 크로스-언어 임베딩으로 유사한 언어 간 단어를 매핑해 번역 품질을 높인다. 챗봇 개발에서는 사용자 입력의 의도를 분석하고 유사 질문을 매칭해 다양한 표현 방식을 처리하는 능력을 높인다.

실제 구현에서는 몇 가지 값을 정해야 한다. 벡터 차원(dimension)은 일반적으로 100~300 차원을 쓰고, 윈도우 크기(window size)는 문맥 단어를 포함하는 범위로 보통 5-10, 최소 출현 횟수(min_count)는 희소 단어를 걸러내는 임계값, 학습률(learning rate)은 0.025가 일반적인 시작점, 반복 횟수(epochs)는 데이터셋 크기에 따라 5-50회 사이로 설정한다. 전처리 전략으로는 대소문자 통일·특수문자 처리 같은 정규화, 의미가 약한 단어를 제거할지 결정하는 불용어 제거, 단어의 기본형으로 바꾸는 어간 추출/표제어 추출, 단어구(phrase)를 탐지하는 n-gram 생성이 있다. 평가는 WordSim-353·SimLex-999 같은 벤치마크 데이터셋으로 하는 유사도 평가, "king:queen::man:woman" 유형 문제를 푸는 유추 관계 평가, 실제 응용에서의 성능을 보는 다운스트림 태스크 성능으로 이뤄진다.

계산 자원이 제한된 곳에서 Word2Vec이 여전히 쓰이는 이유

BERT·GPT 같은 더 복잡한 모델이 등장했지만 Word2Vec은 여전히 많은 실용적 응용에서 효율적이고 효과적인 선택지로 남아 있다. 계산 자원이 제한된 환경이나 특정 도메인에 특화된 단어 표현이 필요한 경우가 특히 그렇다. 단순하면서도 강력한 아이디어로 단어들 간의 의미적·문법적 관계를 포착하는 벡터 공간을 학습할 수 있게 했다는 점에서, Word2Vec의 원리를 이해하는 것은 더 발전된 임베딩 기법과 언어 모델의 기반을 이해하는 출발점이 된다.

Word2VecCBOWSkipgram네거티브샘플링단어임베딩