새소식

부스트캠프 AI Tech 4기

[NLP] 2. Word Embedding

  • -

Word Embedding

  • 각 단어들을 특정한 차원으로 이루어진 공간 상의 벡터로 변환해주는 기법
  • 비슷한 의미를 가지는 단어가 좌표공간상에 비슷한 위치의 점으로 mapping되게 함으로써 단어들의 의미상의 유사도를 잘 반영한 벡터표현을 제공해준다.

 

Word2Vec

같은 문장에서 나타난 인접한 단어들 간에 의미가 비슷할 것이라고 가정한다.한 단어가 주변에 등장한 단어들을 통해 의미를 알 수 있다는 아이디어

 

cat 단어를 입력으로 주고 주변 단어를 숨긴 채 이를 예측하는 방식으로 Word2Vec모델을 학습시키면cat이라는 단어가 나오면 meow와 pet 단어가 주변 단어로 높은 확률을 가진다는 것을 모델이 학습하게 된다.

 

 

Word2Vec Algorithm

"I study math"라는 문장이 있다고 가정하자

→ Tokenization하고 unique한 단어들만 모아서 사전 구축 : {"i", "study", "math"}

→ 각 단어는 vocab size만큼의 dimension을 갖는 one-hot 벡터 형태 : "study" [0, 1, 0]

→ sliding window라는 기법을 적용해 한 단어를 중심으로 앞뒤로 나타나는 단어 각각과 입출력 쌍을 구성한다.
window_size = 3인 경우(앞 뒤로 한 단어씩을 보는 경우) 아래와 같이 단어쌍을 구성한다.
I 단어가 중심일 때 : (I, study)

study 단어가 중심일 때 : (study, I) , (study, math)

 

 

 

 

이렇게 만들어진 입출력 단어 쌍들에 대해 예측 task를 수행하는 2 layer neural net을 만든다.

각 단어가 vocabulary 사이즈 만큼의 해당하는 one-hot vector로 나타난다.

해당 문장의 경우 3차원이므로 입력과 출력 layer의 node 수는 3개이다.

가운데에 있는 hidden layer의 node 수는 사용자가 정하는 하이퍼 파라미터로서 word embedding을 수행하는 좌표공간의 차원수와 동일한 값으로 설정하게 된다.

 

 

embedding dimension을 2로 설정하면 hidden layer node 수는 2개이다.

위 그림처럼 W1과 W2의 행렬곱을 거친 뒤 softmax layer를 통과시켜 줌으로써 이 3차원 vector 가 어떤 특정한 확률분포 값을 나타내도록 바꿔주게 된다.

ground-truth output 단어로써 주어진 math 라는 단어의 one-hot vector 가 우리의 target label라고 가정한다면

softmax 를 통과시켜서 나온 확률분포벡터와 ground_truth 로 주어지는 확률분포와의 거리가 최대한 가까워지게 하는 softmax loss를 적용함으로써 이 neural network 에 있는 W1, W2의 matrix 학습을 진행한다.

 

 

행렬곱에서 일어나는 연산을 자세히 살펴보면

  • 단어 study에 해당하는 one-hot 벡터와 $W_{1}$이 곱해지는 경우
    하나의 값만 1이고 나머지는 모두 0이라는 One-hot 벡터의 특징때문에 $W_{1}$ 행렬의 각 row에서 one-hot 벡터의 1 자리에 해당하는 값만 추출하는 연산이 이루어진다.
    → one-hot 벡터의 1의 자리 위치에 해당하는 $W_{1}$의 column vector를 추출하는 과정이라고 볼 수 있다.
    → embedding layer

  • $W_{2}$에서는 row vector의 수가 vocabulary 단어 수만큼 존재하고 $W_{1}$의 column 벡터와 내적이 성립해야하므로 dimension이 동일하게 2이다.
  • $W_{2}$와의 내적값은 (3X1)의 벡터로 나타난다.

  • 그 후 softmax를 거쳐 나오는 확률분포가 ground-truth 확률분포와 최대한 유사하게 나오려면
    이상적으로는 softmax에 입력으로 들어가는 logit값이 1에 해당하는 부분은 $\infty$,  0에 해당하는 부분은 $-\infty$여야 한다.

  • 내적연산을 벡터들간의 유사도를 나타내는 과정으로 본다면
    주어진 입력 단어의 $W_{1}$상에서의 벡터와 주어진 출력단어의 $W_{2}$상에서의 벡터간의 내적에 기반한 유사도가 최대한 커지는 방향으로
    주어진 입력 단어의 $W_{1}$상에서의 벡터와 주어진 출력단어가 아닌 단어의 $W_{2}$상에서의 벡터간의 내적에 기반한 유사도가 최대한 작아지는 방향으로 파라미터를 학습해나가는 과정이 Word2Vec의 핵심이다.

 

https://ronxin.github.io/wevi/

위 사이트에서 Word2Vec의 학습과정을 시각화해서 볼 수 있다.

 

 

Property of Word2Vec

이렇게 학습된 Word2Vec는 word들 간의 의미론적 관계가 벡터 임베딩의 결과에 잘 학습되어있다.

  • queen vector에서 king vector를 빼서 나온 결과 vector가 woman 에서 man vector를 뺀 vector 그리고 uncle에서 aunt를 뺀 vector와 유사하게 일관된 vector로서 유지가 되는 것을 보여주고 있다.
  • 이러한 vector 는 남성에서 여성으로의 변화를 의미하는 vector의 관계가 word embedding 공간상에서 효과적으로 학습이 되었다고 볼 수 있다.

 


 

GloVe

Word2Vec 과의 차이점 : objective function

각 입력 및 출력 단어쌍들에 대해서, 학습데이터에서 그 두 단어가 한 window 내에서 총 몇번 동시에 등장했는지를 사전에 계산하고

아래 수식에서 보이는 것처럼 입력 word의 embedding vector $u_{i}$ 와 출력 word embedding vector $v_{j}$ 간의 내적값이 두 단어가 한 window 내에서 몇 번 동시에 나타났지에 대한 값인 $P_{i}{j}$에 log 값에 정확하게 fitting 될 수 있도록 하는 새로운 형태의 loss function 을 사용한다.

 

Word2Vec 의 경우, 특정한 입출력 단어쌍이 자주 등장한 경우에 여러번에 걸처 학습됨으로써 word embedding vector간의 내적값이 학습 수에 비례해서 내적값이 더 커지도록하는 학습방식이라면

GloVe는 어떤 단어 쌍이 동시에 등장하는 횟수를 미리 계산하고 이에 대한 log 값을 취한 그 값을 직접적인 이 두 단어간의 내적값에 ground-truth 로써 사용해서 학습을 진행했다는 점에서 중복된 계산을 줄여줄 수 있다는 장점이 존재한다.

→ GloVe의 학습이 Word2Vec 에 비해 상대적으로 더 빠르게 진행될 수 있고
     보다 더 적은 데이터에 대해서도 잘 동작하는 특성을 가진다.

 

Word2Vec와 GloVe의 성능이 비슷하다.

 

 

 


부스트캠프 AI Tech 교육 자료를 참고하였습니다.

728x90
Contents