Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-02 06:06
관리 메뉴

Hey Tech

[NLP] Word2Vec: (3) Skip-gram 개념 및 원리 본문

AI & 빅데이터/자연어처리(NLP)

[NLP] Word2Vec: (3) Skip-gram 개념 및 원리

Tony Park 2022. 4. 14. 08:22
728x90
반응형

📚목차

1. 학습 데이터셋 생성
2. 인공신경망 모형
3. 학습 과정
4. CBOW vs Skip-gram
5. 한계점

들어가며

Word2Vec는 학습방식에 따라 크게 \(2\)가지로 나눌 수 있습니다: Continuous Bag of Words(CBOW)와 Skip-gram. CBOW는 주변 단어(Context Word)로 중간에 있는 단어를 예측하는 방법입니다. 여기서 중간에 있는 단어를 중심 단어(Center Word) 또는 타겟 단어(Target Word)라고 부릅니다. 반대로, Skip-gram은 중심 단어를 바탕으로 주변 단어들을 예측하는 방법입니다. 선행연구들에 따르면, 대체로 Skip-gram이 CBOW보다 성능이 우수하다고 알려져 있는데, 이에 대한 자세한 내용은 본 포스팅에 'Chapter 4'를 참고해 주세요. 본 포스팅에서는 Skip-gram에 대해 자세히 다룹니다. CBOW에 대한 자세한 내용은 이곳을 참고해 주세요.

1. 학습 데이터셋 생성

Skip-gram에서 학습 데이터셋을 만드는 메커니즘에 대해 알아봅니다. 다음과 같은 예문을 활용해 보겠습니다.

"The fat cat sat on the table"
아래 사진은 실제 저희 집 반료묘 뚜니입니다 :)

그림 1. The fat cat sat on the table

Skip-gram은 중심 단어(center word)로부터 주변 단어(context word)를 예측하는 방법입니다. 즉, Skip-gram은 예문에서 중심 단어인 'sat'을 통해 주변 단어인 ['The', 'fat', 'cat', 'on', 'the', 'table']을 예측합니다. 중심 단어의 앞뒤 단어를 몇 개나 활용할지 범위를 결정해야 하는데, 이 범위를 윈도우(window)라고 부릅니다.

예를 들어, 윈도우의 크기가 \(2\)라고 하면, 중심 단어 'sat' 앞의 두 단어인 'fat', 'cat'과 뒤의 두 단어인 'on', 'the'를 활용합니다. 즉, 윈도우의 크기가 \(m\)이라면 활용하는 주변 단어의 개수는 총 \(2m\)개입니다. 예측 모델 학습을 위한 데이터셋은 윈도우를 옆으로 한 단어씩 움직여(sliding) 주변 단어와 중심 단어의 세트를 변경하며 만드는데, 이 방법을 슬라이딩 윈도우(sliding window)라고 부릅니다. 윈도우의 크기를 \(2\)로 설정했을 때 앞서 사용한 예문에서 학습 데이터셋을 만드는 과정은 아래의 그림 2와 같습니다.

그림 2. Sliding Window 예시

2.  인공신경망 모형

2.1.  개요

그림 3. Skip-gram 인공신경망 모형

Skip-gram의 인공신경망(Artificial Neural Network, ANN)을 도식화하면 위의 그림 3과 같습니다. 입력층(input layer)에는 중심 단어의 원-핫 벡터가 입력으로 들어갑니다. 입력값이 은닉층(hidden layer)을 통과하면 출력층(output layer)에서 주변 단어를 예측한 벡터가 출력됩니다. 위 그림 3에서 볼 수 있듯이, Skip-gram은 은닉층이 다수인 깊은 인공신경망(a.k.a., Deep Learning) 모델이 아닌 단일 은닉층만 존재하는 얕은 신경망(Shallow neural network) 모델입니다.

2.2. 가중치 행렬

