AI/자연어처리(NLP)

[NLP 논문] GloVe: Global Vectors for Word Representation

CSE 2025. 11. 24. 17:11

아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.

읽은 논문들 정리


 

 

논문 보기 : https://nlp.stanford.edu/pubs/glove.pdf

 

이전 논문들과 똑같이 Stanford 강의의 1주차 내용과 연관된 논문이다.

다만 이전 논문 2개 (word2vec, negative sampling)은 Lecture1, 이번 논문은 Lecture2와 연관된 논문이다.

위 논문들을 읽고 정리한 글들은 이 블로그의 논문읽기 카테고리에 들어가면 볼 수 있다.

 

이 논문은 이름처럼 GloVe 모델에 대한 내용이다. 

연관되는 강의인 stanford 강의 Lecture2에 대한 내용정리는 아래 링크에 있다.

 

[Stanford 강의] Lecture 2 : Word Vectors and Language Models

영상 주소는 https://www.youtube.com/watch?v=nBor4jfWetQ&list=PLoROMvodv4rOaMFbaqxPDoLWjDaRAdP9D&index=6 이다.Gradient Descent어떤 랜덤지점에서 시작해 그 지점에서의 기울기(gradient)를 구하고 해당 방향으로 조금 내려

april2901.tistory.com

 

GloVe모델 자체만 궁금하면 3번항목으로.

논문의 매우 짧은 요약만 궁금하면 5번항목으로.


1. Introduction

이 GloVe이전까지는 단어 벡터를 학습시키는 방법은 크게 두 가지가 있었다.

  • Latent Semantic Analysis, LSA : 말뭉치 전체의 통계정보를 잘 활용, 단어 유추 등이 취약
  • Word2Vec(Skip-gram, CBOW) : 의미 관계 학습 강점, 전체 정보 없이 특정 window내의 정보에만 의존

GloVe는 이 두 방법의 장점을 결합한 방법이라고 생각할 수 있다.

 

두 단어가 같이 나타나는 빈도(co-occurrence) 통계를 직접 활용하면서,

벡터 공간 내의 선형적 관계(벡터 끼리의 연산이 의미가 있다는 것)까지 살리는 것을 목표로 개발된 모델이다.

 

 


2. Related Work 

2-1. 전역 행렬 분해 방법 (Matrix Factorization Methods)

말뭉치 전체에서 얻은 통계정보를 담은 큰 행렬을 저차원 공간으로 분해해 단어의 의미를 추출하는 방식이다.

 

2-1-1. LSA

이 전역 행렬 분해 방법을 사용하는 대표적인 초기 모델

단어-문서(term-document)' 행렬 사용

행렬의 각 행은 단어를, 열은 문서를 나타냄

문서 전체의 주제(topic) 유사성을 포착하는 데 특화되어 있어, "왕"과 "여왕"의 관계와 같은 미세한 의미적 유추 작업을 수행하는 데는 한계가 있었다.

 

2-1-2. HAL 

단어-단어(term-term)' co-occurrence 행렬 사용

윈도우를 전체 말뭉치에서 슬라이딩 하며 같이 등장하는 횟수를 카운트

너무 빈번한 a, the같은 단어들이 너무 큰 영향을 미침

→ COALS(Correlated Occurrence Analogue to Lexical Semantic), PCA(HPCA)같은 방법을 사용해 해결 시도, 큰 효과 없었다.

 

2-2. Shallow Window-Based Methods

위의 방법은 좀 옛날 방법이고, 우리에게 이제 좀 친숙해진 Skip-gram, CBOW같은 방법이 여기 속한다.

 

2-2-1. Skip-Gram

중심 단어를 통해 주변 문맥 단어를 예측

 

2-2-2. CBOW

주변 단어를 통해 중심 단어 예측

 

이 두가지 방법 모두 백터의 내적과 softmax를 활용한다.

언어의 패턴을 선형적 관계로 포착함

 

그러나 문제점이 있었는데 통계적으로 비효율적이라는 것이다.

수억번씩 나오는 'the'같은 단어에 대해 매번 'the' 주변 단어 예측하기 같은 학습을 진행하기 때문이다.

 

→행렬 분해 방법의 통계적 효율성을 유지하면서도 window based method의 선형적 관계까지 살릴 수 있는 방법이 없을까?

이것에 대한 답이 GloVe이다.

 


3. The GloVe Model

GloVe의 독창적인 아이디어는 아래와 같다.

'각 단어의 등장 확률을 넘어서 이들 사이 비율을 따져보자'

 

우리가 ice와 steam사이 관계를 알아보고 싶다고 하자.

표의 1,2행만 봤을 때는 water가 두 단어 근처에서 모두 높은 확률로 등장하고,

