-
Word Embedding 02 ( Glove / FastText ) 정리AI/NLP 2021. 12. 31. 17:12728x90
[논문 제목]
1. GloVe : global vectors for word representation (https://nlp.stanford.edu/pubs/glove.pdf)
2. FastText : Enriching Word Vectors with Subword Information (https://arxiv.org/abs/1607.04606)
들어가기 앞서
https://asidefine.tistory.com/152
GloVe ( 논문명 glove : global vectors for word representation )
* 기존 방법의 한계
단어를 벡터로 표현하는 방법엔 크게 Matrix factorization과 local context window methods가 있습니다. 전자는 LSA(latent semantic analysis)와 같은 방법에 쓰이고 후자는 이전에 본 skip gram model에 쓰이는 방법이죠. 두 방법은 어떤 것이 더 좋은 것이다라고 하기엔 서로의 장단점이 정 반대입니다. skip gram과 같은 모델은 단어를 표현하고 유추하는데 좋은 성능을 보이지만, 한 문장의 window 단위로 학습을 하기 때문에 전체적인 말뭉치의 통계적 정보 나타내는데는 별로입니다. 이 co-occurrence statistics 정보가 자연어 처리에 얼마나 중요한지는 아직 모르겠지만, 이것이 큰 단점으로 작용한다고 합니다. 결과에 대한 설명력이 부족한건가 싶기도 하고요. 반면 LSA와 같은 모델은 통계적 정보를 효율적으로 나타내지만 단어를 표현하는데에는 좋지 않고 중간에 SVD를 하는 과정에서 계산량이 굉장히 많기도 합니다. Matrix factorization 방법은 global 하게 단어를 표현하지만 skip gram 모델은 학습의 특성 때문에 local하게 단어를 학습하며 표현하죠.
* Window based Co-occurrence Matrix (윈도우 기반 동시 등장 행렬)
GloVe는 Matrix factorization의 global한 co-occurrence statistics 정보와 skip gram의 vector 표현을 가져와 “윈도우 기반 동시 등장 행렬”을 사용합니다.
단어의 동시 등장 행렬은 행과 열을 전체 단어 집합의 단어들로 구성하고, i 단어의 윈도우 크기(Window Size) 내에서 k 단어가 등장한 횟수를 i행 k열에 기재한 행렬을 말합니다. 윈도우 크기가 N일 때는 좌, 우에 존재하는 N개의 단어만 참고하게 됩니다.
•I like deep learning•I like NLP•I enjoy flying* 동시 등장 확률(Co-occurrence Probability)
이렇게 만든 동시 등장 행렬을 통해 동시 등장 확률을 구합니다. 동시 등장 확률 P(k | i)는 동시 등장 행렬로부터 특정 단어 i의 전체 등장 횟수를 카운트하고, 특정 단어 i가 등장했을 때 어떤 단어 k가 등장한 횟수를 카운트하여 계산한 조건부 확률입니다.
P(k | i)에서 i를 중심 단어(Center Word), k를 주변 단어(Context Word)라고 했을 때, 위의 동시 등장 행렬에서 중심 단어 i의 행의 모든 값을 더한 값을 분모로 하고 i행 k열의 값을 분자로 한 값이라고 볼 수 있습니다.
=> " GloVe는 동시 등장 행렬과 동시 등장 확률을 이용해 임베딩된 중심 단어와 주변 단어 벡터의 내적이 전체 코퍼스에서의 동시 등장 확률이 되도록 모델을 학습합니다 "
FastText ( 논문명 Enriching Word Vectors with Subword Information)
* 학습 방법
-> "하나의 단어를 n개의 내부 단어(Subword)로 나눈다"
1. <, >를 도입하여 단어의 시작과 끝을 표현
# n = 3인 경우 <ap, app, ppl, ple, le>
2. 단어 그 자체를 n gram의 집합에 포함
# n = 3인 경우 <ap, app, ppl, ple, le>, <apple>
3. 실제로 사용할 때는 n의 최솟값을 3 이상으로, 최댓값을 6 이하로 두고 모든 경우에 대한 n-gram을 구함
# n = 3 ~ 6인 경우 <ap, app, ppl, ppl, le>, <app, appl, pple, ple>, <appl, pple>, ..., <apple>
장점 1) 모르는 단어(Out Of Vocabulary, OOV)
: 데이터 셋만 충분한다면 위와 같은 내부 단어(Subword)를 통해 모르는 단어(Out Of Vocabulary, OOV)에 대해서도 다른 단어와의 유사도를 계산할 수 있습니다.
: 가령, FastText에서 birthplace(출생지)란 단어를 학습하지 않은 상태라고 해봅시다. 하지만 다른 단어에서 birth와 place라는 내부 단어가 있었다면, FastText는 birthplace의 벡터를 얻을 수 있습니다. 이는 모르는 단어에 제대로 대처할 수 없는 Word2Vec, GloVe와는 다른 점입니다.
장점 2) 단어 집합 내 빈도 수가 적었던 단어(Rare Word)
: FastText의 경우, 만약 단어가 희귀 단어라도, 그 단어의 n-gram이 다른 단어의 n-gram과 겹치는 경우라면, Word2Vec과 비교하여 비교적 높은 임베딩 벡터값을 얻습니다. ( Word2Vec의 경우에는 등장 빈도 수가 적은 단어(rare word)에 대해서는 임베딩의 정확도가 높지 않다는 단점이 있었습니다. )
: FastText가 오타(Typo)나 맞춤법이 틀린 단어 등 노이즈가 많은 코퍼스에서 강점을 가진 것 또한 이와 같은 이유입니다.
Reference
https://www.sallys.space/blog/2018/04/30/glove/
https://yngie-c.github.io/nlp/2020/06/03/nlp_glove/
728x90'AI > NLP' 카테고리의 다른 글
NLP Benchmark Datasets 정리 (GLUE / SQuAD/RACE) (0) 2022.02.04 RoBERTa: A Robustly Optimized BERT Pretraining Approach 정리 (0) 2022.02.04 Word Embedding 3 : Deep Contextualized Word Representations (ELMo) 정리 (0) 2022.01.17 Word Embedding 01 (One-hot Encoding / Word2Vec ) 정리 (0) 2021.12.31 Seq2Seq & Attention & Transformer 정리 (0) 2021.12.31