Medium 노트

GloVe란 무엇인가?

Jonchann 2018. 10. 6. 20:58

원문 기사: https://towardsdatascience.com/emnlp-what-is-glove-part-i-3b6ce6a7f970

[EMNLP] What is GloVe? Part 1~Part5 - Brendan Whitaker

이 글에 나오는 모든 사진은 원글에서 가져온 것임.


공기(共起) 행렬을 이용한 비지도 워드 embedding 수법에 대한 소개

GloVe 제안 논문: http://www.aclweb.org/anthology/D14-1162


GloVe: Global Vectors (for word representation)

-> 전역행렬(global matrix) 분해와 local(국소, 국지) 문맥 window 이용


전역 행렬 분해(Global matrix factorization)

-> 자연언어처리 분야에서 전역 행렬 분해란 거대한 단어-빈도 행렬에서 계수(rank) reduction을 하기 위해 선형대수의 행렬 분해법을 이용하는 수법이다. 행렬들은 일반적으로 단어-문서 빈도를 표현하며 행은 단어를 열은 문서를(혹은 단락을) 나타낸다. 혹은 단어-단어 빈도를 나타낼 때에는 행과 열 둘 다 단어를 나타내며 공기(co-occurrence) 정도를 측정한다.

-> 단어-문서 빈도 행렬에 적용되는 '전역 행렬 분해'는 흔히들 latent semantic analysis(LSA)[각주:1]라고 한다. LSA에서 고차원 행렬은 singular value decomposition(SVD, 특이값 분해)[각주:2]를 통해 차원을 줄여간다.



Local 문맥 window

-> 단어 embedding 모델의 또 다른 family는 corpus를 line-by-line으로 window를 통과시키고 Skip-gram model이나 CBoW를 학습하면서 의미를 학습한다. 



skip-gram과 CBOW 둘 다 적용한 예.

문맥 window는 파란색이로 중심 단어 주변 +-2 단어를 관련 단어로 본다.


GloVe 논문의 저자는 문맥 window에 기반한 수법은 전역 corpus 통계치를 학습하지 않는 약점을 수반한다고 했다. 결과를 보면 반복과 large-scale 패턴은 전역 행렬 분해를 이용한 이러한 모델들(skip-gram, CBoW)로는 잘 학습되지 않는다는 것이다.


공기 확률(Co-occurrence probabilities)

-> 위에서 언급한 것과 같이 GloVe의 저자는 raw한 공기 확률을 대신 학습하는 실험을 통해 단어-단어 관계속 subtleties(중요한 세부 요소들)를 더 잘 구별(discriminate)하는 공기 확률의 비율(ratio)을 학습하는 것이 더 효과적이라는 사실을 발견했다.

-> 우리가 두 개의 단어 i = ice, j = steam 사이의 관계를 배우려 한다고 가정해보자: 우리는 "probe" 단어들로 두 단어의 공기 확률을 평가해 그 관계를 학습할 것이다. 단어 i가 나타나는 문맥에서 단어 j가 나타날 확률을 임의의 단어 i와 임의의 단어 j의 공기 확률이라고 정의한다. 이는 아래 식으로 나타낼 수 있다.



X_i: 단어 i의 문맥에서 어떠한 단어가 나타날 경우의 수

-> 단어 i가 나타나는 문맥에서 단어 k가 나타날 경우의 수의 합.

우리가 prob 단어로 i = ice와 가깝지만 j = steam과는 가깝지 않은 단어 k = solid를 선택한다면, 우리는 공기 확률 P_{ik}/P_{jk}가 커질 것이라는 것을 예상하고 solid는 steam이 나타나는 문맥보다 ice가 나타나는 문맥에 더 많이 출현할 것이라는 가정에 부합할 것이다. ice는 solid이지만 steam은 아니기 때문이다. 반대로(conversely) k = gas 를 선택한다면 우리는 같은 이유로 위의 확률이 작아질 것이라 예상할 것이다.

-> 그 후에 ice에도 가깝고 steam에도 가까운 water와 같은 단어를 생각하면 확률은 같아질 것이다. 같은 이유로 fashion도 동일한 확률을 가질 것이라는 것을 알 수 있다.


-> i와 j를 식별하는데 별 도움이 되지 않는 단어들은 noise point가 될 것이고 공기 확률은 이러한 noise point를 걸러내는데 도움을 줄 것이다.




수식 설명

-> 저자는 공기 확률 비용이 좋은 소스가 될 것이라는 것을 알아냈기 때문에 만약 두 단어 공간에서 map된 함수가 공기 확률 비율 공간에 대한 문맥 단어를 제대로 비교할 수 있다면 좋을 것이다. F: 함수.