fashion은 모두 이의 약 1/100인 낮은 확률로 등장하므로, ice↔steam의 관계를 알아보는데 큰 도움이 안된다.

그러나 이 두 단어확률의 비율(3행)을 보면, solid에서는 높은 값, gas에서는 낮은 값이 나와,

ice에는 solid에 특화된 단어라는 것을 알 수 있다.

둘 모두에게 관련있거나 관련없는 단어는 비율이 1에 가깝게 나온다.

 

따라서 GloVe의 학습의 핵심아이디어는 이 비율 정보를 보존해야 한다는 것이다.

 

이 식에서 $w_i, W_j$는 각각 비교할 단어의 벡터를 나타낸다.

$w_k$는 문맥 단어의 벡터를 나타낸다.

 

$P_{ik} = P(k | i)$이다. 즉 단어 i의 문맥에서 단어 k가 등장할 확률이다.

 

여기서 벡터가 가진 선형성을 고려해서 두 벡터를 뺀 값을 F의 입력으로 받도록 위 식을 약간 변형했다.

F의 인자는 벡터인데 결과값은 스칼라이므로 transpose를 해줘 차원을 맞춰주었다.

즉 단어벡터의 차이와 문맥단어의 내적이 비율 관계를 나타낸다는 것을 의미한다.

 

단어-단어 관계의 co-occurrence행렬 $X$에서 a단어가 center이고, b단어가 context일 때 카운트와 

a단어가 context이고, b단어가 center일 때의 카운트는 사실 같은 것이므로 $X = X^T$이어야한다.

이를 exchange symmetry라고 한다.

 

위의 식을 보면 F안에는 뺄셈이고 결과는 나누기이다.

이 성질을 가져가면서 대칭성을 지키기 위해 F라는 함수는 아래 식을 만족한다고 가정했다.

이런 성질을 만족하는 대표적인 함수가 지수함수이므로 F함수를 exp(x)라고 생각하자.

$\frac{exp(w_i^T \tilde w_k)}{exp(w_j^T \tilde w_k)} = \frac{P_{ik}}{P_{jk}}$ 이므로,

여기서 양변의 분자끼리 같다고 하면

$$w_i^T \tilde{w}_k = \log(P_{ik}) = \log(X_{ik}) - \log(X_i)$$

여기서 X는 위의 co-occurrence행렬이고, $X_ik$는 두 단어의 이웃 횟수, $X_i$는 이 단어의 등장 횟수이다.

 

여기서 $\log(X_i)$는 문맥단어 k와는 무관하다. 이 값은 단어 i 자체의 고유 속성이다.

따라서 $b_i$라고 대체해보자. 앞에서 얘기한 대칭성을 확실히 지키기 위해 문맥 단어 $k$에 대한 편향 $\tilde{b}_k$도 도입해보자.

$$w_i^T \tilde{w}_k + b_i + \tilde{b}_k = \log(X_{ik})$$

 

편향(보정치)를 빼고 보면 꽤나 단순한 식이다.

두 단어 벡터의 내적이 그 둘의 co-occurrence빈도의 로그값과 같아야한다는 의미이다.

우리는 $w_i, w_j$의 비율관계를 얘기하고 있었는데 식에서는 $w_j$가 사라졌다.

식을 변형하므로써 $\log(X_{ik})$를 목표로 두 벡터를 따로 학습할 수 있게 된 것이다.

 

위 식은 두 가지 문제가 있다.

1. X행렬의 대부분의 값이 0이고, 로그 안에 0이 있을 경우 음의 무한대를 가진다는 문제

2. 0과는 반대로 너무 자주 등장하는 단어들은 희귀한 단어의 학습을 방해한다는 문제

 

따라서 가중치 함수 $f(X_{ij})$ 를 도입해 최종 objective function을 만들었다.

$$J = \sum_{i,j=1}^{V} f(X_{ij}) \left( w_i^T \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij} \right)^2$$

 

이 가중치 함수는 아래의 성질을 만족해야한다.

1. $f(0)=0$이다. 즉 0이 아닌 쌍만 학습에 참여된다.

2. 증가함수여야한다. 빈번할 수록 더 큰 영향이 있어야하기 때문이다.

3. x값이 클 때는 증가량이 적다.

 

따라서 논문에서는 아래와 같은 함수를 실험을 통해 생각했다.

 

여기서 $x_{max}$는 컷오프(cut-off) 값으로 논문에서는 100으로 설정하였고, $\alpha$는 실험적으로 0.75가 최적임을 발견했다. $\alpha=1$인 선형 함수보다 $\alpha=0.75$를 사용하면 빈도가 낮은 단어들의 가중치를 상대적으로 덜 깎아내리게 되어, 드문 단어들의 정보도 충분히 학습에 반영될 수 있다.