은닉층의 크기가 \(N\)이고 단어 집합의 크기(Vocabulary)를 \(V\)라고 할 때, 입력층과 은닉층 사이의 가중치 행렬 \(W\)는 \(VXN\) 크기의 행렬로, Input word matrix라고 부릅니다. 반대로, 은닉층과 출력층 사이의 가중치 행렬 \(W^{′}\)는 \(NXV\) 크기의 행렬로, Output word matrix라고 부릅니다. 그림 3에서 사용된 예문의 단어 집합의 크기가 \(7\)이므로 입력 원-핫 벡터의 차원은 \(7\)입니다. 즉, 은닉층의 크기(\(N\))가 \(5\)라고 하면, \(W\)는 \(7X5\) 행렬이며 \(W^{'}\)는 \(5X7\) 행렬입니다. 단, 두 가중치 행렬 \(W\)와 \(W^{′}\)는 전치(transpose) 관계가 아닌 서로 다른 행렬이며, 인공신경망 학습 전에는 두 행렬 모두 랜덤한 값을 갖습니다.

3. 학습 과정

Skip-gram의 목표는 입력층과 은닉층 사이의 가중치 행렬 \(W\)과 은닉층과 출력층 사이의 가중치 행렬  \(W^{'}\)를 학습하며 중심 단어로 주변 단어를 예측하는 것입니다(그림 4 참고). Skip-gram의 학습과정에 대해 자세히 알아봅니다.

그림 4. Skip-gram 학습 과정

1) 입력층

입력층에서는 중심 단어를 단어 집합의 크기를 갖는 원-핫 벡터로 만들어 input에 넣습니다.

$$ x \in \mathbb{R}^{|V|} $$

2) 입력층 to 은닉층

input에 가중치 행렬 \(W\)(Input word matrix)를 곱하여 은닉층의 크기인 \(n\)차원의 임베딩 벡터를 얻습니다.
$$ v_{c} = Wx \in \mathbb{R}^{n} $$

3) 은닉층 to 출력층

2)에서 얻은 임베딩 벡터 \(v_{c}\)에 \(2n\)개의 가중치 행렬 \(W^{′}\)(Output wod matrix)를 곱하여, 단어 집합의 크기와 같은 벡터를 얻습니다.
$$ z = W^{'}v_{c} \in \mathbb{R}^{|V|} $$

4) 출력층

3) 에서 얻은 벡터 \(z\)를 \(0\)과 \(1\) 사이의 실숫값을 갖는 균등한 확률로 나타내기 위해 softmax 함수를 취합니다.
$$ \hat{y} = softmax(z) \in \mathbb{R}^{|V|} $$

5) 손실함수

4)에서 얻은 \(\hat{y}\)와 주변 단어별 원-핫 벡터인 \(y\)와의 오차를 측정합니다. 오차 측정에는 크로스엔트로피(Cross-entropy)를 사용합니다. 여기서 \(m\)은 윈도우의 크기입니다.

$$ \mathcal{L}(\hat{y}, y) =  -\sum_{j=0, j\ne{m}}^{2m}\sum_{k=1}^{|V|}y_{k}^{(c-j)}\log\hat{y_{k}}^{(c-j)} $$

6) 가중치 학습

모든 가중치 행렬 \(W\), \(W^{′}\)의 집합을 \(\theta\)라고 할 때 아래 수식을 통해 계산할 수 있습니다.

$$ \hat{\theta} = \arg\min_{\theta}\mathcal{L}(\hat{y}, y) $$

이를 통해 역전파(Back Propagation)를 수행하면 모든 임베딩 벡터값을 업데이트할 수 있습니다.

4.  CBOW vs Skip-gram

Word2Vec 방법 중 하나인 CBOW와 비교했을 때, Skip-gram이 성능이 우수하여 더욱 많이 사용되고 있습니다. 왜냐하면, 모델 학습 시 Skip-gram이 CBOW에 비해 여러 문맥을 고려하기 때문입니다. 앞선 예문을 다시 활용하여 살펴보겠습니다. 

 

