에듀테크 프로젝트 대시보드
워드 임베딩 (Word2Vec)
컴퓨터는 글자 그대로는 "king"과 "queen"이 비슷하다는 걸 모릅니다.
워드 임베딩은 단어를 숫자 벡터(좌표)로 바꿔서,
의미가 비슷한 단어는 가까운 위치에, 관계가 비슷한 단어 쌍은
같은 방향의 화살표로 놓이게 학습한 결과물입니다.
아래에서 king − man + woman 같은
벡터 뺄셈·덧셈을 직접 계산해 보세요.
실제 word2vec은 보통 100~300차원 벡터를 쓰지만, 여기서는 원리를 보여주기 위해 2차원으로 줄인 장난감 공간입니다. ━ 초록 화살표 = 성별 관계, ━ 주황 화살표 = 나라→수도 관계. 두 화살표가 서로 평행하다는 점을 확인해 보세요.
언어학자 존 퍼스(J.R. Firth)의 유명한 말처럼, "단어는 함께 어울리는 친구를 보면 안다" (You shall know a word by the company it keeps)는 것이 워드 임베딩의 핵심 아이디어입니다. "고양이는 ___를 먹었다"와 "강아지는 ___를 먹었다"의 빈칸에 비슷한 단어들이 자주 등장한다면, 그 단어들은 비슷한 문맥에서 쓰이는 것이고, word2vec은 이런 주변 단어(문맥)를 수백만 문장에서 관찰해 단어를 벡터로 배치합니다. 결과적으로 자주 같은 문맥에 등장하는 단어일수록 벡터 공간에서 가까워집니다.
word2vec은 실제로 정답 레이블 없이, 문장 자체를 문제지로 삼아 얕은 신경망을 학습시킵니다(자기지도 학습).
주변 단어들 → 가운데 단어를 예측합니다. "The cat ___ on the" 빈칸에 "sat"이 온다는 것을 맞히도록 학습하며, 문맥 벡터들을 평균 내 입력으로 씁니다. 작은 데이터셋에서 비교적 빠르고 안정적입니다.
가운데 단어 → 주변 단어들을 예측합니다. "sat"만 보고 그 주변에 "The, cat, on, the"가 올 확률을 높이도록 학습합니다. 희귀 단어 표현에 강해 원조 word2vec 논문(Mikolov, 2013)이 기본으로 채택했습니다.
실제 구현에서는 전체 어휘(수만~수십만 개)에 대해 softmax를 매번 계산하면 너무 느려서, 정답 근처의 몇 개 "가짜 단어"만 구별하는 네거티브 샘플링으로 근사합니다.
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의 셀프 어텐션이 해결합니다.