One-hot Encoding 이외에 단어를 Embedding 할 수 있는 방법 중 Word2Vec과 GloVe에 대해 소개
1. Word Embedding
단어의 Vector화로 좌표공간에 표현하는 것.
연관성에 따라 유사한 좌표공간에 배치된다.
1.1. Sparse Representation (희소 표현)
One-Hot Encoding 을 사용한 방법
vocab : {"Jone", "really", "loves", "this", "movie", "Jane", "likes", "song"}
{[1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0], ..., [0, 0, 0, 0, 0, 0, 0, 1]}
1.2. Dense(Distributed) Representations (밀집 표)
각각의 속성이 독립적인 차원(One-Hot)으로 나타내지 않게 된다. 대신 우리가 정한 갯수의 차원으로 대상을 대응 시켜 표현하게 된다. 예를 들어 5차원으로 표현하기로 한다면,
vocab : {"Jone", "really", "loves", "this", "movie", "Jane", "likes", "song"}
{[0.37, -2.11, 2.7, -0.11, 0.65]..., }
위와 같이 표현할 수 있을 것이다. 하지만 위 데이터에서는 여러 속성이 섞여 한 차원을 이루기 때문에 각 차원의 값이 무슨 의미를 가지는 지는 알 수 없다.
Sparse Representation 보다 가지는 장점은 아래와 같다.
고정된 차원으로 불필요한 메모리를 줄일 수 있다.
더 큰 일반화(Generalization)을 가지고 있다. 가령 '강아지'와 '멍멍이'가 서로 비슷한 벡터로 표현되면 '강아지'에 대한 정보가 '멍멍이'에도 일반화 될 수 있다.
위와 같이 단어를 밀집 벡터의 형태로 표현하는 방법을 워드 임베딩 이라고 하며, 그 결과를 임베딩벡터라고도 한다. Word2Vec과 GloVe는 워드 임베딩 방법 중 하나이다.
1.3. Word2Vec 🎇
구글에서 개발한 Word2Vec은 분포 가설(Distributional Hypothesis)을 가정하에 표현한 분산 표현을 따른다. 예를 들어 '강아지'라는 단어가 '귀엽다', '예쁘다' 등의 단어와 자주 발생한다면 분포가설에 맞춰 벡터화 한 해당 단어들은 되면 유사한 값, 근접한 위치에 분포할 것이고 그 단어들은 의미적으로 유사한 단어가 된다는 뜻이다. (인접한 단어들 간에 의미가 비슷할 것이다.)
간단한 인공신경망 모형을 기반으로 학습데이터의 규모가 10억 단어 이상으로 커져도 요구되는 계산량을 낮은 수준으로 유지 할 수 있다는 큰 장점을 가지고 있다. 이는 병렬화(parallelization)를 통해 짧은 시간에 양질의 단어 벡터 표상을 얻을 수 있기 때문이다.
1.3.1. Working Step
Sentence : "I study math"
Vacabulary : {"I", "study", "math"}
Input : "study" [0, 1, 0]
Output : "math" [0, 0, 1]
CBoW (Continuous Bag of Words)
주변에 있는 단어들로 중간에 있는 단어를 예측하는 방법
Window: 묶음 -> window size 3 ("I", "study") / ("study", "I"), ("study", "math") / ("math", "study")
예측 Task를 수행하는 2-Layer의 NN을 가지게 된다.
Input과 Output의 size 은 단어의 수와 동일하다 (여기서는 3개)
hidden layer의 node 수는 hyperparameter로써 word embedding을 수행하는 차원수와 동일하게 설정한다. (2로 세팅한다 해보자)
W1은 3차원의 Input을 받아서 2차원인 hidden layer로 보내기에 (3x2) Matrix가 되고, W2는 2차원의 hidden layer로 부터 3차원의 output을 구해야하므로 (2x3) Matrix가 된다. (실제 x와의 곱은 transpose 하여 곱해짐)
Softmax loss를 적용하여 W1,W2의 학습이 이루어 지게 된다.
Ground Truth (정답)에 해당하는 값은 inf, 아닌 값은 -inf 일 때, softmax의 결과가 ground truth의 결과와 가장 유사해 진다.
🎇 Skip-gram
CBoW와 반대로 중심단어를 보고 어떤 주변 단어가 존재하는지 예측하는 모델이다. 모델의 구성 또한 CBoW의 input과 output이 반대로 된 구성을 가지고 있다.
1.3.2. Word2Vec 시각
wevi: word embedding visual inspector
학습을 진행한 후에 보게 되면 Input의 juice가 drink의 output과 유사하게 나타남을 알 수 있고, 마찬가지로 drink에 속하는 milk의 input 또한 juice의 input과 유사함을 알 수 있다. 따라서 juice와 drink의 내적값이 최대가 될 것이다.
input vector와 output vector 중 어느것을 embedding vector로 사용해도 무관하나 보통 input vector를 embedding vector로 사용한다.
한국-서울 을 통해 도쿄가 입력되었을때, 일본을 출력할 수 있는 것을 확인할 수 있다.
1.3.3. Application of Word2Vec
Semantic lexicon building
등 다양한 Task에서 성능향상에 주된 역할을 하였다.
1.4. GloVe (Global Vectors for Word Representation)
각 입력, 출력 단어 쌍들에 대해서 학습데이터에서 한 윈도우 내에서 몇 번 동시에 출현하였는지를 사전에 먼저 계산을 한다.
input word의 embedding vector ui와 output word의 embedding vector vj의 내적값에서 한 윈도우내에서 두단어가 동시에 몇번 등장했는지에 대한 값에 log를 취한 값을 뺀 값을 Loss Function으로 사용한다.
J(θ)=21∑i,j=1Wf(Pij)(uiTvj−logPij)2
중복되는 계산을 줄여줄 수 있다는 장점을 가지고 있고, 보다 적은 데이터에 대해 나은 성능을 가질 수 있다.