앞전에 리뷰한 word2vec의 기본적인 내용 (CBOW, skip-gram)에서
https://simonezz.tistory.com/35
우리는 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 실습에 대해 포스팅 할 예정이다.
피드백은 언제나 환영입니다:)
'개발 > NLP(Natural Language Processing)' 카테고리의 다른 글
BERT(Pre-training of Deep Bidirectional Transformers for Language Understanding) 정리 - 1 ( Transformer, Attention) (0) | 2020.10.24 |
---|---|
텍스트 유사도 Text Similarity 개요 (0) | 2020.08.11 |
Okapi BM25란 무엇인가? (TF-IDF와 비교) (2) | 2020.07.29 |
Word2vec 알고리즘 리뷰 3 : 네이버 영화 리뷰 데이터를 이용한 실습 (0) | 2020.05.30 |
Word2vec 알고리즘 리뷰 1 : CBOW 와 Skip-gram (2) | 2020.05.28 |
댓글