두 단어 사이의 비율에 대한 정보를 encode하고싶기 때문에 벡터 차이(vector differences)를 함수 입력 값으로 사용하도록 하자.


-> 출력이 문맥 단어를 고려한 두 단어 사이의 공기 확률 비율이기 때문에 각 단어를 개별적으로 이용하기 보다는 i와 j 벡터를 비교한 차이를 입력값으로 갖도록 한다. 참고로 확률의 비율은 스칼라 값이다.




-> 다음으로 해결해야 하는 문제는 "문맥 단어들"이라 불리는 특정 단어들에 라벨을 붙이는 작업에서 일반 단어 벡터와 문맥 단어 벡터의 구별은 실제로(reality) 임의적(arbitrary)이라는 것이다: 구별할 수 없다는 뜻. 우리는 아무 문제 없이 이들을 교환(interchange)할 수 있어야 한다. 저자는 이에 대해 함수 F가 추가적인 실수군에서 양의 실수 곱셈군으로의 준동형(homomorphism)[각주:5]이 되야 한다고 했다.

-> '추가'는 함수의 영역(domain)과 target 공간에서의 곱셈 내에서의 추가를 말한다.


-> 위에서 함수의 영역, 특히 실수가 스칼라 값이라고 했는데 이는 어떠한 입력값도 하나의 단어 벡터가 아닌 두 단어 벡터의 내적이 된다는 것을 의미하며 이는 만약 우리가 오직 한 단어만을 입력값으로 받았을 때 스칼라가 되지 못하기 때문이다. 그러니 준동형사상에서 a와 b는 두 개의 임의의 단어 w_a와 v_a, w_b와 v_b의 내적이 된다. V: 단어 벡터가 존재하는 벡터 공간.



-> 벡터간의 차이점을 전부 알고싶기 때문에 domain을 추가하는 것이 아니라 갓법역원(additive inverse)[각주:6] 즉, 차(subtract)를 더할 것이다. 또한 중동형을 원하기 때문에 이는 target 공간의 역수(multiplicative inverse)를 곱하는 것에 해당하며 이 공간은 곱셈에 의한 양의 실수군으로 이루어져있다. 따라서 아래의 식을 갖는다.



-> 유클리디안 공간을 이용하기 위해 저자는 아래와 같은 조건을 만들었다.



-> 이제 이 방정식을 스칼라를 입력값으로 받는 모델과 동일하게 설정할 것이다. 우리는 위의 식들로부터 아래의 식을 얻었고 F(w^T_i * w^~_k) = P_{ik} = X_{ik} / X_i 이다.



여기서 기억해내야 할 것은 X_{ik}는 단어 k가 단어 i의 문맥에서 출현하는 횟수이며 X_i는 단어 i의 문맥에서 출현하는 그 어떤 단어의 출현횟수가 될 것이라는 점이다.


-> '좋은 지점'에서 시작하는 것은 자연 준동형(natural homomorphism)[각주:7]을 가져다주며 이에 대한 분명한 선택지는 어떠한 정수(constant) a를 위한 a^x 타입의 함수가 될 것이다. 이 상황에서는 F가 지수함수(exponential function)가 되도록 하기 위해 e를 사용하는 것이 된다. 그리고 위의 방정식의 양 쪽에 자연로그(natural logarithm)을 취하면 아래와 같은 식을 얻는다.



-> F가 대칭적(symmetry)으로 교환하기 위해서는 즉, w_i와 w_k의 자리를 우변(right hand side)을 바꾸지 않은채로 전환하기 위해서는 -log X_i 항(term)이 위의 방정식에서 사라져야 한다. 하지만 이 항은 단어 k의 선택에 대해 독립적이기 때문에 단어 i에 대한 bias 항으로 바꿀 수 있다. 



이 식에서 두 바이어스 항은 단어 i와 k의 역할을 한다고 보면 되고 이를 수식에 추가한 것으로 덧셈의 교환 가능성(commutativity)은 대칭성을 갖는다. 

-> 하지만 저자는 위의 함수가 공기가 0일 때에는 제대로 역할을 수행하지 못한다는 문제를 언급했으며 이 문제는 인수를 바꾸는 것으로 식을 고치면 해결된다. 즉, log(1 + X_{ik})를 취하면 된다. X_{ik}가 아주 작은 수이거나 0일 때에도(참고로 X_{ik}는 정수) 함수의 가중치가 단어-단어 공기 행렬에 동일하게 적용되었기 때문에 결함(flawed)은 계속 존재했다. 저자는 각 training example에 X_{ik} 변수에 대략적으로(roughly) 비례하는(proportional) 가중치를 적용하는 법을 제안했다. 결과적으로 회귀 혹은 또 다른 알고리즘이 되는지 안되는지에 따라 단어 벡터와 bias들을 학습할 때 낮은 변수는 비슷하게 noisy하기 때문에 공기가 0인 것은 덜 강조되고 높은 공기 변수는 강조된다. 저자는 표현 값을 최소화시킬 때 이를 최소 제곱(a least-squares) 회귀 문제에 포함(incorporate)시켰다.



