Processing math: 100%
본문 바로가기
대학원 이야기/논문 리뷰

[논문 리뷰] 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
  • Xij : i 라는 단어가 존재하는 문맥에서 j 라는 단어가 나타난 횟수
  • Xi : i 라는 단어가 존재하는 모든 문맥에서 다른 모든 단어들이 나타난 횟수
    • kXik 
  • Pij=P(j|i)=XijXi : 단어 j 가 단어 i 의 문맥에서 나타날 확률

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

[그림-1]

두 개의 단어 i, j 가 있다고 할 때, i = ice, j = steam 이라고 가정하자. 이 두 단어의 관계는 새로운 다른 단어 k 와의 co-occurrence 확률을 이용해서 구할 수 있다. 두 단어 i, j 의 co-occurrence 확률을 PikPjk 라고 정의하겠다. [그림-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 에 가까워진다는 것을 알 수 있다. 

위의 예시를 통해 우리는 확률 자체만 사용할 것이 아니라, 확률의 비율을 사용해서 유의미한 결과를 얻어낼 수 있다는 것을 보았다. 확률의 비율 PikPjk 은 세 단어 wi,wj,˜wk 에 의존적이라는 것을 알 수 이 있다. 세 단어에 대한 가장 일반적인 식을 구하면 다음과 같다.

[식-1]

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

[식-2]

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

[식-3]

[식-3]에서 사용되는 단어들은 임의로 선택된 단어들이기 때문에, 임의의 두 단어가 서로 바뀌어도 동일한 경과를 제공해야 한다. 그러므로, w˜w 를 만족하면서 XXT 도 함께 만족해야 한다. 이런 조건을 만족하기 위해서는 함수 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(Xi) 는 k 에 독립적이기 때문에 bi 라는 bias 로 취급할 수 있다. 추가적인 bias ˜bk 를 추가하면 다음과 같은 식을 만들어 낼 수 있다.

[식-7]

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

 

[식-8]

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

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

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

[식-9]

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

[그림-2]

앞으로의 실험에서 xmax 값을 100으로 고정해서 사용한다. 또한, 다양한 실험을 통해 a 값을 34 로 사용했을 때 성능이 제일 좋았다.

# 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) 에서 사용되는 xmax=100 으로 지정했고, a=3/4, 그리고 AdaGrad 를 사용했다. 300차원보다 작은 벡터에 대해서는 50회 반복을 진행했고, 300차원보다 큰 경우 100회 반복을 진행했다. 별도로 명시하지 않는 이상, 좌측으로 10개의 단어, 우측으로 10개의 단어로 window를 정했다.

모델을 두 종류의  벡터 집합 W,˜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

댓글