Day to_day

CBOW & Skip gram 개념 완벽 이해하기!! 본문

Deep Learning

CBOW & Skip gram 개념 완벽 이해하기!!

m_inglet 2024. 3. 26. 23:01
728x90
반응형

❗본 포스팅은 사이토 고키 저자의 '밑바닥부터 시작하는 딥러닝 2' 서적을 기반으로 개인적인 정리 목적 하에 재구성하여 작성된 글입니다.

 

들어가며

오늘은 word2vec의 두 가지 기법인 CBOW와 Skip-gram에 대해서 개념을 정리해 볼 것이다.

 

Word2Vec

들어가기전에! 

단어를 표현하는 방법 두 가지 개념을 미리 알고 오면 좋다.

 

1. 희소표현(Sparse Representation)

단어를 원-핫 인코딩을 통해 원-핫 벡터로 표현해 행렬의 대부분 값이 0으로 표현되는 방법이다. 이 방법은 벡터 간 유사성을 표현할 수 없으며 단어가 많아질수록 더 커진다는 단점이 있다.

 

2. 분산 표현(Distributed Representation)

색을 표현할 때에도 RGB 값으로 모든 색을 표현할 수 있듯이 단어도 그런 식으로 표현하는 것이다.

분산 표현은 단어 간 의미적 유사성을 벡터화하여 표현하는 것이다. 이 표현은 분포가설에 의해 해당 내용을 가진 텍스트의 단어들을 벡터화하였을 때 해당 단어 벡터들은 유사한 벡터값을 갖는 것이 특징이다.

이것은 원-핫 벡터처럼 단어에 비례하여 커질 필요가 없으므로 상대적으로 차원이 줄어든다. 이 분산표현을 하기 위한 대표적인 방법이 Word2Vec이다.

그리고 Word2Vec의 학습 방식에는 CBOW(Continuous Bag of Words)Skip-Gram 두 가지 방식이 있다.

 

CBOW

학습 데이터

문장 “you say goodbye and I say hello”라는 문장이 있다고 하자.

여기서 Target은 중심에 있는 단어. Contexts는 중심의 주변에 있는 단어임을 알고 이해하자.

  • Target중심에 있는 단어. Context중심의 주변에 있는 단어의 예시

  • 이렇게 나온 각 행의 맥락은 신경망의 입력이 되고, 타깃의 각 행이 정답 레이블이 된다.
  • 이때 target을 중심으로 몇 개의 단어를 볼 것인가는 "window"로 정할 수 있다. 위의 예시의 경우는 window를 1로 두어 target의 양쪽 한 개의 단어를 맥락으로 보는 것이다. 
  • CBOW는 주변에 있는 단어(context)들을 입력으로 중심에 있는 단어(target)들을 예측하는 방법이다.

 

CBOW의 모델 신경망 구조

 

  • 입력층 2개, 은닉층, 출력층으로 구성되어 있다. 입력층이 2개인 이유는 맥락(context)으로 고려할 단어로 2개로 정했기 때문에 즉, window크기를 1로 둔 것이라고 할 수 있다.
  • CBOW의 특징은 입력층이 여러 개이기 때문에 평균을 내어 은닉층에 전달하는 특징이 있다.
  • 출력층의 뉴런은 각 단어에 대응하고 softmax를 적용하여 확률로 변환한다.

 

그러면 잠시 생각해 보면 입력층은 지금 어떻게 구성되어 있을까?

위키독스에서 좀 더 쉽게 설명되어 있어서 가지고 왔다.

 

각각의 입력 단어는 원-핫 벡터로 표현이 되었고, 이 벡터가 W_in을 만나게 되면 결국 1이 표현된 해당 행에 대한 가중치 값만 나오게 된다. 그러니까 행 뽑기를 하는 것이다!

그래서 결과적으로 가중치의 각 행이 단어의 분산 표현이라고 할 수 있다.

 

정리하자면,

  • W_in의 각 행에 해당 단어의 분산 표현이 담겨있다고 할 수 있다.
  • 그리고 이 가중치가 갱신되면서 얻은 벡터로 ‘단어의 의미’를 추정할 수 있다.
  • 학습 후엔 최종적으로 단어의 분산 표현으로 가중치 선택한다. (다른 Weight(W_out)를 사용해도 되지만 input weight를 사용하는 것이 흔하게 사용할 수 있는 방법)
  • 이때 은닉층은 입력층보다 뉴런 수를 더 작게 해야 된다. (인코더 기능)

 

최종 CBOW 모델의 신경망 구조 

  1. Matmul 계층(input weight)이 있고 input(이때 input의 가중치는 서로 공유됨)에서 나온 결과는 평균 취해져 은닉층으로 들어간다.
  2. 마찬가지로 matmul 계층(output weight)이 들어가 score가 나오게 된다.
  3. 각 단어의 점수는 softmax를 지나면서 확률을 얻을 수 있고, 이 확률은 context(맥락)가 주어졌을 때 그 중앙에 어떤 단어가 출현할 지를 나타낸다.

 

CBOW모델과 확률

  • P(A | B): B라는 정보가 주어졌을때 A가 일어날 확률
  • P(target | context): context가 주어졌을때 target이 발생할 확률

  • CBOW의 loss 함수 : 음의 로그 가능도

 

 

Skip-gram 모델

  • 맥락과 타깃을 역전시킨 모델이다.
  • CBOW 모델은 맥락이 여러 개 있고, 그 여러 맥락으로부터 중앙의 단어(타깃)를 추측했지만
  • Skip-gram 모델은 중앙의 단어(타깃)로부터 주변의 여러 단어(맥락)를 추측한다.

 

  • 입력이 하나고 출력이 여러 개다.
  • CBOW와 다르게 은닉층에서 평균을 내서 나오는 연산이 없다.
  • 각각의 출력과 정답 레이블로 개별 손실을 구하고, 그 값을 모두 더한 것이 최종 손실이다.

 

Skip-gram의 P 확률 & loss 식

  • P(w_{t-1},w_{t+1}|w_t): w_t가 주어졌을 때 w_(t-1)과 w_(t+1)이 동시에 일어날 확률

 

Skip-gram 정리

  • 단어 분산 표현의 정밀도 면에서 skip-gram 결과가 좋다.
  • 말뭉치가 커질수록 저빈도 단어나 유추 문제 성능 면에서 skip-gram이 높다. 그 말은 skip-gram의 경우 하나의 단어만 떠오르는 게 아니라 여러 후보들이 떠오르기 때문에 좀 더 어려운 문제를 푼다고 볼 수 있다.
  • 그러나 cbow가 더 빠르다.

 

Reference

https://wikidocs.net/22660

728x90
반응형
BIG
Comments