[Word2Vec] Efficient Estimation of Word Representations in Vector Space

emseoyk·2022년 4월 1일
0

1. Introduction

많은 NLP 기법은 다음과 같은 이유로 단어를 atomic unit으로 취급함.

  • simplicity
  • robustness
  • 방대한 양의 데이터로 학습한 간단한 모델의 성능이 적은 데이터 + 복잡한 모델보다 훨씬 좋음

하지만 이런 모델들은 전사된 음성 데이터로만 학습했기 때문에 도메인이 특정된 자동 음성 인식은 한계가 있다.

기술 발달로 인해 더 큰 데이터셋에 복잡한 모델을 학습시키는 것이 가능해졌다. 이는 분포 포현을 사용하기 때문이라고 추측할 수 있다. ex. NN >> N-gram

1.1 Goals of the Paper

방대한 양의 단어로부터 높은 수준의 단어 벡터를 학습하는 기술

아직까지 소개된 아키텍쳐로는 수백만 이상의 단어와 50~100 차원 이상으로 학습할 수 없음.

유사한 단어는 서로 가까이 위치하고, 한 단어가 다양한 정도의 유사도를 가질 수 있는 벡터 표현 기술을 제안한다.

단어 간격으로 벡터를 산술적으로 연산할 수 있다.
예) vector("King") - vector("Man") + vector ("Woman") = vector("Queen")

이 논문에서는

  • 단어 간 통사적 + 의미론적 선형규칙성(King, Man, Woman, Queen 예시에서 보았듯이)을 보존하는 모델을 구현함으로써 벡터 표현의 정확도를 최대화
  • 학습 시간과 정확도가 단어 벡터의 차원과 학습 데이터의 크기에 따라 달라지는지 확인

1.2 Previous Work

단어를 연속 벡터로 표현하는 연구는 계속되어 왔음.
NNLM은 선형 projection layer과 비선형 hidden layer로 구성된 feedforward NN임.
다른 NNLM은 단어 벡터가 하나의 은닉층으로 학습되고, 이 벡터들은 NNLM을 학습하기 위해 사용됨. 따라서 완전한 NNLM을 쌓지 않고도 학습이 되는 것.

본 논문에서는 이 모델 중 단어 벡터가 간단한 모델로 학습되는 부분에 집중. (이 구조를 가져온다는 뜻인가?)

하지만 이런 구조는 계산이 매우 복잡함.

2. Model Architectures

LSA, LDA 등 연속 표현을 예측하는 모델은 많음.
*참고: continuous representation = distributed representation 임.

이 논문에서는 신경망으로 단어표현을 학습하는 방법에 집중. 이 방법이 단어간 선형 구칙성을 보존하는 데에 LSA보다 낫기 때문. 그리고 LDA는 큰 데이터셋에서 계산 복잡도가 높아짐

참고로 여기서 "computational complexity"라고 함은 모델을 학습할 때 필요한 파라미터의 개수를 의미함

계산 복잡도: O=E×T×QO = E \times T \times Q

E: epoch
T: 단어의 개수
Q: 차차 설명한다고 함^^

주로 E=3~50, T는 10억 이하
+ 모델은 stochastic gradient descent & backpropagation

2.1 Feedforward Neural Network Language Model (NNLM)

input, projection, hidden, output으로 구성된 모델

(논문 내내 투사층, 투사층 하는데 좋은 질문이 있어서 첨부함
스택오버플로우 질문)

N개의 단어가 1-of-V 코딩(V는 vocabulary 크기)으로 인코딩 됨.
입력층은 투사층 P(N x D, D는 지정된 차원)로 투사됨.

using a shared projection matrix
공유하는 하나의 투사 행렬이 대체 뭐임

As only N inputs are active at any given time, composition of the projection layer is a relatively cheap operation.
이 대체 무슨 뜻?

NNLM은 투사층이 dense하기 때문에 연산이 복잡하다. N이 10이면 P는 500~2000 정도이고, H는 500~1000 정도이다. 또한 은닉층은 모든 단어에 대한 확률분포를 계산하여 V 차원의 출력층을 갖게 된다.

계산 복잡도
Q=N×D+N×D×H+H×VQ = N \times D + N \times D \times H + H \times V

단어를 Huffman 이진 트리로 표현하는 hierarchical softmax 사용.

Huffman

  • 빈도수 높은 단어에 이진 코드 부여 -> 아웃풋 줄임
    -log2(Unigram_perplexity(V))log_2(Unigram\_perplexity(V)) 개의 아웃풋

2.2 Recurrent NNLM (RNNLM)

NN의 한계였던 길이 지정을 극복할 수 있는 모델
RNN은 더 복잡한 패턴을 표현할 수 있기 때문에 RNNLM은 투사층이 없음.
이 모델은 시간차를 두고 본인에게 다시 은닉층을 연결하는 recurrent matrix가 존재한다는 점 -> short term memory 마듦.

계산 복잡도
Q=H×H+H×VQ = H \times H + H \times V

word representations have the same dimensionality as the hidden layer -> 뭔말

2.3 Parallel Training of Neural Networks

여러 모델을 병렬로 돌릴 수 있는 DistBeleif 프레임워크를 사용하고, AdaGrad 사용

3. New Log-linear Models

