반응형
Word2Vec Model
Word2Vec는 단어 간 유사도를 반영할 수 있도록 단어의 의미를 벡터화할 수 있는 방법이다. Word2Vec의 주요 아이디어는 "비슷한 분포를 가진 단어라면 비슷한 의미를 가질 것"이다 즉, 자주 같이 등장할수록 두 단어는 비슷한 의미를 가짐을 의미한다.
Word2Vec은 Input, Hidden, Output Layer 3개의 층으로만 이루어져 학습이 빠르고 많은 단어 뭉치를 학습할 수 있어 성능이 좋다.
Word2Vec 모델은 Continous Bag of Words(CBoW)와 Skip-Gram 두 가지 방식이 있다
Continous Bag of Words(CBoW)
- CBoW란? 주변에 있는 단어들을 가지고 중간에 있는 단어들을 예측하는 방법
- 즉, "The fat cat sat on the mat"이라는 문장이 있을 때 sat을 예측하는 것
- 즉 문장의 n개의 토큰이 있을 때 예측대상의 단어 인덱스는 int(n/2)이며 이를 중심 단어(center word)라고 함
- 예측에 사용되는 단어들을 주변 단어(context word)라고 함
- 중심단어를 예측하기 위해서 주변 단어의 수, 즉 앞 뒤로 몇 개의 단어를 볼지 범위를 정하게 되는데, 이 범위를 윈도우(window)라한다.
- 즉, window=k일 때, 예측에 사용되는 주변단어의 개수는 2k개이다
- 아래는 "The fat cat sat on the mat" 문장에서 윈도우의 크기를 2로 설정했을 때 CBoW가 학습되는 과정이다
-
- Input layer : fat, cat, on, the 주변단어가 one-hot vector로 input
- Output layer: sat 중심단어가 one-hot vector로 output
-
- 좀 더 확대하여, 동작 메커니즘을 상세히 알아보도록 하자
- cat,fat의 one-hot vector의 크기가 V(그림에서 V=6), 투사층의 크기는 M(그림에서 M=5)이다
- 투사층의 크기 M은 임베딩하고 난 벡터의 차원 즉, CBoW를 수행하고 나서 얻는 임베딩 벡터 차원에 해당한다
- 입력층과 투사층 사이의 가중치인 W는 V x M 행렬, 투사층과 출력층 사이의 가중치 W' 는 M x V 행렬이다
- 주의할 점은 W와 W'은 동일한 행렬을 전치한 것이 아닌, 서로 다른 행렬이다
- W, W'는 훈련 전 굉장히 작은 랜덤 값을 가지게 되며 CBoW는 주변 단어로 중심단어를 더 정확히 맞추기 위해 계속해서 W, W'를 학습해가는 구조이다
- 입력 벡터와 가중치W가 곱해지는 과정을 자세히 보자
- 입력 벡터는 one-hot vector이므로, 이를 가중치 W와 곱하면, 결국 W 행렬의 i번 째 행을 그대로 읽어오는 것과 동일하다
- 이 작업을 룩업 테이블(lookup table)이라고 부른다
- 앞서 CBoW의 목적은 W와 W'를 잘 훈련시키는 것이라고 했는데, 그 이유가 여기서 lookup해온 W의 각 행 벡터(그림에서 V_cat)가 Word2Vec을 수행한 후의 각 단어의 M차원의 크기를 갖는 임베딩 벡터 들이기 때문이다
- 그 결과 window의 크기가 n이라고 했을 때 2n개의 임베딩 벡터들이 생성되고, 이들은 투사층에서 만나 이 벡터들의 평균인 벡터를 구하게 된다
- 임베딩 벡터를 v1, v2, .., vk 라 했을 때 평균 계산은 다음과 같다
- 평균을 계산한 벡터가 hidden layer가 된다
- 이렇게 구해진 평균 벡터는 두 번째 가중치 행렬 W'와 곱해지고, 곱셈의 결과로는 one-hot vector와 차원이 V로 동일한 벡터가 나오게 된다.
- 이 벡터에 소프트맥스(Softmax) 함수를 취하게 되는데, 이는 0~1사이의 실수로 각 원소의 총 합은 1이 되는 상태로 바뀐다
- SoftMax를 취하고 나온 벡터를 스코어 벡터(Score Vector)라고 한다
- 스코어 벡터의 각 차원 안에서 값이 의미하는 것은 아래와 같다
- 스코어 벡터를 ŷ , 우리가 실제로 값을 알고 있는 중심 단어의 one-hot vector를 y라고 하자
- 벡터의 j번 째 인덱스가 가진 0~1 사이의 값은 j번째 단어가 중심 단어일 확률
- ŷ는 y에 가까워져야 한다. 즉, 두 벡터의 오차를 줄이기 위해 손실함수(loss function)로 cross entropy 함수를 사용한다
- 결과적으로 ŷ가 y를 정확하게 예측한 경우 cross-entropy의 값은 0이 되고 위의 식을 최소하하는 방향으로 학습해야 한다
- 마지막으로 역전파(Back Propagation)을 수행하면 W, W'가 학습되는데, 학습이 다 되었다면 M차원의 크기를 갖는 W의 행이나 W'의 열로부터 어떤 것을 임베딩 벡터로 사용할지 결정하면 된다
- 때로는 W,W'의 평균치를 가지고 임베딩 벡터를 선택하기도 함
Skip Gram
CBoW와 반대로 중간에 있는 단어로 주변 단어들을 예측하는 방법으로 앞서 설명한 CBoW와 매커니즘 자체는 동일하다. 단 중심단어에서 주변 단어를 예측하므로 input에는 중심단어가 ouput은 주변단어가 된다. 또한, 중심단어에서 주변 단어를 예측하므로 투사층에서 벡터들의 평균을 구하는 과정은 없다. 여러 논문에서 성능 비교를 진행했을 때, 전반적으로 skip-gram이 CBoW보다 성능이 좋다고 알려져 있다
반응형
'인공지능(AI) > 자연어처리(NLP)' 카테고리의 다른 글
Prompt-Based Learning, 프롬프트 기반 학습 (0) | 2022.08.08 |
---|---|
[LM 평가지표] Perplexity, PPL (0) | 2022.02.04 |
[NLP] 단어 표현 방법(Word Representation) (0) | 2021.10.13 |
[NLP] 단어 표현 방법 : Bag-of-Word Model(Bow) (0) | 2021.10.13 |
[논문리뷰] Transformer(Attention is All you Need) 이해하기 (0) | 2021.05.07 |