새소식

딥러닝/자연어 처리

[WordEmbedding] Word2Vec & Glove & FastText

  • -

Word2Vec

주변(context window)에 같은 단어가 나타나는 단어일 수록 비슷한 벡터 값을 가져야 한다는 아이디어

 

Word2vec의 모델은 Continuous Bag Of Word(CBOW)와 Skip-Gram이 있다.

 

CBOW는 주변 단어를 통해 주어진 단어를 예측한다.

Skip-gram은  현재 단어를 통해 주변 단어를 예측한다. CBOW보다 성능이 좋아 더 많이 사용된다.

 

"Skip-gram"

Window 크기가 2인 경우 학습은 아래 과정을 거친다.

 

1. 중심 단어는 NLP이고 윈도우 크기가 2이므로 중심 단어 앞 뒤로 2개씩 봐야하지만 중심단어 기준 앞에 단어가 존재하지 않으므로 is와 the만 학습에 사용한다.
중심단어를 NLP로 놓고, 주변단어 is를 정답으로 설정하여 학습하고, 중심단어를 NLP로 놓고, 주변단어 the를 정답으로 설정하여 학습을 한번 더 한다.

1 step

 

2. 중심단어를 is로 옮기고, 주변단어 NLP를 정답으로 설정하여 학습하고, 중심단어를 is로 놓고, 주변단어 the를 정답으로 설정하여 학습하고, 중심단어를 is로 놓고, 주변단어 ability를 정답단어로 설정하여 학습한다.

 

2 step

3. 중심단어를 the로 옮기고 윈도우 사이즈 범위의 단어를 각각 주변단어 정답으로 두어 학습을 4번 진행한다.

3 step

이런 식으로 윈도우 크기로 슬라이딩하며 학습을 진행한다.

CBOW에 비해 Skip-gram이 성능이 좋은 이유는 이런 학습방법에 있다.

CBOW는 (윈도우 사이즈=2 기준) 주변 4개의 단어를 가지고 중심단어를 학습하기 때문에 한번 학습을 하지만

Skip-gram는 총 4번 학습한다. 

즉, 코퍼스 크기가 같다면 CBOW보다 Skip-gram의 학습량이 더 많기 때문에 성능이 더 좋다.

 

 

 

Skig-gram의 수식

원핫벡터에 linear layer의 weight parameter를 곱하면 원핫 벡터의 1에 해당하는 index의 weight parameter row만 살아남는다. (=embedding vector)

 

Negative Sampling

단어가 수백만개라면 Softmax 연산이 비효율적이다.

 

Negative Sampling은 Word2Vec이 학습 과정에서 전체 단어 집합이 아니라 일부 단어 집합에만 집중할 수 있도록 하는 방법이다.

즉, 전체 W,W`을 업데이트 하는것이 아니라, 중심단어와 negative sample 몇개에 해당하는 parameter을 업데이트하는것이다. 

positive(정답)이 아닌 negative 일부를 샘플링해서 score을 minimize하는 방향으로 학습시킨다.

 

 ▮ 장점

  • Skip-gram은 Non-linear activation function이 없는 NN로, DNN는 아니므로 쉽고 빠르다.

 ▮ 단점

  • 출현 빈도가 적은 단어일 경우 벡터가 정확하지 않다.
  • OOV(Out of Vocabulary)의 처리가 어렵다. 단어 단위로 사전을 구성하여 학습하는 Word2Vec의 특성 상 새로운 단어가 등장하면 데이터 전체를 다시 학습시켜야 한다는 문제가 있다.

 


"Glove"

Word2VecSkip-gram 방식의 경우 단어가 주어졌을 때 사용자가 지정한 윈도우 내의 단어들을 하나씩 돌아가면서 훈련(Classification)하기 때문에 코퍼스 전체의 co-occurrence가 반영되기 어렵다.

Glove의 경우 함께 출현한 단어들의 출현 빈도를 맞추도록 훈련하여(Regression) 코퍼스 전체의 통계 정보를 반영하고자 하였다.

 

출현 빈도가 적은 단어에 대해서는 loss의 기여도를 낮추어 출현 빈도가 적은 단어에 대해 부정확해지는 단점을 보완하였다.

전체 코퍼스에 대한 각 단어 별 co-occurrence를 구한 후 regression을 수행하기 때문에 Word2Vec보다 빠르다.

 


"FastText"

Word2Vec은 저빈도 단어에 대한 학습과 OoV에 대한 대처가 어렵다는 단점이 있다.

FastText는 학습 시

  1. 단어를 subword로 나누고
  2. Skip-gram을 활용하여 각 subword에 대한 embedding vector에 주변 단어의 context vector를 곱하여 더한다,
  3. 이 값이 최대가 되도록 학습을 수행한다.
  4. 최종적으로 각 subword에 대한 embedding vector의 합이 Word Embedding vector가 된다.

 

Word2Vec의 경우 input이 word의 원핫벡터였다면 FastText는 input이 subword 원핫벡터의 sum이다.

 

 

728x90
Contents