개요
Word2Vec의 한가지 방법
주변의 단어를 가지고 중간의 단어를 예측한다.
예시
코퍼스에 아래와 같은 문장이 있다.
The fat cat sat on the mat
예측하고 싶은 단어 sat을 중심 단어(center word)라고 하고, 예측에 사용되는 단어를 주변 단어(context word)라고 한다.
중심 단어를 예측하기 위해 앞뒤로 몇개의 단어를 볼지에 대한 범위를 윈도우(window)라고 한다. 앞뒤로 참고하기 때문에, 윈도우 크기가 n이라면, 실제 중심단어를 예측하기 위해 참고하는 주변 단어의 개수는 2n개이다.
Word2Vec에서 입련은 모두 One-Hot Vector가 되어야 한다.
슬라이딩 윈도우 (Sliding Window)

CBOW의 인공 신경망

입력측의 입력으로서 앞뒤의 단어들의 One-Hot Vector가 들어간다.
출력층에서 예측하고자 하는 단어의 One-Hot Vector가 필요하다.
Word2Vec은 딥러닝 모델은 아니다. 입력층과 출력층 사이의 은닉층의 개수가 단 하나이기 때문이다. 이런 경우는 보통 Shallow Neural Network라고 부른다.
Word2Vec의 은닉층은 일반적인 은닉층과는 달리 활성화 함수가 존재하지 않고, 룩업 테이블이라는 연산을 담당하는 층이다. 일반적인 은닉층과 구분하기 위해 투사층(Projection Layer)이라고 부르기도 한다.
자세히 알아보기

투사층의 크기가 M이다. M은 임베딩하고 난 벡터의 차원이다. 다시 말해, 위 그림에서 투사층의 크기는 M=5이기 때문에 CBOW를 수행하고 나서 얻는 각 단어의 임베딩 벡터의 차원은 5가 된다.
입력층과 투사층 사이의 가중치 W는 V x M 행렬이며, 투사층에서 출력층사이의 가중치 W’는 M x V행렬이다. (참고로 W’는 표기만 그렇지 W의 전치행렬은 아니다. 완전히 다른 새로운 행렬)
CBOW는 W와 W’를 계속해서 학습해나가는 인공신경망이다.
Lookup Table

: 각 주변 단어의 원-핫 벡터.
i번째 인덱스에 1이라는 값을 가지고 그 외에 0을 값을 가지는 입력 벡터와 가중치 W행렬의 곱은 W행렬의 i번째 행을 그대로 읽어오는것과 동일하다. 그래서 이 벡터를 lookup table이라고 부른다.
여기서 lookup해온 W의 각 행벡터가 사실 Word2Vec을 수행한 후의 각 단어의 M차원의 크기를 갖는 임베딩 벡터이다.
Projection Layer

Lookup Table의 결과들은 모두 더해져 벡터들은 투사층에서 만나 이 벡터들의 평균인 벡터를 구하게 된다. [^1]
Output Layer

행렬곱을 (1 x V * V x M * M x V) 했기 때문에 1 x V 행렬이 나온다.
이 벡터에 대해 소프트맥스 함수를 취하는데, 이렇게 나온 값을 Score Vector라고 한다.
Score Vector
스코어 벡터의 j번째 인덱스가 가진 0과 1사이의 값은 j번째 단어가 중심 단어일 확률을 나타낸다. 그리고 이 스코어 벡터는 우리가 실제로 알고 있는 벡터인 중심 단어의 One-Hot Vector의 값과 가까워져야 한다.
스코어 벡터를 라고 한다. 중심단어를 로 했을 때, 이 두벡터값의 오차를 줄이기위해 CBOW는 손실 함수로 Cross Entropy Function을 사용한다.