Word2Vec: 벡터 공간에서의 효율적인 단어 표현 학습
이 논문은 대규모 데이터셋에서 단어의 연속적인 벡터 표현을 효율적으로 계산하기 위한 두 가지 새로운 모델 아키텍처인 Continuous Bag-of-Words (CBOW)와 Skip-gram을 제안합니다. 기존의 신경망 언어 모델(NNLM, RNNLM)과 비교하여 훨씬 낮은 계산 비용으로 높은 정확도의 단어 벡터를 학습할 수 있는 것이 특징입니다. 이 모델들을 통해 학습된 벡터는 단어 간의 구문적, 의미적 유사성을 잘 포착하여 "King" - "Man" + "Woman" ≈ "Queen"과 같은 단어 유추 문제를 해결하는 데 뛰어난 성능을 보입니다. 논문 제목: Efficient Estimation of Word Representations in Vector Space
Mikolov, Tomas, et al. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013).
Efficient Estimation of Word Representations in Vector Space
Abstract
우리는 매우 큰 데이터셋으로부터 단어의 연속적인 벡터 표현(continuous vector representations)을 계산하기 위한 두 가지 새로운 모델 아키텍처를 제안한다. 이러한 표현의 품질은 단어 유사성(word similarity) task에서 측정되며, 그 결과는 이전에 가장 좋은 성능을 보였던 다양한 유형의 neural network 기반 기술들과 비교된다.
우리는 훨씬 낮은 계산 비용으로 정확도에서 큰 향상을 관찰했다. 즉, 16억 단어 데이터셋으로부터 고품질 단어 벡터를 학습하는 데 하루도 채 걸리지 않는다. 더 나아가, 이러한 벡터들이 구문적(syntactic) 및 의미적(semantic) 단어 유사성을 측정하는 우리의 테스트셋에서 state-of-the-art 성능을 제공함을 보여준다.
1 Introduction
많은 현재의 NLP 시스템과 기술은 단어를 atomic unit으로 취급한다. 즉, 단어들은 어휘집(vocabulary) 내의 인덱스로 표현되기 때문에 단어 간의 유사성 개념이 없다. 이러한 선택에는 몇 가지 타당한 이유가 있다: 단순성, 견고성, 그리고 방대한 양의 데이터로 학습된 단순 모델이 적은 데이터로 학습된 복잡한 시스템보다 성능이 우수하다는 관찰이다. 통계적 언어 모델링에 사용되는 인기 있는 N-gram 모델이 그 예시이다. 오늘날에는 거의 모든 가용한 데이터(수조 개의 단어 [3])로 N-gram을 학습하는 것이 가능하다.
그러나 이러한 단순한 기술들은 많은 task에서 한계에 도달하고 있다. 예를 들어, **자동 음성 인식(Automatic Speech Recognition, ASR)**을 위한 관련 in-domain 데이터의 양은 제한적이며, 성능은 주로 **고품질 전사(transcribed) 음성 데이터의 크기(종종 수백만 단어에 불과)**에 의해 좌우된다. **기계 번역(Machine Translation)**의 경우, 많은 언어에 대한 기존 코퍼스는 수십억 단어 이하만을 포함하고 있다. 따라서 기본 기술을 단순히 확장하는 것만으로는 의미 있는 진전을 이루기 어려운 상황이 발생하며, 우리는 더욱 발전된 기술에 집중해야 한다.
최근 몇 년간 머신러닝 기술의 발전과 함께, 훨씬 더 큰 데이터셋으로 복잡한 모델을 학습시키는 것이 가능해졌으며, 이들은 일반적으로 단순 모델보다 뛰어난 성능을 보인다. 아마도 가장 성공적인 개념은 단어의 분산 표현(distributed representations of words)을 사용하는 것일 것이다 [10]. 예를 들어, 신경망 기반 언어 모델은 N-gram 모델보다 훨씬 뛰어난 성능을 보여준다 [1, 27, 17].
1.1 Goals of the Paper
본 논문의 주요 목표는 수십억 개의 단어와 수백만 개의 어휘를 포함하는 대규모 데이터셋으로부터 고품질의 word vector를 학습하는 데 사용될 수 있는 기술을 소개하는 것이다. 우리가 아는 한, 이전에 제안된 아키텍처 중 어느 것도 수억 개 이상의 단어에 대해 성공적으로 학습된 적이 없으며, word vector의 차원도 50-100 사이의 적당한 수준이었다.
우리는 결과 벡터 표현의 품질을 측정하기 위해 최근 제안된 기술을 사용한다. 이 기술은 유사한 단어들이 서로 가까이 위치하는 경향이 있을 뿐만 아니라, 단어들이 여러 유사도(similarity)를 가질 수 있다는 기대를 기반으로 한다 [20]. 이는 이전에 굴절어(inflectional languages)의 맥락에서 관찰된 바 있다. 예를 들어, 명사는 여러 어미를 가질 수 있으며, 원래 벡터 공간의 부분 공간에서 유사한 단어를 검색하면 유사한 어미를 가진 단어를 찾을 수 있다 [13, 14].
다소 놀랍게도, 단어 표현의 유사성이 단순한 구문적 규칙성(syntactic regularities)을 넘어선다는 사실이 밝혀졌다. 단어 벡터에 간단한 대수 연산을 수행하는 word offset 기술을 사용하여, 예를 들어 vector("King") - vector("Man") + vector("Woman") 연산의 결과 벡터가 "Queen"이라는 단어의 벡터 표현에 가장 가깝다는 것이 입증되었다 [20].
본 논문에서는 단어들 간의 선형 규칙성(linear regularities)을 보존하는 새로운 모델 아키텍처를 개발하여 이러한 벡터 연산의 정확도를 극대화하고자 한다. 우리는 구문적 규칙성과 의미적 규칙성(semantic regularities)을 모두 측정하기 위한 새로운 종합 테스트 세트를 설계하고, 이러한 많은 규칙성들이 높은 정확도로 학습될 수 있음을 보여준다. 또한, 학습 시간과 정확도가 word vector의 차원 및 학습 데이터의 양에 어떻게 의존하는지 논의한다.
1.2 Previous Work
단어를 연속적인 벡터로 표현하는 방식은 오랜 역사를 가지고 있다 [10, 26, 8]. 신경망 언어 모델(NNLM)을 추정하기 위한 매우 인기 있는 모델 아키텍처는 [1]에서 제안되었는데, 이 모델은 선형 projection layer와 비선형 hidden layer를 가진 feedforward 신경망을 사용하여 단어 벡터 표현과 통계적 언어 모델을 공동으로 학습한다. 이 연구 이후 많은 후속 연구들이 이어졌다.
NNLM의 또 다른 흥미로운 아키텍처는 [13, 14]에서 제시되었는데, 여기서는 단어 벡터가 단일 hidden layer를 가진 신경망을 사용하여 먼저 학습된다. 그 후 이 단어 벡터들은 NNLM을 훈련하는 데 사용된다. 따라서 단어 벡터는 완전한 NNLM을 구축하지 않고도 학습된다. 본 연구에서는 이 아키텍처를 직접 확장하며, 단어 벡터가 간단한 모델을 사용하여 학습되는 첫 번째 단계에만 초점을 맞춘다.
나중에 단어 벡터가 많은 NLP 애플리케이션을 크게 개선하고 단순화하는 데 사용될 수 있음이 밝혀졌다 [4, 5, 29]. 단어 벡터 자체의 추정은 다양한 모델 아키텍처를 사용하여 수행되었고 여러 코퍼스에서 훈련되었다 [4, 29, 23, 19, 9]. 그 결과로 생성된 일부 단어 벡터는 향후 연구 및 비교를 위해 공개되었다. 그러나 우리가 아는 한, 이러한 아키텍처들은 [13]에서 제안된 것보다 훈련 비용이 훨씬 더 많이 들었으며, 대각 가중치 행렬이 사용된 특정 버전의 log-bilinear 모델 [23]은 예외였다.
2 Model Architectures
단어의 연속적인 표현(continuous representations)을 추정하기 위해 Latent Semantic Analysis (LSA) 및 **Latent Dirichlet Allocation (LDA)**와 같은 다양한 유형의 모델들이 제안되었다. 본 논문에서는 **신경망에 의해 학습된 단어의 분산 표현(distributed representations)**에 초점을 맞춘다. 이는 이전에 단어 간의 선형 규칙성(linear regularities)을 보존하는 데 LSA보다 훨씬 더 나은 성능을 보인다는 것이 입증되었기 때문이다 [20, 31]. 또한, LDA는 대규모 데이터셋에서 계산 비용이 매우 비싸진다.
[18]과 유사하게, 우리는 서로 다른 모델 아키텍처를 비교하기 위해 먼저 **모델의 계산 복잡도(computational complexity)**를 모델을 완전히 학습시키는 데 필요한 파라미터의 수로 정의한다. 다음으로, 우리는 계산 복잡도를 최소화하면서 정확도를 최대화하려고 노력할 것이다.
다음 모든 모델에서 **학습 복잡도(training complexity)**는 다음과 비례한다:
여기서
- 는 학습 epoch의 수,
- 는 학습 세트의 단어 수,
- 는 각 모델 아키텍처에 대해 추가로 정의된다.
일반적으로 는 3-50, 는 최대 10억까지 선택된다. 모든 모델은 **확률적 경사 하강법(stochastic gradient descent)**과 역전파(backpropagation) [26]를 사용하여 학습된다.
2.1 Feedforward Neural Net Language Model (NNLM)
확률적 feedforward neural network language model은 [1]에서 제안되었다. 이 모델은 input, projection, hidden, output layer로 구성된다. input layer에서는 개의 이전 단어들이 1-of- 코딩을 사용하여 인코딩되는데, 여기서 는 vocabulary의 크기이다. input layer는 공유된 projection matrix를 사용하여 차원의 projection layer 로 투영(project)된다. 주어진 시점에서 개의 입력만 활성화되므로, projection layer의 구성은 비교적 저렴한 연산이다.
NNLM 아키텍처는 projection layer의 값들이 dense하기 때문에, projection layer와 hidden layer 사이의 연산에서 복잡해진다. 일반적인 의 경우, projection layer 의 크기는 500에서 2000일 수 있으며, hidden layer의 크기 는 일반적으로 500에서 1000 유닛이다. 더욱이, hidden layer는 vocabulary 내의 모든 단어에 대한 확률 분포를 계산하는 데 사용되므로, output layer는 차원을 갖게 된다. 따라서 각 학습 예시당 계산 복잡도는 다음과 같다:
여기서 지배적인 항은 이다. 그러나 이를 피하기 위한 몇 가지 실용적인 해결책이 제안되었다. 계층적 버전의 softmax [25, 23, 18]를 사용하거나, 학습 중에 정규화되지 않는 모델 [4, 9]을 사용하여 정규화된 모델을 완전히 피하는 방식이다. vocabulary의 이진 트리 표현을 사용하면, 평가해야 할 출력 유닛의 수가 약 까지 줄어들 수 있다. 따라서 대부분의 복잡도는 항에 의해 발생한다.
우리의 모델에서는 vocabulary가 Huffman 이진 트리로 표현되는 계층적 softmax를 사용한다. 이는 단어의 빈도가 neural net language model에서 클래스를 얻는 데 효과적이라는 이전 관찰 [16]을 따른다. Huffman 트리는 자주 등장하는 단어에 짧은 이진 코드를 할당하며, 이는 평가해야 할 출력 유닛의 수를 더욱 줄여준다. 균형 이진 트리가 개의 출력을 평가해야 하는 반면, Huffman 트리 기반 계층적 softmax는 약 만을 요구한다. 예를 들어, vocabulary 크기가 백만 단어일 때, 이는 평가 속도를 약 두 배 향상시킨다. 이는 계산 병목 현상이 항에 있기 때문에 neural network LM에 있어 결정적인 속도 향상은 아니지만, 우리는 나중에 hidden layer가 없어 softmax 정규화의 효율성에 크게 의존하는 아키텍처를 제안할 것이다.
2.2 Recurrent Neural Net Language Model (RNNLM)
Recurrent Neural Network (RNN) 기반의 language model은 feedforward NNLM의 특정 한계점을 극복하기 위해 제안되었다. 예를 들어, context 길이(모델의 차수 )를 명시해야 하는 문제나, 이론적으로 RNN이 shallow neural network보다 더 복잡한 패턴을 효율적으로 표현할 수 있다는 점 등이 그 이유이다 [15, 2].
RNN 모델은 projection layer가 없으며, 입력, hidden, 출력 layer만으로 구성된다. 이 모델의 특징은 hidden layer를 자기 자신에게 연결하는 recurrent matrix인데, 이는 시간 지연(time-delayed) 연결을 사용한다. 이를 통해 recurrent 모델은 일종의 단기 기억(short-term memory)을 형성할 수 있다. 즉, 과거의 정보가 현재 입력과 이전 시점의 hidden layer 상태를 기반으로 업데이트되는 hidden layer 상태에 의해 표현될 수 있다.
RNN 모델의 **학습 예시당 복잡도(complexity)**는 다음과 같다:
여기서 단어 표현(word representation) 는 hidden layer 와 동일한 차원을 가진다.
다시 말하지만, hierarchical softmax를 사용하면 항은 로 효율적으로 줄어들 수 있다.
이 경우, 대부분의 복잡도는 항에서 발생한다.
2.3 Parallel Training of Neural Networks
대규모 데이터셋으로 모델을 학습시키기 위해, 우리는 **DistBelief [6]**라는 대규모 분산 프레임워크 위에 feedforward NNLM과 본 논문에서 제안하는 새로운 모델들을 포함한 여러 모델을 구현했다. 이 프레임워크는 동일한 모델의 여러 replica를 병렬로 실행할 수 있게 하며, 각 replica는 모든 파라미터를 관리하는 중앙 서버를 통해 gradient update를 동기화한다. 이러한 병렬 학습을 위해 우리는 **Adagrad [7]**라는 adaptive learning rate 절차를 사용하는 mini-batch asynchronous gradient descent를 활용한다. 이 프레임워크에서는 일반적으로 100개 이상의 모델 replica를 사용하며, 각 replica는 데이터 센터 내의 여러 머신에서 많은 CPU 코어를 활용한다.
3 New Log-linear Models
이 섹션에서는 계산 복잡도를 최소화하려는 단어의 분산 표현(distributed representation) 학습을 위한 두 가지 새로운 모델 아키텍처를 제안한다. 이전 섹션에서 얻은 주요 관찰은 대부분의 복잡성이 모델의 비선형 hidden layer에서 발생한다는 것이었다. 비선형 hidden layer는 신경망을 매우 매력적으로 만드는 요소이지만, 우리는 신경망만큼 데이터를 정밀하게 표현하지 못할 수도 있지만, 훨씬 더 효율적으로 많은 데이터에 대해 학습될 수 있는 더 간단한 모델을 탐색하기로 결정했다.
새로운 아키텍처는 우리의 이전 연구 [13, 14]에서 제안된 것들을 직접적으로 따른다. 해당 연구에서는 신경망 언어 모델(NNLM)이 두 단계로 성공적으로 학습될 수 있음이 밝혀졌다: 첫째, 간단한 모델을 사용하여 연속적인 단어 벡터(continuous word vector)를 학습하고, 둘째, 이러한 단어의 분산 표현 위에 N-gram NNLM을 학습하는 방식이다. 이후 단어 벡터 학습에 초점을 맞춘 상당한 양의 연구가 있었지만, 우리는 [13]에서 제안된 접근 방식을 가장 간단한 방법으로 간주한다. 관련 모델들은 훨씬 이전에도 제안된 바 있다 [26, 8].
3.1 Continuous Bag-of-Words Model
첫 번째로 제안된 아키텍처는 feedforward NNLM과 유사하며, 비선형 hidden layer가 제거되고 projection layer가 모든 단어에 대해 공유된다(단순히 projection matrix뿐만 아니라). 따라서 모든 단어는 동일한 위치로 projection된다(단어 벡터들이 평균화된다). 우리는 이 아키텍처를 bag-of-words model이라고 부르는데, 이는 history 내 단어의 순서가 projection에 영향을 미치지 않기 때문이다.
나아가, 우리는 미래 단어들도 사용한다. 다음 섹션에서 소개될 task에서 우리는 4개의 미래 단어와 4개의 history 단어를 입력으로 하는 log-linear classifier를 구축하여 최고의 성능을 얻었다. 여기서 학습 기준은 현재(중간) 단어를 올바르게 분류하는 것이다.
이때 학습 복잡도(training complexity)는 다음과 같다:
우리는 이 모델을 CBOW라고 부르는데, 이는 표준 bag-of-words model과 달리 context의 continuous distributed representation을 사용하기 때문이다. 모델 아키텍처는 Figure 1에 나타나 있다. 입력과 projection layer 사이의 가중치 행렬은 NNLM에서와 동일하게 모든 단어 위치에 대해 공유된다는 점에 주목하라.
3.2 Continuous Skip-gram Model
두 번째 아키텍처는 CBOW와 유사하지만, context를 기반으로 현재 단어를 예측하는 대신, 동일 문장 내의 다른 단어를 기반으로 해당 단어의 분류를 최대화하려고 시도한다.
더 정확히 말하면, 우리는 각 현재 단어를 continuous projection layer를 가진 log-linear classifier의 입력으로 사용하고, 현재 단어의 전후 특정 범위 내에 있는 단어들을 예측한다.
우리는 범위를 늘리면 결과적인 word vector의 품질이 향상되지만, 계산 복잡도 또한 증가한다는 것을 발견했다.
멀리 떨어진 단어들은 일반적으로 현재 단어와 가까운 단어들보다 관련성이 적기 때문에, 학습 예시에서 해당 단어들을 덜 샘플링하여 멀리 떨어진 단어들에 더 적은 가중치를 부여한다.
이 아키텍처의 학습 복잡도는 다음과 같이 비례한다:
여기서 는 단어들의 최대 거리이다. 따라서 를 선택하면, 각 학습 단어에 대해 범위 내에서 무작위로 숫자 을 선택하고, 현재 단어의 이전 개 단어와 이후 개 단어를 올바른 레이블로 사용한다.
Figure 1: 새로운 모델 아키텍처. CBOW 아키텍처는 context를 기반으로 현재 단어를 예측하고, Skip-gram은 현재 단어가 주어졌을 때 주변 단어들을 예측한다.
이는 현재 단어를 입력으로, 개의 각 단어를 출력으로 하여 번의 단어 분류를 수행해야 한다. 다음 실험에서는 을 사용한다.
4 Results
단어 벡터의 품질 비교
이전 논문들은 일반적으로 단어 예시와 가장 유사한 단어들을 표로 보여주며 직관적으로 이해하는 방식을 사용했다.
'France'가 'Italy' 및 다른 국가들과 유사하다는 것을 보여주는 것은 쉽지만, 다음과 같이 더 복잡한 유사성 task에 벡터를 적용할 때는 훨씬 더 어렵다.
우리는 단어들 사이에 여러 다른 유형의 유사성이 존재할 수 있다는 이전 관찰을 따른다. 예를 들어, 'big'이 'bigger'와 유사한 방식과 동일하게 'small'은 'smaller'와 유사하다. 또 다른 관계 유형의 예시로는 'big' - 'biggest'와 'small' - 'smallest'와 같은 단어 쌍이 있을 수 있다 [20].
우리는 동일한 관계를 가진 두 단어 쌍을 질문으로 표현할 수 있다. 예를 들어, "biggest가 big과 유사한 방식과 동일하게 small과 유사한 단어는 무엇인가?"와 같이 질문할 수 있다.
놀랍게도, 이러한 질문들은 단어의 벡터 표현에 간단한 대수 연산을 수행함으로써 답변될 수 있다. 'biggest'가 'big'과 유사한 방식과 동일하게 'small'과 유사한 단어를 찾기 위해, 우리는 단순히 벡터 vector("biggest") - vector("big") + vector("small")을 계산할 수 있다. 그런 다음, cosine distance로 측정하여 에 가장 가까운 단어를 벡터 공간에서 검색하고, 이를 질문에 대한 답변으로 사용한다 (이 검색 과정에서 입력 질문 단어들은 제외한다). 단어 벡터가 잘 학습되었다면, 이 방법을 사용하여 정답(단어 'smallest')을 찾을 수 있다.
마지막으로, 우리는 대량의 데이터로 고차원 단어 벡터를 학습시켰을 때, 결과 벡터가 **도시와 해당 국가 간의 관계(예: France는 Paris에, Germany는 Berlin에 해당)**와 같이 단어들 간의 매우 미묘한 의미론적 관계에 답하는 데 사용될 수 있음을 발견했다. 이러한 의미론적 관계를 포함하는 단어 벡터는 기계 번역, 정보 검색, 질의응답 시스템과 같은 많은 기존 NLP 애플리케이션을 개선하는 데 사용될 수 있으며, 아직 발명되지 않은 미래의 다른 애플리케이션을 가능하게 할 수도 있다.
Table 1: Semantic-Syntactic Word Relationship 테스트 세트의 다섯 가지 의미론적(semantic) 유형과 아홉 가지 문법적(syntactic) 유형 질문 예시.
| Type of relationship | Word Pair 1 | Word Pair 2 | ||
|---|---|---|---|---|
| Common capital city All capital cities Currency City-in-state Man-Woman | Athens Astana Angola Chicago brother | Greece Kazakhstan kwanza Illinois sister | Oslo Harare Iran Stockton grandson | Norway Zimbabwe rial California granddaughter |
| Adjective to adverb Opposite Comparative Superlative Present Participle Nationality adjective Past tense Plural nouns Plural verbs | apparent possibly great easy think Switzerland walking mouse work | apparently impossibly greater easiest thinking Swiss walked mice works | rapid ethical tough lucky read Cambodia swimming dollar speak | rapidly unethical tougher luckiest reading Cambodian swam dollars speaks |
4.1 Task Description
단어 벡터의 품질을 측정하기 위해, 우리는 다섯 가지 유형의 semantic 질문과 아홉 가지 유형의 syntactic 질문을 포함하는 종합적인 테스트 세트를 정의한다. 각 카테고리별 두 가지 예시는 Table 1에 제시되어 있다. 전체적으로 8869개의 semantic 질문과 10675개의 syntactic 질문이 있다.
각 카테고리의 질문은 두 단계로 생성되었다:
첫째, 유사한 단어 쌍 목록을 수동으로 생성했다.
둘째, 두 단어 쌍을 연결하여 대규모 질문 목록을 형성했다.
예를 들어, 우리는 68개의 주요 미국 도시와 해당 주 목록을 만들고, 두 단어 쌍을 무작위로 선택하여 약 2.5K개의 질문을 형성했다. 우리는 테스트 세트에 단일 토큰 단어만 포함시켰으므로, 다중 단어 개체(예: New York)는 포함되지 않는다.
우리는 모든 질문 유형에 대한 전반적인 정확도와 **각 질문 유형별 정확도(semantic, syntactic)**를 개별적으로 평가한다. 질문은 위 방법으로 계산된 벡터에 가장 가까운 단어가 질문의 정답 단어와 정확히 일치하는 경우에만 올바르게 답변된 것으로 간주한다. 따라서 동의어는 오답으로 처리된다. 이는 현재 모델이 단어 형태(word morphology)에 대한 어떠한 입력 정보도 가지고 있지 않으므로, 100% 정확도에 도달하는 것이 사실상 불가능하다는 것을 의미한다. 그러나 우리는 특정 애플리케이션에서 단어 벡터의 유용성이 이 정확도 지표와 양의 상관관계를 가질 것이라고 믿는다. 특히 syntactic 질문의 경우, 단어 구조에 대한 정보를 통합함으로써 추가적인 발전을 이룰 수 있을 것이다.
4.2 Maximization of Accuracy
우리는 단어 벡터 학습을 위해 Google News 코퍼스를 사용했다. 이 코퍼스는 약 60억 개의 토큰을 포함한다. 우리는 어휘 크기를 가장 빈번하게 사용되는 100만 개의 단어로 제한했다.
분명히 우리는 시간 제약이 있는 최적화 문제에 직면해 있다. 더 많은 데이터를 사용하고 더 높은 차원의 단어 벡터를 사용할수록 정확도가 향상될 것으로 예상되기 때문이다.
가능한 한 빨리 좋은 결과를 얻기 위한 최적의 모델 아키텍처 선택을 추정하기 위해, 우리는 먼저 학습 데이터의 부분집합으로 학습된 모델들을 평가했으며, 이때 어휘는 가장 빈번한 3만 개의 단어로 제한했다.
CBOW 아키텍처를 사용하여 다양한 단어 벡터 차원과 증가하는 학습 데이터 양으로 얻은 결과는 Table 2에 나와 있다.
어느 시점 이후에는 차원을 더 추가하거나 학습 데이터를 더 추가해도 개선 효과가 감소하는 것을 볼 수 있다. 따라서 벡터 차원과 학습 데이터 양을 함께 늘려야 한다. 이 관찰이 사소해 보일 수 있지만, 현재 상대적으로 많은 양의 데이터로 단어 벡터를 학습하지만, 불충분한 크기(예: 50-100)의 벡터를 사용하는 것이 일반적이라는 점에 주목해야 한다.
Table 2: 제한된 어휘를 가진 CBOW 아키텍처의 단어 벡터를 사용하여 Semantic-Syntactic Word Relationship 테스트 세트의 부분집합에 대한 정확도. 가장 빈번한 3만 개의 단어를 포함하는 질문만 사용되었다.
| Dimensionality / Training words | 24 M | 49 M | 98 M | 196 M | 391 M | 783 M |
|---|---|---|---|---|---|---|
| 50 | 13.4 | 15.7 | 18.6 | 19.1 | 22.5 | 23.2 |
| 100 | 19.4 | 23.1 | 27.8 | 28.7 | 33.4 | 32.2 |
| 300 | 23.2 | 29.2 | 35.3 | 38.6 | 43.7 | 45.9 |
| 600 | 24.0 | 30.1 | 36.5 | 40.8 | 46.6 | 50.4 |
Table 3: 동일한 데이터로 학습된 모델과 640차원 단어 벡터를 사용한 아키텍처 비교. 정확도는 우리의 Semantic-Syntactic Word Relationship 테스트 세트와 [20]의 syntactic relationship 테스트 세트에서 보고되었다.
| Model Architecture | Semantic-Syntactic Word Relationship test set | MSR Word Relatedness Test Set [20] | |
|---|---|---|---|
| Semantic Accuracy [%] | Syntactic Accuracy [%] | ||
| RNNLM | 9 | 36 | 35 |
| NNLM | 23 | 53 | 47 |
| CBOW | 24 | 64 | 61 |
| Skip-gram | 55 | 59 | 56 |
Equation 4를 고려할 때, 학습 데이터 양을 두 배 늘리는 것은 벡터 크기를 두 배 늘리는 것과 거의 동일한 계산 복잡도 증가를 가져온다.
Table 2와 4에 보고된 실험을 위해 우리는 확률적 경사 하강법(stochastic gradient descent)과 역전파(backpropagation)를 사용하여 3번의 학습 epoch를 사용했다. 우리는 초기 학습률을 0.025로 설정하고, 마지막 학습 epoch가 끝날 때 0에 가까워지도록 선형적으로 감소시켰다.
4.3 Comparison of Model Architectures
먼저, 동일한 학습 데이터와 640차원의 word vector를 사용하여 word vector를 도출하는 다양한 모델 아키텍처를 비교한다. 이후 실험에서는 새로운 Semantic-Syntactic Word Relationship test set의 전체 질문 세트(즉, 30k 어휘에 제한되지 않음)를 사용한다. 또한, [20]에서 소개된 구문적 유사성(syntactic similarity)에 초점을 맞춘 test set에 대한 결과도 포함한다.
학습 데이터는 여러 LDC 코퍼스로 구성되며, [18]에 자세히 설명되어 있다 (3억 2천만 단어, 8만 2천 어휘). 우리는 이 데이터를 사용하여 단일 CPU에서 학습하는 데 약 8주가 걸렸던 기존의 recurrent neural network language model (RNNLM)과 비교하였다. 우리는 DistBelief 병렬 학습 [6]을 사용하여 640개의 hidden unit을 가진 feedforward NNLM을 학습시켰으며, 이전 8개 단어의 history를 사용하였다 (따라서 NNLM은 projection layer의 크기가 이므로 RNNLM보다 더 많은 파라미터를 가진다).
Table 3에서 볼 수 있듯이, RNN에서 파생된 word vector ([20]에서 사용된 것)는 주로 구문적 질문에서 좋은 성능을 보인다. NNLM vector는 RNN보다 훨씬 더 나은 성능을 보이는데, 이는 RNNLM의 word vector가 비선형 hidden layer에 직접 연결되어 있기 때문에 놀라운 결과는 아니다. CBOW 아키텍처는 구문적 task에서 NNLM보다 더 나은 성능을 보이며, 의미적 task에서는 거의 동일한 성능을 보인다. 마지막으로, Skip-gram 아키텍처는 구문적 task에서 CBOW 모델보다 약간 낮은 성능을 보이지만 (여전히 NNLM보다는 우수함), test set의 의미적 부분에서는 다른 모든 모델보다 훨씬 더 나은 성능을 보인다.
다음으로, 우리는 단일 CPU만을 사용하여 학습된 모델들을 평가하고, 그 결과를 공개적으로 사용 가능한 word vector들과 비교하였다. 비교 결과는 Table 4에 제시되어 있다. CBOW 모델은 Google News 데이터의 하위 집합에서 약 하루 만에 학습되었으며, Skip-gram 모델의 학습 시간은 약 3일이었다.
Table 4: Semantic-Syntactic Word Relationship test set에서 공개적으로 사용 가능한 word vector와 우리 모델의 word vector 비교. 전체 어휘가 사용됨.
| Model | Vector Dimensionality | Training words | Accuracy [%] | ||
|---|---|---|---|---|---|
| Semantic | Syntactic | Total | |||
| Collobert-Weston NNLM | 50 | 660 M | 9.3 | 12.3 | 11.0 |
| Turian NNLM | 50 | 37M | 1.4 | 2.6 | 2.1 |
| Turian NNLM | 200 | 37M | 1.4 | 2.2 | 1.8 |
| Mnih NNLM | 50 | 37M | 1.8 | 9.1 | 5.8 |
| Mnih NNLM | 100 | 37M | 3.3 | 13.2 | 8.8 |
| Mikolov RNNLM | 80 | 320 M | 4.9 | 18.4 | 12.7 |
| Mikolov RNNLM | 640 | 320 M | 8.6 | 36.5 | 24.6 |
| Huang NNLM | 50 | 990 M | 13.3 | 11.6 | 12.3 |
| Our NNLM | 20 | 6 B | 12.9 | 26.4 | 20.3 |
| Our NNLM | 50 | 6B | 27.9 | 55.8 | 43.2 |
| Our NNLM | 100 | 6B | 34.2 | 64.5 | 50.8 |
| CBOW | 300 | 783M | 15.5 | 53.1 | 36.1 |
| Skip-gram | 300 | 783 M | 50.0 | 55.9 | 53.3 |
Table 5: 동일한 데이터로 3 epoch 학습된 모델과 1 epoch 학습된 모델 비교. 전체 Semantic-Syntactic 데이터셋에 대한 정확도(Accuracy)가 보고됨.
| Model | Vector Dimensionality | Training words | Accuracy [%] | Training time [days] | ||
|---|---|---|---|---|---|---|
| Semantic | Syntactic | Total | ||||
| 3 epoch CBOW | 300 | 783 M | 15.5 | 53.1 | 36.1 | 1 |
| 3 epoch Skip-gram | 300 | 783 M | 50.0 | 55.9 | 53.3 | 3 |
| 1 epoch CBOW | 300 | 783 M | 13.8 | 49.9 | 33.6 | 0.3 |
| 1 epoch CBOW | 300 | 1.6 B | 16.1 | 52.6 | 36.1 | 0.6 |
| 1 epoch CBOW | 600 | 783 M | 15.4 | 53.3 | 36.2 | 0.7 |
| 1 epoch Skip-gram | 300 | 783 M | 45.6 | 52.2 | 49.2 | 1 |
| 1 epoch Skip-gram | 300 | 1.6 B | 52.2 | 55.1 | 53.8 | 2 |
| 1 epoch Skip-gram | 600 | 783 M | 56.7 | 54.5 | 55.5 | 2.5 |
이후 보고되는 실험에서는 단 하나의 학습 epoch만 사용하였다 (다시 말하지만, 학습률은 학습이 끝날 때 0에 가까워지도록 선형적으로 감소시킨다). Table 5에서 보여지듯이, 동일한 데이터를 3 epoch 반복하는 것보다 2배 많은 데이터로 1 epoch 학습하는 것이 비슷하거나 더 나은 결과를 제공하며, 추가적인 작은 속도 향상도 얻을 수 있다.
4.4 Large Scale Parallel Training of Models
앞서 언급했듯이, 우리는 DistBelief라는 분산 프레임워크에서 다양한 모델을 구현했다. 아래에서는 Google News 6B 데이터셋으로 학습된 여러 모델의 결과를 보고한다. 이 모델들은 mini-batch asynchronous gradient descent와 **Adagrad [7]**라는 adaptive learning rate 절차를 사용하여 학습되었다. 학습 중에는 50개에서 100개의 모델 replica를 사용했다. CPU 코어 수는 데이터 센터 머신이 다른 프로덕션 task와 공유되므로 사용량이 상당히 변동될 수 있어 추정치이다. 분산 프레임워크의 오버헤드 때문에 CBOW 모델과 Skip-gram 모델의 CPU 사용량은 단일 머신 구현보다 훨씬 더 가깝다는 점에 유의해야 한다. 결과는 Table 6에 보고되어 있다.
Table 6: DistBelief 분산 프레임워크를 사용하여 학습된 모델 비교. 1000차원 벡터를 사용하는 NNLM의 학습은 완료하는 데 너무 오래 걸릴 것이다.
| Model | Vector Dimensionality | Training words | Accuracy [%] | Training time [days x CPU cores] | ||
|---|---|---|---|---|---|---|
| Semantic | Syntactic | Total | ||||
| NNLM | 100 | 6B | 34.2 | 64.5 | 50.8 | |
| CBOW | 1000 | 6B | 57.3 | 68.9 | 63.7 | |
| Skip-gram | 1000 | 6B | 66.1 | 65.1 | 65.6 |
Table 7: Microsoft Sentence Completion Challenge에서의 모델 비교 및 조합.
| Architecture | Accuracy [%] |
|---|---|
| 4-gram [32] | 39 |
| Average LSA similarity [32] | 49 |
| Log-bilinear model [24] | 54.8 |
| RNNLMs [19] | 55.4 |
| Skip-gram | 48.0 |
| Skip-gram + RNNLMs |
4.5 Microsoft Research Sentence Completion Challenge
Microsoft Sentence Completion Challenge는 최근 언어 모델링 및 기타 NLP 기술 발전을 위한 task로 소개되었다 [32]. 이 task는 1040개의 문장으로 구성되어 있으며, 각 문장에는 하나의 단어가 빠져 있고, 목표는 다섯 가지 합리적인 선택지 중에서 문장의 나머지 부분과 가장 일관성 있는 단어를 선택하는 것이다.
N-gram 모델, LSA 기반 모델 [32], log-bilinear 모델 [24]을 포함한 여러 기술의 성능이 이미 이 데이터셋에서 보고되었으며, 현재 recurrent neural network의 조합이 이 벤치마크에서 55.4%의 정확도로 state-of-the-art 성능을 기록하고 있다 [19].
우리는 이 task에서 Skip-gram 아키텍처의 성능을 탐구했다.
먼저, [32]에서 제공된 5천만 단어 데이터로 640차원 모델을 학습시킨다.
그 다음, 입력으로 알 수 없는 단어를 사용하여 문장 내의 모든 주변 단어를 예측함으로써 테스트 세트에 있는 각 문장의 점수를 계산한다.
최종 문장 점수는 이러한 개별 예측들의 합계이다. 이 문장 점수를 사용하여 가장 가능성이 높은 문장을 선택한다.
일부 이전 결과와 새로운 결과를 요약한 내용은 Table 7에 제시되어 있다.
Skip-gram 모델 자체는 이 task에서 LSA 유사도보다 더 나은 성능을 보이지 않지만, 이 모델의 점수는 RNNLM으로 얻은 점수와 상호 보완적이며, 가중 조합을 통해 새로운 state-of-the-art 결과인 58.9%의 정확도를 달성했다 (개발 세트에서는 59.2%, 테스트 세트에서는 58.7%).
5 Examples of the Learned Relationships
Table 8은 다양한 관계를 따르는 단어들을 보여준다. 우리는 위에서 설명한 접근 방식을 따른다: 두 단어 벡터를 빼서 관계를 정의하고, 그 결과를 다른 단어에 더한다. 예를 들어, Paris - France + Italy = Rome과 같다. 보시다시피, 정확도는 상당히 좋지만, 분명히 더 많은 개선의 여지가 있다. (정확한 일치를 가정하는 우리의 정확도 측정 기준을 사용하면, Table 8의 결과는 약 60%에 불과할 것이다.) 우리는 더 큰 차원과 더 큰 데이터셋으로 학습된 단어 벡터가 훨씬 더 나은 성능을 보일 것이며, 새롭고 혁신적인 애플리케이션 개발을 가능하게 할 것이라고 믿는다. 정확도를 향상시키는 또 다른 방법은 관계의 예시를 하나 이상 제공하는 것이다. 관계 벡터를 형성하기 위해 하나 대신 10개의 예시를 사용함으로써 (개별 벡터들을 평균하여), 우리의 최고 모델의 정확도가 semantic-syntactic test에서 약 10% 절대적으로 향상되는 것을 관찰했다.
Table 8: Table 4의 최고 word vector (300차원으로 7억 8,300만 단어에 대해 학습된 Skipgram 모델)를 사용한 단어 쌍 관계의 예시.
| Relationship | Example 1 | Example 2 | Example 3 |
|---|---|---|---|
| France - Paris big - bigger | Italy: Rome small: larger | Japan: Tokyo cold: colder | Florida: Tallahassee quick: quicker |
| Miami - Florida | Baltimore: Maryland | Dallas: Texas | Kona: Hawaii |
| Einstein - scientist | Messi: midfielder | Mozart: violinist | Picasso: painter |
| Sarkozy - France | Berlusconi: Italy | Merkel: Germany | uranium: plutonium |
| Berlusconi - Silvio | Sarkozy: Nicolas | Putin: Medvedev | Obama: Barack |
| Microsoft - Windows | Google: Android | IBM: Linux | Apple: iPhone |
| Microsoft - Ballmer | Google: Yahoo | IBM: McNealy | Apple: Jobs |
| Japan - sushi | Germany: bratwurst | France: tapas | USA: pizza |
벡터 연산을 사용하여 다른 task를 해결하는 것도 가능하다. 예를 들어, 우리는 단어 목록의 평균 벡터를 계산하고 가장 먼 단어 벡터를 찾아 목록에서 벗어난 단어를 선택하는 데 좋은 정확도를 관찰했다. 이는 특정 인간 지능 테스트에서 인기 있는 유형의 문제이다. 분명히, 이러한 기술을 사용하여 아직 발견할 것이 많이 남아 있다.
6 Conclusion
본 논문에서는 다양한 모델을 통해 얻은 단어의 벡터 표현(vector representation) 품질을 여러 구문(syntactic) 및 의미(semantic) 언어 task에서 연구했다. 우리는 인기 있는 신경망 모델(feedforward 및 recurrent 모두)에 비해 매우 간단한 모델 아키텍처를 사용해서도 고품질의 단어 벡터를 학습할 수 있음을 확인했다.
계산 복잡도가 훨씬 낮기 때문에, 훨씬 더 큰 데이터셋으로부터 매우 정확한 고차원 단어 벡터를 계산하는 것이 가능하다. DistBelief 분산 프레임워크를 사용하면, CBOW 및 Skip-gram 모델을 1조 단어 규모의 코퍼스에서도 학습시킬 수 있으며, 이는 사실상 무제한적인 어휘 크기를 처리할 수 있음을 의미한다. 이는 유사한 모델에 대해 이전에 발표된 최고 결과보다 수십 배 더 큰 규모이다.
단어 벡터가 최근 기존 state-of-the-art를 크게 능가하는 것으로 나타난 흥미로운 task는 SemEval-2012 Task 2 [11]이다. 공개적으로 사용 가능한 RNN 벡터는 다른 기술들과 함께 사용되어 이전 최고 결과 [31] 대비 Spearman의 순위 상관관계에서 50% 이상의 향상을 달성했다. 신경망 기반 단어 벡터는 이전에 **감성 분석 [12] 및 paraphrase detection [28]**과 같은 많은 다른 NLP task에 적용되었다. 본 논문에서 설명된 모델 아키텍처가 이러한 응용 분야에 도움이 될 것으로 기대된다.
우리의 현재 진행 중인 연구는 단어 벡터가 Knowledge Base의 사실을 자동으로 확장하고, 기존 사실의 정확성을 검증하는 데 성공적으로 적용될 수 있음을 보여준다. 기계 번역 실험 결과 또한 매우 유망해 보인다. 앞으로 우리의 기술을 Latent Relational Analysis [30] 및 다른 기술들과 비교하는 것도 흥미로울 것이다. 우리는 우리의 포괄적인 테스트 세트가 연구 커뮤니티가 단어 벡터를 추정하는 기존 기술을 개선하는 데 도움이 될 것이라고 믿는다. 또한 고품질 단어 벡터가 미래 NLP 응용 프로그램의 중요한 구성 요소가 될 것으로 기대한다.
7 Follow-Up Work
본 논문의 초기 버전이 작성된 후, 우리는 continuous bag-of-words 및 skip-gram 아키텍처를 모두 사용하여 단어 벡터를 계산하는 단일 머신 멀티스레드 C++ 코드를 공개했다. 학습 속도는 본 논문에서 이전에 보고된 것보다 훨씬 빠르며, 즉 일반적인 하이퍼파라미터 선택 시 시간당 수십억 단어 수준이다. 또한, 우리는 1,000억 개 이상의 단어로 학습된 140만 개 이상의 명명된 개체(named entities) 벡터를 공개했다. 우리의 후속 연구 중 일부는 다가오는 NIPS 2013 논문 [21]에서 발표될 예정이다.