[NLP]Word2Vec

지윤곽·2021년 1월 26일
0

NLP

목록 보기
3/6

워드 임베딩의 개념

: 단어를 벡터로 표현하는 방법.
1) 희소표현 (원핫벡터) : 고차원에 각 차원이 분리된 표현 방법

  • 단어의 의미를 담지 못함 -> 단어 간 유사도를 계산할 수 없음

2) 밀집표현 Dense Representation : 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춤. 실수값을 가지게 됨. 단어 유사도를 계산할 수 있음
ex) 사용자가 밀집표현의 차원을 128로 설정 -> 모든 단어의 차원이 128로 바뀌면서 모든 값이 실수가 됨. (벡터의 차원이 조밀해짐 = 밀집벡터)
3) 분산표현 : 저차원에 단어의 의미를 여러 차원에 분산하여 벡터화. 비슷한 위치에 등장하는 단어들은 비슷한 의미를 가진다.
(과정 : 분포가설을 이용하여 단어들의 set을 학습 -> 벡터에 단어의 의미를 여러차원에 분산하여 표현)

속도를 대폭 상승시킨 Wrod2vec이 많이 사용됨

  • 방법론 : LSA, Word2vec, FastText, Glove

+케라스(keras) Embedding() : 단어를 랜덤한 값을 가지는 밀집벡터로 변환 -> 인공신경망이 가중치 학습하는 방식으로 단어벡터 학습

Word2vec

  1. CBOW (Continuous Bad of words) : 주변단어 -> 중심단어
  2. Skip-gram : 중심단어 -> 주변단어
  • CBOW와 Skip-gram의 작동과정은 유사하기 때문에 CBOW만 이해한다면 Skip-gram은 이해하기 수월
  • 성능은 Skip-gram이 CBOW보다 좋음

1. CBOW


슬라이딩 윈도우 : 윈도우를 계속 움직여서 주변단어와 중심단어 선택을 바꿔가면서 학습을 위한 데이터셋 만듬.

ex) sat이 중심단어인 경우

입력 : 주변단어 원핫벡터 / 출력 : 중심단어 원핫벡터

*주의 : Word2Vec은 딥러닝 모델이 아님. 은닉층이 한개밖에 없기 때문. 또한 Word2Vec의 은닉층은 활성화 함수가 존재하지 않고, 룩업 테이블 연산(아래에서 설명)을 담당하여 다른 은닉층과 구분하기 위해 투사층(Projection layer)라고 부름.

입력층의 크기 M(7)

입력층과 투사층 사이의 가중치(W) 크기 VM (57)

투사층의 크기 V(5)

투사층과 출력층 사이의 가중치 크기(W') MV (75)

출력층의 크기 M(7)

  • 주의 : 인공신경망의 훈련 전에 가중치 행렬(W, W')은 대게 굉장히 작은 랜덤 값을 갖게 됨. CBOW는 주변단어로 중심단어를 더 정확히 맞추기 위해 계속해서 W와 W'를 학습해가는 구조.


입력 벡터와 가중치 W의 곱은 사실 W행렬의 i번째 행을 그대로 읽어오는 것(lookup)과 동일. (위에 말한 룩업 테이블 연산). 그래서 이 작업을 룩업 테이블이라고 부름.

4개의 입력벡터와 가중치 벡처를 곱한 결과 벡터의 평균이 투사층. 투사층에서 벡터의 평균을 구하는 부분이 CBOW와 Skip-gram의 차이점. Skip-gram은 입력이 중심단어 하나이기 때문에 평균을 구하지 않음.

출력 벡터에서 CBOW는 softmax함수를 취하는데 출력값을 0과1사이의 실수로 바꾸어 원소의 총합이 1이 되게 함. 이렇게 나온 벡터가 스코어 벡터 (y.hat) - 특정단어가 중심단어일 확률, 실제 값인 원핫벡터값에 가까워져야 함.

실제값인 y벡터와 y.hat벡터의 오차를 줄이기 위해 손실함수로 cross-entropy 함수 사용

y가 원핫벡터라는 점을 고려하면 오른쪽 식과 같이 간소화됨. 이 식이 왜 손실함수로 적합한가.

예측이 맞은 경우 -1 log(1) = 0이 되기 때문에 정확히 예측한 경우 cross-entropy값은 0이 됨.

역전파 과정을 통해 W와 W'가 학습되는데 학습이 끝난 후 둘중 하나로 임베딩 벡터를 결정하거나 둘의 평균치로 임베딩 벡터를 선택하기도 함.

2. Skip-gram

NNLM(피드 포워드 신경망 언어 모델) vs Word2Vec

  • 네거티브 샘플링

Word2Vec을 사용한다고 하면 대부분 SGNS(Skip-gram with Negative Sampling)을 사용.

Skip-gram + Negative sampling

위에서 말한 Word2Vec의 치명적인 결함은 속도. Word2Vec이 모든 단어 집합에 대해서 소프트맥스 함수를 수행하고, 역전파를 수행하므로 주변 단어와 상관 없는 모든 단어까지의 워드 임베딩 조정 작업을 수행. 단어집합이 커지게 되면 연산량이 매우 증가.

=> 단어 집합이 아니라 일부 단어 집합에 대해서만 고려하는 방법 : 주변단어들은 긍정(positive)로 두고 랜덤으로 샘플링 된 단어들을 부정(negative)로 둔 다음 이진 분류 문제를 수행. 기존 다중클래스 분류 문제를 이진분류 문제로 바꾸면서 연산량을 훨씬 줄임.

  • 출처
    wikidocs.net/22660
profile
아는게 힘이다

0개의 댓글