[DeepLearning] Word2Vec 공부하기

Soyeon You·2023년 8월 15일
0

Study

목록 보기
3/4

워드투벡터 (Word2Vec)

원-핫 벡터는 단어집합을 기반으로 0과 1로만 이루어져 있기에 단어 벡터 간의 유사도를 계산하기 힘들다.
그래서 이를 해결하기 위해 단어 간 유사도를 반영하는(의미를 수치화하는) 방법으로 워드투벡터를 사용할 수 있다.

워드투벡터를 이용한 벡터 연산의 아주 쉬운 예시를 들어보면 다음과 같다.

한국 - 서울 + 도쿄 = 일본

어떻게 이런 단어의 의미를 반영할 수 있을까?

1. 희소 표현 (Sparse Representation)

희소 표현이란 대부분의 백터/행렬의 값이 0으로 표현되는 방법이다. 원-핫 벡터가 이에 해당된다.
앞서 말한 것처럼 희소 표현 방법은 벡터간 유사성을 표현할 수 없어서, 워드투벡터는 분산 표현을 사용한다.

고양이 = [0, 0, 0, 0, 0, 1, 0, ... , 0]

2. 분산 표현 (Distributed Representation)

분산 표현이란 '비슷한 문맥에서 등장하는 단어들은 비슷한 의미를 가진다'라는 분포 가정으로 만들어진다.
예를 들어 '고양이'는 '귀엽다', '예쁘다' 등의 단어와 주로 함께 등장하므로 이 세 단어를 벡터화하면 유사한 벡터값을 가진다.
이런 벡터는 모든 단어집합을 표현할 필요가 없으므로 차원이 줄어든다. 여기서의 차원은 사용자가 설정하며 실수값을 가진다.

고양이 = [0.2, 0.3, 0.5, 0.2, 0.7, ... , 0.3]


희소 표현: 고차원, 각 차원 분리, 벡터 간 유사도 계산 X, One-Hot Vec
분산 표현: 저차원, 단어 의미를 차원에 분산, 벡터 간 유사도 계산 O, Word2Vec

3. CBOW (Continuous Bag of Words)

워드투벡터의 학습 방식은 CBOW, Skip-Gram 2가지가 있다.
간단히 말해서 CBOW는 주변 단어로부터 중간 단어를 예측하는 방법(빈칸 채우기)이고, Skip-Gram은 반대로 중간 단어로부터 주변 단어를 예측하는 방법이다.
예측 시 고려하는 단어는 윈도우 크기로 설정하며 보통 한 방향에 대해 n으로 표기한다. (양방향, 총 2n)
즉, CBOW 방법에서 n=2일 때면 빈칸 앞의 2단어와 뒤의 2단어로부터 빈칸을 예측하는 것이다.


아래 사진처럼 윈도우를 옆으로 움직여서 주변 단어와 중심 단어를 변경하며 데이터 셋을 만드는 방법을 슬라이딩 윈도우 (sliding window)라고 한다.
*Word2Vec에서 입력은 모두 원-핫 벡터이다.
슬라이딩 윈도우

이렇게 생성된 데이터 셋으로 CBOW의 동작 과정을 알아보자.

입력층의 입력으로 윈도우 범위 안의 단어들(원-핫 벡터)가 들어가며,
출력층에서 예측하고자 하는 빈칸 단어의 원-핫 벡터가 레이블로서 필요하다.

그림에서 알 수 있듯이 워드투벡터는 은닉층이 1개인 얕은 신경망이다.
또한, 은닉층에 활성화 함수가 없고 룩업 테이블이 은닉층이자 투사층으로 존재한다.

V = 단어 집합의 크기
M = 사용자 설정값

CBOW는 주변 단어로 중심 단어를 더 정확히 맞추기 위해 W와 W'를 학습해가는 구조이다.
이 구조의 입력과 출력 레이어를 더 자세히 알아보자.


먼저 입력 레이어이다.
이 사진은 n=2일 때라서 총 4개(2n)의 단어를 입력 벡터로 사용한다. 각 입력에 대해 가중치 W를 곱해 결과 벡터를 구하고, 투사층에서 만난다. 이때 투사층에서 만나는 4개의 결과 벡터에 대해 평균을 구하게된다.
*Skip-Gram은 입력이 중심 단어 하나이므로 투사층에서 평균을 구하지 않음


다음으로 출력 레이어이다.
위에서 구한 평균 벡터에 두번째 가중치 행렬인 W'를 곱하면 결과 벡터와 같은 차원의 형태를 띈다. 이 벡터는 소프트맥스 함수를 지나면서 0과 1사이의 실수로 이루어지는데, 이는 해당 인덱스의 단어가 중심 단어일 확률을 나타낸다.
학습은 이런 결과 벡터와 레이블 벡터의 오차를 줄이는 과정이다 손실 함수, 크로스 엔트로피 함수를 사용해서 오차를 줄일 수 있다.

4. Skip-gram

CBOW가 주변 단어로 중심 단어를 예측했다면, Skip-gram은 반대로 중심 단어에서 주변 단어를 예측한다.
CBOW와 똑같이 n=2로 설정한다.

Skip-gram은 중심 단어에서 주변 단어를 예측하는 과정이므로 투사층에서 벡터들의 평균을 구하지 않는다. (애초에 입력 벡터가 1개이다.)

5. NNLM vs Word2Vec

사실 워드 임베딩의 개념은 NNLM에서 먼저 사용되었다. NNLM의 느린 학습 속도화 정확도를 개선하기 위해 탄생한 것이 Word2Vec이다. 둘의 차이점을 알아보자.

1. 예측의 대상

NNLM: 다음 단어 예측
Word2Vec: 워드 임베딩 자체, 중심 단어 예측

2. 구조


NNLM: 활성화 함수 은닉층
Word2Vec: 활성화 함수 은닉층X, 투사층

은닉층을 제거하고 계층적 소프트맥스, 네거티브 샘플링 등의 기법으로 Word2Vec가 NNLM보다 학습 속도가 빠르다.

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기