NLP study

[논문 리딩] Efficient Estimation of Words Representations in Vector Space - Word2Vec(CBOW, Skip-gram)

2로 접어듦 2023. 3. 14. 12:14

들어가기에 앞서

논문을 참고하며 작성한 글로, 잘못 이해한 부분이 있을 수 있습니다. 참고 바랍니다.

 

논문의 저자

Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean, (2013)

 

논문 요약


Continuous 하고, distributed 한 word의 representation을 보다 high quailty로 제시하고자 두 개의 novel architecture를 소개한다. 단어를 표현하는 continuous representation 이전 기법들에 비해 computational cost를 줄이고, 성능을 개선시켰다.

 

CBOW, Skip-Gram을 소개한다.

이전의 NNLM에서 가장 많은 computational complexity를 발생시키는 구간은 Hidden layer였다. Softmax의 연산이 전체 corpus에서 계산되므로 상당한 자원이 소모되는데, CBOW와 Skip-Gram에서는 이러한 Hidden layer를 제거하고도 높은 성능을 보일 수 있었다.

 

선행 기술


1. N-Gram 기법

고전 NLP에서는 문장을 만들어 나갈 때, 다음 단어가 무엇인지 예측하는 과정을 통계에 기반한 확률적인 방법으로 접근하였다.(statistically) 조건부확률을 이용해서, 이전에 나온 단어들을 토대로 다음 단어가 나올 확률을 전체 vocabulary에서 계산한 뒤 가장 높은 확률을 갖는 단어를 다음 단어로 예측한다.("The brown fox" 다음에 나올 단어(jumps)를 조건부 확률로 계산)

여기서 조건부 확률을 계산할 때 앞의 N 개의 단어만 가지고 조건부 확률을 계산하는 통계적 기법이 N-gram 이다.

 

 

2. Neural Network Language Model

word representation, word embedding에 대한 개념이 도입되었다. Machine learning techniques가 지속적으로 발전함에 따라 large dataset에 기반한 모델 학습을 수행할 수 있었기 때문이다.

Feedforward Neural Net Language Model이라고도 불린다.

 

N개의 word를 1-of-V coding으로 인코딩 → Projection layer → Hidden layer → output 과 같은 구조로 구성되어 있다.

Projection layer는 activation function이 없는 선형적인 network이다. N * D로 인코딩 된 input words들이 Projected 될 때 공유되는 가중치를 갖는다(shared parameters)

Hidden layer는 activation function 을 통과하는 non-linear layer이다. 이 layer의 가중치 값은 공유되지 않는다.

앞서 문장에서 나온 N 개의 단어들로 예측하고자 하는 다음 단어의 representation을 predict하는 구조로 되어있다
(이로써 embedding layer가 단어를 represent 할 수 있게 학습된다)

 

아래 pytorch 로 구현된 NNLM 코드를 보면 이해가 쉽다.

https://github.com/graykode/nlp-tutorial/blob/d05e31ec81d56d70c1db89b99ab07e948f7ebc11/1-1.NNLM/NNLM.py#L50

 

 

3. Latent Semantic Analysis(LSA)

고전 기법이다. 단순한 Bag-of-word에서 0 과 1 로 이루어져있는 Voucabulary 안에서는 단어 사이의 semantic, similarity 등의 정보를 확인할 수가 없다는 단점을 극복하고자 도입된 개념이다(TF-IDF 로도 이 단점을 극복할 수 없다.)

Singular Value Decomposition(SVD), 즉 특이값 분해라는 수학적 기법을 사용하여 latent(=hidden) feature, 즉 semantic 정보를 가져오려고 하는 기법이다. 이 방법 또한 word representation을 구하려고 하는 기법이다.

 

 

"Topic", "document" 라는 개념이 도입되었다. 이 LSA라는 기법을 통해 Topic Similarity를 계산할 수 있게 되었다.

"Topic" 이란 "A collection of words that co-occur" 으로, 서로 연관성 있는 어떠한 단어의 집합이라고 볼 수 있으며, "document" 란 "A collection of words - the instances or 'rows' of our dataset" 으로, 단어들이 들어있는 총 집합체라고 볼 수 있다.

참고: https://www.youtube.com/watch?v=hB51kkus-Rc 

 

(words x documents) 사이즈의 행렬 A 를 SVD 하여 U, ∑, V 로 분해하고, Truncate(잘라내기. 압축)함으로써 기존 A 행렬을 변화시킴으로써 Latent Semantic 정보를 갖는 A' 행렬을 추출하는 것이다.

참고: https://www.youtube.com/watch?v=OvzJiur55vo 

document similarity에 관심을 갖는 것이므로, ∑, V'의 연산에 초점을 맞춘다. 이 둘의 연산으로 나오는 A'의 행렬은 semantic 정보를 갖는다고 추측할 수 있다.

이미지 출처: Youtube, Minsuk Heo: LSA

이 기법은 target이 존재하지 않아, unsupervised learning이라고 할 수 있다.

단어, 토픽들의 등장 횟수가 정규분포를 따라야 의미있는 기법이라는 얘기가 있다(확인해보지 않았음)

 

