모두야

CH3) word2vec - 간단ver (1) 본문

밑.시.딥/2권

CH3) word2vec - 간단ver (1)

미미밍2 2021. 9. 19. 18:13
728x90
반응형
단어의 의미를 주변 단어에 의해 형성된다.

  • 추론 기반 기법
  • word2vec

통계 기반 기법의 문제점

말뭉치의 어휘 수가 많으면 SVD 로 계산량이 큰 작업을 처리하기 어렵다.

통계 기반 기법 : 학습 데이터를 한꺼번에 처리한다. (배치 학습)

추론 기반 기법 : 학습 데이터 일부를 순차적으로 학습한다. (미니배치 학습)


추론 기반 기법

: 추론 문제를 풀고 학습 하는 것

: 단어의 출현 패턴을 학습 하는 것

추론 기법에는 신경망 모델이 등장한다. 모델은 맥락 정보를 입력받아 출현하는 각 단어의 출현 확률을 출력한다.


원핫 표현(원핫 벡터)

단어-> 고정 길이 벡터로 변환하여 신경망에서 단어를 처리한다.

신경망의 화살표에 가중치(매개변수)가 존재하여, 입력층 뉴런과 가중치의 합이 은닉층이 된다. 

완저연결계층 계산은 행렬 곱으로 수행한다.

단어 ID 입력이 원핫벡터로 구성되어 있어 결국 행렬 곱은 가중치의 행벡터를 하나 뽑아낸 것과 같다.

단순히 가중치 행벡터를 뽑아내는 것에 행렬곱을 계산 하는 것은 비효율적이라 본다. 

4.1 절에서 word2vec 개선을 살펴볼 수 있다.


단순한 word2vec

신경망 모델을 구축해보자!!

CBOW 모델

  1. 입력층 = 맥락 = 단어들의 목록 = 주변 단어
    - 맥락으로 고려할 단어(주변단어)는 2개이므로 입력층이 2개가 된다.
    - 맥락은 'you'와 'goodbye'이고, 정답레이블(신경망이 예측 해야할 단어)는 'say'이다.

  2. 은닉층 
    - 입력층이 여러 개이면 전체를 평균한다.

  3. 출력층
    - 출력 뉴런 하나하나가 각각의 단어에 대응하여 점수를 표현한다.
    - 점수가 높을 수록 대응 단어의 출현 확률이 높다.
    - 점수가 소프트맥스 함수를 거쳐 확률이 된다.

가중치의 각 행은 단어의 분산 표현이다. 

학습을 진행하며 맥락에서 출현하는 단어를 잘 추측하도록 분산 표현이 생신된다.

# CBOW 모델 - 추론

# 샘플 맥락 데이터 - 입력층
c0 = np.array([[1, 0, 0, 0, 0, 0, 0]])
c1 = np.array([[0, 0, 1, 0, 0, 0, 0]])

# 가중치 초기화
W_in = np.random.randn(7, 3)
W_out = np.random.randn(3, 7)

# 계층 생성
in_layer0 = MatMul(W_in)
in_layer1 = MatMul(W_in)
out_layer = MatMul(W_out)

# 순전파
h0 = in_layer0.forward(c0) #입력*가중치
h1 = in_layer1.forward(c1) 
h = 0.5 * (h0 + h1) #은닉층
s = out_layer.forward(h) #출력
print(s)

CBOW 모델 - 학습

올바른 예측을 하기 위해 가중치를 조절한다.

Win과 Wout인 가중치에 단어의 출현 패턴을 파악한 벡터가 학습된다.

 

다중 클래스 분류 신경망이므로, 소프트맥스와 교차 엔트로피 오차를 이용한다.

소프트맥스 함수를 이용하여 점수를 확률로 변환하고, 그 확률과 정답 레이블로부터 교차 엔트로피 오차를 구한다.

교차 엔트로피 오차의 값을 손실로 사용하여 학습을 진행한다. 


입력 완전연결계층 가중치 Win : 각 행이 각 단어의 분산 표현

출력 완전연결계층 가중치 Wout : 단어의 의미가 인코딩된 벡터가 저장되어 있다.
                                          : 각 단어의 분산 표현이 열 방향(수직 방향)으로 저장된다.

 

입력 측 가중치 Win만을 최종 단어의 분산 표현으로 이용한다.

 

728x90
반응형