Search
Duplicate
📜

Efficient Estimation Of Word Representations In Vector Space (Word2Vec) (1)

Created
2022/02/02
Editor
Tags
NLP
논문 : Efficient Estimation Of Word Representations In Vector Space (Word2Vec) 저자 : Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean

논문 선정 배경

본 논문은 자연어처리 분야에서 Word2Vec 이라는 기법으로 알려진 모델을 제시한 저명한 논문입니다. 기법의 이름에서 유추할 수 있듯이, 각 단어의 의미를 벡터에 대응하여 저장할 수 있고 각 벡터 사이의 덧셈과 뺄셈으로 의미에 대한 연산처리를 통해 원하는 의미의 단어를 찾을 수 있다는 점이 흥미로웠습니다. 이 방식은 기존의 neural network 모델들로 처리하기 어려웠던 “단어의 의미”를 기계에게 학습시키고, 기계가 의미를 이해할 수 있게 만든다는 점에서 큰 의의가 있다고 보았습니다. 이에, Word2Vec 기법과 기계의 훈련을 위해 제시된 두 가지 모델인 CBOW, Skip-gram에 대해 알아보고자 본 논문을 선택하였습니다.

Introduction

2013년 이전의 NLP system과 기술들에서는 학습된 단어들 간의 연관성 없이 각각의 데이터로 존재하였습니다. 이런 단순한 모델들은 대량의 데이터를 학습하여 유의미한 성능 향상을 만들어낼 수 있으나, 실제 학습을 위한 데이터의 양이 제한되어있어 기술적인 발전을 하기는 어려웠습니다. 그러나 머신러닝 기술의 발전을 통해 더 복잡한 모델들의 정확도를 올릴 수 있게 되었습니다.
본 논문의 목표는 양질의 단어 벡터를 큰 data set 또는 vocabulary로부터 학습하는 방법을 소개하는 것입니다. 단어를 벡터로 표현하는 방식을 통해 유사한 의미의 단어가 근처에 위치할 뿐 아니라, multiple degrees of similarity(syntactic, semantic, phonetic 등의 분야의 feature를 공유)를 가질 수 있도록 만들어줍니다. vector(“서울”) - vector(“수도”) + vector(“일본”) 의 결과로 얻은 벡터와 가장 가까운 단어 벡터가 “도쿄”를 가리키는 방식으로, 단어 벡터의 연산이 단어 의미의 연산으로 가능하도록 새로운 모델 아키텍쳐를 구성하여 syntactic, semantic 영역에서 높은 정확도를 가질 수 있도록 하였습니다.

기존의 모델들

1. N-gram Language Model

일련의 단어가 주어졌을 때, 해당 단어들 뒤에 나올 단어를 통계적으로 추측하여 출력하는 모델입니다. 앞의 단어 중 최근 N개의 단어만을 사용하며, 사용하는 단어의 개수에 따라 unigram, bigram, trigram, 4-gram 등으로 이름이 붙습니다. 학습 코퍼스를 통해 단어들 뒤에 각 단어가 나올 확률을 계산하여 학습하고, 주어진 N개의 단어에 대하여 조건부 확률로 뒤에 등장할 가능성이 가장 높은 단어를 계산하여 결과로 출력하는 모델입니다.
장점
단어의 훈련과 추론 과정이 간단하고 큰 시스템에 쉽게 적용이 가능하다.
단점
과거의 사례를 기반으로 작동하기에 새로운 단어 조합에 대해 이해하지 못한다. (희소문제 - sparsity problem)
단어간의 유사도를 알지 못하기 때문에 근처의 단어만 참고하여 문장을 작성하므로 전체적인 문장의 구조와 맥락을 파악하기 힘들다.

2. NNLM

