크게 생각하고, 목표를 높게 잡고, 대담하게 행동하라.

“언젠가는 목표에 이를지도 모르는 단계를 밟는 것으로는 언제나 실패한다. 모든 단계가 그 자체로 목표인 동시에 목표로 이르는 단계여야한다.” - 괴테

AI/자연어 처리

[자연어처리] Word2Vec, Skip-gram

o_onn5 2023. 2. 13. 05:23
728x90

Word2Vec

워드투벡터(Word2Vec)이란 각 단어의 벡터 간 유사도를 측정하기 위한 방법이다.

Word2Vec의 학습방식에는 CBOW(ContinuousBagofWords)와 Skip‑Gram 두 가지 방식이 있다.

 

CBOW: 주변 단어들을 입력으로 중간에 있는 단어들을 예측

Skip‑Gram: 중간에 있는 단어들을 입력으로 주변 단어들을 예측


CBOW

CBOW는 주변 단어들을 입력으로 받고 중간에 있는 단어를 예측한다.

https://wikidocs.net/22660

 

중심 단어로부터 주변 단어를 앞, 뒤로 몇개 볼지 정해야하는데 이 범위를 윈도우(window)라고 한다.

위 예시에서는 window의 크기가 2인 셈이다.

 

우선 CBOW는 입력으로 주변 단어의 원-핫 벡터가 들어가게 된다.

그리고 입력층은 가중치 W와 곱해져서 투사층(Projection layer)를 만들게 된다.

이때 가중치의 크기는 V x M 이다. (입력 크기는 1 x V, V는 단어 집합의 크기) 

따라서 투사층의 크기는 1 x M이 되고 아래의 그림에서는 M이 5인 경우이다.

 

 

https://wikidocs.net/22660

 

투사층에서 출력층 사이의 가중치 W'는 M × V 행렬이다.

인공 신경망의 훈련 전에 이 가중치 행렬 W와 W'는 랜덤 값을 가지고, CBOW는 주변 단어로 중심 단어를 더 정확히 맞추기 위해 계속해서 이 W와 W'를 학습해가는 구조다.

 

https://wikidocs.net/22660

이렇게 주변 단어의 원-핫 벡터에 대해서 가중치 W가 곱해서 생겨진 결과 벡터들은 투사층에서 만나 이 벡터들의 평균인 벡터를 구하게 된다. 

 

https://wikidocs.net/22660

투사층에서 가중치 W' 와 곱해져서 크기가 1 x V 인 벡터를 출력한다. 이 벡터가 소프트맥스 함수를 지나면서 각 원소들은 0과 1사이의 실수값을 갖게 되고 총합은 1이 된다. 

위 사진에서 두 벡터인 y^와 y의 오차를 줄이기위해 CBOW는 손실 함수(loss function)로 크로스 엔트로피(cross-entropy) 함수를 사용한다. 크로스 엔트로피 함수에 중심 단어인 원-핫 벡터와 스코어 벡터를 입력값으로 넣고, 이를 식으로 표현하면 다음과 같다. 

 


Skip-gram

CBOW가 주변 단어로 중심 단어를 예측했다면 Skip-gram은 중심 단어로 주변 단어를 예측한다.

https://wikidocs.net/22660

인공 신경망은 아래와 같이 도식화 시킬 수 있다.

https://wikidocs.net/22660

 

CBOW와의 차이점은 원-핫 입력 벡터에서 가중치를 곱하고 투사층 벡터를 구할 때 평균을 내지 않는다는 것이다.

입력 벡터가 하나니까 어떻게 보면 평균을 구할 필요가 없다고도 할 수 있다. 

여러 논문에서 성능 비교를 진행했을 때 전반적으로 Skip-gramd이 CBOW보다 성능이 좋다고 알려져 있다.

 

728x90