word embedding을 하는 또 다른 모델 Glove의 아이디어
1. Glove
입력단어,출력단어가 한 윈도우 내에 동시에 얼마나 나왔는지를 계산하는 co-occurrence matrix를 고려하여
동일한 단어쌍을 반복적으로 학습하는 일을 피하고자했다.
두 벡터의 내적에 이러한 co-occurrence matrix를 고려한 점을 loss function으로 나타내었다.
학습이 Word2Vec보다 빠르고 작은 단어뭉치에도 효과적이라고 알려져있다.
Word2Vec은 특정한 입출력 단어 쌍이 자주 등장하는 경우 그들이 자연스럽게 여러번 내적되어 비례하여 유사도가 커지는데
Glove는 중복되는 단어쌍을 미리 계산하여 벌점화하여 중복계산을 줄여 학습이 빠르다는 것이다.
아무튼 두 모델 모두 단어의 embedding vector를 구한다. 성능도 꽤 비슷한것 같다
잘 나온건 Word2Vec이랑 차이가 없다
Glove는(Word2Vec도 마찬가지라는데?) 공식홈페이지에서 이미 대용량 text data에 대한 사전학습된 embedding vector들을 제공하고 있다.
이걸 그냥 다른 task할 때 가져가서 쓰면 된다.
2. co-occurrence matrix는 도대체 뭘까?
Word2Vec는 예측 기반으로 단어 간 유추 작업에는 뛰어나지만,
임베딩 벡터가 윈도우 크기 내에서만 주변 단어를 고려하기 때문에 코퍼스의 전체적인 통계 정보를 반영하지 못한다.
이러한 한계를 지적하며 등장했다.
행과 열을 전체 단어 집합의 단어들로 구성하고, i 단어의 윈도우 크기(Window Size) 내에서 k 단어가 등장한 횟수를 i행 k열에 기재한 행렬을 co-occurrence matrix라고 부른다.
예를 들어 보이면
3. 도대체 co-occurrence probability는 무엇일까?
동시 등장 확률 P(k | i)는 동시 등장 행렬(co-occurrence matrix)로부터 특정 단어 i의 전체 등장 횟수를 카운트하고,
특정 단어 i가 등장했을 때 어떤 단어 k가 등장한 횟수를 카운트하여 계산한 조건부 확률
P(k | i)에서 i를 중심 단어(Center Word), k를 주변 단어(Context Word)라고 했을 때,
위에서 배운 동시 등장 행렬에서 중심 단어 i의 행의 모든 값을 더한 값을 분모로 하고 i행 k열의 값을 분자로 한 값
논문에서 제안한 동시등장확률표
ice가 등장했을 때 solid가 등장할 확률 0.00019은 steam이 등장했을 때 solid가 등장할 확률인 0.000022보다 약 8.9배 크다는 겁니다.
그도 그럴 것이 solid는 '단단한'이라는 의미를 가졌으니까 '증기'라는 의미를 가지는 steam보다는 당연히 '얼음'이라는 의미를 가지는 ice라는 단어와 더 자주 등장할 겁니다.
gas는 ice보다는 steam과 더 자주 등장하므로, P(gas l ice) / P(gas l steam)를 계산한 값은 1보다 훨씬 작은 값인 0.085가 나옵니다.
반면, k가 water인 경우에는 solid와 steam 두 단어 모두와 동시 등장하는 경우가 많으므로 1에 가까운 값이 나오고,
k가 fasion인 경우에는 solid와 steam 두 단어 모두와 동시 등장하는 경우가 적으므로 1에 가까운 값이 나옵니다.
4. Glove의 핵심 아이디어
glove의 핵심아이디어는 '임베딩 된 중심 단어와 주변 단어 벡터의 내적이 전체 코퍼스에서의 동시 등장 확률이 되도록 만드는 것’
$$loss = \sum_{i,j} f(X_{ij})(w_{i}^{T}w_{j} - logX_{ij})^{2}$$
아무튼 핵심아이디어는 수식적으로
$$w_{i} \cdot w_{k} \approx log P(k|i)$$
로그를 쓰는 이유는 계속 말하지만 곱연산보다 합연산이 계산이 쉬워서
이 원리로 loss를 유도하다보니까 이런 결론에 도달한거
아무튼 그래서 제곱합을 최소화하겠지?
근데 여기서 마지막으로 든 의문이
동시 등장 행렬 X에는 많은 값이 0이거나, 동시 등장 빈도가 적어서 많은 값이 작은 수치를 가지는 경우가 있을 수 있다는 거임
GloVe의 연구진은 동시 등장 행렬에서 동시 등장 빈도의 값 $X_{ik}$이 굉장히 낮은 경우에는 정보에 거의 도움이 되지 않는다고 판단합니다.
그래서 이에 대한 가중치를 주는 고민을 하게 되는데 GloVe 연구팀이 선택한 것은 바로
$X_{ik}$의 값에 영향을 받는 가중치 함수(Weighting function) $f(X_{ik})$를 손실 함수에 도입하는 것
그래서 최종적으로 loss함수는 이렇게 나왔다.
$$J = \sum_{i,j = 1}^{V} f(X_{ij})(w_{i}^{T}w_{j} + b_{i} + b_{j} - logX_{ij})^{2}$$
동시등장 빈도가 작을수록 정보량을 덜 주겠다 이 말이겠지
5. Glove와 Word2Vec은 무슨 차이가 있을까?
Levy and Goldberg 는 GloVe 와 Word2Vec 이 이론적으로는 같음을 증명
어느 것이 더 뛰어나다고는 단정짓지는 못한다. 전부 사용해보면서 성능이 더 좋은 것을 선택한다.
일반적인 Word2Vec의 loss함수는 cross entropy loss로
$$J = -\sum_{i=1}^{V}\sum_{j=1}^{V}X_{ij}logQ_{ij}$$
근데 자기들이 정의한 notation으로
새벽에 읽어서 모르겠는건지 아무튼 이해하기 어려운 무슨 소리로 자기들 생각에
이렇게 된다는 것이 좋은 것인데
마지막으로 고려한 사항이 X의 빈도수여서 가중함수를 주어서
이런 형태로 만들었다 이거임… 아무튼 LOSS에서 glove랑 word2vec이 좀 차이가 있다..
6. Glove와 Word2Vec은 어떤 단점이 있을까?
Glove 같은 경우는 위에서도 co-occurrence matrix를 계산한다는 점에서 계산비용이 엄청 크다.
vocab size가 1만개만 되어도 matrix의 크기는 1억이다..
word2vec의 아이디어중 하나인 cosine similarity는 모든 관계를 비슷한 관계라고 본다
무슨말이냐면 유의관계나 반의관계, 상하관계, 내포 관계 등 분명 다른 의미적 차이가 있음에도 이것을 고려하는지가 의문이다.
word2vec은 단순히 주변에 단어가 등장했냐 안했냐정도만 파악했다. 이것의 극복으로 glove가 등장했다는 점.
naive bayes에서 겪었던 상황대로 훈련데이터에 동시등장쌍이 없는경우,
동시등장쌍에서 중요도를 고려한 embedding, 동음이의어 처리 문제, oov(사전에 없는 단어)문제에도 한계점이 있어 여러 방법이 제시되었다고 한다..
'딥러닝 > NLP' 카테고리의 다른 글
RNN의 여러가지 유형(one to one, one to many, many to one, many to many) 되돌아보기 (0) | 2023.07.11 |
---|---|
Vanilla RNN에서 hidden vector로 예측값을 만드는 과정 (0) | 2023.07.11 |
NLP에서 language model의 역사 훑어보기 (0) | 2023.05.08 |
text data를 다루는 NLP + computer vision과의 활용 - image captioning 기본 배우기1 (0) | 2023.02.27 |
RNN(Recurrent Neural Network)과 LSTM(Long Short-term Memory) 기본 개념 되돌아보기 (0) | 2022.12.19 |