NN 모델들은 비선형의 은닉층 때문에 계산 복잡도가 높아짐. log-linear은 NN만큼은 아니지만 훨씬 효율적으로 대량의 데이터를 학습할 수 있는 방법임

  1. 연속 벡터가 간단한 모델을 이용해 학습 (위에서 말한 부분인듯)
  2. N-gram NNLM이 이 표현 위에(?) 학습됨

3.1 Continous Bag-of-Words Model

NNLM에서 비선형 은닉층 없어지고 투사층이 모든 단어들에서 공유된 구조
단어의 순서가 투사에 영향을 주지 않기 때문에 bag-of-words 모델이라고 부름. 즉 이전 단어는 투사에 영향을 주지 않음. 앞으로 나올 단어도 사용하는데, 앞뒤로 4개씩 단어를 인풋으로 가지는 log-linear한 분류기를 사용함.

계산 복잡도
Q=N×D+D×log2(V)Q = N \times D + D \times log_2(V)

이 모델을 CBOW 라고 부르기로 함 그게 사회적 약속이라가지고

3.2 Continuous Skip-gram Model

CBOW와 유사하지만 maximize classification of word(?)

현재 단어를 연속적인 투사층과 함께 log-linear한 분류기의 입력으로 사용하고 특정 범위의 앞뒤 단어를 예측.

범위를 늘리면 벡터 퀄이 좋아지지만 계산 복잡도도 올라감. 멀리 떨어질수록 현재 단워와 연관이 적기 때문에 샘플링을 적게 하도록 가중치를 둠.

계산 복잡도
Q=C×(D+D×log2(V))Q = C \times (D + D \times log_2(V))

이 실험에서는 C=10을 사용

4. Results

big은 bigger, biggest와 모두 유사도를 가질 수 있다. 이 때 big-biggest 과 같은 관계 small과 유사한 단어를 벡터 연산으로 구할 수 있다.

거리 계산 후 코사인 거리로 벡터 공간에서 해당 단어를 찾으면 된다.

많은 데이터로 고차원의 벡터를 학습하면 미묘한 관계도 답변을 할 수 있다.

4.1 Task Description

8869개의 semantic, 10675개의 syntactic 질문이 있음.
1. 손으로 유사쌍의 목록을 작성하고
2. 질문의 리스트가 단어쌍의 연결로 구성됨

학습을 위해 single token word만 사용 <-개인적으로 이 부분이 이 연구의 한계가 아닐까 생각

그리고 모든 타입에 대해, 각각 타입에 대해 정확도 평가. 가장 가까운 벡터가 답변과 같을 때 정답으로 간주.

4.2 Maximization of Accuracy

구글 뉴스 말뭉치로 학습 (60억 개의 단어를 포함)

당연히 많은 데이터와 높은 차원으로 학습하면 정확도가 높아질 것이다. 하지만 현실적으로 둘 다 잡을 수 없기 때문에 차원, 데이터에 차이를 두고 학습을 시켜보았더니 다음의 결과가 나왔다.

학습률 0.025, 에폭 3으로 학습

4.3 Comparison of Model Architectures

모델 비교해봤더니 NNLM이 RNNLM보다 성능이 좋음.

  • CBOW -> Syntactic
  • Skip-gram -> Semantic
    에서 결과가 좋았음.

한개의 CPU로 학습

결론적으로는 같은데이터로 3번 학습보다 2배 이상의 데이터로 한번 훈련시키는 것이 훨씬 낫다.

4.4 Large Scale Parallel Training of Models

병렬처리 얘기... 걍 그렇구나 하고 넘어감

4.5 Microsoft Research Sentence Completion Challenge

MRSCC는 각 문장에 한 글자가 빠져있는 1040개의 문장 사용, 5개의 선택지 중에 문장에 들어갈 단어를 찾는 태스크

이 중 Skip-gram으로 시험해 봄.
5천만개의 단어를 640의 차원으로 훈련
Skip-gram 자체로는 LSA에 못 미치지만, Skip-gram + RNNLM 은 58.9%의 성능을 냄

5. Examples of the Learned Relationships

Paris-France+Italy = Rome

결과 잘 나왔다. 데이터를 더 늘리면 훨씬 좋을 성능을 낼 것. 정확도를 높이는 다른 방법은 관계에서 한 개 이상의 예시를 제공. 예를 들어 1개 대신 10개의 예를 사용했더니 정확도가 10% 정도 향상되었다고 함

또한, 벡터 연산을 통해 문맥에 어울리지 않는 단어를 찾는 등 다른 용도로 사용 가능

6. Conclusion

통사적, 의미론적 언어 태스크에서 유도된 벡터 표현의 성능을 연구함.

신경망 모델과 비교했을 때 간단한 모델을 사용해서도 좋은 퀄의 벡터 표현을 얻을 수 있음을 확인하였다.
계산 복잡도가 낮기 때문에 훨씬 거대한 데이터셋으로 정확한 고차원의 벡터를 연산할 수 있다.

이 연구는 단어 벡터가 Knowledge Bases의 확장과 이미 존재하는 사실을 증명하는 등에 쓰일 수 있을 것이다. 기계번역 역시 유망해보인다.


위키독스 NNLM< RNNLM 더 공부해야겠다,,, https://wikidocs.net/46496

0개의 댓글