본문 바로가기
네이버 부스트캠프 AI Tech 7기/National Language Processing (NLP)

[NLP] Word Embedding - Word2Vec (CBOW vs Skip-gram)

by YS_LEE 2024. 8. 29.
반응형

Word Embedding

One-Hot Encoding

  • 단어를 Categorical variable로 Encoding한 벡터로 표현
  • 단어는 하나의 차원이 각각의 단어를 뜻하도록 표현할 수 있음 (다른 모든 차원은 0인 Sparse representation)
  • 단어들 간의 내적은 항상 0이며, 유클리드 거리는 항상 $\sqrt2$

Distributed Vector (Dense Vector)

  • 원-핫 인코딩의 문제점: 희소 표현(sparse representation)
  • 단어의 의미를 다차원 공간에 0이 아닌 값의 형태로 표현(벡터화): 분산 표현(distributed representation)
  • 비슷한 문맥에서 등장하는 단어들은 비슷한 의미를 가진다는 분포 가설(distributional hypothesis)을 따름
  • 유클리드 거리, 내적, 코사인 유사도는 단어간 의미론적 유사성을 나타냄

Word2Vec

  • Word embedding(단어들의 의미적 유사성을 벡터화)의 대표적인 방법론
  • 주변 단어들의 정보(확률 분포)들을 이용해 단어 벡터를 표현
    • 윈도우(window): 중심 혹은 주변 단어를 예측하기 위해서 앞뒤로 몇 개의 단어를 볼지를 나타내는 범위
    • 슬라이딩 윈도우(sliding window): 윈도우를 옆으로 움직여서 주변 단어와 중심 단어의 선택을 변경해가며 학습을 위한 데이터 셋을 만드는 방식
    • Skip-gram 방식과 CBoW (Continuous Bag of Words) 방식이 있음
  • 단어 벡터는 단어들 간의 관계를 나타냄
    vec[queen] - vec[king] = vec[woman] - vec[man]
  • 워드 벡터들이 유클리드 거리에 따른 의미적 유사성(Semantic Similarity)을 가짐

CBOW

  • 주변 단어들로 한 단어를 예측하는 방식
  • 임베딩 레이어(Embedding layer)는 일반적인 은닉층과는 달리 활성화 함수가 존재하지 않는 룩업 테이블 연산을 담당하는 층으로 투사층(projection layer) 이라고도 부름
  • 동작 원리
    1. 입력 벡터로 주변 단어들의 원-핫 벡터를 사용한다.
    2. 임베딩 레이어W (V x M)를 거쳐 저차원 밀집 벡터(dense vector)로 변환한다.
    3. 각 단어의 임베딩 벡터를 합산하거나 평균을 내어 하나의 벡터로 결합한다.
    4. 가중치 행렬 W` (M x V)와 곱한 뒤 소프트맥스(softmax) 함수를 통과하여 스코어벡터를 구한다.
    5. 교차 엔트로피(Cross Entropy) 손실 함수 를 사용하여 중심 단어의 원-핫 벡터와 스코어 벡터 사이의 오차를 줄이기 위해 가중치를 조정한다. (= 역전파를 수행하여 W와 W`를 학습한다.)

      이미지 출처: https://wikidocs.net/22660

Skip-gram

  • 한 단어로 주변 단어들을 예측하기 때문에 투사층에서 벡터들의 평균을 구하는 과정이 없다.
  • log probability를 최대화 (k번째 단어가 주어졌을 때 k 앞뒤로 주어지는 단어들의 생성확률을 높이는 것)
  • 나머지 과정은 CBOW와 동일한데, 특히 Skip-gram 모델에서 출력 측 가중치 W`는 버리고 입력 측 가중치 W만 최종 단어의 분산 표현으로 사용한다.
  • 전반적으로 Skip-gram이 CBOW보다 성능이 좋다고 알려져 있다.

Skip-gram와 CBOW 성능 비교

  • 직관적으로 생각했을 때 정보를 더 많이 받아 하나의 단어를 예측하는 CBOW가 더 성능이 좋을 것 같아 보이지만 Skip-gram이 더 좋은 성능을 보인다.
  • 이는 Gradient flow 관점에서 본다면 CBOW는 하나의 단어에서 주변 단어들의 gradient를 업데이트하는 반면 Skip-gram은 주변 단어들의 정보를 하나의 gradient를 업데이트하는데 사용하기 때문이라고 볼 수 있다.
    (이해하기 어렵다면 쉬운 문제만 푼 CBOW 모델보다 어려운 문제를 푼 Skip-gram 모델이 만드는 단어의 분산 표현이 더 뛰어날 것이다 라고 생각할 수 있다.)
  • 반면 학습 속도 면에서는 CBOW가 훨씬 빠르다.

학습 전략(Learning strategy)

  • 모든 주변 단어를 사용하지 말고 각각 하나씩 계산한다.
    (Network에서 동시에 계산하나 따로 따로 계산하여 더하나 동일하다)
  • 훈련해야 할 가중치 크기: 2 x V x N (거대함)
    • Word pairs and phrases: 빈번히 나오는 단어 쌍이나 구는 하나의 단어로 취급
    • Subsampling frequents words: 너무 많이 나오는 단어나 관사 등을 학습을 적게 시키기
      • training examples 개수 줄이기 위함
      • The probability of word wiwi, being removed
    • Negative sampling: 전체 모든 단어를 가지고 학습하지 말고 샘플링한 몇 개의 단어만 사용하여 가중치 업데이트

참고자료
딥 러닝을 이용한 자연어 처리 입문
밑바닥부터 시작하는 딥러닝 2
Text Analytics (고려대 강필성 교수님)

반응형