흥미롭게도 이 $3/4$라는 지수는 Word2Vec의 음성 샘플링(Negative Sampling) 분포에서 사용된 지수와 동일하다.


3.2. Complexity of the model

X행렬이 $V \times V$으로 꽤나 커보이지만, 실상은 많은 부분이 0이므로 최종 objective function에 시그마가 있더라도 계산이 많지 않다.

따라서 모델의 실제 복잡도는 X의 0이 아닌 원소 수 이다.

 

이 값은 전체 말뭉치의 크기와 어떤 관계를 가지는지 알아보자.

단어 쌍의 출현횟수는 그 쌍의 빈도 순위를 통해 정해진다고 먼저 가정했다.

단어 쌍의 빈도 순위(rank)를 $r_{ij}$라고 할 때, 공기 빈도 $X_{ij}$는 다음과 같이 모델링된다. k는 상수이다.

식1

말뭉치의 전체 단어 수 $|C|$는 X행렬의 모든 원소의 합과 비례하기 때문에

이 식에서 마지막 항 $H_{n,m}$은 일반화된 조화수(Generalized Harmonic Number)이다. 합의 상한선인 $|X|$는 행렬 $X$의 0이 아닌 원소의 개수이며, 이는 동시에 $X_{ij} \ge 1$을 만족하는 최대 순위 $r$과 같다. 

 

조화수는 아래처럼 계산된다.

$H_{n,s}​=\sum_{k=1}^n \frac{1}{k^s}$​

 

식1에서 $X_{ij}$가 1이라면, 즉 이 단어쌍은 한번 나왔다면, 1이 순위상 가장 낮을 것이기 때문에 $|X|$번째 순위를 가질 것이다.

따라서 $k \approx |X|^\alpha$이다.

따라서 아래의 결과를 얻는다.

조화수에서 $|X|$이 매우 크면 리만 제타 함수$\zeta(s)$를 사용한 급수로 확장이 가능하다.

이를 이용해서 계산하면

이렇게 되고, 실제 말뭉치를 분석한 결과 $\alpha$는 1.25정도임을 알았다.

위 식에서 $\alpha$가 1보다 크면 두 번째 항이 지배적이 된다.

그래서 $$|X| \sim |C|^{1/1.25} = |C|^{0.8}$$

 

따라서 GloVe모델의 복잡도는 $O(|C|^{0.8})$이다.

1. 어휘 수가 수백만개일때 $V^2$정도의 연산은 너무 많지만, $|C|^{0.8}$은 현실적으로 계산 가능한 범위이다.

2. Skip-Gram, CBOW는 말뭉치 전체를 스캔해야 하므로 데이터 크기에 선형적으로 비례하는 $O(|C|)$의 복잡도를 가진다.

GloVe의 $O(|C|^{0.8})$은 $C$가 커질수록 $C$와의 격차가 벌어지므로, 데이터가 방대해질수록 훈련 속도 면에서 이득이다.

3. 매우 큰 데이터에서도 효율적 학습이 가능하다. 연구진들은 420억 토큰 규모의 데이터셋으로 입증했다.

 


4. Experiments

<성능>

1. 단어유추 작업

"Athens : Greece :: Berlin :?" 

glove의 성능이 좋은 것을 볼 수 있다.

GloVe는 행렬 분해 방식을 사용했는데도 유추 성능이 잘 나왔다.

이전의 행렬분해는 유추가 약하다는 통념을 깨트리고 선형구조를 잘 학습할 수 있다는 것을 보여주었다.

2. 단어 유사도 평가

사람이 판단한 단어 유사도 점수와 비교

역시나 GloVe가 대부분 우세한 결과를 보여주었다.

3. 개체명 인식(NER)

 


<파라미터 변화에 따른 성능과 학습 속도 비교>

1. 벡터 크기 및 윈도우 사이즈

벡터 차원이 200~300차원일 때 성능 효율이 가장 좋고,

의미론적(Semantic) 작업에는 큰 윈도우가,

문법적(Syntactic) 작업에는 작은 윈도우가 유리하다는 것을 알 수 있다.

2. 학습속도

동일한 정확도에 도달하는 데 걸리는 시간을 비교했을 때, GloVe가 Word2Vec보다 더 적은 학습 시간(또는 반복 횟수)으로 더 높은 성능에 수렴한다.

 


<매우 짧은 요약>

1. GloVe의 아이디어 : 단어확률 사이 비율을 보존하자

 

2. GloVe의 obj function : $J = \sum_{i,j=1}^{V} f(X_{ij}) \left( w_i^T \tilde{w}_j + b_i + \tilde{b}_j - \log X_{ij} \right)^2$

 

3. GloVe의 학습 복잡도 : $O(|C|^{0.8})$ , skip-gram, CBOW보다 좋다.

 

4. 학습만 빠른게 아니고 성능도 최고