본문 바로가기
논문

[리뷰] Distributed Representations of Words and Phrases and their Compositionality: negative sampling과 subsampling 중심

by Angie 2022. 4. 14.

Intro

word2vec

  • 비효율적 메모리 관리

  • 학습 속도 느림

  • weight layer 큼

  • word2vec의 파라메터

    • W(V x N), W’(N x V)
    • 보통 말뭉치의 단어 수 : 10만개
    • N(임베딩 차원 수)가 100차원이라면 구해야 하는 숫자는 2000만개(2x10만x100)로 폭증

negative sampling

  • 기존의 방식은 너무 sparse하다.

    • embedding이 된 단어는 30010000의 행렬이고 여기에 넣는 인풋은 100001의 행렬
      • input, 우리가 원하는 하난의 단어에서만 1, 나머지 9999는 0인 원 핫 벡터
      • 이 둘의 곱으로 나온 행렬은 300*1의 행렬 → 임베딩행렬에서 input에 해당하는 column을 선택하는 것과 같음
      • 300*1의 행렬을 얻으려고 300000개의 값 299개의 0과 모두 곱하는 것은 매우 비효율적
  • negative 값을 샘플링

    • embedding이 된 단어는 30010000의 행렬이고 여기에 넣는 인풋은 100001의 행렬
      • 한 번 학습할 때 10000개의 단어에 대해 softmax를 구하며 웨이트를 업데이트.
        • 근데 소프트맥스하려면 내적하고 다시 exp해야 하고 계산량 미쳤음
        • 하나의 단어에 대해 나머지 9999개의 모든 단어들도 함께 학습하는 것도 비효율적
        • ‘꽃’ → ‘나비’ 를 예측하는 학습에서, ‘전등’, ‘손톱’까지 학습을 해야 할까?
      • ‘전등’, ‘손톱’은 target값이 0인 negative 값, ‘나비’는 target 값이 1인 positive 값.
      • 무관한 단어들에 대해서는 weight를 업데이트 하지 않는다.
  • n개의 negative 값을 선택에 이것들에 대해서만 positive 값과 함께 학습.

    • 논문에서는 작은 데이터에서는 520개, 큰 데이터에서는 25개

    • sampling 될 단어의 빈도수에 따라 가중치를 줌(많이 나타날 수록 negative sampling 될 확률 높음)

      • f(w_i): 해당 단어가 말뭉치에 등장한 비율

      • 각 단어의 빈도수를 3/4승 한 후, 그것들 모두 더한 값으로 나눔.

      • 이론적으로 증명X, but 잘 작동

      • f값을 더하는 것보다 f값이 작으면(빈도가 낮을수록) 값을 더 크게 주고, 빈도수가 많은데 별 필요없는 값들은 f값보다 작게 하고 싶어서..?

논문

  • NCE(Noise Constractive Estimation): hierarchical softmax의 대안

    • 로지스틱 회귀의 평균을 통해 데이터와 노이즈를 구분할 수 있음
    • 소프트맥스 로그확률의 근사적인 확률을 최대화.
  • skip-gram

    • 오직 양질의 벡터 표현을 학습하는 것에 집중
  • 논문에서, skip-gram의 퀄리티를 보존하며 noise를 분리하는 NCE를 효과적으로 사용 가능
    : 이 방법을 negative sampling(NEG)라 칭함

    • NEG의 objective

      • logp(Wo|WI)는 skip-gram의 objective를 대체.
      • skip-gram의 모든 logP(Wo|WI)를 대체
        입력 단어 WI에 대해 positive sample wo이 output일 확률을 최대화하려고 함
      • 오른쪽은 negative sample wi에 대해 negative sample wi가 output이 될 확률을 최소화하는 방향으로 학습(→ 내적에 결과에 -1을 곱해 sigmoid 함수 적용)
    • task는 noise 분포 Pn(W)로부터 각 데이터의 K개의 negative sampling을 활용한 로지스틱 회귀를 이용하여 target data Wo를 구분하는 것.

      • 작은 데이터 셋에서는 k = 520, 큰 데이터 셋에서는 k=25
  • NEG는 NCE의 간소화 버전

    • NCE: noise의 분포의 수치적인 확률과 sample이 모두 필요, softmax의 log probability값을 최대화
    • NEG: 오직 sample만 필요
  • word2vec: word representation의 quailty를 높이는 것이 목표
    → NCE사용X, sample만을 필요로 하는 negative sampling 방법 수행

subsampling

  • 영어, the, a 같은 단어 자주 등장. 한국어, ㅠㅠㅠㅋㅋㅋ등

  • 자주 등장하지만 쓸모없는 애들 다루는 방법

  • 확률은 단어의 빈도수에 따라 결정: 많이 등장하는 단어는 제거될 확률이 높아짐.

    • 한 단어를 제외할 확률

      • t = 1e-5
      • f(w_i): 해당 단어가 말뭉치에 등장한 비율
      • 만약 p(w_i)가 0.96이라면 100번의 학습 중 96번은 학습에서 제외됨.
    • 딥러닝의 드롭아웃과 비슷하게 생각. 드롭아웃은 랜덤성을 부여해 오버피팅 해결, subsampling은 효율성의 측면에서 문제 해결


결론 및 의문

결론

  • negative sampling은 계산량을 줄이기 위해
  • subsampling은 텍스트 자체가 가진 문제를 다루기 위해
    • 학습량을 줄여 계산량 감소

논문

  • 결과

    The table shows that Negative Sampling outperforms the Hierarchical Softmax on the analogical reasoning task, and has even slightly better performance than the Noise Contrastive Estimation. The subsampling of the frequent words improves the training speed several times and makes the word representations significantly more accurate.

의문

  • 한국어에 적용하면 다른 문제일듯

댓글