논문 링크 : Efficient Estimation of Word Representations in Vector Space
0. Abstract
단어의 연속 벡터 표현을 계산하기 위한 2가지 새로운 모델 아키텍처를 제안한다. 결과는 이전에 다양한 유형의 신경망을 기반으로 최고 성능을 발휘했던 기술들과 비교되며, 우리가 제안하는 방식을 통해 훨씬 낮은 비용으로 정확도가 크게 향상하는 것을 관찰했다. 16억 개의 단어 데이터세트에서 고품질의 단어 벡터를 학습하는데 하루가 채 걸리지 않으며, 이러한 벡터는 구문 및 의미 단어 유사성을 측정하기 위한 우리의 테스트셋에서 최첨단 성능을 제공한다.
1. Introduction
현재 많은 NLP 시스템과 기술은 단어를 원자 단위로 다루며, 단어 사이의 유사성에 대한 개념은 없다. 이것은 단순성, 견고성 그리고 엄청난 양의 데이터로 훈련된 단순한 모델이 적은 데이터로 훈련된 복잡한 시스템보다 성능이 뛰어나다는 면에서 좋은 이유가 된다. 가령 통계적 언어 모델로 사용되는 대중적인 N-Gram 모델이 있는데 오늘날 거의 모든 사용 가능한 데이터에 대해 N-Gram을 훈련시키는 것이 가능하다.
-> 기존의 NLP 모델의 장점
하지만 이런 단순한 기술은 많은 작업에서 한계가 있는데 자동 음성 인식을 위한 도메인 데이터와 같은 특정 도메인 내에서는 데이터의 양이 제한되어 있다. 그렇기 때문에 기존 기술의 단순한 확장으로는 큰 진전이 이루어지지 않는 상황이 있으며 보다 발전된 기술에 초점을 맞춰야 한다.
-> 기존 NLP 모델의 단점
최근 몇 년 동안 기계 학습 기술이 발전함에 따라 훨씬 더 큰 데이터셋에서 더 복잡한 모델을 훈련시키는 것이 가능해졌고, 이것은 일반적으로 단순한 모델보다 성능이 뛰어나다. 이에 가장 성공적인 컨셉은 단어의 분산표현을 사용한 것이며, 예로 인공 신경망 기반의 언어 모델이 N-Gram 모델보다 훨씬 뛰어난 것을 볼 수 있다.
-> 통계 기반의 언어 모델보다 인공 신경망 기반의 언어 모델의 우수성 확인
1-1. Goals of the Paper
이 논문의 주 목표는 수십억 개의 단어와 수백만 개의 어휘로 구성된 거대한 데이터셋에서 고품질 단어 벡터를 학습하는 데 사용할 수 있는 기술을 소개하는 것이다.
-> 논문의 주 목표
우리는 유사한 단어가 서로 가까운 경향이 있을 뿐만 아니라 단어가 여러 정도의 유사성을 가질 수 있다는 기대를 가지고 결과 벡터 표현의 품질을 측정했고, 놀랍게도 단어 표현의 유사성은 단순한 구문 규칙성을 넘어서는 것을 확인했다. 이 방법을 사용하면 단순한 벡터 오프셋 연산으로 단어의 유사성을 표현할 수 있다. 예를 들어 vec(”King”) - vec(”Man”) + vec(”Woman”)의 결과가 단어 “Queen”의 벡터 표현에 가까워지는 것을 보여준다.
-> 논문에서의 초기 목표를 기반으로 한 실험의 결과
1-2. Previous Work
단어를 연속 벡터로 표현하는 것은 오랜 역사를 가지고 있다. NNLM을 추정하기 위한 대중적인 모델 아키텍처가 [A neural probabilistic language model] 에서 제안되었다. 여기서는 Projection Layer와 Nonlinear hidden layer이 있는 피드포워드 신경망을 사용해 단어 벡터 표현과 통계적 표현을 공동으로 학습했다. 이 작업은 많은 사람들이 따랐다.
NNLM의 또 다른 흥미있는 아키텍처는 「Language Modeling for Speech Recognition in Czech」, 「Neural network based language models for higly inflective languages」에 제시되어 있다. 여기서 단어 벡터는 NNLM을 훈련하기 위한 용도로 Single hidden layer가 있는 신경망을 사용해 처음으로 학습되었다. 따라서 전체 NNLM을 구성하지 않고도 단어 벡터가 학습된다. 이 작업에서 우리는 이 아키텍처를 확장했고 간단한 모델을 사용해 단어 벡터를 학습하는 첫 번째 단계에만 집중한다.
2. Model Architectures
LSA(Latent Semantic Analysis)와 LDA(Latent Dirichlet Allocation)을 포함해 단어의 연속 표현을 추정하기 위해 다양한 유형의 모델이 제안되었다. 이 논문에서는 신경망에 의해 학습된 단어의 분산 표현에 주목한다. 이는 이전에 신경망이 단어 간 선형 규칙성을 보존하는데 LSA보다 훨씬 더 나은 성능을 발휘했으며, LDA는 대규모 데이터셋에서 계산 비용이 많이 들기 때문이다.
다양한 모델 아키텍처를 비교하기 위해, 먼저 훈련에 필요한 파라미터 수에 따른 모델의 계산 복잡도를 정의한다. 이후 계산 복잡도을 최소화하면서 정확도를 최대화하기 위한 방법을 모색한다.
$ O = E \times T \times Q $
-> E : 에포크(Epochs)의 수
-> T : 학습 데이터의 수
-> Q는 각 모델의 아키텍처에 따라 추가로 정의된다.
일반적인 선택은 E는 3~50으로, T는 최대 10억이며, 모든 모델은 SGD와 역전파를 사용해 훈련된다.
2-1. Feedforward Neural Net Language Model(NNLM)
여기서 소개하는 Feedforward NNLM과 RNNLM은 본 논문에서 소개될 CBoW와 Skip-gram과의 성능 비교를 위해 나타낸 것이며 이 모델을 소개하는 것이 주 목적은 아니다.
확률적 피드포워드 신경망 언어 모델은 Input Layer, Projection Layer, Hidden Layer, Output Layer로 구성된다. Input layer에서 N개의 previous word는 1-of-V 코딩을 사용해 인코딩된다. 여기서 V는 어휘의 크기다. 그 다음 Input layer은 공유 투영 행렬을 사용해 N x D 차원으로 이루어진 Projection layer에 projection된다.
NNLM 아키텍처는 Projection layer의 값이 조밀하기 때문에 Projection layer와 Hidden layer 간 계산이 복잡해진다. $ N = 10 $ 이라는 일반적인 선택의 경우 Projection layer($ P $)의 크기는 500 ~ 2000일 수 있는 반면에, Hidden layer의 크기 $ H $는 일반적으로 500 ~ 1000 단위이다. 또한, Hidden layer는 어휘의 모든 단어에 대한 확률 분포를 계산하는데 사용되어 차원이 $ V $인 Output layer가 생성된다. 따라서 각 훈련 예제당 계산 복잡도는 다음과 같다.
$ Q = N \times D + N \times D \times H + H \times V $
여기서 지배항은 $ H \times V $ 이지만, 이것을 방지하기 위한 실용적인 솔루션으로써 Softmax의 계층적인 버전을 사용하거나 훈련 중에 정규화되지 않은 모델을 사용해 정규화된 모델을 완전히 피하는 것이 있다. 어휘의 이진 트리 표현을 사용하면 평가해야 하는 output unit 수는 $ log_{2}V $로 줄어들 수 있다.
-> Feedforward NNLM의 특징
본 논문에서는 어휘가 Huffman 이진 트리로 표현되는 계층적 Softmax를 사용함에 따라 output unit 수를 $ log_{2}(Unigram_perplexity(V)) $ 로 줄일 수 있다. 하지만 여전히 계산 병목 현상이 $ N \times D \times H $항에 있기 때문에 계산 복잡성을 해결되지 않는다. 따라서 나중에 Hidden layer를 가지지 않은 Softamx normalization의 효율성에 크게 의존하는 아키텍처를 제안할 것이다.
-> 제안하는 기술의 특징 일부분
2-2. Recurrent Neural Language Model(RNNLM)
RNNLM은 컨텍스트의 길이를 지정해야 할 필요가 있는 Feedfoward NNLM의 제한을 극복하기 위해 제안되었다. 이 모델의 특별한 점은 time-delayed를 사용해 Hidden layer 자체에 연결한다는 점인데, 이를 통해 순환 모델은 일종의 단기 메모리를 형성할 수 있다. 과거 정보를 현재 입력과 이전 시간 단계의 Hidden layer state를 기반으로 업데이트되는 Hidden layer state로 표시할 수 있기 때문이다.
RNN 모델의 각 훈련 예제당 계산 복잡도는 다음과 같다.
$ Q = H \times H + H \times V $
여기서 단어 표현 $ D $는 Hidden layer $ H $ 와 동일한 차원을 갖는다. 또한 계층적 Softmax를 사용함에 따라 $ H \times V $ 가 $ log_{2}V $로 줄어듦에 따라 대부분의 계산 복잡성은 $ H \times H $ 에서 발생하게 된다.
2.3 Parallel Training of Neural Networks
본 논문에서는 거대한 데이터셋에 대해 모델 훈련을 위해 DistBelief라 불리는 분산 프레임워크를 활용했다. 이 프레임워크를 활용해 동일한 모델의 여러 복제본을 병렬로 실행할 수 있으며, 각 복제본은 모든 파라미터를 유지하는 중앙 집중식 서버를 통해 기울기를 동기화한다. 이 병렬 훈련을 위해, Adagrad라 불리는 최적의 learning rate를 찾는 미니 배치 비동기식 경사 하강법을 사용했다. 이 프레임워크에서는 일반적으로 100개 이상의 복제본을 사용하고, multi-core 연산을 수행한다.
3. New Log-Linear Models
이 세션에서 계산 복잡성을 최소화하면서 단어의 분산 표현을 학습할 수 있는 2 가지 새로운 모델 아키텍처를 제안한다. 이전 세션의 주요점은 비선형 Hidden layer으로 인해 계산 복잡성이 발생한다는 것이다. 하지만 신경망만큼 정확성을 얻을 수는 없더라도 훨씬 더 많은 데이터를 효율적으로 훈련할 수 있는 간단한 모델을 탐색하고자 했다.
본 논문에서 제안하는 모델은 2 단계로 훈련된다. 먼저 연속 단어 벡터는 단순 모델을 사용해 학습되고, 그 다음 N-gram NNLM은 단어의 분산 표현을 기반으로 학습된다. 이후 단어 벡터 학습에 중점을 둔 대량의 작업이 있지만, 우리는 이전 연구에서 제안된 접근 방식을 가장 간단한 것으로 간주한다.
3-1. Continuous Bag of Words Model(CBOW)
첫 번째로 제안된 아키텍처는 비선형의 Hidden layer가 제거되고 Projection layer가 모든 단어에 대해 공유되는 Feedforward NNLM과 유사하다. 따라서 모든 단어는 같은 position에 projection된다. 본 논문에서는 이 아키텍처를 BoW 모델이라고 부른다. 우리는 미래의 단어를 사용한다. 목표는 Input에 4개의 미래 단어와 4개의 과거 단어가 있는 로그 선형 분류기를 Input으로 사용해 중간 단어를 올바르게 분류하는 것이다.
훈련 복잡도는 다음과 같다.
$ Q = N \times D + D \times log_2{V} $
표준 BoW 모델과는 달리 이 모델은 컨텍스트의 연속적인 분산 표현을 사용하므로 이 모델은 CBOW라고 한다. Input layer와 Projection layer 사이의 가중치 행렬은 NNLM에서와 동일한 방식으로 모든 단어 position에 대해 공유된다. 즉, 모든 단어들이 동일한 가중치 행렬을 사용해 Input layer에서 Projection layer로 projecion된다.
3-2. Continuous Skip-gram Model
두 번째 아키텍처는 CBOW와 유사하지만 문맥을 기반으로 현재 단어를 예측하는 대신 동일한 문장의 다른 단어를 기반으로 단어 분류를 최대화한다. 즉, 각 단어를 Continuous Projection layer가 있는 로그 선형 분류기에 대한 Input으로 사용하고 현재 단어 전후의 특정 범위 내의 단어를 예측한다. 단어 사이의 거리가 멀어질수록 가까운 단어에 비해 현재 단어와 연관성이 떨어지기 때문에 적은 가중치를 부여하게 된다.
이 아키텍처의 훈련 복잡도는 다음에 비례한다.
$ Q = C \times (D + D \times log_2{(v)}) $
C는 단어의 최대 거리이며, C = 5를 선택하게 되면 각 훈련 단어에 대한 범위 <1, C> 내의 숫자 R을 무작위로 선택할 것이다. 이후 과거의 R단어와 미래의 R 단어를 레이블로 사용한다. 이것은 $ R \times 2 $ 단어 분류를 수행해야 한다.
4. Results
다양한 버전의 단어 벡터의 퀄리티를 비교하기 위해, 이전 논문에서는 예제 단어와 가장 유사한 단어를 보여주는 테이블을 사용하며 직관적으로 이해한다. "France"라는 단어가 "Italy" 및 일부 다른 국가와 유사하다는 것을 보여주는 것은 쉽지만 더 복잡한 유사성 작업에서는 이러한 벡터를 적용하기 훨씬 어렵다. 우리는 단어들 사이에 다양한 유형의 유사성이 있을 수 있다는 이전 연구를 따른다. 가령 "small"이 "smaller"의 유사성은 "big"과 "bigger"의 유사성과 비슷하다. 나아가 "big"과 "biggest"의 유사성과 비슷한 "small"과 유사한 단어는 무엇일까?
놀랍게도 이 질문은 단어의 벡터표현으로 간단한 대수 연산을 수행해 답할 수 있다. "biggest"와 'big'과 같은 유사성을 갖는 'small'과 유사한 단어를 찾기 위해서 vector X = vector(”biggest”) - vector(”big”) + vec(”small”)를 계산할 수 있다. 그 다음, 벡터 공간에서 코사인 거리로 측정된 X에 가장 가까운 단어를 검색하고 이를 답으로 사용한다.
4-1. Task Description
단어 벡터의 퀄리티를 측정하기 위해, 우리는 5가지 유형의 의미론적인 질문과 9가지 유형의 구문론적인 질문을 포함한 데이터셋을 정의한다. 각 카테고리의 2가지 예시들이 표 1에 나와있다. 전반적으로, 8869개의 의미론적인 질문과 10675개의 구문론적인 질문들이 있다. 각 카테고리의 질문은 2 단계로 이루어진다.
(1) 먼저 유사한 단어 쌍 리스트를 수동으로 만든다.
(2) 그 다음 두 단어 쌍을 연결함으로써 큰 질문 list를 제작한다.
예를 들어, 미국의 68개 대도시와 그 도시가 속한 주의 목록을 만들고 두 단어 쌍을 무작위로 선택해 약 2.5K개의 질문을 구성했다. 단일 토큰 단어들만을 테스트셋으로 사용했기 때문에 뉴욕(New York)과 같은 multi word entity는 사용하지 않았다.
본 논문에서는 모든 질문 유형과 각 질문 유형에 대해 개별적으로 정확도를 측정했다. 위의 방법을 사용해 계산된 벡터에 가장 가까운 단어가 질문의 정답과 동일한 경우에만 올바르게 대답한 것으로 간주한다. 따라서 동의어는 오답으로 간주된다. 이것은 현재 모델에는 단어 형태에 대한 입력 정보가 없기 때문에 100% 정확도에 도달하는 것이 불가능할 수 있음을 의미한다.
4-2. Maximization of Accuracy
본 논문에서는 단어 벡터를 훈련하기 위해 구글 뉴스 코퍼스를 사용했다. 약 60억 개의 토큰이 포함되어 있는데, 본 논문에서는 어휘 사이즈를 가장 자주 사용하는 단어 100만 개로 제한했다. 우리는 최적화 문제에 대해 시간적인 제약에 직면하고 있다. 즉, 더 많은 데이터와 더 많은 차원의 벡터로 훈련하는 것을 기대할 수 있다는 것이다. 가장 좋은 모델을 선택하기 위해서 먼저 가장 자주 사용되는 30000개의 단어에 대해 훈련 데이터의 sub set을 구성해 훈련된 모델에 대해 평가했다. 단어 벡터 차원을 다르게 선택하고 훈련 데이터의 양을 늘리는 CBOW 아키텍처를 사용한 결과는 표 2에 나와있다.
어느 시점이 지나면 더 많은 차원을 추가하거나 더 많은 훈련 데이터를 추가하면 개선 효과가 줄어들기 때문에 벡터 차원과 훈련 데이터의 양을 함께 늘려야 한다. 실제 실험에서는 3 epoch과 0.025의 learning rate를 선택했고, SGD(stochastic gradient descent)와 역전파를 사용해 훈련했다.
4-3. Comparison of Model Architectures
먼저 동일한 학습 데이터를 사용해 동일한 640차원의 단어 벡터를 사용해 단어 벡터를 파생하기 위한 다양한 모델을 비교한다. 추가 실험에서 우리는 Semantic-Syntactic Word Relationship test set을 사용했다. 즉, 30000개의 어휘에 제한되지 않은 질문 세트를 사용했다. 학습 데이터는 여러 LDC 말뭉치로 구성되며, 이 데이터를 사용해 단일 CPU에서 훈련하는데 8주가 걸렸던 사전 학습 RNN 언어 모델과 비교했다. 또한 8개의 과거 단어를 사용해 DistBelif 병렬 훈련을 사용해 동일한 수의 640개의 Hidden unit으로 이루어진 Feedforward NNLN을 훈련했다.
표 3에서는 RNN의 단어 벡터가 주로 구문 질문에서 잘 수행되는 것을 볼 수 있다. NNLM 벡터는 RNN보다 훨씬 나은 성능을 발휘한다. CBOW 모델은 구문 작업에서는 NNLM보다 더 잘 작동하고 의미 작업에서는 거의 동일하다. 마지막으로 Skip-gram 모델은 CBOW 모델보다 구문 작업에서는 약간 정확도가 낮지만 의미 작업에서는 다른 모든 모델보다 훨씬 더 좋다.
다음으로 하나의 CPU만 사용해 훈련된 모델을 평가하고 공적으로 사용 가능한 단어 벡터와 비교했다.
CBOW 모델은 Google News 데이터의 sub set으로 약 하루만에 학습되었으며 Skip-gram 모델의 학습 시간은 약 3일이었다.
추가 실험에서는 단 1개의 training epoch만 사용했다. 위의 표에 표시된 것처럼 1 epoch를 사용해 2배 많은 데이터에 대한 모델을 훈련하면 3개의 epoch에 대해 동이한 데이터를 반복하는 것보다 비슷하거나 더 나은 결과를 얻을 수 있으며 추가로 약간의 속도도 향상된 것을 볼 수 있다.
4-4. Large Scale Parallel Training of Models
앞서 언급했듯이 우리는 DistBelif라는 분산 프레임워크에서 다양한 모델을 구현했다. 아래 표는 Adagard라 불리는 mini-batch 비동기 경사 하강법과 적응형 learning rate를 사용해 Google News 6B 데이터셋에서 훈련된 여러 모델의 결과를 보여준다.
4-5. Microsoft Research Sentence Completion Challenge
Microsoft Research Sentence Completion Challenge는 최근 언어 모델링 및 기타 NLP 기술을 발전시키기 위한 과제로 도입되었다. 이 작업은 1040개의 문장으로 구성되어 있다. 각 문장에는 하나의 단어가 누란되어 있으며, 목표는 주어진 5개의 단어 중 문장의 나머지 부분과 가장 일관성 있는 단어를 선택하는 것이다.
우리는 Skip-gram 모델의 성능을 조사했다. 먼저 The Microsoft Research Sentence Completion Challenge 에서 제공된 5천만 개의 단어에 대해 640 차원 모델을 훈련했다. 그 다음 입력에서 주어진 단어를 사용해 테스트 셋의 각 문장의 점수를 계산하고 문장의 모든 주변 단어를 예측한다. 최종 문장 점수는 이러한 개별 예측의 합계이다. 문장 점수를 사용해 가장 가능성이 높은 단어를 선택한다.
Skip-gram 모델 자체는 LSA 유사성보다 이 작업을 더 잘 수행하지 않지만 이 모델의 점수는 RNNLM으로 얻은 결과와 가중치를 경합하여 58.9%의 정확도를 가지는 결과를 얻었다.
5. Examples of the Learned Relationships
단어 사이의 상관 관계를 분석해 다른 단어에 대해 유사한 관계를 갖는 단어를 예측하는 작업에서 본 논문의 모델의 정확도는 약 60%에 불과하다. 우리는 더 큰 차원의 더 큰 데이터셋에서 훈련된 단어 벡터가 훨씬 더 나은 성능을 발휘할 것이라고 믿는다.