Abstract
- Propose two model architrectures for computing continuous word vector (CBOW, Skip-Gram)
- Propose two modified NNLM model using binary tree
- Introduce new method to measure word similarity
- Show that newly introduced models can be trained on very large model (reduced time complexity)
Previous Works
기존에 있었던 word vector 학습 모델은 크게 두 가지로 나눌 수 있었다.
1. SVD(Singular Value Decomposition) 기반 모델
LSD(Latent Semantic Analysis) 등이 해당한다. Singular value decomposition을 DTM에 적용하면
2. Neural network 기반 모델
2.1 NNLM
반면 이 논문에서 관심을 가지는 대상은 neural network 기반 모델이다. 이 모델은 크게 NNLM 모델과 RNNLM 모델이 있는데, 이 두 가지를 나누어 설명해보고자 한다.

NNLM(feedforward Neural Network Language Model)은 Bengio(2003)에 의해서 제안된 모델이고, neural network를 사용해 실수 범위 내에 있는 continuous word vector를 만드는 방식이다.
NNLM은 크게 네 개의 layer로 구성된다.
input layer
projection layer
hidden layer
output layer
input layer의 input으로는 각 단어의 one-hot encoding vector가 들어간다. center word 이전과 이후

이를 수식으로 나타내면 다음과 같다.
projection layer가 여타 hidden layer와 비교되는 점은, input vector의 concatenation으로만 이루어지기도 하지만, activation function이 매개하지 않고 단순히 lookup table의 한 row 값이 그대로 전달된다는 점에 있다. input vector가 one-hot vector이기 때문이다.
이 뒤 hidden layer와 output layer 사이에는 각각
이때 computation complexity는 다음과 같이 계산된다.
첫 term은 projection인데, 원래는
이 논문에서는 softmax function을 hierarchical softmax를 사용하여
2.2 RNNLM
RNNLM(Rcurrent Neural Network Language Model)은 이름에서 볼 수 있듯이 RNN의 개념을 활용하는 방법이다. 이전 NNLM은 제한된 window size 내에 있는 단어들만 활용할 수 있었다면 RNNLM은 전체 크기의 단어를 활용할 수 있다.

자세한 내용은 https://wikidocs.net/46496에 잘 나와있으므로 참조하면 좋다.
time complexity는 다음과 같다 :
이 경우에도 마지막 term이 전체 time complexity를 dominate하는데, 역시 hierarchical softmax로
New Log-linear Models
여기서는 새로운 model architecture 두 가지를 제안한다. CBOW 모델과 Skip-Gram 모델이 제안되는데 둘을 나누어서 알아본다.
이 두 가지 모델은 다음을 전제로 한다.
You shall know a word by the company it keeps - John Rupert Firth
한 단어를 파악하기 위해서 주변에 있는 단어들의 정보들의 분포를 벡터로 나타내면 그 단어를 표현할 수 있다는 것이다. 이 생각이 Word2Vec 모델들의 기반이다.
CBOW (Continuous Bag Of Words)
CBOW는 주변에 있는 단어(context word)로 중심 단어(center word)를 예측하는 방식으로 학습하는 neural network 모델이다.

모델의 형태는 위와 같다. NNLM과 비교해 보면, projection layer 뒤와 output layer 사이의 non-linear hidden layer가 제거되어 있다. 또한 다른 점은 NNLM은 모든 단어 벡터가 lookup table의 row값을 가져와서 concatenate하는 것이었다면, 여기서는 모든 word에 weight 내적값이 더해져서 평균값으로 얻어진다는 것이다.
자세한 설명은 다음 figure과 함께 보자.

1. center word 앞 뒤로 추론에 사용할 window size
2. row vector인 context word들을 세로로 concatenate한다. context word는 one-hot vector이므로
3. 이 matrix를 weight matrix
4.
5.
6.
time complexity
이 떄 CBOW의 한 word당 time complexity는 다음과 같다 :
여기서도
Loss function
자세한 수식 전개 과정은 cs224n Lecture note 1을 인용한다 :

Skip-Gram
Skip-Gram model은 CBOW와 매우 유사하다. 다만 CBOW는 context word를 가지고 center word를 predict한다면, Skip-Gram model에서는 center word를 가지고 context word 모두를 predict한다.

다음 그림을 보면서 단계별로 살펴보면,

1. input vector
2.
3.
Q1. 왜 matrix가 아니라 dimensional vector가 결과값인가?
여기서 내가 이해에 어려움을 겪었었는데.. 그림이나 수식 설명에서는 한 번에
이는 실제로 구현할 때에는 한 iteration에서
다음과 같은 예를 생각해 보자.
"I told my father that I wanted to go to New York."
window size는 2로 설정하면 다음과 같은 pair들이 생긴다. (center word, context word)
(I, told), (I, my)
(told, I), (told my), (told, father)
...
(York, to), (York New)
만약 center word가 'father'이라면 다음 pair들에 대해 prediction과 training을 하면 된다.
(father, told), (father, my), (father, that), (father, wanted)
실제 implement된 코드도 pair를 만드는 것을 볼 수 있다.
# code by Tae Hwan Jung @graykode
batch_size = 1 # mini-batch size
embedding_size = 2 # embedding size
sentences = ["apple banana fruit", "banana orange fruit", "orange banana fruit",
"dog cat animal", "cat monkey animal", "monkey dog animal"]
word_sequence = " ".join(sentences).split()
word_list = " ".join(sentences).split()
word_list = list(set(word_list))
word_dict = {w: i for i, w in enumerate(word_list)}
voc_size = len(word_list)
# Make skip gram of one size window
skip_grams = []
for i in range(1, len(word_sequence) - 1):
target = word_dict[word_sequence[i]]
context = [word_dict[word_sequence[i - 1]], word_dict[word_sequence[i + 1]]]
for w in context:
skip_grams.append([target, w])
전체 코드는 https://github.com/graykode/nlp-tutorial에서 확인할 수 있다.
Loss function
Q1의 형태는 왜 가능한가? Skip-Gram 모델에서는 output word들이 모두 independent하다는 Naive assuption을 가정하기 때문이다. 그렇기 때문에,
은 단순한 곱으로 표현될 수 있다.
이때 이들을 합으로 나타내기 위해서 -log를 씌우면 합의 형태가 된다. 따라서 여러 pair들이 각각 독립적인 iteration에서 gradient를 얻어서 update해도 문제되지 않는 것이다.
자세한 수식 전개 과정은 cs224n Lecture note 1을 인용한다 :

