2022. 1. 16. 01:25ㆍNLP
오늘은 Word2Vec과 가장 많이 비교되는 모델인 GloVe를 발표한 논문 Global Vectors forWord Representation을 리뷰하겠습니다. 이전에 포스팅했던 Word2Vec의 경우 window 단위의 학습으로 단어를 표현하거나 유추하는데에는 좋은 성능을 보이지만 전체적인 통계 정보를 잘 나타내지 못한다는 한계가 존재합니다. 이에, GloVe가 word2vec의 어떤 점을 어떻게 개선시키려 했는지 알아보고자 본 논문을 선택하였습니다. 2014년 Stanford는 기존의 자연어처리 모델의 문제점을 해결하기 위해 GloVe를 제시했습니다.
Introduction
Semantic vector 모델을 통해서 단어의 의미를 표현하는 벡터를 만들 수 있습니다. 대부분의 벡터 방법론은 단어간의 거리나 각으로 단어를 표현하지만 Word2Vec은 다양한 차원의 차이로 단어를 표현합니다. 예를 들어서 "King is to queen as man is to woman" 에서 king - queen = man - woman의 벡터 표현이 가능합니다.
단어벡터를 학습하는 두 메인 모델은 다음과 같습니다.
1) global matrix factoriztion methods (ex. LSA)
2) local context window methids (ex. Skip-gram)
이 두 모델의 단점을 보완하고 결합한 것이 Glove 입니다.
LSA는 단어의 빈도수를 카운트해 구한 단어-문맥 행렬에 차원축소해 전체 코퍼스의 통계 정보를 이끌어내는 방법입니다. (utililze low-rank aproximation to decompose large metrices that capture statistical information about a corpus) 단어의 빈도에 기반하기 때문에 유사도 측정에서 성능이 좋지 않습니다. 예를 들어 "or" , "the"와 같은 단어는 빈도가 많아 유사도 측정에 큰 영향을 주지만 의미적 연관은 거의 없습니다.
Skip gram은 local context 내에서 중심단어를 통해 주변단어를 예측을 하는 방법입니다. 단어벡터간의 선형관계로 언어 패턴을 학습합니다. 따라서 유사성 측정에 있어서 LSA보다 성능이 더 좋지만 윈도우 내의 주변단어로 학습하기 때문에 전체 코퍼스의 통계 정보(statistical information)를 반영하기 어렵다는 한계가 있습니다.
본 논문은 (global word-word co-occurrence counts)에서 통계를 효율적으로 활용하는 구체적인 가중 최소 제곱 모형을 제시하는 것을 목적으로합니다. 즉 전체 코퍼스의 통계 정보를 반영하면서 높은 성능의 유사도 측정을 가능하게 하는 모델을 제시하는 것이 목표입니다.
The GloVe Model
코퍼스(corpus)에서의 단어 출현 통계는 단어의 의미를 학습하는 비지도 학습에서 중요한 정보입니다. 이전에도 단어의 의미를 나타내는 모델은 있었지만 어떻게 이러한 통계로 부터 의미가 만들어졌는지, 그리고 어떻게 단어벡터가 이러한 의미를 나타내는지에 대한 의문은 남아있었습니다. 그래서 새로운 word representation model인 GloVe를 제안했습니다. Glove는 전역적인 코퍼스(global corpus)의 통계를 나타낼 수 있습니다.
동시 등장 확률 co-occurrence probability
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를 기준으로 함수값의 최대값이 정해져 있습니다.
Relation to Other Models : Word2Vec
단어벡터를 학습하는 비지도학습모델은 궁극적으로 코퍼스의 등장 통계(occurrence statistics)에 기반합니다. 따라서 모델간의 공통점이 있습니다. Word2Vec의 Skip-gram과 GloVe의 관계를 보겠습니다.
우선 i 단어문맥에서 단어 j가 등장할 확률의 모델은 Softmax라고 합니다.
윈도우 사이즈를 두고 전체 코퍼스에 대해 학습할 때 로그 확률을 최대화하여는 시도입니다. 따라서 global objective function은 음의 로그 우도함수로 (11)과 같습니다.
(11)에서 각항에 대해 소프트맥스 정규화 계수를 구하는 것은 계산 비용이 많이 듭니다. 효율적으로 학습하기 위해서 Skip-gram은 Q_ij에 근사한 모델을 소개합니다. 그러나 term의 수가 동시 등장 행렬 X에 주어지기 때문에 식(12)에서 처럼 i와 j가 같은 경우를 그룹지으면 더 효율적으로 계산 가능합니다. skip-gram은 주변단어의 확률을 최대화하는데, 동시 등장 행렬에서 주변단어가 주어질 확률 즉 i와 j가 같은 경우(X_ij)를 구할 수 있기 때문에 X_ij가 미리 연산되어있어 계산 속도가 빨라졌습니다.
앞서 정의한 식에 따라 X_ij = P_ij x X_i이고 H(P_i, Q_i)는 P, Q의 Cross entropy입니다. Cross entropy는 distance를 측정하는 방법입니다.
Cross entropy는 꼬리가 긴 확률분포의 경우 자주 발생하지 않는 사건에 대해 매우 큰 가중치를 부여하는 경우가 생길수 있어 P와 Q의 정규화 계수를 무시할 수 있는 최소제곱을 선택합니다.
여기서 X_ij가 너무 큰 값을 가져 최적화하기가 어렵다는 문제가 생깁니다. 그래서 P와 Q에 로그를 취해 제곱오차의 값을 줄여줍니다.
마지막으로 X_ij가 미리 결정된 가중치 값으로 최적화가 보장되지 않습니다. Mikolov는 데이터를 필터링하여 성능을 향상할 수 있다는 것을 알아냈고 문맥 단어에 의존하지 않는 더 일반적인 가중 함수를 제시했습니다.
따라서 GloVe의 손실함수와 같은 형태가 되었습니다.
Complexity of the model
모델의 계산 복잡성은 X 행렬에서 0인 아닌 값(nonzero elements)에 의존합니다. 따라서 0이 아닌 값의 크기는 전체 코퍼스 크기보다 항상 작기 때문에 전체 코퍼스 크기에 의존하는 윈도우기반의 모델에 비해 큰 향상입니다. Glove의 계산 복잡성은 다음과 같습니다.
Experiments
1. Word analogy (단어 유추)
semantic(사람이나 장소에 관련된 질문) 과 syntatic(동사 시제나 형용사의 형태)로 나누어져 있습니다.
a is to b as c is to _____ ?
위 예시에 대한 답(d)를 찾기 위해 코사인 유사도에 따라 W_b - W_a + W_c 값과 가장 유사한 W_d 값을 찾습니다.
다음은 analogy task에 대해 percent accuracy로 표현한 table입니다.
더 작은 vector size와 corpora에도 불구하고, 다른 baseline 모델들에 비해 GloVe가 훨씬 더 좋은 성능을 보입니다. 또한 해당 모델을 420억 token의 큰 코퍼스도 쉽게 학습하여 실질적인 성능 향상을 보일 수 있었습니다. 반면에 SVD-L에서는코퍼스 크기가 증가했을 때 저하된 성능을 보여, 큰 코퍼스가 항상 성능 향상을 보장하지는 않음을 보여줍니다. 이는 Glove모델에서 제시한 weighting schema의 필요성을 강조합니다.
2. Word similarity (단어 유사도)
유사도 점수는 먼저 각 feature를 vocabulary에 대하여 normalize한 후 cosine 유사도를 이용하여 계산되었습니다. 그리고 해당 점수와 인간의 결정 사이의 스피어만 순위 상관 계수를 측정하였습니다. GloVe의 경우 CBOW보다 작은 size의 c코퍼스를 사용했음에도 뛰어난 성능을 보입니다.
3. Named entity recognition (개체명 인식)
사람, 장소, 조직, 기타 등 4가지 객체타입에 대해 개체명 인식 테스트를 진행했습니다.
GloVe 모델은 CoNLL test set을 제외하고 모든 evaluation metrics에 대하여 뛰어난 성능을 보였습니다. CoNLL test set은 HPCA 방법이 조금 더 좋은 성능을 보입니다. GloVe 벡터는 downstream NLP task에 유용하다고 결론을 내릴 수 있습니다.
Model Analysis
1. Vector Length and Context Size
Vector size와 window size / type 에 따른 analogy task의 accuracy 입니다.
(a)에서 window size는 10이고 window size가 좌우 양쪽으로 확장되는 Symmetic입니다. 약 200차원 이상이 되면 정확도는 약 80으로 수렴하고 있습니다.
(b)에서 vector size는 100이고 window size가 좌우 양쪽으로 확장되는 Symmetic입니다. (c)에서 vector size는 100이고 window size가 왼쪽으로 확장되는 asymmetic입니다. (c) 그래프에서 syntatic task에 대해서는 작고 asymmetric한 context window가 적합하다는 것을 알 수 있습니다. 이는 syntatic information이 즉각적인 context를 통해 얻어지고, 단어의 순서에 강하게 의존한다는 것을 의미합니다. 반대로 semantic information은 지역적이지 않고, 더 큰 window size에서 적합하는 것을 알 수 있습니다.
2. Corpus Size
analogy task에 대한 accuracy를 측정한 결과 다음과 같습니다.
syntatic task의 경우, 코퍼스의 크기가 증가할 수록 같이 단조 증가합니다. 이는 더 큰 말뭉치가 더 좋은 통계를 보인다고 기대할 수 있습니다. 또 semantic task의 경우 큰 사이즈의 Gigaword 보다 Wikipedia로 학습한 모델이 더 좋은 성능을 보였습니다.
3. Run Time
전체 run-time은 X를 채우고(populating) 모델을 학습(training)시키는 것으로 분리됩니다. 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분이 걸립니다.
Comparison with Word2Vec
Glove와 word2vec을 비교하는데 가장 중요하게 control 되는 요소가 Training Time입니다. Glove는 iteration 수, CBOW(Continuous Bag-of-words)와 Skip-Gram은 negative sample 수에 영향을 받습니다.
하단의 x축은 각각 GloVe에 대해서는 iteration, CBOW, Skip-Gram에 대해서는 negative sample 수를 의미합니다. word2vec의 경우 negative sample수가 10을 넘어가면 성능이 저하되는 것을 확인할 수 있습니다.
Conclusion
GloVe는 코퍼스의 동시 등장 통계(co-occurrence statistics of the corpus)를 이끌어내고 유의미한 선형 관계를 포착할 수 있는 new global log-bilinear regression model입니다. 카운트 기반 그리고 예측 기반 모델의 장점을 결합해 word representation에 있어서 유사도 측정, 인식 작업 등에서 다른 모델의 성능을 능가하는 모델이라는 의의가 있습니다.
Reference
Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation.
'NLP' 카테고리의 다른 글
Transformer 논문 리뷰 : Attention Is All You Need (0) | 2022.02.02 |
---|---|
Fasttext 논문 리뷰 : Enriching Word Vectors with Subword Information (0) | 2022.01.22 |
Skip-gram 코드 구현 : Word2Vec의 Skip-gram 모델 구현 (0) | 2022.01.10 |
CBOW 코드 구현 : Word2Vec의 CBOW 모델 구현 (0) | 2022.01.07 |
Word2Vec 논문 리뷰 : Efficient Estimation Of Word Representations In Vector Space (0) | 2022.01.03 |