본문 바로가기
대학원 이야기/논문 리뷰

[논문 리뷰] GloVe: Global Vectors for Word Representation (수정 중) (2014 EMNLP)

by misconstructed 2020. 8. 26.
728x90

GloVe 에 대한 논문이다. 논문의 원본은 여기에서 볼 수 있다.


# Introduction

벡터 공간을 구성하는 단어 벡터는 다양한 분야에서 사용된 수 있다. 대부분의 단어 벡터들을 벡터들 사이의 거리 또는 각도를 이용해서 벡터의 성능을 평가한다. 최근에는 이러한 방법을 벗어나, 각 차원의 차이를 이용한 평가 방식이 제시되었다. 예를 들어, "king" - "queen" = "man" - woman" 과 같은 경우이다.

단어 벡터를 학습하는 방법은 크게 두 가지로 구분된다. 첫 번째로는 전체적인 통계 정보를 사용하는 Latent Semantic Analysis(LSA) 와 같은 방법이 있다. 해당 방식은 전체적인 통계를 효과적으로 사용할 수 있다는 장점이 있지만, word analogy에서는 성능을 내지 못한다는 단점이 있다.  두 번째로는 지정한 크기의 window 안에 위치하는 문맥을 파악하는 skip-gram 과 같은 방식이 있다. 해당 방식은 analogy task 에는 효과적으로 사용될 수 있지만, 지정한 window 내의 관계만 다루기 때문에 전체적인 통계를 사용하지 못한다는 단점이 있다. 

이번 논문에서는 global word-word-co-occurrence count 를 이용한 weighted least squares model을 소개한다. 해당 모델을 유의미한 벡터 공간을 생성하고, word analogy dataset 에서 state-of-the-art 인 75%의 정확도를 제공한다. 또한, word similarity task와 NER 에서도 기존의 성능을 뛰어넘는 것을 보인다.

# Related Work

 

# The GloVe Model

전체 corpus에 대한 통계적인 정보를 모두 담고 있는 모델 GloVe를 소개한다. 소개를 진행하기 전제, 몇 가지 표기법을 정의한다.

  • $ X $ : matrix of word-word-co-occurrence counts
  • $ X_{ij} $ : i 라는 단어가 존재하는 문맥에서 j 라는 단어가 나타난 횟수
  • $ X_i $ : i 라는 단어가 존재하는 모든 문맥에서 다른 모든 단어들이 나타난 횟수
    • $ \sum_k X_{ik} $ 
  • $ P_{ij} = P(j|i) = \frac{X_{ij}}{X_i} $ : 단어 j 가 단어 i 의 문맥에서 나타날 확률

우리는 단어의 의미를 co-occurrence 확률에서 직접적으로 구할 수 있다는 것을 보인다. 

[그림-1]

두 개의 단어 i, j 가 있다고 할 때, i = ice, j = steam 이라고 가정하자. 이 두 단어의 관계는 새로운 다른 단어 k 와의 co-occurrence 확률을 이용해서 구할 수 있다. 두 단어 i, j 의 co-occurrence 확률을 $ \frac{P_{ik}}{P_{jk}} $ 라고 정의하겠다. [그림-1]을 보면, k = solid 인 경우, ice 라는 단어와는 자주 등장하지만 steam 이라는 단어와는 자주 등장하지 않는다는 것을 알 수 있다. 그렇다면, co-occurrence probability 는 커지게 된다. 반대로 k = gas 인 경우, ice 와는 관련이 적지만, steam 과는 관련이 있으므로 co-occurrence probabilty 는 매우 작아지게 된다. 마지막으로, k = water 여서 두 단어 ice, steam과 모두 관련이 있거나, k = fashion 이어서 두 단어와 모두 관련이 없는 경우 co-occurrence probability는 1 에 가까워진다는 것을 알 수 있다. 

위의 예시를 통해 우리는 확률 자체만 사용할 것이 아니라, 확률의 비율을 사용해서 유의미한 결과를 얻어낼 수 있다는 것을 보았다. 확률의 비율 $ \frac{P_{ik}}{P_{jk}} $ 은 세 단어 $ w_i, w_j, \widetilde{w}_k $ 에 의존적이라는 것을 알 수 이 있다. 세 단어에 대한 가장 일반적인 식을 구하면 다음과 같다.

