NLP

Word Embedding

LYShin 2022. 12. 27. 18:13

- Word Embedding은 과거부터 오랫동안 자연어처리 분야에서 사용된 방법입니다.

- Word to Vector, Glove 등 조금 고전적인 방법과 BERT와 같은 인코딩 모델에 기반하여 임베딩하는 방법이 있습니다.

- 본 글에서는 Word Embedding에 대해 간략히 소개합니다.

 

 

 

1. Word Embedding

 

Word Embedding이란 자연어처리 분야에서 사용되는 단어 표현 방법입니다. 단어를 벡터로 매핑하는 방법이며, 이를 통해 단어가 가진 의미를 고정된 차원의 형태로 표현할 수 있습니다. 대표적으로 Word2Vec, Glove와 같은 약간은 고전적인 방법과 BERT와 같은 언어모델 기반으로 임베딩하는 방법이 있습니다. 

 

 

'Cat'이라는 단어가 나올 때 'Purrs'가 3만건, 'Dog'이라는 단어가 나올 때 'Purrs'라는 단어가 10건 나왔더면, 'Dog'과 'Purrs'보다는 'Cat'과 'Purrs'는 더 비슷한 단어, 혹은 연관이 있는 단어로 생각해야 할 것입니다. 따라서 'Dog'과 'Purrs'의 벡터간 거리보다 'Cat'과 'Purrs'의 벡터간 거리가 더 짧아야 합니다. Word2Vec와 GloVe는 모두 위의 아이디어에서 출발한 것으로 보입니다. 두 방법은 유사한 단어의 벡터는 가깝게, 다른 단어의 벡터는 멀도록 학습합니다.

본 글에서는 Word Embedding 방법 중 Word2Vec, GloVe에 대해 가볍게 알아보겠습니다.

 

 

 

2. Word2Vec

 

Word2Vec는 X개의 단어로 N개의 문장을 이루었다고 할 때 문장을 통해 단어의 거리를 학습합니다.

예를 들어, "I study math"라는 문장이 있습니다. Slice Window를 문장에 적용하여 (I, study), (study, I), (study, math) 등의 단어 페어를 만듭니다. (I, study)와 (study, I)를 구분하며 앞부분을 입력 단어, 뒷부분을 출력단어라고 합니다. 입력 단어로부터 출력 단어를 맞추는 신경망을 구성해 학습하고, \(W_1\)과 \(W_2\)의 평균, 혹은 \(W_1\)을 Vector로 사용합니다.

 

\(x_i\)는 입력 단어, \(y_i\)는 출력단어입니다. 입력층은 3차원, 은닉층은 2차원, 출력층은 3차원의 신경망을 구성했다고 가정합니다. 출력 단어 \(y\)는 입력 단어 \(x\)와 두 개의 가중값의 선형결합으로 표현됩니다.

입력 데이터는 'study' = [0, 1, 0] 이고 출력 데이터 'math' = [0, 0, 1]일 때 \(W_1\)의 열과 \(W_2\)의 행은 각 단어에 해당합니다. \(W_1\)의 두 번째 열은 'study'벡터이고, \(W_2\)의 세 번째 행은 'math'벡터입니다. \(softmax(W_2W_1x)\)가 [0, 0, 1]에 가까워야 하기 때문에 \(W_1\)의 'study'벡터와 \(W_2\)의 'math'벡터의 내적은 높은 값을 가져야 합니다.

 

 

 

3. GloVe

 

GloVe는 먼저 입력 단어와 출력단어가 동시에 등장한 횟수를 담은 행렬 S를 구성합니다. \(W_1\)과 \(W_2\)의 내적이 행렬S에 근사하도록 학습을 진행합니다. 목적함수를 자세히 살펴보면 \(f(P_{ij})\), \(u_i^Tv_j\), \(logP_{ij}\)로 이루어져 있는 것을 확인할수 있습니다. \(P_{ij}\)에 \(log\)를 취한 이유는 \(P_{ij}\)가 높을 값을 가질 때 너무 높은 값을 갖지 않도록 조정해주는 역할입니다. \(f(P_{ij})\)는 단어의 등장 횟수에 비례하여 가중값을 조정하는 것인데, 일정 등장 횟수까지는 비례하여 가중값을 크게 쓰고 일정 수준을 넘어서면 동일한 값을 사용하는 것입니다. \(u_i^Tv_j\)는 \(W_1\)과 \(W_2\)와의 내적을 의미합니다. GloVe는 학습속도가 빠르고 비교적 적은 문장을 사용할 경우에도 효과적으로 작동된다는 장점이 있습니다.

 

 

 

4. Word Embedding Similarity

 

마지막으로, Word Embedding을 적용하면 얻을 수 있는 재미있는 활용 방안에 대해 살펴보겠습니다. Word Embedding을 사용하여 만들어진 벡터는 단어의 의미를 가지고 있습니다. 따라서 이를 통해 어떤 단어 간 관계가 비슷하다면, 그 관계에 대한 벡터도 얻을 수 있습니다. 즉 같은 관계는 일관된 벡터로 나타난다는 것입니다. 예를 들어 'KING'이라는 단어와 'QUEEN'이라는 단어가 존재한다면, vec[QUEEN] - vec[KING] = vec[WOMEN] - vec[MAN]이 됩니다. 위의 그림을 통해 단어의 관계가 비슷하다면, 일관된 벡터를 갖는다는 것을 확인할 수 있습니다.