cs Word2vec 알고리즘 리뷰 2 : Negative sampling 와 Subsampling
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/NLP(Natural Language Processing)

Word2vec 알고리즘 리뷰 2 : Negative sampling 와 Subsampling

by 시몬쯔 2020. 5. 28.
728x90

앞전에 리뷰한 word2vec의 기본적인 내용 (CBOW, skip-gram)에서 

 

https://simonezz.tistory.com/35

 

Word2vec 알고리즘 리뷰 1 : CBOW 와 Skip-gram

https://simonezz.tistory.com/34 추천시스템 Recommender System 정리 코드만 짜고 하다보니 전체적인 그림이 자꾸 잊혀지는 것 같아 한 번 정리를 쭉 해보고자 한다. 참고 추천시스템이란? 사용자의 interest를.

simonezz.tistory.com

우리는 Input이 one-hot encoding임을 이용하여 

Input layer->Hidden layer의 파라미터인 W의 각 행이각 단어의 embedded vector라 했었다.

즉 나머지의 값은 0이고 한 인덱스 자리값만 1인데 굳이 계산을 해야하는 불필요한 과정이 있다.

(tensorflow나 keras에서는 행렬을 곱하지않고 바로 해당 행을 꺼낼 수 있다고 한다.)

 

이러한 불필요한 과정을 줄이고 효율적인 메모리 관리를 위해 나온 방법이 Negative sampling과 sub sampling이다.

 

 

1. Negative Sampling

 

위에서 말했듯이 기존의 word2vec 학습과정에서는 불필요한 과정이 있다.

또다른 예시로 '나무' 에서 '열매'라는 단어를 예측할 때 매우 무관한 단어들(ex. 인형, 노트북)까지에 대해서도 학습을 해야하는 상황이 있다.

이러한 "무관한 단어들에 대해서는 weight를 업데이트하지 않아도 된다"가 negative sampling의 기본 아이디어이다.

 

위의 인형이나 노트북과 같은 무관한 단어는 target 값이 0인 negative 값이고 "열매"는 target 값이 1인 positive 값이다.

이름에서 알 수 있듯이 Negative sampling은 Target이 negative인 단어들을 샘플링하는 과정이다. 

-> n개의 negative 값을 선택하고 이 값들에 대해서만 positive 값과 함께 학습한다. (n은 사용자설정)

Sampling할 negative의 갯수인 n은 작은 데이터에서는 5-20, 큰 데이터에서는 2-5라고 논문에서 제시하였다.

 

그렇다면 어떻게 이 negative값을 샘플링할까?

논문에서 제시한 방법은 샘플링 될 단어의 빈도수에 따라 weight, 즉 가중치를 부여하는 방식이다.

빈도수가 큰 단어일수록 negative sampling이 될 확률이 높다.

 

 

는 단어 wi의 빈도수를 뜻한다.

 

이 식을 보고 왜 하필 3/4승인지 의문이 들었다. (실험적인 결과..?)

아마 그냥 f값을 더하는 것보다 f값이 작다면 즉 빈도수가 낮은 단어에 대해서는 조금 더 값을 크게 계산하고

빈도수가 매우 높은 단어 'a','the'와 같은 것에 대해서는 f값보다 작은값을 주고 싶은 것 같다.(중요도가 떨어지니)

 

 

2. SubSampling

Negative sampling을 사용하여 불필요한 계산량을 줄였다면 이 subsampling은 텍스트 자체가 가진 문제를 해결하는 방법이다. 예를 들면, 글에서 매우 자주 등장하는 단어 'a','the'로부터는 얻을 수 있는 정보가 없다는 문제가 있다. 

이 subsampling방법을 통해 학습 데이터의 각 단어는 많이 등장하는 단어일 수록 제거될 확률이 높아 쓸데없는 단어는 고려하지 않는다.

논문에서 한 단어(Wi)를 제외할 확률은 

논문에서 t는 1e-5로 설정하였다.

(딥러닝에서 쓰이는 드롭아웃이랑 비슷하게 생각하면 될 것같다. 너무 자주나오는 단어는 학습에서 제외될 확률이 높다. 차이점이라면 드롭아웃은 랜덤성을 부여해 오버피팅을 해결하는 방식이고 subsampling은 효율성의 측면에서 문제를 해결하는 방식이라 생각한다.)

 

 

다음 포스팅에서는 Word2vec 실습에 대해 포스팅 할 예정이다.

 

 

피드백은 언제나 환영입니다:)

 

 

https://revelry.co/deep-learning-word2vec/

 

728x90

댓글