MACHINE LEARNING

Word2Vec 개념 정리

24_bean 2022. 12. 30. 18:29

기존에 존재하던 one hot vector 형식의 matrix는 word vector간의 유의미한 유사도를 구하는 것이 제한되었다. (Sparse representation)

 

따라서 다음과 같은 개념이 등장하게 된다.

 

단어의 의미를 다차원 벡터 공간에 띄우는 개념 : 분산표현 (distributed representation)

분산 표현을 통한 단어 간 의미적 유사성을 벡터화 : 워드 임베딩 (word embedding) -> 임베딩 벡터 (embedding vector)

 


분산 표현 (distributed representation)

분산 가설(distributional hypothesis) 아래에서 정의된 해당 표현 방식은 분산 가설을 통해 텍스트의 의미를 학습하며, 단어의 의미를 벡터에 여러 차원에 분산(distributed)해 표현한다.

 

단어의 vector matrix를 만들 때 해당 단어의 벡터는 사용자가 설정한 차원의 수를 가지는 벡터가 되며 각 차원의 값은 실수값을 가진다.즉, 텍스트에서 등장하는 단어 집합(vocabulary)의 크기일 필요 없음을 의미한다. -> sparse matrix가 아니라는 것을 의미.

 

결과적으로 분산 표현이란, 단어의 의미를 여러 차원(비교적 저차원)에 분산(distributed)하여 표현한다는 것을 의미함.해당 표현 방식을 통해 단어간의 유의미한 유사도를 계산할 수 있고 대표적인 학습 방법으로 word2vec이 있음

 

one-hot-vector

e.g.) dog = [0 0 0 1 0 ... 0]

 

distributed representation

e.g.) dog = [0.2 0.3 0.7 .. 0.2]

 


 

Word2Vec

위에서 언급한 바를 토대로 단어간의 유의미한 유사도를 vector matrix로 표현하기 위한 방법을 word2vec라고 한다고 했다.

즉, 비슷한 분포를 가진 단어는 비슷한 의미를 갖는다는 아이디어에서 출발한다. 이를 위한 표현 방법으로는 분산 표현(distributed representation)이 있다고 했는데, 구체적으로 어떻게 단어가 벡터 공간에 projection 되는지 보자.

 

Word2Vec도 학습모델이므로 layer로 구성이 되는데 매우 단순한 Input-Hidden-Output로 이루어 져있으며 빠른 학습이 장점이다.

즉, Word2Vec은 단어 간의 유사도와 통계적 유사도 모두를 고려한다.

 

이때 모델은 크게는 다음과 같이 두가지 방법으로 나뉜다.

 

CBOW: 주변 단어(n-gram)를 통해 중심 단어를 결정

Skip-Gram: 중심 단어를 통해 주변 단어를 결정

Difference with CBOW and Skip-gram

 


CBOW

 

주변 단어(n-gram)를 통해 중심 단어를 결정

 

CBOW의 parameter는 다음과 같이 구성되는데, W_input_hidden 과 W_hidden_output이 다음과 같겠다.

parameters of CBOW

주변단어(context word)로부터 얻은 weight를 통해 예측하는 "중심"단어(center word)에 대한 조건부확률을 구한다.

conditional probability

각 단어의 one-hot-vector 결과(통계간 유사도)를 parameter W(의미적 유사도)와 곱해준다.

이를 통해 embedding vector를 얻고

앞 뒤로 context word가 m개씩 있었으므로 2배 해주어 hidden layer를 다음과 같이 구성

hidden layer, average of embedding word vector

이후, output layer로 보낼 score계산

최종 결과를 얻기 위한 softmax 함수

loss function 으로는 cross entropy를 정의하며, optimization으론 SGD를 채택한다.


Skip-gram

중심 단어를 통해 주변 단어를 결정

architecture of Skip-gram

 

학습 과정은 다음과 같다.(사실 CBOW를 반대로 뒤집은 거랑 같다..^^)

가운데 단어를 one-hot-vector로 변환

해당 one-hot-vector와 W_vn의 Weight를 곱해줘 embedded vector를 만들어준다.

 

score 뽑아내고

softmax function에 적용

중심 단어에 대해 주변 단어들은 완전히 독립적이라는 가정하에, Cross entropy J를 최소화 시켜준다

이때 J는 다음과 같이 정의


CBOW vs Skip-gram

수학적인 개념이 한참 나왔으니 마지막으로 조금만 더 하면서 끝내려고 한다.

 

CBOW보다 Skip-gram이 일반적인 상황에서 성능이 더 좋은 것으로 나타나는데 그 이유는 다음과 같다.

다시 개념을 되돌려보면,

 

CBOW: 주변 단어(n-gram)를 통해 중심 단어를 결정

Skip-gram: 중심 단어를 통해 주변 단어를 결정

하는 방식이었다.

 

즉 만약 각각 2-gram 이라 할 떄

CBOW는 매번 4개를 통해 "1개"를 예측하는 것이고

Skip-gram은 1개를 통해 "4개"를 예측한다.

Skip-gram이 CBOW보다 각 단어에 대해 update할 기회가 많다는 것을 의미하는데 이것이 성능을 향상시키는 요소가 된다.


CBOW & Skip-gram 한계

1. 단어 집합(vocabulary)가 매우 커질 경우

2. "the"같이 자주 나오는 단어가 update가 자주 될 경우

 

-> 모델 자체가 무거워짐, 많은 시간 소모

 

해결

  • Negative Sampling : 모든 경우의 수가 아닌 sampling된 경우의 수를 이용해 확률 계산
  • Hierachical Softmax : Tree 구조를 통한 계산량 감소