Skip to main content
  1. Posts/
  2. Today I Learned/

밑바닥부터 시작하는 딥러닝 2 3장 word2vec

·601 words·3 mins
Jiho Kim
Author
Jiho Kim
달려 또 달려

📝 상세 정리
#

  • 이번 장도 단어의 분산 표현
  • 앞 장에서 통계 기반 기법을 이용했다면, 이번에는 추론 기반 기법을 이용하겟다.

3.1 추론 기반 기법과 신경망
#

  • 3.1.1 통계 기반 기법의 문제점
    • 결국 동시발생 행렬을 만들고 SVD를 적용해야하는데, 이는 큰 말뭉치에서 너무 어렵다
    • 동시발생행렬의 크기는 $O(N^2)$ SVD 연산 시간은 $O(N^3)$ 이라 어휘가 100만개 단위로 되면 현실적으로 불가능해진다
    • 추론 기반 기법에서는 소량(미니배치)씩 학습해서 가중치를 갱신한다.
      • 어휘량이 많아도 가능하고
      • 여러 GPU를 이용한 병렬 계산도 가능하다!
  • 3.1.2 추론 기반 기법 개요
    • 추론: 주변 단어(맥락)이 주어졌을때 빈칸에 무슨 단어가 들어가는지를 추측하는 작업
    • 추론을 통해 신경망으로 각 단어의 출현 확률을 만들자.
  • 3.1.3. 신경망에서의 단어 처리
    • 신경망은 단어를 그대로 처리할 수 없으니, 원핫 벡터로 변환하자.
      • 원핫벡터: 벡터의 원소중 하나만 1이고 나머지는 모두 0인 벡터

3.2 단순한 word2vec
#

  • 3.2.1 CBOW모델의 추론 처리
    • CBOW모델은 맥락으로부터 타겟을 추측하는 용도의 신경망
      • 타겟은 중앙 단어, 맥락은 주변 단어
    • N개의 단어를 맥락으로 사용하기로 결정했다면, N개의 원핫벡터가 입력층이 된다.
      • 은닉층에 들어갈 값은 여러개의 입력층의 결과의 평균이다.
      • 첫번째 입력층의 결과가 $h_1$, 두번째 입력층의 결과가 $h_2$라면 은닉층의 뉴런은 $\frac{1}{2}(h_1 + h_2)$ 이 된다.
    • 출력층의 뉴런 하나하나는 각각의 단어에 대응되고, 해당 단어의 점수가 나온다.
      • 점수는 확률로 해석되기 전의 값으로, softmax함수로 확률을 얻어낸다.
    • 은닉층의 뉴런수를 입력층의 뉴런수보다 적게 하는것이 중요하다.
      • 이렇게 해야 은닉층이 단어 예측에 필요한 정보를 간결하게 담게 되며, 결과적으로 밀집벡터 표현을 얻을 수 있다.
      • 단어 벡터를 은닉층에 넣어서 사람이 알아보지 못하게 되는걸 인코딩, 반대로 은닉층의 정보를 사람이 알아볼 수 있는 결과로 만드는 작업을 디코딩이라고 한다.
    • CBOW모델은 활성화 함수를 사용하지 않는 간단한 신경망이다.
    • 여러개의 입력층은 같은 가중치를 공유한다.
  • 3.2.2 CBOW 모델의 학습
    • 위에서 구한 점수에 softmax함수를 적용하면 확률을 얻을 수 있다.
  • 3.2.3 word2vec의 가중치와 분산 표현
    • $W_{in}$의 가중치의 각 행은 각 단어의 분산표현에 해당하고, $W_{out}$에서는 각 단어의 분산 표현이 열 방향으로 저장된다.
      • 행렬의 차원중 어디가 각 단어에 대응되는지 알면 직관적인듯

3.3 학습 데이터 준비
#

  • 3.3.1 맥락과 타깃
    • 이전에 말한대로 맥락은 주변단어, 타깃은 중앙 한단어
      • 맥락은 여러개가 될수 있으므로 contexts라고 복수형 표현을 권장
    • 이전에 했던것과 같이 텍스트를 단어 ID로 바꾸고, 이를 배열로 저장한다.
  • 3.3.2 원핫 표현으로 변환
    • 학습에 사용하기 위해 이를 원핫 벡터로 바꾼다.
      • 8개짜리, 7종류 단어의 문장이어서 (6, 2 )의 단어 ID 벡터가있었다면 이는 단어 ID가 원핫 베겉로 바뀌며 (6, 2, 7 )의 벡터가 된다.

3.4 CBOW 모델 구현
#

  • 간단하게 두개의 맥락을 $W_{in}$ 을 통과켜서 평균을 내고, $W_{out}$을 거쳐서 softmax를 통해 Loss를 얻어내는 모델을 구상해보자.
  • 3.4.1 학습 코드 구현
    • 일반적인 신경망 학습과 완전히 같다! (1장 참조)
    • 입력층의 가중치, 즉 $W_{in}$을 꺼내봄으로 단어 ID의 분산표현을 잘 확인할 수 있다.
    • 하지만 아직 큰 맒룽치에서는 처리속도가 느리다는 문제점이 있다.

3.5 word2vec 보충
#

  • 3.5.1 CBOW 모델과 확률
    • CBOW모델을 확률 표기법으로 기술해봦.
    • 맥락이 두개인 경우, 조건부 확률 식으로 $P(w_t | w_{t-1}, w_{t+1})$ 과 같이 나타낼 수 있다.
      • 이를 이용해 손실함수도 간결하게 표현할 수 있다.
      • $L = -\log P(w_t | w_{t-1}, w_{t+1})$
      • $L = -\frac{1}{T} \sum\limits_{t = 1}^{T}\log P(w_t | w_{t-1}, w_{t+1})$
        • 말뭉치 전체에 대한 식
  • 3.5.2 skip-gram 모델
    • CBOW모델과 맥락과 타깃을 역전시킨 모델
      • 중앙 단어 하나로 주변 단어를 예측하자
      • $P(w_{t-1}, w_{t+1} | w_t) = P(w_{t-1}| w_t) P(w_{t+1} | w_t)$
      • $L = -(\log P(w_{t-1}| w_t) + \log P(w_{t+1} | w_t))$
      • $L = -\frac{1}{T} \sum\limits_{t = 1}^{T}(\log P(w_{t-1}| w_t) + \log P(w_{t+1} | w_t))$
    • 단어 분산의 정밀도 면에서 skip-gram 모델이 CBOW모델보다 더 좋을 때가 많다.
      • 하지만 학습 면에서는 cbow 모델이 더 빠르다.
        • 손실을 맥락의 수만큼 구해야하기 때문
  • 3.5.3 통계 기반 vs 추론 기반
    • 통계 기반은 전체를 보면서 1회, 추론 기반은 미니배치를 보면서 일부씩 여러번 학습했다.
    • 여러가지 추가 상황들을 생각해보자.
      • 어휘에 추가할 새 단어가 생겨난 경우
        • 통계기반 방법은 계산을 처음부터 다시 해야함
        • 추론기반 방법은 학습된 가중치를 초깃값으로 추가 학습을진행하면 됨
      • 얻게되는 분산표현의 성격이나 정밀도
        • 의외로 단어의 유사성을 정량평가한 결과, 둘 사이에 우열은 없었음
    • skip-gram과 네거티브 샘플링을 이용한 모델은 동시발생행렬에서 특수한 행렬 분해를 적용한 결과와 같았다!!

❔질문 사항
#

🔗 참고 자료
#