📐

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

대량 텍스트에서 단어-문맥 쌍을 추출

2

얕은 신경망(1 hidden layer)으로 예측 학습

3

Negative Sampling으로 학습 효율화

4

Hidden layer의 가중치가 곧 단어 임베딩

장점

  • 학습이 빠르고 수백만 단어도 처리 가능
  • 벡터 연산으로 의미 관계 포착

단점

  • 단어의 다의성을 구분 못함 (bank = 은행? 강둑?)
  • 문맥 윈도우 밖의 장거리 의존성 무시

사용 사례

유사 단어 검색 (검색어 추천) Item2Vec의 기반 — 아이템 임베딩 감성 분석, 문서 분류의 입력 표현

참고 자료