[식-1]

$ w_i, w_j $ 는 단어 벡터이고, $ \widetilde{w}_k $ 는 별도의 문맥에 존재하는 단어의 벡터이다. [식-1] 을 만족시킬 수 있는 함수 F 는 다양하지만 우리는 F 로 다음과 같은 조건을 만족시키려고 한다. 함수 F는 확률의 비율을 벡터 공간에 투영해야 한다. 해당 정보는 벡터들 사이의 차이로 나타낼 수 있다.

[식-2]

[식-2]에서 우변의 값은 scalar 이고, 함수 F 의 파라미터들을 vector 이기 때문에, 둘의 단위를 맞춰줘야 한다. 그러기 위해서는 함수 F의 파라미터들을 내적하게 된다.

[식-3]

[식-3]에서 사용되는 단어들은 임의로 선택된 단어들이기 때문에, 임의의 두 단어가 서로 바뀌어도 동일한 경과를 제공해야 한다. 그러므로, $ w ↔ \widetilde{w} $ 를 만족하면서 $ X ↔ X^T $ 도 함께 만족해야 한다. 이런 조건을 만족하기 위해서는 함수 F 가 homomorphism 을 만족해야 한다. 

 

- Homomorphism (준동형 사상)이란?
두 개의 그룹 사이의 모든 경산과 관계를 보존하는 사상(map)을 의미한다.
두 도메인 A, B 가 있을 때, (A, ☆) 이고, (B, ★)인 경우,  함수 F:A → B 일 때,
F(x☆y) = F(x)★F(y) for all x, y ∈ A
라고 정의할 수 있다.

 

함수 F 는 (R,+) 와 (R>0, ×) 사이의 Homomorphism을 만족해야 한다. [식-3]을 Homomorphism을 만족하도록 변형하면 다음과 같다.

[식-4]

[식-3]과 [식-4]를 이용해서 풀면 다음과 같다.

[식-5]

모든 조건을 만족하는 F를 exponantial 함수로 정한다면 [식-5]는 다음과 같이 해석할 수 있다. 

[식-6]

위의 식에서 $ log(X_i) $ 는 k 에 독립적이기 때문에 $ b_i $ 라는 bias 로 취급할 수 있다. 추가적인 bias $ \widetilde{b}_k $ 를 추가하면 다음과 같은 식을 만들어 낼 수 있다.

[식-7]

위의 식에서 고려해야 하는 점이 있다. $ X_{ik} $ 는 두 단어 i 와 k 가 동시에 나타난 횟수를 나타내는데, 만약에 i 와 k 가 동시에 나타나지 않는 경우 $ X_{ik} $ 의 값이 0이 된다는 것이다. 그러면 $ log(X_{ik}) $ 의 값이 무한대로 커지게 된다는 문제가 발생한다. 이 논문에서는 이러한 문제를 $ f(X_{ij}) $ 함수를 통해서 해결한다. Weighing function $ f(X_{ij}) $ 를 함께 사용해서 손실 함수(cost function) $ J $ 를 다음과 같이 정의한다. 

 

[식-8]

[식-8]에서 $ V $ 는 전체 Vocabulary 의 크기로 정의한다. Weighting funciont $ f(X_{ij}) $ 는 다음과 같은 조건을 만족하도록 한다.

  1. $ f(0) = 0 $
  2. $ f(x) $ 는 감소하는 함수가 아니어야 한다. 자주 나타나지 않는 단어들에게 더 큰 가중치가 주어지면 안된다.
  3. $ f(x) $ 는 너무 자주 나타나는 x에게 너무 큰 가중치를 주면 안된다.

다양한 함수들이 위의 조건을 만족하겠지만, 이 논문에서는 다음과 같은 함수 $ f(x) $ 를 정의해서 사용한다.

[식-9]

[식-9]를 시각화하면 다음과 같다.

[그림-2]

앞으로의 실험에서 $ x_{max} $ 값을 100으로 고정해서 사용한다. 또한, 다양한 실험을 통해 $ a $ 값을 $ \frac{3}{4} $ 로 사용했을 때 성능이 제일 좋았다.

