[Efficient Estimation of Word Representations in Vector Space]
Introduction
[과거에는 ML기술이 높지 않아 간단한 모델(N-gram)로 많은 데이터를 학습 시키는 것이 유리하였음.]
많은 NLP 시스템과 기법들이 단어를 하나의 원자 단위로 보는 경향이 있다 - 단어를 index의 개념으로 표현하기 때문에 단어 사이의 유사도에 대한 개념이 없다. 이러한 방식은 단순함, 강건함 그리고 많은 양의 데이터로 간단한 모델을 구현한 것이 적은 데이터로부터의 복잡한 모델을 능가하였기 때문에 사용되왔다. N-gram 모델이 그 예시. 논문 당시, N-gram 모델을 가능한 모든 데이터에 적용하는 것이 가능했다.
[하지만 몇몇 테스크에서는 데이터 부족으로 인해 간단한 모델은 한계를 드러냄]
하지만, 간단한 기법의 경우, 많은 Task에서 한계가 존재했다. 예를 들면, 자동 음성 인식에서는 데이터가 부족하다. 높은 품질로 변환된 음성 데이터의 크기에 따라 성능이 결정 되는데, 주로 이는 백만 개 정도의 단어로만 구성되어 있다. 또한 기계 번역의 경우에도 몇 백만 개의 단어로만 구성되어 있어 간단한 방법론을 이용한 뒤 Scaling up하는 방식으로는 유의미한 성능 향상을 이뤄내지 못하였고, 이는 더 나은 방법론에 더 집중해야 할 이유를 대변한다.
[ML기법의 발전으로 간단한 방법을 극복할 방안이 존재 해짐]
최근의 ML 기법의 발전으로, 더 큰 데이터 셋에 더 복잡한 모델의 훈련이 가능해졌고, 간단한 모델에 비해 훨씬 뛰어난 성능을 보여주었다. 아마도 가장 성공적인 개념은 단어의 분포 가설을 이용하는 것인데, 예를 들면 neural network 기반의 언어 모델이 N-gram 모델을 훨씬 압도한다는 것이 그 예시가 된다.
Goals of the Paper
이 논문의 주요 목표는 수 십억 개의 단어 데이터 셋과, Vocabulary에 존재하는 수 백 만 개의 단어를 활용해 높은 퀄리티의 단어 벡터를 뽑아내는 모델을 학습 시키는 방법론을 제시하는 것이다.
논문이 나오기 이전, 몇 억 개의 단어들에 대해 50-100개의 단어 벡터를 얻어내는 성공적인 구조는 존재하지 않았다.
논문에서는 단어가 단순히 가까이 있는 단어에 더 유사함을 가지는 것 뿐만 아니라, 더 다양한 차원의 유사성이 존재할 수 있다는 기대를 갖고, 벡터 표현의 품질을 측정하는 기법을 제시했다. 이는 *굴절어의 맥락에서 이전에 관찰 된 바 있다.
*굴절어는 종합어의 한 유형으로, 문장 속의 문법적 기능에 따라 단어의 형태가 변화하는 언어이다. 한국어가 속해 있는 교착어와는 달리 어근과 접사의 구분이 명확하지 않다.
예를 들면 명사의 경우 여러 개의 어미가 존재할 수 있다. 그리고 원래의 벡터 공간의 subspace에서 비슷한 말들을 찾아보면 비슷한 어미를 가진 단어를 찾을 수 있다. (EX: big-biggest, small-smallest)
더 놀라운 것은, 단어 표현의 유사성이 간단한 문법적 규제를 넘어 존재한다는 것이다. 수학적 연산을 워드 벡터에 적용하였을 때, 벡터(King) - 벡터(Man) + 벡터(Woman) = 벡터(Queen) 이라는 결과가 나오기도 했다. (이는 단어간의 문법적 구조가 아닌 의미 관계를 학습했다고 볼 수 있음)
논문에서는 단어 간의 선형적 규칙성을 보존하여 (벡터 연산을 위해) 이러한 벡터 연산의 정확도를 최대화하는 방향으로 모델을 학습 시키려고 한다. 이를 위해 문법적, 의미론적 규제를 공통으로 측정할 수 있는 새로운 포괄적 Test 셋을 구성하였고 (향후 Result 부분에서 언급된다), 워드 벡터의 차원 크기와 학습되는 데이터의 양에 따라 어떻게 학습 시간과 정확도가 달라지는 지를 분석하려 하였다.
Previous Work
단어를 연속적인 벡터로 표현하고자 하는 것은 기존에 계속 수행되어 왔다. 가장 유명한 모델은 NNLM (feedforward neural network language model)이다. NNLM에서는 feedforward 신경망과 비선형 은닉층을 사용해 단어의 벡터 표현과 통계적 언어 모델을 적절히 학습 시키고자 하였다.
NNLM을 이용한 다른 흥미로운 구조는 word 벡터들이 하나의 Hidden 레이어를 이용해 먼저 학습된 뒤, 학습된 벡터를 이용해 NNLM에 학습되는 방식이다. 따라서 word vector가 전체 Full NNLM 구축 없이도 학습이 가능했다 (두 과정으로 나누어 학습함으로 이해하자). 이 연구로부터 논문의 저자는 이 구조 (2 step 으로 나누는 구조)를 더 확장시키고 첫 번째 Step에서 단어 벡터가 간단한 모델로부터 학습되는 부분에 초점을 맞췄다.
나중에 밝혀지길, 이러한 단어 벡터들은 여러 NLP 작업들의 성능을 향상 시키고 훨씬 간소화 시켰다. 과거 타 연구에서 단어 벡터를 추정하는 것 자체가 다양한 말뭉치나 모델의 종류에 따라 다르게 수행되었고, 이 중 몇 개의 단어 벡터의 경우 향후 연구들과의 비교를 위해 남겨진 것도 존재했다. 하지만 이러한 구조는 본 논문에서 사용된 diagonal 가중치 행렬이 사용된 log-bilinear 모델을 제외하고는 훨씬 연산적으로 복잡했다.
Model Architectures
단어의 연속적 representation을 추론하기 위해서 다양한 종류의 모델들이 제안되었다. (Latent Semantic Analysis (LSA) 나 Latent Dirichlet Allocation (LDA)) 이 논문에서는 신경망으로 학습된 단어의 분포적 표현에 포커스를 맞춘다. (이는 LSA보다 단어의 선형적 규제를 보존한다는 점에서 효과적이었으며, LDA 보다 연산적 Cost가 적었다.)
다른 모델 구조를 비교하기 위해서는 첫번째로 모델이 학습에 있어서 파라미터의 개수에 따른 연산 복잡도를 정의해야한다. 그 다음으로 연산 복잡도를 최소화하는 선에서 정확도를 높일 방법에 대해 생각해야한다.
앞으로 설명할 모든 모델에 대해서 학습 복잡도는 다음의 수식에 비례한다.
일반적으로 E = 3에서 50, T는 백만, 모든 모델은 SGD와 backpropation에 의해 학습이 진행된다.
Feedforward Neural Net Language Model (NNLM)
Probabilistic NNLM의 경우 입력, projection, 은닉층 그리고 출력층으로 구성된다. 입력층의 경우, N 개의 이전 단어들이 1-of-V coding으로 인코딩 되어 들어간다. (V는 vocabulary size) 그리고 난 후 입력층이 공유된 projection 행렬을 이용하여 Projection Layer P로 전사되며, N x D 차원을 갖게 된다. 한 번에 N개의 입력만이 활성화 되므로, projection layer에서 이뤄지는 연산은 비교적 라이트하게 이루어진다.
NNLM 구조가 복잡해 지는 시기는 projection과 은닉층 사이의 연산의 연산과정인데, 전사층이 dense 하기 때문이다. (주로 N을 10으로 잡는데, Projection 층인 P의 사이즈는 500에서 2000가량, 은닉층의 크기도 500에서 1000정도 되기 때문) 게다가 은닉층에서 Vocabulary에 있는 확률 분포를 학습시켜야 하니, 출력층 크기가 V가 되야하므로, 각 학습당 연산량은
위 수식이 된다. 가장 연산이 많은 부분은 H x V. 하지만 몇몇의 practical 한 방법이 이 문제를 회피하기 위해 제시되었다. 계층적 버전의 소프트맥스를 사용하거나, 학습중에 정규화 되지 않는 모델을 사용해 정규화된 부분을 피하는 방법이다. 어휘 표현을 이산트리 방식을 사용하면 출력층 사이즈를 log2(V)만큼 감소 시킬 수 있다. 따라서 복잡도의 대부분은 N X D x H 부분으로 볼 수 있게 된다.
논문에서의 모델에서는 계층적 Softmax방식을 사용하는데, 이는 어휘를 Huffman binary tree (허프만 부호화) 형태로 표현시킬 수 있다.
허프먼 부호화 (위키백과)
데이터 문자의 등장 빈도에 따라서 다른 길이의 부호를 사용하는 알고리즘이다.
간단히 말하면 등장 빈도가 낮을 수록 자주 꺼내야되니까 적은 비트를 할당하는 방법.
알고리즘
초기화 : 모든 기호를 출현 빈도수에 따라 나열한다.
단 한 가지 기호가 남을 때까지 아래 단계를 반복한다.
1. 목록으로부터 가장 빈도가 낮은 것을 2개 고른다.
2. 그 다음 허프먼이 두가지 기호를 부모 노드를 가지는 부트리를 구성하고 자식노드를 생성한다.
3.부모 노드 단 기호들의 빈도수를 더하여 주 노드에 할당하고 목록의 순서에 맞도록 목록에 삽입한다.
4. 목록에서 부모노드에 포함된 기호를 제거한다.
https://m.blog.naver.com/9594jh/221074856863
자세한 내용은 아래 블로그 참조.
이는 신경망 언어 모델에서 Class를 얻는 작업에 대해 빈도가 높은 단어가 더 잘 수행된다는 점에 기반된다. 허프만 트리는 짧은 이진 코드를 더 자주 등장하는 단어에 할당하여, 계산되어야할 출력층의 개수를 감소시킨다. 균등한 이진트리의 경우 log2(V)의 출력층이 계산되어져야 하는 반면에 허프만트리에 기반한 계층적 softmax 방식은 log2(Unigram_perplexity(V))만큼의 연산이 필요하다.
위의 Perplexity 의 w대신 Vocabulary가 들어간다고 생각하면 이해하기 편하다. 분명한 건 그냥 V보다는 확실히 작다는 것.
예를들면 Vocaubulary 크기가 백만개이면, 이는 연산속도를 2배정도 향상 시킬 수 있다. 이것이 신경망에서 N x D x H 부분 때문에 큰 차이를 만들어 내진 못하지만, 논문에서는 은닉층을 사용하지 않는 모델을 제시함으로서 방금 설명한 Softmax Normalization이 큰 영향을 준 것을 확인할 수 있다.
Recurrent Nerual Net Language Model (RNNLM)
순환 신경망 기반의 언어 모델은 NNLM의 한계를 극복하고자 제시되었다. context length 를 정의할 필요가 있다는 점에서 RNN이 일반적인 신경망 구조보다 복잡한 패턴을 효과적으로 표현할 수 있기 때문. RNN에는 projection 층이 없고 오직 입력, 은닉, 그리고 출력층으로 구성되어 있다. 이러한 종류의 모델의 특별한 점은, recurrent matrix (재귀 행렬)이 은닉층 서로를 연결하고, 시간에 따라 delay되는 연결을 사용한다는 것이다. 이러한 방식은 recurrent 모델이 단기기억과 같은 역할을 하게 된다.(과거의 정보가 은닉층에서 표현되면서 현재 입력과 은닉층에 기반해 업데이트 되므로)
RNN 모델의 복잡도는 다음과 같다.
단어의 벡터 표현인 D는 은닉층의 차원 H와 같아진다. 또 다시 H x V 부분은 계층적 소프트맥스의 활용으로 H x log2(V)로 효과적으로 감소되며, 대부분의 연산은 H x H에서 이루어진다.
Parallel Training of Neural Networks
모델을 큰 데이터 셋에서 학습시키기 위해, 논문에서는 DistBelief 라고 불리는 대규모 분산 프레임워크에 NNLM과 논문에서 제안된 모델을 포함해 적용시켰다. 이 프레임워크를 사용하면 같은 모델의 여러 복제본을 병렬적으로 학습시킬 수 있고, 각 복제본이 파라미터를 저장하고 있는 중앙 서버에 gradient 업데이트를 진행한다. 이러한 병렬 연산을 위해, 논문에서는 mini-batch 비동기화 gradient descent를 Adagrad와 함께 사용하였고, 이 프레임워크 상에서 여러 개의 CPU를 사용하는 100개 이상의 각각 다른 기계에서 학습하여 업데이트를 진행할 수 있었다.
New Log-linear Models
이 섹션에서는 단어의 분포를 학습하면서 연산량을 줄이는 두 개의 새로운 모델 구조를 제안한다. 이전 장에서 눈여겨봐야 했던 점은 비선형 은닉층에서 많은 연산이 발생했다는 점인데. 비록 이것은 신경망을 attractive하게 보이게 하지만, 논문에서는 더 간단한 모델로 신경망처럼 정확하게 표현하면서 많은 데이터에 효과적으로 적용할 방법이 있을 것이라고 생각했다.
새로운 구조는 논문 저자의 이전 연구를 따라서 만들어졌다. NNLM이 두개의 단계로 학습될 수 있다는 것이었는데, 먼저 연속적 단어벡터가 간단한 모델을 통해 학습이 이루어 진 뒤, N-gram NNLM이 학습된 단어 벡터에 다시 학습되는 것. 이 외에도 단어 벡터를 학습시키는 많은 연구가 있었으나, 이 방법이 가장 심플한 방법이라고 생각하였고, 관련 모델도 훨씬 일찍 제안되었으므로 이를 선택했다.
Continuous Bag-of-Words Model
처음으로 제안된 구조는 NNLM과 유사한 구조로, 비선형 은닉층을 빼고, 전사층이 모든 단어에 공유되는 것이다. 따라서 모든 단어는 같은 위치로 평균화되어 전사되며, 과거의 단어가 전사과정에 영향을 주지 않으므로 이 구조를 bag-of-words 모델이라고 정의했다. 나아가 논문에서는 미래의 단어 또한 사용했다; 논문에서는 4개의 미래, 4개의 과거 단어를 입력으로 사용하고, 현재 즉 중아의 단어를 분류하는 학습방식을 사용한 log-linear 분류기에서 가장 큰 성능을 발휘했다고 한다.
이 때 연산 복잡도는 아래 수식과 같다.
논문에서는 이러한 모델을 일반적인 bag-of-words모델에 비해 이는 연속적인 문맥의 분포 표현을 활용하므로, CBOW라고 정의했다. Projection 층이 모두 공유된다는 것을 확인하자.
Continuous Skip-gram Model
두 번째 구조는 CBOW모델과 유사하지만, 문맥에 따라 현재 단어를 예측하는 것이 아닌 같은 문장에 있는 다른 단어를 하나의 단어로 부터 분류하는 것을 Maximize 한다. 조금 더 정확하게 말하자면, 입력으로는 현재 단어를 연속적인 Projection 층에 넣고, 그 앞 뒤에 있는 단어를 예측한다. 논문에서는 주변 단어 개수를 늘릴 수록 단어 벡터의 성능이 좋아졌다고 한다. 하지만 반대 급부로 연산량 또한 증가한다. 주로 멀리 있는 단어일 수록 현재 단어와 연관성이 적기 때문에, 먼 단어일 수록 Trainiing 샘플에서 적게 뽑아 가중치를 적게 주는 방법을 사용했다.
이 구조의 학습 연산량은 다음에 비례한다.
여기서 C는 단어의 최대 거리를 의미한다. 따라서 만약 C를 5로 설정하게 되면 각 단어의 학습은 1:C 사이의 숫자 R 선택하고, R개의 단어를 앞뒤로 가져와 현재 단어의 정답으로 사용하게 된다. 따라서 R x 2개의 단어 분류를 진행하게 되고, 현재 단어를 입력으로 넣으면 앞뒤 R + R 개의 단어를 출력으로 내게 된다. 이후 실험에 따라 논문에서는 C = 10으로 설정하였다.
Results
단어 벡터가 잘 학습되었는지 평가하기 위해 이전 논문에서는 예시 단어와 가장 그 단어에 유사한 단어를 보여주고 직관적으로 이해하는 방식을 사용하였다. 프랑스가 이탈리아와 관련이 있고, 비록 몇몇 다른 나라와도 관련이 있겠지만, 복잡한 유사도 Task를 확인하는 것에는 더 어려움이 따랐다. 예를 들면 big이 bigger와 유사하고, small 이 smaller과 유사하다는 것. 혹은 big-biggest와 small-smallest의 관계가 있겠다. 그래서 논문에서는 "biggest 가 big와 유사한 것처럼 small과 유사한 단어는 뭐야?" 와같은 질문의 형식으로 이를 확인하고자 했다.
놀랍게도 이러한 질문들은 간단한 단어벡터의 수식적 연산으로 가능했다. 방금 언급한 질문을 확인하기 위해 X = 벡터('biggest') - 벡터 ('big') + 벡터('small')을 사용하였고, 이를 통해 얻어낸 벡터 결과값 X와 다른 단어들의 cosine 유사도를 바탕으로 결과값 X와 가장 유사한 단어를 최종 결과로 사용했다. 모든 단어가 잘 학습되었다면 이 방법으로 정확한 답 ('smallest') 를 찾을 수 있을 것이었다.
마지막으로 고차원 단어 벡터를 많은 양의 데이터로부터 학습시켜 얻으면서 결과값이 굉장히 미묘한 단어간의 의미론적 관계를 학습할 수 있다는 점 또한 알아냈다. 예를 들면 France와 Paris, 그리고 Germany 와 Berlin 처럼. 이러한 의미론적 정보를 내포하고 있는 단어벡터는 여러 NLP Task들에 적용될 수 있다. 기계번역이나 정보획득 그리고 Q/A 시스템 등.
논문에서는 위의 예시와 같은 의미론적, 문법적 단어쌍들을 이용해 test를 진행했고, Accuracy 향상을 위해 구글 뉴스와 같은 데이터를 최대한 많이 활용하였다. 추가로 더 많은 데이터를 사용하면 정확도를 더 높일 수 있을 것이라고 하였다.
'데이터 과학 스터디 > 논문 리뷰' 카테고리의 다른 글
[Pre-training of Deep Bidirectional Transformers for Language Understanding] BERT 논문 리뷰 (1) | 2023.02.16 |
---|---|
[NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE] Attention 논문 리뷰 (0) | 2023.02.16 |
[Transformer: Attention Is All You Need] 논문리뷰 (0) | 2022.11.09 |
[Generative Adversarial Nets] 논문 리뷰 (1) | 2022.09.28 |
[Fully Convolutional Networks for Semantic Segmentation] 논문 리뷰 (1) | 2022.09.22 |