
5일만에 100만명의 가입자를 확보하고 AI 분야에서 가장 핫 한 ChatGPT를 공부하려면 자연어처리(NLP Natural Language Processing)에 대한 이해가 필요합니다.
NLP를 공부하려면 필연적으로 언어를 어떻게 학습데이터를 만들고 기계가 학습 하는지를 알아야 합니다.
이때 우리가 사용한는 단어(Word)를 기계가 학습할 수있는 숫자 형태인 Vector 로 변경환 해주는 것이 바로 Word2Vec 입니다.
2013년 구글에서 발표된 자연어 처리 기술로,단어의 의미를 벡터로 표현하는 방법입니다.
단어를 벡터로 바꾸면 각 단어들의 유사도를 판단할 수있고, 동시에 숫자로 표현되어 계산이 편리합니다.
이번에는 Word2Vec 에 대해서 알아볼텐데, 구글링에 많은 자료가있지만, 수학적인 설명과 설명 방식이 다양해서 구글링, 유튜브, 책을 통해서 나름대로 쉽게 정리해 보았습니다.
word2vec을 이해하기 위해서는 선행 지식이 필요해서 먼저 인코딩부터 알아야합니다.
인코딩 (Encoding) 이란?
문장의 단어(word)를 숫자로 변환하는 과정을 말합니다.
예를들어, "I love you" 라는 문장을 encoding 하게 되면, 아래와 같이 각 단어의 위치를 순서대로 정리하여 encording 할수 있습니다.
| real word | encoding |
| I | [1,0,0] |
| love | [0,1,0] |
| you | [0,0,1] |
1과 0으로 인코딩 했기 때문에, one-hot-encoding 이라고 하며, 희소 표현(Sparse Representation) 이라고 합니다.
real word 는 각 인코딩된 벡터와 매핑된 단어를 의미합니다. 여기서 문제는 각각의 단어 벡터는 유사도(similarity)가 없습니다.
one-hot-encoding은 단어를 간단하게 표현 할수 있지만, 단어의 종류가 많아 질수록 벡터의 크기가 너무 증가하는 문제가 있습니다.
이를 보완하기 위해 embedding 이 필요합니다.
임베딩(Embedding) 이란?
희소 표현의 반대 개념인 밀집표현 (Dense Representation)으로 단어를 나타내는 방법이 워드 임베딩 입니다.
embdding을 통해서 각 단어들 끼리의 유사도를 파악할 수 있습니다. 아래 임베딩은 정한 2차원 차수로 표현 했습니다.
사실 embedding의 가장 큰 장점은 "원하는 차원"으로 설정 할 수있기 때문에 공간의 효율성이 높습니다.
word2vec은 embdding 방법중 하나입니다.
| real word | encoding | embedding |
| seoul | [1,0,0,0] | [0.115,2.992] |
| korea | [0,1,0,0] | [0.212,3.345] |
| tokyo | [0,0,1,0] | [5.44,1.978] |
| japan | [0,0,0,1] | [5.225,2.88] |
seoul 과 korea는 가까이에 있고, tokyo 와 japn은 서로 가까이에 있는 형태가 됩니다.
실제 embedding을 하게 되면, 더 이상 0,1 이 아닌 실수로 표현되어 원하는 one-hot 보다 낮은 차원으로 표현됩니다.
이제 둘의 차이를 비교하면 다음과 같습니다.

word2vec의 학습 방식은 2가지가 존재하며 각각에 대해서 알아봅니다.
CBOW(Continuous Bag of Word)
이 방법은 주변에 있는 단어들로 중심단어를 예측하는 방법입니다.
이 방법을 우선 개념적으로 이해하면 다음과 같습니다.
I played ______ with my brother.
____ : 중심 단어 (target word)
played, with : 주변 단어 (context)
played,baseball,with : 학습 데이터셋( window ), 주변단어를 볼 크기
중심단어는 baseball, pc game, soccer 등 다양한 단어가 올수 있는데 이 단어를 주변 단어를 보고 맥락을 파악하듯 예측하는 방법입니다. 이를 위해서 붉은 색의 범위가 window 라고 하며, 이는 주변 단어의 범위를 나타냅니다.
window 가 하나의 학습 데이터셋의 단위가 되며, 한 칸씩 window는 이동하면서 target 이 바뀌어가며 학습을 하게됩니다.
문장 중심단어 주변단어
I played baseball with my brother. [ 1,0,0,0,0,0 ] [ 0,1,0,0,0,0 ]
I played baseball with my brother. [ 0,1,0,0,0,0 ] [ 1,0,0,0,0,0 ] [ 0,0,1,0,0,0 ]
I played baseball with my brother. [ 0,0,1,0,0,0 ] [ 0,1,0,0,0,0 ] [ 0,0,0,1,0,0 ]
I played baseball with my brother. [ 0,0,0,1,0,0 ] [ 0,0,1,0,0,0 ] [ 0,0,0,1,0,0 ]
I played baseball with my brother. [ 0,0,0,0,1,0 ] [ 0,0,0,1,0,0 ] [ 0,0,0,0,1,0 ]
I played baseball with my brother. [ 0,0,0,0,0,1 ] [ 0,0,0,0,1,0 ]
window 단위로 dataset을 만들되, 한칸씩 이동하면서 중심단어, 주변단어 관계 데이터셋을 만들어 내어 학습합니다.
학습이 되는 과정을 모델로 보면 아래와 같습니다.

딥러닝과 동일한 동작 원리를 볼수 있습니다.
. input 의 값들은 hidden layer 의 weight을 통과하여 out put이 만들어 집니다.
. output 은 softmax를 거쳐서 확률 값이 다시 계산됩니다.
. softmax 처리된 값은 정답과 비교하여 다시 weight을 조정 하는 행위(backpropagation)을 수행합니다.
- input layer 은 입력 값으로 one-hot vector 형태로 된, 주변 단어가 들어 갑니다.
I 와 baseball 이 one-hot 으로 Input 이 됩니다. - input layer와 행렬곱이 될 weight의 차원은 사용자가 설정 할 수 있습니다.
weigh은 3차원으로 지정했습니다. - input layer 와 input weight 행렬 곱의 평균이 hidden layer가 됩니다.
- hidden layer와 output weight 행렬 곱을 통해 score 계산합니다.
- score는 softmax를 취하여 확률로 변환합니다.
- 계산된 값은 정답과 비교하기위해 cross entropy loss을 계산합니다.
- 계산된 loss를 가지고 backpropagation을 통해 weight을 조정합니다.
그러면 예측하려고 했던 중심단어가 output layer 에 들어가고, hidden layer 가 바로 word2vec 이 됩니다.
Skip-Gram
Skip Gram 은 CBOW의 반대입니다. 즉, 중심단어로 주변 단어를 예측하는 방법 입니다.
CBOW의 반대라고 생각하면 됩니다.
I played baseball with my brother.
baseball : 중심 단어 (target word)
played, with : 주변 단어 (context)
Skip-gram은 여러 문맥에 걸쳐 단어를 학습 하기 때문에, 대부분의 상황에서는 CBOW보다 성능이 좋습니다.
'AI' 카테고리의 다른 글
| AI 기술 흐름을 알아보자 : 머신러닝부터 딥러닝까지 (0) | 2023.07.16 |
|---|---|
| [SSL] Semi-supervised Learning (SSL) 이해 (0) | 2022.11.18 |
| [객체검출] Object Detection #1 - 이미지 데이터 확인 (0) | 2022.11.08 |
| 객체 검출(Object Detection)이란? (0) | 2022.10.25 |