Neural Network Language Model 또는 Feedforward Neural Language model은 워드 임베딩을 통해 단어 간의 유사도를 기계에게 학습시켜, 훈련에 없던 단어의 순서에 대해 보다 정확한 예측이 가능하도록 한 개선된 모델입니다. N-gram 처럼 N개의 단어를 이용해 단어를 예측합니다. 주어진 단어에 대해 매핑된 임베딩 벡터에 대해 연결 연산하여 hidden layer로 전달하면 hidden layer에서 가중치를 곱해 출력층으로 보내고, 출력층에서 또다른 가중치와 곱해진 뒤 가장 결과치가 큰 값에 해당하는 단어를 출력하는 모델입니다. 학습 코퍼스의 정답과 얻어낸 결과 간의 차이에 대해 역전파가 이루어지며 지나온 가중치 행렬들과 임베딩 벡터의 값이 조정되며 학습합니다.
장점
NNLM은 과거에 등장하지 않은 단어의 조합에도 충분히 대응할 수 있다. (희소문제-sparsity problem-의 해결)
단점
문장 앞은 생략한 채, 근처의 N개의 단어만 고려할 수 있다.
N-gram에 비해 훨씬 더 많은 연산을 필요로 하며 이 때문에 성능이 느리다.

3. RNNLM

Recurrent Neural Network Lauguage Machine은 projection layer를 제거한 NNLM에서 hidden layer의 출력이 다시 입력으로 들어오는 형식으로 모델을 구성됩니다. Reccurent 부분이 일종의 단기저장공간으로 작동하면서 이전 단어들을 체크하는 역할을 수행하기 때문에, NNLM처럼 window size(N개의 단어)를 정해주지 않아도 이전의 단어들을 활용하여 결과를 출력할 수 있습니다.
장점
RNNLM은 NNLM보다 연산량이 적기 때문에, 계산 속도가 비교적 빠르다.
단점
많은 양의 데이터를 학습하기에는 여전히 느린 속도를 보인다.
벡터를 이용한 모델 아키텍처는 과거에도 여러번 등장했지만, 처리 성능 개선과 느린 학습 속도의 개선을 위해 더 나은 기술과 아키텍처를 필요로 하였고, 이에 대한 해결책으로 제시한 것이 본 논문에서 소개하는 word2vec 기법입니다. 이를 구현하기 위한 아키텍처 모델로, CBOW 모델Skip-gram 모델을 제시하였습니다.

Model Architectures

Distributed representation

희소 표현(Sparse Representation)
e.g. 10000개의 단어 중 ‘강아지’가 4번째 단어라면?(0부터 시작)
강아지 = [0 0 0 0 1 0 0 ... 중략 ... 0}
표현하고자 하는 단어의 인덱스 값만 1이고 나머지는 0으로 표현하여 벡터 또는 행렬의 값이 대부분 0으로 표현되는 방식
one-hot vector / 1-of-V vector (* V : Vocabulary의 전체 단어 수)
해당 표현은 각 단어 벡터간의 유사성을 표현할 수 없습니다.
분산 표현(Distributed representation)
e.g. 강아지 = [0.2 0.3 0.5 0.7 0.2 ... 중략 ... 0.2]
단어의 의미를 다차원 공간에 분산하여 벡터화 시키는 방식
분산표현을 이용하여 단어 간의 의미적 유사성을 벡터화 하는 것을 word embedding이라 하고, 해당 논문에서는 neural net을 학습시키기 위해 분산 표현을 사용합니다.

Computational Complexity

여러 architecture를 비교하기에 앞서, 계산복잡도(모델을 완전히 학습시키는데 쓰이는 파라미터 수)를 정의해야합니다. 해당 논문에서는 계산복잡도를 아래와 같이 정의하고 있습니다.
O=E×T×QO = E × T × Q
E : 학습 시 epoch 수 (3 ~ 50)
T : Training set에 있는 단어 수 (~1,000,000,000)
Q : 추후에 모델 architecture에 의해 결정되는 부분

Continuous Bag Of Words