# Relationship to Other Models

 

# Experiments

이 논문에서는 word analogy task, word similarity task, NER 을 위한 CoNLL-2003 벤치마크 데이터를 사용해서 실험을 진행했다. 

  1. Word Analogy : "a is to b as c is to X" 에서 X의 값을 찾아내는 문제이다. 해당 데이터셋은 총 19,544개의 질문들로 구성되어 있고, semantic, syntactic 질문들로 구분된다. 모델을 빈 단어 X 를 예측해야 하고, 결과로 제공한 단어 벡터와 코사인 유사도로 가장 가까운 단어를 정답으로 판단한다.
  2. Word Similarity : 가장 중요한 task이다. WordSim-353, MC, RG, SCW, RW 등의 task에 대해서 테스트를 진행했다. 
  3. Named Entity Recognition : NER 을 위한 CoNLL-2003 벤치마크 데이터셋은 Reuters newswire 기사들로 구성되어 있고, person, locaion, orgamization, miscellaneous 로 구성된 4가지 그룹 중 하나로 entity를 분류해야 한다. 테스트는 ConLL-03 testing data, ACE Phase2, ACE2003 data, MUC7 Formal Run test set 으로 진행했다.

실험 과정에서 5개의 서로 다른 corpora를 기반으로 학습을 진행했다. 

  1. 2010 Wikipedia dump with 1 billion tokens
  2. 2014 Wikipedia dump with 1.6 billion tokens
  3. Gigaword 5 which has 4.3 billion tokens
  4. combination Gigaword5 + Wikipedia2014, which has 6 billion tokens
  5. 42 billion tokens of web data, from Common Crawl

각 corpus를 Stanford tokenizer를 통해서 tokenize를 하고, 모두 소문자로 변경했다. 전체 단어 중, 가장 자주 사용되는 400,000 개의 단어를 이용해서 co-occurrence count matrix X 를 생성했다. X 를 생성하는 과정에서 context window의 크기, 좌측의 단어를 고려할 것인지/우측의 단어를 고려할 것인지 등 다양한 요소들을 결정해야 한다. Decreasing weighting function 을 이용해서 멀리 떨어진 단어들 사이에 적은 가중치를 준다. d 만큼 떨어져있는 경우, 전체 count에서 1/d 의 크기만 차지하도록 하는 방법이다. 멀리 떨어져있는 단어들 사이에는 상대적으로 적은 관계를 형성하기 때문이다. 

실험 과정에서 $ f(x) $ 에서 사용되는 $ x_{max} = 100 $ 으로 지정했고, $ a = 3/4 $, 그리고 AdaGrad 를 사용했다. 300차원보다 작은 벡터에 대해서는 50회 반복을 진행했고, 300차원보다 큰 경우 100회 반복을 진행했다. 별도로 명시하지 않는 이상, 좌측으로 10개의 단어, 우측으로 10개의 단어로 window를 정했다.

모델을 두 종류의  벡터 집합 $ W, \widetilde{W} $ 을 생성한다. 두 집합은 랜덤한 값으로 초기화하는 경우를 제외하고는 동일하게 학습되어야 한다. 우리는 최종적으로 두 벡터의 합을 최종 벡터로 사용하기로 한다. 이런 방식을 통해 성능의 작은 향상이 생긴다. 최종적인 결과는 다양한 SOTA 모델과 비교 한다. Word2vec의 Skip-gram(SG), Continuous Bag-of-words(CBOW)와, SVD 를 대상으로 비교를 진행한다.

# Results

Word analogy task에 대해 GloVe는 가장 좋은 성능을 제공한다.

[그림-3]

[그림-3]에서는 5가지의 word similarity dataset을 이용한 결과를 제공한다. 이 모델로 42 billion 개의 토큰으로 구성된 corpus를 학습할 수 있다는 것을 보인다. Corpus의 크기가 커진다고 무조건 성능이 좋아진다고 할 수 없다. 

[그림-4]

[그림-4]는 NER (Named Entity Recognition) task에 대한 결과를 제공한다.

# Vector Length and Context Size

 

# Corpus Size

 

# Run-time

 

# Comparison with word2vec

 

# Conclusion

최근에 distributed d

728x90

댓글