초보 개발자의 성장기

한이아지와 함께하는 워드 임베딩(Word Embedding) 본문

AI 지식

한이아지와 함께하는 워드 임베딩(Word Embedding)

개발자 김케빈 2021. 2. 4. 15:16

📕 Word Embedding 

🔸 딥러닝에서의 임베딩은 보통 이산적이고 고차원의 연속된 벡터 표현입니다.

🔸 NLP에서 워드 임베딩은 보통 단어를 연속적인 벡터로 매핑하는 것입니다.

 

가장 유명한 Word Embedding 기법으로는 Word2Vec이 있습니다.

 

 

📗 Word2Vec

Word2Vec은 단어 간 유사도를 반영할 수 있도록 단어의 의미를 벡터화할 수 있는 방법입니다.

한번 한국어 단어를 벡터 연산 해볼까요?

http://w.elnn.kr/search/  ← 여기 사이트의 도움을 받아서 해보겠습니다.

정말 단어가 가지고 있는 어떤 의미들을 가지고 연산을 하고 있는 것 같이 보입니다.

이런 연산이 가능한 이유는 각 단어 벡터가 단어 간 유사도를 반영한 값을 가지고 있기 때문입니다. 

 

Word2Vec은 두 가지 사용 방식이 있습니다.

1. CBOW

2. Skip-Gram

 

 

📘 CBOW

CBOW는 주변에 있는 단어들을 가지고 중심에 있는 단어를 예측하는 방법입니다.

예문 : "The fat cat sat on the mat"

예를 들어 갖고 있는 Corpus에 위와 같은 문장이 있다고 해보겠습니다.

{"The", "fat", "cat", "on", "the", "mat"}으로부터 sat을 예측한다고 했을 때 예측해야하는 단어 sat을 중심 단어(center word)라고 하고, 예측에 사용되는 단어들을 주변 단어(context word)라고 합니다.

 


<그림 1> CBOW를 위한 전체 데이터 셋

출처 : https://wikidocs.net/22660


중심 단어를 예측하기 위해서 앞, 뒤로 몇 개의 단어를 볼지를 결정했다면 이 범위를 윈도우(window)라고 합니다.

예를 들어서 윈도우 크기가 2이고, 예측하고자 하는 중심 단어가 sat이라고 한다면
앞의 두 단어인 fat와 cat, 그리고 뒤의 두 단어인 on, the를 참고합니다.

 

윈도우 크기가 n이라고 한다면, 중심 단어를 예측하기 위해 참고하려고 하는 주변 단어는 앞 뒤로 n개가 될 것입니다.

(이 때 중심 단어가 끝 쪽에 있다면 앞 뒤 주변단어 개수가 n개보다 적게 될 경우도 있습니다.)

 

윈도우 크기를 정했다면, 윈도우를 계속 움직여서 주변 단어와 중심 단어 선택을 바꿔가며 학습을 위한 데이터 셋을 만들 수 있는데, 이 방법을 슬라이딩 윈도우(sliding window)라고 합니다.

현재 위 그림이 윈도우 크기가 2인 슬라이딩 윈도우 방법을 사용하고 있다고 볼 수 있습니다.

 

또한 Word2Vec에서 입력은 모두 원-핫 벡터가 되어야 하는데, 우측 그림은 중심 단어와 주변 단어를 어떻게 선택했을 때에 따라서 각각 어떤 원-핫 벡터가 되는지를 보여줍니다.

 


<그림 2> CBOW의 인공 신경망 도식화

출처 : https://wikidocs.net/22660


도식화를 이용해 CBOW 학습 과정을 다시 한번 살펴보겠습니다.

 

(1) 학습시킬 문장의 모든 단어들을 one-hot encoding 방식으로 벡터화 합니다.

출처 : https://reniew.github.io/21/

(2) 하나의 중심단어에 대해 2n개의 주변 단어 벡터를 input값으로 갖게 만듭니다. 

출처 : https://reniew.github.io/21/

(3) 이제 파라미터는 Input에서 Hidden Layer로 가는 파라미터 행렬과 output layer로 가는 파라미터 행렬 2가지 입니다.

출처 : https://reniew.github.io/21/

★ 이 모델의 목적은 주변단어들이 주어졌을 때 중심 단어의 조건부 확률을 최대화 하는 것입니다.

 

(4) one-hot encoding 방식의 단어벡터들을 파라미터와 곱하여 embedded word vector를 만듭니다.

곱셈 예시 / 출처 : https://reniew.github.io/21/

(5) 그 다음 2n개의 embedded vector들의 평균을 구합니다. 이 때 평균해서 구한 벡터가 Hidden Layer값이 됩니다.

출처 : https://reniew.github.io/21/

(6) 이제 output layer로 전달할 값인 score값을 계산해야 합니다.
    파라미터 UU를 곱해서 각 단어에 대한 score를 만든다. 가까운 위치의 단어들은 높은 값을 갖도록 해야 한다.

출처 : https://reniew.github.io/21/

(7) 마지막으로 softmax 함수를 이용해 각 score 값들을 확률 값으로 계산 합니다.

출처 : https://reniew.github.io/21/

 

이제 나온 파라미터를 가지고 학습을 진행하면 됩니다.

 

 

📘 Skip-gram

Skip-gram은 CBOW와 매커니즘이 동일합니다.

가장 중요한 차이점은 CBOW와는 반대로 중심 단어에서 주변 단어를 예측합니다.
중심 단어에 대해서 주변 단어를 예측하므로 투사층에서 벡터들의 평균을 구하는 과정이 없습니다.
또한 CBOW는 한 번만 업데이트가 가능한 반면 Skip-gram은 같은 단어를 여러 번 업데이트할 수 있기 때문에
일반적으로 CBOW보다 높은 성능을 보여주고 있습니다.

 


<그림 3> Skip-gram을 위한 전체 데이터 셋

출처 : https://wikidocs.net/22660

 

<그림 4> Skip-gram의 인공 신경망 도식화

출처 : https://wikidocs.net/22660


 

Comments