주변(맥락)의 단어들로 중간(중심)의 단어를 예측합니다. 중심단어를 예측하기 위해 주변 단어를 어느정도까지 이용할 것인지(window size) 결정하여 모델의 input으로 입력합니다. window size를 n이라 하면, 실제로 예측에 쓰이는 주변 단어의 개수는 2n개가 됩니다.
해당 architecture는 feedforward NNLM과 유사하지만, hidden layer가 제거되면서, projection layer가 모든 단어들과 공유됩니다. 또한, 전체 word vector의 평균값(bag-of-words)을 사용하기 때문에 단어의 순서가 projection에 영향을 주지 않습니다. 마지막으로 해당 모델은 연속적인 context를 이용하기 때문에 CBOW (Continuous Bag-of-words) 라는 표현을 사용하였습니다.
input : 예측에 이용할 2n개의 주변단어 1-of-V 벡터
output label : 예측하고자 하는 중간단어의 1-of-V 벡터
training complexity Q = N x D + D x log(V)
N : 이전 단어의 개수
D : vector의 차원
V : Vocabulary 내 전체 단어 수
e.g. The fat cat sat on the mat. → [‘The’, ‘fat’, ‘cat’, ‘on’, ‘the’, ‘mat’]으로 ‘sat’을 예측해보자
‘sat’ : 중심(center) 단어
[‘The’, ‘fat’, ‘cat’, ‘on’, ‘the’, ‘mat’] : 주변(context) 단어
먼저 윈도우를 옆으로 옮겨가며(sliding window) 중심단어와 주변 단어를 변경해 나가면서 학습에 이용할 데이터셋을 구성합니다.
Model에 주변 vector가 입력으로 들어가면서 WVMW_{V*M}과 곱해진 4개의 임베딩 벡터에 대하여 평균 값을 계산하여 projection layer로 전달되고,해당 벡터가 다시 WVMW'_{V*M}와 곱해지면서 output layer로 전달됩니다. 이 벡터에 softmax를 적용한 결과 벡터와 target label 사이의 cross-entropy 값을 loss function으로 이용합니다.
우리가 원하는 타깃 단어의 원-핫 벡터는 (0, 0, 0, 1, 0, 0, 0)입니다. 마지막에 softmax를 취해준 벡터가 (0, 0, 0, 1, 0, 0, 0)에 가까워져 cross-entropy값이 0에 가까워질 수 있도록 가중치 행렬 W, W’가 갱신됩니다.

Continuous Skip-gram Model

Continuous Skip-gram Model 은 CBOW과 input과 output이 반대입니다. 즉 CBOW에서는 주변 단어(before and after current word)를 통해 중심 단어(current word)를 예측했다면, Skip-gram은 중심 단어에서 주변 단어를 예측합니다.
input : 예측에 이용할 중간단어의 1-of-V 벡터
output label : 예측하고자 하는 2n개의 주변단어 1-of-V 벡터
training complexity Q = C x (D + D x log(V))
C : 단어의 최대 거리
D : vector의 차원
V : Vocabulary 내 전체 단어 수
예를 들어 "The fat cat sat on the mat" 이라는 문장에서 “sat”이라는 중심 단어를 log-linear classifier에 input으로 입력하면 “fat”, “cat”, “on”, “the” 의 output을 도출합니다. 중심 단어에 대해서 주변 단어를 예측하므로 projection layer에서 벡터들의 평균을 구하는 과정은 없습니다.
학습과정에서 범위를 증가시키면 word vector의 성능이 좋아지지만, 계산 비용이 증가합니다. 또한, 중심 단어와 멀리 떨어진 단어는 해당 단어와 관련이 있을 가능성이 낮기 때문에, 학습 단어에서 적은 샘플링 하는 방법을 통해 낮은 weight를 줍니다.
<1, C> 의 범위에서 랜덤하게 R(Window size)을 뽑고, 중심 단어 이전의 R개, 중심 단어 이후의 R개에 대해서 예측해 총 R+R =2R개의 word에 대해 예측하는 구조입니다.
Skip-gram과 기존의 방법인 NNLM, RNNLM를 비교했을 때, 단순한 구조로도 뛰어난 성능의 word vector를 학습할 수 있습니다.
이번 포스트에서는 Introduction, architecture에 대해서 살펴봤습니다. Word2Vec은 기존의 단어들 간 연관성 없이 각각의 데이터로 학습하는 방법의 한계를 극복하고, 단어 벡터를 큰 데이터 셋으로 부터 학습하는 것을 목표로 두가지 학습방식인 CBOW(Continuous Bag-of-words)와 Skip-gram을 제시했습니다.
다음 포스트에서는 Word2Vec의 CBOW와 Skip-gram를 사용한 결과 및 의의 그리고 코드구현을 소개하겠습니다.

다음 글 읽기