본문 바로가기

DATA SCIENCE/NLP

[NLP] GloVe (Global Word Vectors)

이 포스트는 책 '한국어 임베딩(자연어 처리 모델의 성능을 높이는 핵심 비결 Word2Vec에서 ELMo, BERT까지, 이기창 저)'을 기반으로 작성되었습니다.

GloVe (Global Word Vectors)는 2014년 미국 스탠포드대에서 개발된 워드 임베딩 기법이다.
(논문 pdf : https://www-nlp.stanford.edu/pubs/glove.pdf)

기존의 임베딩 기법인 Word2Vec은 단어 간 유사도 측정은 잘 할 수 있었으나, 사용자가 지정한 window size 내 문맥만 학습하기 때문에 말뭉치 전체에 대해 학습하기에는 어려웠다. 또한, LSA는 말뭉치 전반적인 통계량은 잘 파악되었지만 단어간 유사도 측정은 잘 하지 못한다는 단점이 있었다.

GloVe는 이러한 Word2Vec과 LSA의 단점을 극복하여, 단어 벡터 간 유사도를 잘 측정하면서 말뭉치 전체에 대한 통계량을 잘 반영할 수 있는 임베딩 기법을 목표로 만들어졌다.

목적함수는 두 단어의 동시 등장 확률인 임베딩된 두 단어 벡터 사이 내적 값과 말뭉치 전체에서의 동시 등장 빈도 로그 값 (logX_ij) 차이가 최소화되는 것을 목적으로 정의되었다.
먼저 단어-문맥 행렬 X를 만들고, 목적함수를 최소화하는 임베딩 벡터를 찾기 위해 행렬 분해를 한다. 두 단어 벡터가 들어 있는 행렬을 처음에 랜덤값으로 부여한 다음, 목적함수를 최소화하는 방향으로 값을 바꾸면 된다.

목적함수에 대한 증명은 다음과 같다.

 

Python 코드

!pip install glove_python
from nltk.tokenize import word_tokenize
from glove import Corpus, Glove

result = [word_tokenize(sentence) for sentence in text]

corpus = Corpus() 
corpus.fit(result, window=5)

glove = Glove(no_components=100, learning_rate=0.05)
glove.fit(corpus.matrix, epochs=20, no_threads=4, verbose=True)
glove.add_dictionary(corpus.dictionary)

glove.most_similar("word")

 

반응형

'DATA SCIENCE > NLP' 카테고리의 다른 글

[NLP] 가중 임베딩  (0) 2020.05.22
[NLP] Swivel (Submatrix-Wise Vector Embedding Leamer)  (0) 2020.05.18
[NLP] 잠재 의미 분석 (LSA)  (0) 2020.05.18
[NLP] FastText  (0) 2020.05.17
[NLP] Word2Vec (Skip-gram & CBOW)  (0) 2020.05.04