[NLP]Word2Vec: CBOW

Date:     Updated:

카테고리:

Word2Vec에 관하여

1
Word2vec은 CBOW와 Skip-gram 두 종류로 나눠진다.

Word2Vec는 자연어 처리 분야에서 단어를 벡터화하는 모델 중 하나이다. 2013년 구글의 토마스 미콜로프(Thomas Mikolov)와 그의 팀이 개발한 이 모델은 단어 간의 의미적 유사성을 반영하는 벡터 표현을 생성하는 것이 주요 목표이다. Word2Vec는 기본적으로 단어를 일정한 크기의 벡터 공간에 임베딩하여 단어 간의 관계를 수치적으로 표현할 수 있게 한다.

Word2Vec 모델은 크게 두 가지 아케턱처로 나뉜다.

  • CBOW(Continuous Bag of Words)
  • Skip-gram

Architecture 1) CBOW

CBOW 모델은 문맥 단어들(문장에서 특정 단어의 주변 단어들, Context Words)을 사용하여 중심 단어(Center Words)를 예측하는 방식이다. 예를 들어, “The cat sits on the mat”이라는 문장이 있을 때, “cat”이라는 단어를 예측하기 위해 “The”, “sits”, “on”, “the”, “mat”과 같은 문맥 단어들이 사용된다. CBOW는 다수의 주변 단어로부터 중심 단어를 예측하기 때문에 빠르고 효과적이다.

1

중심 단어를 예측하기 위해서는 앞, 뒤로 몇 개의 단어를 고려할지 정해야 한다. 이를 윈도우 크기(Window size)라고 한다. 위의 그림을 예시로 들면, 윈도우 크기가 2인 것이다. 중심 단어를 기준으로 앞 뒤로 최대 두 개의 단어를 고려하기 때문이다. 정해진 윈도우 크기를 바탕으로, 문장 내 위치를 이동하며 중심 단어-주변 단어 쌍을 여러 개 만들어야 한다. 중심 단어를 하나씩 이동하면서 중심-주변 단어 쌍을 만들고, 이를 학습을 위한 데이터셋으로 삼을 수 있다. 이 방법을 슬라이싱 윈도우(Slicing window)라고 한다.

Training

1

CBOW를 인공신경망 형태로 시각화하면 위와 같다. 입력층(Input Layer)에는 미리 정해 둔 윈도우 범위 내의 주변 단어들의 원-핫 벡터가 입력으로 들어간다. 그리고 이 입력들을 하나의 벡터로 투사(Projection)하는 과정을 거치고, 다시 출력층(Ouptut Layer)에서 이를 바탕으로 예측된 중심 단어의 임베딩을 출력한다. 위의 그림에서와 같이, 다중 퍼셉트론과 같이 은닉층이 여러 개가 아닌 단일 은닉층 하나만을 가지는 얕은 신경망(Shallow neural network) 모델이다.

CBOW는 입력된 주변 단어로부터 중심 단어를 예측한다. 그래서 주변 단어들에 대해 얼마만큼의 가중치를 반영할건지를 나타내는 가중치 행렬 \(W\)와 \(W^{'}\)를 학습한다. 각각은 1)입력층과 투사층 사이 가중치 행렬(\(W\)), 2)투사층고가 출력층 사이 가중치 행렬(\(W^{'}\))를 나타낸다.

가중치 행렬

투사층이 \(M\)차원 벡터로 표현되며, 단어 집합의 크기가 \(V\)라고 할 때, 입력층과 투사층 사이의 가중치 행렬 \(W\)의 크기는 \(V \times M\)이 된다. 입력층의 벡터는 \(1 \times V\)의 크기를 가지고 \(W\)와 곱해지면 \((1 \times V) \times (V \times M) = (1 \times M)\)의 크기가 되는 것이다. 즉, 가중치 행렬의 본질적인 의미는 입력 벡터를 선형 변환하는 것이다.

위의 그림을 예로 들면, Vocabulary가 총 “The”, “cat”, “sits”, “on”, “the”, “mat”으로 6개이므로 입력 벡터의 크기는 \(1 \times 6\)이 되는 것이다. 그리고 투사층(Projection Layer)의 크기가 \(M = 5\)라고 하면 가중치 행렬의 크기는 \(6 \times 5\)가 되는 것이다. 참고로, \(W\)와 \(W^{'}\)는 전치(transpose)가 아닌 서로 다른 선형층(Linear layer)를 통해 만들어진 서로 다른 행렬이다.

벡터의 평균 계산 in 투사층

1

투사층에는 주변 단어들의 임베딩 벡터들을 합산하여 중심 단어를 예측하는 데 필요한 정보가 담긴 하나의 벡터로 통합한다. 이 과정에서 평균을 내면 각 주변 단어가 동일한 중요도를 가지게 되며, 모델은 이 평균 벡터를 사용하여 중심 단어를 예측할 수 있게 된다. 윈도우 크기를 \(n\)이라 하면 중심 단어를 기준으로 최대 \(2 \times n\)개의 주변 단어를 고려한다. 이를 위의 예시를 통해 수식화하면 투사층의 최종 출력은 다음과 같다.

$$v = \frac{V_{cat} + V_{sits} + V_{the} + V_{mat}}{2 \times n}$$

벡터의 합산 후 평균을 내는 것은 합산된 벡터의 크기를 조정하는 역할도 한다. 만약 단순히 벡터들을 합산만 한다면, 주변 단어의 개수에 따라 벡터의 크기가 달라질 수 있다. 이를 방지하고 벡터의 크기를 일정하게 유지하기 위해 평균을 내는 것이다. 이렇게 하면 학습 과정에서 일관된 입력을 제공할 수 있다.

학습을 위한 손실 함수 정의

1

투사층에서 평균을 냄으로써 주변 정보를 취합했으면 최종적으로 \(W^{'}\)행렬과 곱해져 선형 변환을 한다. 이 선형 변환된 결과 벡터를 \(z\)라 하고, 예측을 위해 소프트맥스 함수에 통과시키면된다. 결론적으로 이렇게 얻게 된 최종 출력을 \(\hat{y}\)라 하며 이를 정답 레이블 \(y\)와 대조 학습시키는 것이다. 따라서 손실 함수로 Cross-Entropy를 사용한다.

$$\mathcal{L} = \text{Cross-Entropy}(\hat{y}, y) = - \sum_{j=1}^{V} y_j \log (\hat{y}_j)$$

모델이 역전파를 통해 학습하는 파라미터는 두 가중치 행렬 \(W\)와 \(W^{'}\)이다. 손실 함수는 최소화시키는 방향으로 최적화를 진행한다.

Reference

[1] Tomas Mikolov, Kai Chen, Greg Corrado, and JeffreyDean. 2013. Efficient estimation of word representations in vector space.
[2] Blog: Word2Vec: (2) CBOW 개념 및 원리

NLP 카테고리 내 다른 글 보러가기

댓글 남기기