한양과학기술고등학교

에듀테크 프로젝트 대시보드

워드 임베딩 (Word2Vec)

워드 임베딩 (Word Embedding / Word2Vec)

컴퓨터는 글자 그대로는 "king"과 "queen"이 비슷하다는 걸 모릅니다. 워드 임베딩은 단어를 숫자 벡터(좌표)로 바꿔서, 의미가 비슷한 단어는 가까운 위치에, 관계가 비슷한 단어 쌍은 같은 방향의 화살표로 놓이게 학습한 결과물입니다. 아래에서 king − man + woman 같은 벡터 뺄셈·덧셈을 직접 계산해 보세요.

// toy embedding space (2차원으로 단순화)

실제 word2vec은 보통 100~300차원 벡터를 쓰지만, 여기서는 원리를 보여주기 위해 2차원으로 줄인 장난감 공간입니다. ━ 초록 화살표 = 성별 관계, ━ 주황 화살표 = 나라→수도 관계. 두 화살표가 서로 평행하다는 점을 확인해 보세요.

// 벡터 유추 연산 (A − B + C = ?)
− + =
위 단어를 골라 "계산"을 눌러보세요.
// 코사인 유사도 계산기
vs
0.00

"단어의 의미는 주변 단어가 결정한다" — 분포 가설

언어학자 존 퍼스(J.R. Firth)의 유명한 말처럼, "단어는 함께 어울리는 친구를 보면 안다" (You shall know a word by the company it keeps)는 것이 워드 임베딩의 핵심 아이디어입니다. "고양이는 ___를 먹었다"와 "강아지는 ___를 먹었다"의 빈칸에 비슷한 단어들이 자주 등장한다면, 그 단어들은 비슷한 문맥에서 쓰이는 것이고, word2vec은 이런 주변 단어(문맥)를 수백만 문장에서 관찰해 단어를 벡터로 배치합니다. 결과적으로 자주 같은 문맥에 등장하는 단어일수록 벡터 공간에서 가까워집니다.

학습 방식 두 가지: CBOW vs Skip-gram

word2vec은 실제로 정답 레이블 없이, 문장 자체를 문제지로 삼아 얕은 신경망을 학습시킵니다(자기지도 학습).

CBOW (Continuous Bag-of-Words)

Thecat sat onthe

주변 단어들 → 가운데 단어를 예측합니다. "The cat ___ on the" 빈칸에 "sat"이 온다는 것을 맞히도록 학습하며, 문맥 벡터들을 평균 내 입력으로 씁니다. 작은 데이터셋에서 비교적 빠르고 안정적입니다.

Skip-gram

Thecat sat onthe

가운데 단어 → 주변 단어들을 예측합니다. "sat"만 보고 그 주변에 "The, cat, on, the"가 올 확률을 높이도록 학습합니다. 희귀 단어 표현에 강해 원조 word2vec 논문(Mikolov, 2013)이 기본으로 채택했습니다.

실제 구현에서는 전체 어휘(수만~수십만 개)에 대해 softmax를 매번 계산하면 너무 느려서, 정답 근처의 몇 개 "가짜 단어"만 구별하는 네거티브 샘플링으로 근사합니다.

gensim으로는 세 줄

from gensim.models import Word2Vec

sentences = [['king', 'queen', 'royal'], ['man', 'woman', 'person'], ...]  # 토큰화된 문장들
model = Word2Vec(sentences, vector_size=100, window=5, sg=1)  # sg=1 → skip-gram, sg=0 → CBOW

model.wv.most_similar('king')                              # 가장 가까운 단어들
model.wv.most_similar(positive=['king', 'woman'], negative=['man'])
# → [('queen', 0.71), ...]   king - man + woman ≈ queen

어디에 쓰이나

· 검색·추천 — 검색어와 문서를 같은 벡터 공간에 놓고 가까운 것을 찾는 의미 기반 검색의 기초.

· RAG(검색 증강 생성) — 최신 문장 임베딩을 대량 저장해두고 질문과 가까운 문서를 근사 최근접 이웃으로 찾는 구조(벡터 검색·HNSW와 연결).

· 기계 번역·챗봇 — 단어·문장을 벡터로 바꾸는 첫 단계가 Transformer 계열 언어모델 입력의 시작점.

· 스팸·감정 분석 — 단어를 벡터로 바꾼 뒤 전통적인 분류기(로지스틱 회귀 등)에 입력.

한계: 단어 하나에 벡터 하나만 배정하므로 "배(bank/ship/belly)"처럼 문맥에 따라 뜻이 달라지는 다의어를 구분하지 못합니다. 이 문제는 문맥마다 다른 벡터를 만드는 Transformer의 셀프 어텐션이 해결합니다.