-> 여기서 f()는 아래 속성을 갖는 가중치 함수이다.

1. f(0) = 0.

-> 만약 f()가 연속적이라 가정한다면 f(x)log^{2}(x)가 무한한 상태에서 최대한 빠르게 0이 되길 원한다. 그렇지 않다면(otherwise) 공기의 정도가 0일 때 우리는 함수가 내적의 규모(magnitude)와 bias를 log를 메꾸기(compensate for) 위해 부풀리는 것(blow up)을 원할지도 모르기 때문이다.


2. f(x)는 감소하지 않아야(nondecreasing) 할 것이다. 이는 행렬의 작은 원소에 가중치를 과하게 부과하지 않도록 하고 큰 수에는 높은 가중치를 부과하도록 할 것이기 때문이다. 저자는 0행렬 X의 원소 중 85%나 갖는 것은 비합리적이라 했다.


3. f(x)는 x의 큰 변수들에 비해(relatively) 작아야 할 것이다. 즉, 너무 빠르게 blow up하지 않는다. x^2보다 빠르다면 그것이 어떤 것이든 제대로 작동하지 않을 것이다.



-> 저자는 alpha승을 취하는 것으로 3/4의 변수가 1의 변수보다 더 좋은 성능을 보인다는 것을 발견했다. 


word2vec과 비슷한 점

-> 저자는 skip-gram 모델을 위한 전역 목적함수로 cross-entropy error의 합을 가중치로 가졌고 word2vec은 cross-entropy error를 오차 함수로 사용했다.

-> 여기에서는 글을 간략히(brevity) 쓰기 위해 생략(omit)한 몇 가지 training 문제를 들면서 이 대신에 최소자승법을 제안했다.

=> 따라서 GloVe는 word2vec의 전역 대상(global objective) 버젼이라 할 수 있다.


-> GloVe 모델은 단어 비유(analogy), 단어 유사성, NER을 포함한 몇 가지 task에서 SVD나 word2vec보다 평균적으로 좋은(beats out) 성능을 보였지만 다른 모델간 훈련 시간을 조절하기 어렵다는 문제점이 있다. 이는 특히 word2vec은 특정 커리큘럼에서 오직 single epoch으로 돌리기 위해 디자인 된 것이고 그 실험들은 무시해도 될 정도로(negligible) 최적값에 가까워지는 가정이 맞든 안맞든 이 가정 하에 default 변수들을 설정했다.


-> GloVe에 의해 생성된 embedding들은 안정적으로 더 큰 평균값을 갖는 것으로 또 다른 desirable한 속성을 보여준다. 여기서 안정성이란 같은 corpus를 이용하고 Wendlandt et al.에서 사용된 metric으로 같은 모델에서 만들어진 두 개의 다른 embeddings의 가변성 측정값을 말한다.



  1. 공기 정보를 이용해 단어의 형태 말고 의미(semantic)가 가까운 단어-단어, 단어-문서, 문서-문서 정보를 찾는 수법. [본문으로]
  2. 실수행렬 혹은 복소수 행렬을 3개의 행렬로 분해(factorization)하는 수법. 특히 역행렬을 구할 수 없을 때, 선형식의 해를 구할 때 활용. [본문으로]
  3. 복소수의 허수부에 덧셈 역원을 취해 얻는 복소수. 복소평면 위에서 서로 켤레인 두 복소수는 x축에 의해 대칭이며 복소수 z의 켤레 복소수의 기호는 z*. [본문으로]
  4. 특이값 분해(SVD)를 이용하여 얻어진 고유값 중 상대적으로 우세한 고유값(low rank)을 이용하여 행렬을 재구성 할 수 있으며 이를 톨해 근사화하는데 이러한 방법을 낮은계수근사법(low-rank approximation)이라 한다. [본문으로]
  5. 준동형사상: R에서 R`로의 사상 f: f(a + b) = f(a) + f(b) f(ab) = f(a)f(b) 라는 두 연산을 보존시킬 때 f를 R에서 R`으로의 준동형사상(ring-homomorphism)이라 한다.준동형사상 f가 일대일 대응일 때 동형사상(ring-isomorphism)이라 한다. [본문으로]
  6. 덧셈에 관한 역원. 어떤 수에 더해서 그 값이 0이 되게 하는 실수. [본문으로]
  7. 덧셈에서 곱셈으로 변환하는 혹은 우리가 필요한 곳에서 적어도 하나의 역수를 갖는 것. [본문으로]