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"
Word2Vec 의 Skip-gram 방식의 경우 단어가 주어졌을 때 사용자가 지정한 윈도우 내의 단어들을 하나씩 돌아가면서 훈련(Classification)하기 때문에 코퍼스 전체의 co-occurrence가 반영되기 어렵다.
Glove 의 경우 함께 출현한 단어들의 출현 빈도 를 맞추도록 훈련하여(Regression) 코퍼스 전체의 통계 정보를 반영하고자 하였다.
출현 빈도가 적은 단어에 대해서는 loss의 기여도를 낮추어 출현 빈도가 적은 단어에 대해 부정확해지는 단점을 보완하였다.
전체 코퍼스에 대한 각 단어 별 co-occurrence를 구한 후 regression을 수행하기 때문에 Word2Vec보다 빠르다.
"FastText"
Word2Vec 은 저빈도 단어에 대한 학습과 OoV에 대한 대처가 어렵다는 단점이 있다.
FastText 는 학습 시
단어를 subword 로 나누고
Skip-gram을 활용하여 각 subword에 대한 embedding vector에 주변 단어의 context vector를 곱하여 더한다,
이 값이 최대가 되도록 학습을 수행한다.
최종적으로 각 subword에 대한 embedding vector의 합이 Word Embedding vector가 된다.
Word2Vec의 경우 input이 word의 원핫벡터였다면 FastText는 input이 subword 원핫벡터의 sum이다.