Table of Contents
Table of Contents
📝 상세 정리
#- 이번 장도 단어의 분산 표현
- 앞 장에서 통계 기반 기법을 이용했다면, 이번에는 추론 기반 기법을 이용하겟다.
3.1 추론 기반 기법과 신경망
#- 3.1.1 통계 기반 기법의 문제점
- 결국 동시발생 행렬을 만들고 SVD를 적용해야하는데, 이는 큰 말뭉치에서 너무 어렵다
- 동시발생행렬의 크기는 $O(N^2)$ SVD 연산 시간은 $O(N^3)$ 이라 어휘가 100만개 단위로 되면 현실적으로 불가능해진다
- 추론 기반 기법에서는 소량(미니배치)씩 학습해서 가중치를 갱신한다.
- 어휘량이 많아도 가능하고
- 여러 GPU를 이용한 병렬 계산도 가능하다!
- 3.1.2 추론 기반 기법 개요
- 추론: 주변 단어(맥락)이 주어졌을때 빈칸에 무슨 단어가 들어가는지를 추측하는 작업
- 추론을 통해 신경망으로 각 단어의 출현 확률을 만들자.
- 3.1.3. 신경망에서의 단어 처리
- 신경망은 단어를 그대로 처리할 수 없으니, 원핫 벡터로 변환하자.
- 원핫벡터: 벡터의 원소중 하나만 1이고 나머지는 모두 0인 벡터
3.2 단순한 word2vec
#- 3.2.1 CBOW모델의 추론 처리
- CBOW모델은 맥락으로부터 타겟을 추측하는 용도의 신경망
- N개의 단어를 맥락으로 사용하기로 결정했다면, N개의 원핫벡터가 입력층이 된다.
- 은닉층에 들어갈 값은 여러개의 입력층의 결과의 평균이다.
- 첫번째 입력층의 결과가 $h_1$, 두번째 입력층의 결과가 $h_2$라면 은닉층의 뉴런은 $\frac{1}{2}(h_1 + h_2)$ 이 된다.
- 출력층의 뉴런 하나하나는 각각의 단어에 대응되고, 해당 단어의 점수가 나온다.
- 점수는 확률로 해석되기 전의 값으로, softmax함수로 확률을 얻어낸다.
- 은닉층의 뉴런수를 입력층의 뉴런수보다 적게 하는것이 중요하다.
- 이렇게 해야 은닉층이 단어 예측에 필요한 정보를 간결하게 담게 되며, 결과적으로 밀집벡터 표현을 얻을 수 있다.
- 단어 벡터를 은닉층에 넣어서 사람이 알아보지 못하게 되는걸 인코딩, 반대로 은닉층의 정보를 사람이 알아볼 수 있는 결과로 만드는 작업을 디코딩이라고 한다.
- CBOW모델은 활성화 함수를 사용하지 않는 간단한 신경망이다.
- 여러개의 입력층은 같은 가중치를 공유한다.
- 3.2.2 CBOW 모델의 학습
- 위에서 구한 점수에 softmax함수를 적용하면 확률을 얻을 수 있다.
- 3.2.3 word2vec의 가중치와 분산 표현
- $W_{in}$의 가중치의 각 행은 각 단어의 분산표현에 해당하고, $W_{out}$에서는 각 단어의 분산 표현이 열 방향으로 저장된다.
- 행렬의 차원중 어디가 각 단어에 대응되는지 알면 직관적인듯
3.3 학습 데이터 준비
#- 3.3.1 맥락과 타깃
- 이전에 말한대로 맥락은 주변단어, 타깃은 중앙 한단어
- 맥락은 여러개가 될수 있으므로 contexts라고 복수형 표현을 권장
- 이전에 했던것과 같이 텍스트를 단어 ID로 바꾸고, 이를 배열로 저장한다.
- 3.3.2 원핫 표현으로 변환
- 학습에 사용하기 위해 이를 원핫 벡터로 바꾼다.
- 8개짜리, 7종류 단어의 문장이어서 (6, 2 )의 단어 ID 벡터가있었다면 이는 단어 ID가 원핫 베겉로 바뀌며 (6, 2, 7 )의 벡터가 된다.
3.4 CBOW 모델 구현
#- 간단하게 두개의 맥락을 $W_{in}$ 을 통과켜서 평균을 내고, $W_{out}$을 거쳐서 softmax를 통해 Loss를 얻어내는 모델을 구상해보자.
- 3.4.1 학습 코드 구현
- 일반적인 신경망 학습과 완전히 같다! (1장 참조)
- 입력층의 가중치, 즉 $W_{in}$을 꺼내봄으로 단어 ID의 분산표현을 잘 확인할 수 있다.
- 하지만 아직 큰 맒룽치에서는 처리속도가 느리다는 문제점이 있다.
3.5 word2vec 보충
#- 3.5.1 CBOW 모델과 확률
- CBOW모델을 확률 표기법으로 기술해봦.
- 맥락이 두개인 경우, 조건부 확률 식으로 $P(w_t | w_{t-1}, w_{t+1})$ 과 같이 나타낼 수 있다.
- 이를 이용해 손실함수도 간결하게 표현할 수 있다.
- $L = -\log P(w_t | w_{t-1}, w_{t+1})$
- $L = -\frac{1}{T} \sum\limits_{t = 1}^{T}\log P(w_t | w_{t-1}, w_{t+1})$
- 3.5.2 skip-gram 모델
- CBOW모델과 맥락과 타깃을 역전시킨 모델
- 중앙 단어 하나로 주변 단어를 예측하자
- $P(w_{t-1}, w_{t+1} | w_t) = P(w_{t-1}| w_t) P(w_{t+1} | w_t)$
- $L = -(\log P(w_{t-1}| w_t) + \log P(w_{t+1} | w_t))$
- $L = -\frac{1}{T} \sum\limits_{t = 1}^{T}(\log P(w_{t-1}| w_t) + \log P(w_{t+1} | w_t))$
- 단어 분산의 정밀도 면에서 skip-gram 모델이 CBOW모델보다 더 좋을 때가 많다.
- 하지만 학습 면에서는 cbow 모델이 더 빠르다.
- 3.5.3 통계 기반 vs 추론 기반
- 통계 기반은 전체를 보면서 1회, 추론 기반은 미니배치를 보면서 일부씩 여러번 학습했다.
- 여러가지 추가 상황들을 생각해보자.
- 어휘에 추가할 새 단어가 생겨난 경우
- 통계기반 방법은 계산을 처음부터 다시 해야함
- 추론기반 방법은 학습된 가중치를 초깃값으로 추가 학습을진행하면 됨
- 얻게되는 분산표현의 성격이나 정밀도
- 의외로 단어의 유사성을 정량평가한 결과, 둘 사이에 우열은 없었음
- skip-gram과 네거티브 샘플링을 이용한 모델은 동시발생행렬에서 특수한 행렬 분해를 적용한 결과와 같았다!!
❔질문 사항
#🔗 참고 자료
#