Word2Vec
단어를 벡터로 바꾸는 시작점
Word2Vec은 2013년 Google의 Mikolov가 발표한 모델이다. 핵심 아이디어는 단순하다 — 비슷한 문맥에 나타나는 단어는 비슷한 의미를 가진다.
두 가지 방식이 있다. CBOW는 주변 단어 여러 개를 입력으로 넣고 가운데 단어를 맞추는 구조. Skip-gram은 반대로 하나의 단어에서 주변 단어들을 예측한다.
구조: 2층짜리 얕은 신경망
Word2Vec은 딥러닝이라 부르기엔 얕지만, 엄연히 신경망이다. 입력층 → 은닉층(1개) → 출력층, 이게 전부.
입력으로 "고양이"(one-hot 벡터)를 넣으면, 은닉층을 거쳐 출력에서 "귀여운", "동물" 같은 주변 단어를 예측한다. 학습이 끝나면 은닉층의 가중치 행렬을 꺼내서 그게 곧 단어 벡터가 된다.
은닉층 크기가 300이면 모든 단어가 300차원 벡터로 표현된다. 이 벡터끼리 코사인 유사도를 구하면 의미적 거리가 나온다.
직접 학습 vs 사전학습 모델
Word2Vec은 우리 데이터로 직접 신경망을 학습시키는 방식이다. 데이터가 수만~수십만 건 필요하고 GPU가 있으면 좋다. 대신 도메인에 최적화된 벡터를 얻는다.
반면 OpenAI의 text-embedding-3-small 같은 사전학습 모델은 이미 인터넷의 방대한 텍스트로 학습이 끝난 상태다. API를 호출해서 벡터를 받기만 하면 된다. 데이터가 적어도 되고 다국어가 자동 지원되지만, 우리 도메인 특화는 안 된다.
왜 추천시스템에 중요한가
Word2Vec의 진짜 가치는 "king - man + woman = queen" 같은 벡터 연산이 성립한다는 점이다. 이 아이디어를 아이템에 적용하면 Item2Vec이 된다.
학습된 벡터 공간에서 유사도를 계산하면, 명시적인 태그나 카테고리 없이도 "이 아이템과 비슷한 아이템"을 찾을 수 있다.
동작 원리
대량 텍스트에서 단어-문맥 쌍을 추출
얕은 신경망(1 hidden layer)으로 예측 학습
Negative Sampling으로 학습 효율화
Hidden layer의 가중치가 곧 단어 임베딩
장점
- ✓ 학습이 빠르고 수백만 단어도 처리 가능
- ✓ 벡터 연산으로 의미 관계 포착
단점
- ✗ 단어의 다의성을 구분 못함 (bank = 은행? 강둑?)
- ✗ 문맥 윈도우 밖의 장거리 의존성 무시