0. Reference
https://nlp.stanford.edu/pubs/glove.pdf
1. Introduction
- 대부분의 word vector를 embedding할 땐, norm이나 cosine similarity 등의 intrinsic quality를 평가하게 된다.
- 단순히 거리 대신, 벡터 간 structure of difference를 평가하면 더 품질이 좋지않을까?
" king - queen ~ man - woman"
- 즉, word간의 다양한 dimensions of meaning을 잘 표현하고 있는지를 평가하면 더 품질이 좋지않을까?
- 우선 word vector를 학습하는 방법은 크게 두 가지로 나뉜다.
i) Global Matrix Factorization(ex, Latent Semantic Analysis(LSA))
ii) Local Context Window (ex, Skip-gram)
- LSA 같은 경우, intrinsic quality엔 유리하지만, dimension of meaning을 잘 표현하진 못하고,
- Skip-gram은 dimension of meaning엔 유리하지만, intrinsic quality엔 불리하다고 한다.
- 여기서 GloVe의 아이디어가 나오게 된다.
- global한 co-occurrence matrix를 활용하되,
- dimensions of meaning을 잘 보존하도록 설계하는 것이다.
2. GloVe
- 본격적으로 GloVe에 대해서 알아보자.
- 우선 Co-occurence Matrix에 대해 알아보자.
2.1.Co-occurence Matrix
- Co-occurence matrix는 어떤 단어 A가 등장할 때, 주변에 어떤 단어 B가 함께 얼마나 자주 등장하는가?
- 를 행렬로 표현한 것을 의미한다.
- 다음과 같은 아주 작은 corpus를 갖고 있다고 가정해보자.
1. I like deep learning.
2. I like NLP.
3. I enjoy flying.
- 먼저, 등장하는 단어들을 정리해보자.
[ "i", "like", "deep", "learning", "nlp", "enjoy", "flying" ]
- 총 7개의 단어가 있으니, 7x7 짜리 Co-occurence matrix를 만들 수 있게 된다.
- Co-occurence matrix는 Symmetric matrix라는 것 기억해두자.
2.2. Co-occurence Probability
- Co-occurence Probability는 어떤 단어 i가 주어졌을 때, 주변에 단어 j가 등장할 확률을 의미한다.
- 즉, Co-occurence Matrix X의 정보를 Probability화한 값을 의미하게 된다.
- Co-occurence Probability는 다른 단어 쌍들과의 비율로 비교해서 의미를 파악할 수 있게 된다.
- 단어 간 의미적 관계는 Co-occurence probability를 통해 잘 포착된다고 한다.
ex)
- P(k|ice) vs P(k|steam)
- 만약 k가 solid라면,
- P(solid | ice) >> P(solid | steam)
- 만약 k가 gas라면,
- P(gas | ice) >> P(gas | ice)
- 즉, 두 단어가 어떤 단어들과 관련되어 있는지를 잘 나타낸다고 볼 수 있는 것이다.
2.3. GloVe Idea
- Glove의 Idea는 다음과 같다.
- "중심 단어 벡터와 이웃 단어 벡터의 내적"이 Corpus의 Co-occurence Probability이 같을것이다 라는 아이디어로 출발한다.
- 우선, wi,wj는 이웃단어벡터고, w_tilda(k)를 중심단어벡터라고 가정하자.
- F라는 함수를 다음과 같이 정의하자.
- 해당식을 잘 보면, wi,wj가 유사하면 1에 가까워 질것이고, 아니면 1과 멀어질것이다.
- 즉, wi와 wj의 차이와 관련이 있다고 생각 가능하다. 그래서 다음과 같이 함수의 parameter를 수정해줄수 있다.
- 여기서 한번더 생각해보자, 우변은 scalar고, 좌변은 두 벡터간의 연산이다.
- 두 벡터간의 연산이 scalar가 되려면, inner product를 하면 된다.
- 즉, 다음과 같이 표현이 가능할 것이다.
- F(wi^Twk - wj^Twk) = '' 와 같다.
- 근데, 우리가 바랬던 건, "중심 단어 벡터와 이웃 단어 벡터의 내적"이 Corpus의 Co-occurence Probability이 같을것이다.
- 즉, Pik 가 F(wi^Twk)와 같다면 위와 같은 가정이랑 유사해질것이다.
- 이를 만족하는 F는 e^x 가 있다. 따라서 다음과 같이 정리가 가능하다.
- i,k의 위치가 바뀌어도 식은 변함이 없어야 하므로, 다음과 같이 log(x_i)를 변환시켜주자.
- 즉, 두 값이 똑같길 바라는 것이기 때문에, Loss Function을 다음과 같이 작성이 가능하다.
- 여기서 f(Xij)는 weight function으로, 너무 많이 등장한 word를 조정해주는 역할을 하게 된다.