논문 : GloVe: Global Vectors for Word Representation
저자 : Jeffrey Pennington, Richard Socher, Christopher D.Manning
논문 선정 이유
본 논문은 Matrix factorization과 local context window 방식의 장점만을 차용한 모델인 GloVe를 제시합니다. 이전에 공부했던 Word2vec의 경우 window 단위의 학습으로 단어를 표현하거나 유추하는데에는 좋은 성능을 보이지만 전체적인 통계 정보를 잘 나타내지 못한다는 한계가 존재합니다. 이에, GloVe가 word2vec의 어떤 점을 어떻게 개선시키려 했는지 알아보고자 본 논문을 선택하였습니다.
Introduction
의미 벡터 공간 모델에서 각 단어의 의미는 벡터로 표현됩니다. 이전의 벡터 방법론은 단어 간의 거리나 각으로 단어를 표현했지만 Word2Vec에서 다양한 차원의 차이로 단어를 표현하는 방법을 도입했습니다. 예를 들어서 "King is to queen as man is to woman" 에서 king - queen = man - woman의 벡터 표현이 가능합니다.
단어 벡터를 학습하는 두 메인 모델은 다음과 같습니다.
1) global matrix factoriztion methods (ex. LSA)
LSA는 단어의 빈도수를 카운트해서 구한 단어-문맥 행렬에 차원축소해, 전체 코퍼스의 통계 정보를 이끌어내는 방법입니다.단어의 빈도에 기반하기 때문에 유사도 측정에서 성능이 좋지 않다는 단점이 잇습니다. 예를 들어 "or" , "the"와 같은 단어는 빈도가 많아 유사도 측정에 큰 영향을 주지만 의미적 연관은 거의 없습니다.
2) local context window methids (ex. Skip-gram)
Skip gram은 local context 내에서 중심 단어를 통해 주변 단어를 예측을 하는 방법입니다. 단어 벡터간의 선형 관계로 언어 패턴을 학습합니다. 따라서 유사성 측정에 있어서 LSA보다 성능이 더 좋지만 윈도우 내의 주변 단어로 학습하기 때문에 전체 코퍼스의 통계 정보(statistical information)를 반영하기 어렵다는 한계가 있습니다.
이 두 모델의 단점을 보완하고 결합한 것이 Glove 입니다. 본 논문은 global word-word co-occurrence counts에서 통계를 효율적으로 활용하는 구체적인 가중 최소 제곱 모형을 제시하는 것을 목적으로 합니다. 즉 전체 코퍼스의 통계 정보를 반영하면서 높은 성능의 유사도 측정을 가능하게 하는 모델을 제시하는 것이 목표입니다.
The GloVe Model
코퍼스(corpus)에서의 단어 출현 통계는 단어의 의미를 학습하는 비지도 학습에서 중요한 정보입니다. 이전에도 단어의 의미를 나타내는 모델은 있었지만 어떻게 이러한 통계로 부터 의미가 만들어졌는지, 그리고 어떻게 단어 벡터가 이러한 의미를 나타내는지에 대한 의문은 남아있었습니다. 그래서 새로운 word representation model인 GloVe를 제안했습니다. Glove는 전역적인 코퍼스(global corpus)의 통계를 나타낼 수 있습니다.
동시 등장 확률 co-occurrence probability
X : 단어-단어 동시 등장 빈도 행렬 (matrix of word-word co-occurrence counts)
X_ij : X 행렬의 기본단위, 단어 i 문맥에서 j 단어가 등장한 횟수
X_i : 단어 i 문맥에서 단어가 등장한 횟수
GloVe는 동시 등장 확률로 단어의 의미를 나타냅니다. 어떻게 특정 의미가 동시 등장 확률에서 추출될 수 있는지 예시를 통해 알아보겠습니다. 단어 i = ice, 단어 j = steam 는 단어 k(various probe words)를 통해 의미 관계를 파악할 수 있습니다.
(1) ice와 관련된 단어, k = solid
P(k|ice) / P(k|steam)의 비율은 8.9로 1보다 훨씬 큰 값을 가집니다. steam 보다 ice 문맥에서 solid가 등장할 확률 더 높기 때문입니다.
(2) steam과 관련된 단어, k = gas
P(k|ice) / P(k|steam)의 비율은 0.085로 1보다 작은 값을 가집니다. steam 보다 ice 문맥에서 gas가 등장할 확률 더 낮기 때문입니다.
(3) ice와 steam 모두와 관련된 단어, k = water
P(k|ice) / P(k|steam)의 비율은 1.36으로 1에 가깝습니다. water가 각각의 문맥에서 등장할 확률이 비슷하기 때문입니다.
(4) ice와 steam 모두와 관련없는 단어, k = fashion
P(k|ice) / P(k|steam)의 비율은 0.96으로 1에 가깝습니다. water가 각각의 문맥에서 등장할 확률이 비슷하기 때문입니다.
위 표에 따라 동시 등장 확률보다 동시 등장 확률 비율을 사용했을 때, 관련이 있는 단어를 구별해내기가 더 적합하다는 것을 알 수 있습니다. 이를 활용해 단어 벡터를 학습할 것 입니다. 우선 동시 등장 확률 비율은 단어 i, j, 그리고 k에 의존하기 때문에 다음과 같이 임의의 함수 F로 나타낸 일반적인 목적 함수를 설정합니다. (w : 단어 벡터)
벡터 공간은 선형구조이기 때문에 벡터간의 차이로 단어간의 관계, 즉 동시 등장 확률의 크기 관계 비율을 벡터공간에 인코딩합니다. 그러면 좌변의 F 함수는 벡터 값이고 우변은 상수입니다.
F 를 신경망을 사용해 복잡한 함수로 만들수도 있지만 그렇게 하면 선형 구조를 불명료하게 하기 때문에 선형공간에서 단어의 의미 관계를 표현하기 위해 내적(dot product) 사용해 나타냅니다.
단어(a word)와 문맥 단어(context word)간의 기준이 임의적이기 때문에 교환가능해야 합니다. (3)은 교환 가능하지 않기 때문에 먼저 F는 준동성(homomorphism)을 만족시켜야합니다. F(a+b) = F(a)F(b)
이 준동형식을 만족시키는 F는 exp 입니다. 따라서 (6) 과 같은 식이 만들어집니다.
(6) 에서 log(X_i)항 때문에 교환가능하지 않은 형태입니다. 이 항은 k와 독립적이기 때문에 b 편향이라는 상수항으로 대체합니다. 편향을 더해주면서 교환가능한 대칭적인 관계가 성립하게 되었습니다.
log(X_ik) 항에서 X_ik가 0이되면 발산한다는 문제가 있어 log(X_ik +1)로 변환해 X의 희소성(sparsity)를 보존하면서 발산하는 것을 방지합니다. 좌변은 미지수이고 우변은 특정 윈도우 사이즈를 두고 코퍼스 전체에서 단어별 등장 빈도를 구한 co-occurrence matrix에 로그를 취해준 행렬로 우리가 알고 있는 값입니다. 따라서 좌변과 우변의 차이의 제곱이 손실함수로 모델을 학습하면서 이 값을 최소화하게 하는 w, b를 찾습니다.
등장빈도가 낮은 값은 정보에 거의 도움을 주지 않습니다. 코퍼스에 따라 X행렬에서 0인 값이 전체 행렬의 75-95% 인 경우도 있습니다. 위 식은 거의 등장하지 않는 단어에서 동일한 가중치를 준다는 문제가 있습니다. 따라서 본 논문은 위 비용 함수에 가중치 함수, f(X_ij)를 곱한 새로운 가중 최소 제곱 회귀 모델(weighted least squares regression model)을 제안합니다. 따라서 구하고자 했던 최종 손실함수는 다음과 같습니다. (V : 단어 크기)
f(x) 가중치 함수는 다음의 조건을 만족해야 합니다.
(1) f(0) = 0. 연속함수이면 x → 0 수렴해야합니다.
(2) 빈도가 적은 co-occurrence에 많은 가중치를 주지 않기 위해 f(x)는 non- decreasing이여야합니다.
(3) 빈도가 많은 co-occurrence에 너무 많은 가중치를 주지 않기 위해 f(x)는 큰 x 값에 대해서 상대적으로 작아야 합니다. (it, or 같은 단어가 너무 큰 가중치를 갖게 하지 않기 위해)
따라서 이 조건들을 만족하는 다음과 같은 가중치 함수를 사용합니다.
X_ij 값이 커지면서 가중치가 증가합니다. 또한 빈도가 높은 경우 지나치게 높은 가중치를 주지 않도록 X_max를 기준으로 함수값의 최대값이 정해져 있습니다.
Relationship to Skip-gram
단어 벡터를 학습하는 비지도 학습 모델은 궁극적으로 코퍼스의 등장 통계(occurrence statistics)에 기반합니다. 따라서 모델 간의 공통점이 있습니다. Word2Vec의 Skip-gram과 GloVe의 관계를 보겠습니다.
우선 i 단어 문맥에서 단어 j가 등장할 확률의 모델은 Softmax라고 합니다.
윈도우 사이즈를 두고 전체 코퍼스에 대해 학습할 때 로그 확률을 최대화하려는 시도입니다. 따라서 global objective function은 음의 로그 우도함수로 (11)과 같습니다.
(11)에서 각항에 대해 소프트맥스 정규화 계수를 구하는 것은 계산 비용이 많이 듭니다. 효율적으로 학습하기 위해서 Skip-gram은 에 근사한 모델을 소개합니다. 그러나 term의 수가 동시 등장 행렬 X에 주어지기 때문에 식(12)에서 처럼 i와 j가 같은 경우를 그룹지으면 더 효율적으로 계산 가능합니다. skip-gram은 주변 단어의 확률을 최대화하는데, 동시 등장 행렬에서 주변 단어가 주어질 확률 즉 i와 j가 같은 경우()를 구할 수 있기 때문에 가 미리 연산되어 있어 계산 속도가 빨라졌습니다.
앞서 정의한 식에 따라 = P_ij x X_i이고 H(P_i, Q_i)는 P, Q의 Cross entropy입니다. Cross entropy는 distance를 측정하는 방법입니다.
Cross entropy는 꼬리가 긴 확률분포의 경우 자주 발생하지 않는 사건에 대해 매우 큰 가중치를 부여하는 경우가 생길 수 있어 P와 Q의 정규화 계수를 무시할 수 있는 최소제곱을 선택합니다.
여기서 가 너무 큰 값을 가져 최적화하기가 어렵다는 문제가 생깁니다. 그래서 P와 Q에 로그를 취해 제곱오차의 값을 줄여줍니다.
마지막으로 가 미리 결정된 가중치 값으로 최적화가 보장되지 않습니다. Mikolov는 데이터를 필터링하여 성능을 향상시킬 수 있다는 것을 알아냈고 문맥 단어에 의존하지 않는 더 일반적인 가중 함수를 제시했습니다.
따라서 GloVe의 손실함수와 같은 형태가 되었습니다.
Complexity of the model
모델의 계산 복잡성은 X 행렬에서 0인 아닌 값(nonzero elements)에 의존합니다. 따라서 0이 아닌 값의 크기는 전체 코퍼스 크기보다 항상 작기 때문에 전체 코퍼스 크기에 의존하는 윈도우기반의 모델에 비해 큰 향상입니다. Glove의 계산 복잡성은 다음과 같습니다.
Experiments
Evaluation methods
1. Word analogy 단어 유추
“a가 b일 때, c는 __ 이다?”
위와 같은 question이 19,544개로 구성되어 있고, semantic과 syntatic으로 나누어져 있습니다.
semantic
syntatic
“a is to b as c is to ___?”에 대한 답으로 d를 찾기 위해 우리는 cosine 유사도에 따라 값과 가장 유사한 의 값을 찾습니다.
2. Word similarity 단어 유사도
단어 유추가 주된 task이긴 하지만, 다양한 형태의 단어 유사도 task에도 모델을 평가하였습니다. WordSim-353, MC, RG, SCWS, RW등이 포함됩니다.
3. Named entity recognition 개체명 인식
NER용 CoNLL-2003 영문 벤치마크 데이터셋은 사람, 장소, 조직, 기타 등 4가지 객체타입에 대해 표기된 문서집합입니다. CoNLL-03 훈련 데이터에 대하여 훈련시키고, 3가지 데이터에 대하여 테스트합니다.
1.
CoNLL-03 테스트 데이터
2.
ACE Phase2(2001-02), ACE-2003 데이터
3.
MUC7 Formal Run 테스트 데이터
BIO2 annotation standard를 따르고, Wang and Manning에 기술된 전처리 과정을 거칩니다.
437,905개의 별도 특징이 CoNLL-2003 훈련 데이터셋으로부터 생성되었고, 5단어 context 내 각 단어에 대해 50차원의 벡터가 추가되어, 이는 연속특징으로 사용됩니다. 이러한 특징들이 입력으로 Wang and Manning의 모델과 동일한 설정으로 CRF(Conditional Random Field)를 훈련하였습니다.
Corpora and training details
다양한 사이즈를 가진 5개의 말뭉치를 모델에 학습하였습니다.
1.
10억 token의 2010 Wikipedia
2.
16억 token의 2014 Wikipedia
3.
43억 token의 Gigaword5
4.
Gigaword5 + Wikipedia2014
5.
420억 token의 Common Crawl
Stanford tokenizer를 이용하여 말뭉치를 토큰화하고 소문자로 바꿔준 뒤 가장 자주 등장한 400,000개에 대한 voabulary를 생성하여 동시발생횟수 행렬 X를 만들었습니다. X를 생성할때, context window의 크기와 왼쪽 context와 오른쪽 context를 구분할지에 대한 것을 결정해야 합니다.
모든 경우에서 감소하는 가중치 함수를 사용하므로 d만큼 떨어진 단어쌍은 총 횟수의 1/d 만큼 기여합니다. 이는 거리가 먼 단어쌍은 단어 간 관계에 대해 관련성이 낮은 정보를 담고 있을 것으로 예상되는 이유가 됩니다.
모든 실험에서 로 정하고, AdaGrad를 이용해 모델을 훈련하였습니다.(X의 0이 아닌 원소에 대해 stochastic하게 샘플링하고, 초기 학습률은 0.05로 설정하였습니다.) 300차원보다 작은 벡터에 대해서는 50번, 반대의 경우는 100번 반복하였습니다. 별다른 언급이 없을땐, 왼쪽에서 10개의 단어, 오른쪽에서 10개의 단어를 context로 사용하였습니다.
모델은 두 개의 단어벡터 를 생성합니다. X가 대칭행렬이면 는 랜덤으로 초기화하는 부분만 빼고 동일합니다. 두 벡터의 동등한 성능을 가집니다.
반면에 특정 신경망의 경우, 네트워크의 여러 인스턴스를 훈련한 뒤 결과를 결합하면 과적합과 noise를 줄이고 일반적으로는 결과를 개선시킨다고 합니다. 그래서 우리는 를 단어벡터로 사용하여 합산하기로 하였습니다. 이렇게하면 성능은 소폭 향상되고 semantic analogy task(의미적 유추) 결과에서 가장 크게 개선된다고 합니다.
다양한 SOTA 모델의 결과와, Word2Vec를 사용하여 만들어진 결과를 SVD를 이용한 다양한 베이스라인과 비교해보기로 합니다. word2vec에서는 상위 400,000개의 최빈 단어들과 context window size는 10으로 해서 skip_gram와 CBOW모델로 60억개의 말뭉치를 학습하였습니다. SVD 베이스라인에 대해서는 10,000개의 최빈단어를 이용하여 각 단어가 얼마나 자주 발생하는 지에 대한 정보를 유지하는 잘린 행렬 을 생성하였습니다. 이 행렬의 단일 벡터는 baseline SVD를 구성합니다. 또한 SVD-S(), SVD-L(의 두 베이스라인도 평가하는데, 두 방법 모두 X값의 범위를 압축시킵니다.
Results
1. Analogy Task 단어 유추
analogy task에 대해 percent accuracy로 표현한 table로, 밑줄친 값은 비슷한 사이즈의 모델 그룹에서 가장 좋은 점수를, bold 값은 전체에서 가장 좋은 점수를 나타냅니다. Skip-gram , CBOW는 word2vec을 이용하였습니다.
더 작은 vector size와 corpora에도 불구하고, 다른 baseline 모델들에 비해 GloVe가 훨씬 더 좋은 성능을 보입니다. 또한 해당 모델을 420억 token의 큰 말뭉치도 쉽게 학습하여 실질적인 성능 향상을 보일 수 있었습니다. 반면에 다른 모델에서는 말뭉치 크기를 증가시키는 것이 성능 향상을 보장하지는 않았습니다. (SVD-L의 저하된 성능을 통해서 확인할 수 있습니다.) 이는 우리 모델에서 제시한 weighting schema의 필요성을 더욱 강력하게 내포하고 있습니다.
2. Word similarity 단어 유사도
5개의 다른 단어유사도 데이터셋에 대한 스피어만 순위 상관으로, 모든 벡터의 차원은 300입니다.
•
유사도 점수는 먼저 각 feature를 vocabulary에 대하여 normalize한 후 cosine 유사도를 이용하여 계산되었습니다. 그리고 해당 점수와 인간의 결정 사이의 스피어만 순위 상관 계수를 측정하였습니다. 의 경우 보다 작은 size의 corpus를 사용했음에도 뛰어난 성능을 보입니다.
3. Named Entity Recognition 개체명 인식
50차원의 벡터로 NER task에 대하여 F1 score를 측정한 표입니다. Discrete이 word vector가 없는 baseline입니다. 우리는 공개적으로 사용 가능한 HPCA, HSMN, CW를 사용하였습니다.
GloVe 모델은 CoNLL test set을 제외하고 모든 evaluation metrics에 대하여 뛰어난 성능을 보였습니다. CoNLL test set은 HPCA 방법이 조금 더 좋은 성능을 보입니다.
GloVe 벡터는 downstream NLP task에 유용하다고 결론 내릴 수 있습니다.
•
downstream task : 구체적으로 풀고 싶은 문제
최근 자연어 처리분야에서는 언어모델을 pre-train 방식을 이용해 학습을 진행하고, 그 후에 원하고자 하는 태스크를 fine-tuning 방식을 통해 모델을 업데이트 하는 방식을 사용하는데 이때, 태스크를 다운스트림 태스크라고 합니다.
Model Analysis
1. Vector Length and Context Size
vector size와 window size/ type에 따른 analogy task의 accuracy입니다. 60억 token 말뭉치로 학습하였고, (a)에서 window size는 10, (b), (c)에서 vector size는 100입니다.
•
Symmetric : window size가 좌우 양쪽으로 확장되는 것
•
Asymmetric : window size가 왼쪽으로만 확장되는 것
(a)에서는 약 200차원 이상이 되면 수렴하는 것을 확인할 수 있습니다.
(b)와 (c)를 통해, syntatic task에 대해서는 작고 asymmetric한 context window가 적합한데, 이는 syntatic information이 즉각적인 context를 통해 얻어지고, 단어의 순서에 강하게 의존한다는 것을 의미합니다. 반대로 semantic information은 더 자주 지역적이지 않고, 더 큰 window size에서 포착됩니다.
2. Corpus Size
다른 corpora에 대하여 학습된 300차원의 벡터들을 이용하여 analogy task에 대한 accuracy를 측정하였습니다.
syntatic task의 경우, 말뭉치의 크기가 증가할 수록 같이 단조 증가합니다. 이는 더 큰 말뭉치가 전형적으로 더 좋은 통계를 보인다고 기대할 수 있습니다.
semantic task의 경우 syntatic의 trend와는 다르게, 큰 사이즈의 Gigaword 말뭉치보다 Wikipedia 말뭉치로 학습한 모델이 더 좋은 성능을 보였습니다. 유추 dataset에서 유추해야 할 도시와 나라 데이터 수가 많고, Wikipedia는 대체적으로 포괄적인 기사들을 많이 가지고 있어서 그런 것 같습니다. 또한 Wikipedia는 새로운 지식들로 업데이트 되는데에 반해 Gigaword는 기간이 지난 news들을 고정 저장하고 아마도 부정확한 정보도 담고 있기에 위와 같은 결과를 보였다고 할 수 있습니다.
3. Run-time
전체 run-time은 X를 채우고 모델을 학습시키는 것으로 분리됩니다. X를 채우는데에는 window size, vocabulary size, corpus size 등 여러 요인이 작용합니다. 이때 해당 단계는 병렬처리가 가능합니다. 이후 X가 주어졌을 때 모델을 학습시키는데에는 vector size와 iteration 수에 영향을 받습니다.
dual 2.1GHz Intel Xeon E5-2658 machine으로 single thread를 이용하고, window size는 양쪽으로 10, 400,000개의 단어를 포함하는 vocabulary, 60억개 token의 말뭉치를 이용했을 때 X를 채우는데에는 85분, 300차원의 벡터를 학습시키는데에는 1 iteration에 14분이 걸립니다.
4. Comparison with word2vec
Glove와 word2vec을 비교하는데 가장 중요하게 control 되는 요소가 Training Time입니다.
Glove는 iteration 수, CBOW(Continuous Bag-of-words)와 Skip-Gram은 negative sample 수에 영향을 받습니다. 300차원의 벡터를 동일한 60억 token 말뭉치에 대하여 동일한 400,000 word vocabulary를 이용하여 모델을 학습하고, context window size는 양쪽으로 10으로 설정하였습니다.
하단의 x축은 각각 GloVe에 대해서는 iteration, CBOW, Skip-Gram에 대해서는 negative sample 수를 의미합니다.
word2vec의 경우 negative sample수가 10을 넘어가면 성능이 저하되는 것을 확인할 수 있습니다. 아마도 negative sampling 방법이 target 확률분포를 잘 예측하지 못하기 때문이라고 봅니다.
Conclusion
count-based method와 prediction-based method 모두 말뭉치의 내재된 동시발생 통계값을 증명하기 때문에 근본적으로 드라마틱하게 다르지는 않습니다. 그러나 전체적인 통계값을 잡아내는 count-based method는 좀 더 유리할 수 있습니다.
해당 논문에서는 count data의 이점을 활용하면서도 동시에 word2vec 처럼 최근의 log-bilinear prediction based method에서 일반적으로 사용되는 의미있는 선형 구조를 포착할 수 있는 모델을 구성하였습니다. 그 결과로 GloVe는 word representation에 있어서 단어 유추, 단어 유사도, 객체명 인식 task에 대해 뛰어난 성능을 보이는 비지도 학습의 새로운 log-bilinear 회귀 모델입니다.
Reference
Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation.