Word2Vec 모델에서 negative sampling 이란?
단어뭉치(corpus)의 개수가 100000 개 이고 hidden layer크기가 3000이라 하면, W와 , W`의 크기는 100000x3000 이다.
Input vector는 one-hot 벡터로 1숫자만 1이고 나머진 모두 0이다.
(중심단어, 주변단어)의 pair로 학습이 이뤄지게 되는데, W의 크기가 100000x3000이나 되지만. input vector가 one hot vector이기 때문에 W중 1줄의 parameter만 선택된다.
하지만 backpropagation과정중에 100000x3000(W`)의 parameter가 softmax함수를 취해야 되고, 계산량이 엄청나게 많아진다.
따라서 계산의 효율성을 위해서 negative sampling 이라는 방법을 사용한다.
negative sampling는 말그대로 parameter을 update시킬 negative sample을 뽑는것이다.
그리고 전체 W,W`을 업데이트 하는것이 아니라, 중심단어와 negative sample 몇개에 해당하는 parameter을 업데이트하는것이다.
무슨말이냐 하면,
(김치,반찬) (김치,된장) (김치,식사) 의 조합을 업데이트 하기위해서, 김치와 상관없는 폴란드, 타이어, 돗돔 이러한 관계를 update 해도 안한것과 별반 차이가 없다는 것이다. 김치와 주변단어가 아닌 단어가 김치와 주변단어인 단어보다 훨씬 더 많다. (모두 업데이트 할 필요 없음)
따라서, 수많은 김치와 상관없는단어중 몇개의 단어만 추출하여 학습에 사용하여 해당 parameter을 업데이트 해준다.
그러면 어떤기준으로 negative sample을 뽑느냐?
전체 corpus중 문장에 사용되는 비중이 높은 단어를 우선적으로 가중치를 줘서 선별한다.
wi 는 i번째 단어이고, f(wi)는 해당 단어의 빈도, (출현횟수/전체corpus수) 이다.
P(wi)는 wi가 나타날 확률
f(wi)에 3/4 제곱을 해주면 퍼포먼스가 더 좋아진다고 한다.
'machine learning' 카테고리의 다른 글
keras dataset : imdb (0) | 2020.03.02 |
---|---|
precision at K, MAP, recall at K (0) | 2019.10.12 |
Word2Vec 의 학습 (0) | 2019.05.13 |
Early stopping in GAN (0) | 2018.12.05 |
bayesian 자료 (0) | 2015.06.27 |