4. Latent Dirichlet Allocation(LDA)

단어가 등장할 확률분포를 바탕으로 문서(Document)를 생성하는 어떠한 모델링 기법이다. 이러한 Document modeling으로 새로운 document에서의 어떠한... similarity를 계산할 수 있게 되는 기법인 듯 하다(아직 정확하게 이해하지 않았다.)

키워드 클러스터링, 모델링 등에 쓰일 수 있다.

아래 링크를 참조하면 좋을 듯 하다.

참고: https://4four.us/article/2010/11/latent-dirichlet-allocation-simply

 

 

논문에서 제시하는 기법


0. Hierarchical softmax

이 논문의 후속 논문("Distributed Representations of Words and Phrases and their Compositionality")에서 보다 자세히 설명한다. Softmax의 단점은 모든 단어로부터의 확률을 계산해야한다는 점인데, Vocabulary 안에 있는 단어들을 자주 등장하는 순서대로(정렬에 대한 것은 더 찾아봐야 한다) 나열한 뒤 트리 형태로 구성하면, 소프트맥스의 연산량을 log 수준으로 감소시킬 수 있다. 이것이 '계층적 소프트맥스'의 개념이다. 아래 첨부한 참고 링크에서 보다 자세히 설명한다.

저자들은 이 계층적 소프트맥스를 구현할 때 '허프만 이진트리' 를 사용했다고 밝혔다.

 

0. Huffman binary tree

허프만 코딩(Huffman coding)이 원래 이름이며, 인코딩과 같이 '압축'하는 하나의 기법이다. 하나의 자료구조!

Frequency를 기준으로 이진 트리를 형성한다. 단어의 등장에 대한 빈도 수를 기준으로 정렬한 뒤, 우선순위 큐를 이용하여 빈도가 가장 낮은 두 단어를 최소 힙에 저장한 뒤, 그 둘을 child 로 하는 새로운 노드를 생성한다. 해당 노드까지 가는 데에 external path weight를 최소화하는 것이 Huffman binary tree의 목표이다.

궁극적으로 하나의 Root node를 가질 때까지 반복된다. Root node로부터 왼쪽은 0, 오른쪽은 1로 인코딩된다.

65라는 값을 가진 노드 생성 이후, U,D가 가장 낮은 빈도 수를 보이기 때문에 79라는 노드가 별개로 생성된다.

 

1. Continuous Bag-of-Words(CBOW)

기존의 feedforward Neural Net LM에서의 Hidden layer(non-linear layer)를 제거했다. 하지만 Projection layer는 남겨두었고, NNLM 과 마찬가지로 Projection layer로의 weight는 공유하도록 했다. 이로써 "all words get projected into the same poision (their vectors are averaged)."

4개의 history word와 4개의 future word로부터 가운데 target word를 correctly classify 할 수 있도록 log-linear classifier를 학습시켰다. NNLM에서는 history words로부터 다음 단어를 예측하도록 학습시킨 것과는 살짝 차이가 있다.

 

 

2. Skip-Gram

Continuous skip-gram architecture는 CBOW와 비슷하지만, 현재 단어로부터 "predict words within a certain range before and after the current word"를 수행한다. 논문에서는 C = 5로 설정한 뒤, 랜덤으로 1~C사이의 숫자 R을 골라 2*R개의 주변단어를 예측하도록 했다.

출처: 논문

 

결과 및 의의


1. Computational cost 감소

이전의 NNLM 보다 간단한 아키텍쳐임에도 불구하고 학습 속도는 빨라졌되, the higher quality word vectors 를 획득할 수 있었다.

또한 기존의 다른 모델들에 비해서, word similarity를 평가하는 task에서 State-of-the-art performance을 달성했다.

 

2. 흥미로운 결과

similarity of word representation이 syntatic regularity를 넘어서는 결과를 가져왔다는 점이다. 각 단어를 나타내는 word vectors에 대한 algebraic operations를 통해서, similar word vector representation을 획득할 수 있었다는 점이다.

 

출처: 논문

 

참고한 자료


이해한 개념이 맞는지 확인하는 용도로 참고하였습니다.

1. https://arxiv.org/abs/1301.3781

2. https://wikidocs.net/book/2155 N-Gram

3. https://github.com/graykode/nlp-tutorial/blob/d05e31ec81d56d70c1db89b99ab07e948f7ebc11/1-1.NNLM/NNLM.py#L50 NNLM 파이토치 코드

4. https://uponthesky.tistory.com/15 계층적 소프트맥스

5. https://paperswithcode.com/method/hierarchical-softmax

6. https://leimao.github.io/article/Hierarchical-Softmax/

7. https://lipcoder.tistory.com/187  허프만 트리 개념

8. https://cgi.luddy.indiana.edu/~yye/c343-2019/huffman.php 허프만 트리 자료구조

9. https://www.youtube.com/watch?v=hB51kkus-Rc LSA

10. https://4four.us/article/2010/11/latent-dirichlet-allocation-simply LDA

 

논문 리딩 흔적


0313 efiifcient estimation of word representations_230313_235840.pdf
4.19MB