"The fat cat sat on the table"

 

CBOW와 Skip-gram 각각에 대해서 예측하는 단어마다 몇 번의 서로 다른 문맥을 고려했는지 확인해 보겠습니다.

4.1. CBOW

CBOW는 주변 단어로부터 오직 1개의 타겟 단어를 예측 및 학습합니다. Input과 Output 간의 관계를 나타내면 아래의 표와 같습니다.

Input Output
fat, cat The
The, cat, sat fat
The, fat, sat, on cat
fat, cat, on, the sat
cat, sat, the, table on
sat, on, table the
on, the table

즉, 단어를 예측 및 학습할 때 고려하는 문맥은 오직 1개뿐입니다. 아래의 표와 같이 말이죠. 예를 들어, 'sat'이라는 단어를 예측할 때는 'fat', 'cat', 'on', 'the'라는 주변 단어를 활용한 게 전부입니다.

Word Count
The 1
fat 1
cat 1
sat 1
on 1
the 1
table 1

4.2. Skip-gram

Skip-gram은 타겟 단어를 바탕으로 여러 문맥 단어를 예측하고 학습합니다. Input과 Output 간의 관계를 나타내면 아래의 표와 같습니다.

Input Output
The fat, cat
fat The, cat, sat
cat The, fat, sat, on
sat fat, cat, on, the
on cat, sat, the, table
the sat, on, table
table on, the

위에서 예측 및 학습되는 출력값마다 고려하는 단어의 개수가 몇 개인지 계산해 보면 아래의 표와 같습니다. 이처럼, Skip-gram은 여러 문맥에 걸쳐 단어를 학습하기 때문에, 대부분의 상황에서 Skip-gram이 CBOW보다 좋은 성능을 보입니다.

Word Count
The 2
fat 3
cat 4
sat 4
on 4
the 3
table 2

5. 한계점

Word2Vec의 한계점에 대해 다룹니다. Skip-gram뿐만 아니라 CBOW 역시 출력층에서 소프트맥스 함수를 거쳐 단어 집합 크기의 벡터와 실제 참값인 원-핫 벡터와의 오차를 계산합니다. 이를 통해 가중치를 수정하고 모든 단어에 대한 임베딩 벡터 값을 업데이트 합니다. 그런데, 만약 단어 집합의 크기\(V\)가 수만, 수십만 이상에 달하면 어떻게 될까요? 위와 같은 일련의 작업은 시간 소모가 큰 무거운 작업입니다. 즉, Word2Vec의 학습 모델 자체가 무거워집니다. 이를 해결하는 방법으로 Hierarchical Softmax와 Negative Sampling 방법이 있습니다. 이에 대한 내용은 다음 포스팅에서 자세히 다룹니다.

📚 참고할 만한 포스팅

1. [NLP] Bag of Words(BoW) 개념 및 실습
2. [NLP] 문서 단어 행렬(DTM) 개념 이해
3. [NLP] TF-IDF 개념 및 계산 방법
4. [NLP] Word Embedding의 이해: (1) 희소표현 및 밀집표현
5. [NLP] 언어모델(Language Model)의 개념 및 특징
6. [NLP] N-gram 언어 모델의 개념, 종류, 한계점
7. [NLP] 언어모델의 평가지표 'Perplexity' 개념 및 계산방법
8. [NLP] Word2Vec: (1) 개념
9. [NLP] Word2Vec: (2) CBOW 개념 및 원리
10. [NLP] Word2Vec: (3) Skip-gram
11. [NLP] Word2Vec: (4) Negative Sampling
12. [NLP] 문서 유사도 분석: (1) 코사인 유사도(Cosine Similarity)
13. [NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance)
14. [NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)

오늘은 Word2Vec 방법 중 하나인 Skip-gram에 대해 알아봤습니다.

포스팅 내용에 오류가 있거나 보완할 점이 있다면 아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다 :)

그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다.

고맙습니다😊

728x90
반응형
Comments