Word Relationship Task
논문에서 사용한 방법은 다음과 같은 단어 간 미묘한 관계를 함의한 질문을 하는 것이다.
What is the word that is similar to small in the same sense as biggest is similar to big?
이 정답은 smallest라고 생각할 수 있다. 다만, 단어 간 의미 관계를 정확하게 파악하고 있지 않다면 기계가 이를 대답하는 것은 매우 어려울 것이다.
하지만 놀랍게도 이러한 task가 간단한 대수적 연산을 통해 확인될 수 있음이 드러났다.
이러한 방식으로 다음과 같은 질문 set을 만들 수 있다.

총 5종류의 semantic relationship pair, 9종류의 syntatic relationship pair를 가진 word list를 사람이 만든 다음에 임의의 같은 종류의 두 pair를 뽑아 위와 같은 algebraic operation으로 방대한 양의 question list를 만든다. 이 방법으로 8869개의 semantic, 10675개의 syntactic questions가 만들어졌다.
Results
Table 2 : dimensionality의 크기별 효율성
첫 번째 실험은 어느 정도의 word embedding dimensionality가 가장 효율적인지 판단하는 것이다.

training word 수가 많아질수록, dimensionality가 커질수록 accuracy가 올라감을 볼 수 있다. 다만, training word 개수가 작을 때는 dimensionality가 증가하는 게 큰 의미가 없고, 그 반대의 경우도 마찬가지라서 둘 다 크기를 늘리는 것이 중요한 것을 알 수 있다.
다만 무한정으로 dimensionality를 올리는 것은 computationally expensive하므로 연구진들은 300d 정도를 권장하고 있다.
Table 3 : 논문 제시 모델간 비교
다음은 같은 조건일 때 논문에서 제시한 네 개의 모델(NNLM, RNNLM, CBOW, Skip-Gram)을 비교해 본 결과이다.

CBOW와 Skip-Gram이 NNLM계열 모델보다 월등하게 성능이 좋고, CBOW가 Skip-Gram보다 Syntactic accuracy에서 근소하게 더 좋으나 전체적인 performance는 Skip-Gram이 우세함을 볼 수 있다.
Table 8 : Skip-Gram 모델의 정성적 결과
Table 8은 Skip-Gram model이 word pair relationship task에서 보여준 결과를 정성적으로 파악하기 위한 것이다.

위의 결과를 보면 왼쪽 relationship에 해당하는 오른쪽 example들을 볼 수 있다. 첫 번째 row의 경우에는 국가명 - 수도 pair인데, 모두 정확하게 예측하고 있음을 볼 수 있다. 세 번째 pair는 Florida라서 주도를 대답해야 하는데, 이 경우에도 정확하게 대답한 것을 볼 수 있다.
나머지 결과도 대부분 정확하게 맞춘 것을 볼 수 있다. 단어의 의미를 정확하게 파악하는 word vector를 생성하는데 성공했다고 생각할 수 있는 대목이다.
References
Singh, M. (2020, July 5). Word embedding - Data Science Group, IITR. Medium. Retrieved July 6, 2022, from https://medium.com/data-science-group-iitr/word-embedding-2d05d270b285
Word2Vec Tutorial - The Skip-Gram Model · Chris McCormick. (2016, April 19). Chris McCormick. Retrieved July 6, 2022, from http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
유원준. (2022, February 27). 02) 워드투벡터(Word2Vec). 위키독스. Retrieved July 6, 2022, from https://wikidocs.net/22660
Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781.
G. (n.d.). GitHub - graykode/nlp-tutorial: Natural Language Processing Tutorial for Deep Learning Researchers. GitHub. Retrieved July 6, 2022, from https://github.com/graykode/nlp-tutorial
Chaubard, F., Fang, M., Genthial, G., Mundra, R., & Socher, R. (2019). CS224n: Natural Language Processing with Deep Learning. Stanford University. https://web.stanford.edu/class/cs224n/readings/cs224n-2019-notes01-wordvecs1.pdf
Footnotes
'DL·ML' 카테고리의 다른 글
[GAN] Minibatch Discrimination (0) | 2023.01.21 |
---|---|
[GAN] mode collapse (0) | 2023.01.10 |
[DL] Hierarchical Softmax (0) | 2022.07.01 |
[ML] Reduced Error Pruning (0) | 2022.03.18 |
[DL] RNN(Recursive Neural Network)의 이해 (0) | 2021.12.26 |