Chapter3. word2vec
3.1. 추론 기반 기법과 신경망
- 통계 기반 기법의 문제점 : 대규모 말뭉치를 다룰 때 현실적으로 계산하기 어려움, 말뭉치 전체의 통계를 1회만에 처리함(배치 학습)
- 추론 기반 기법의 이점 : 미니배치로 학습해서 어휘 수가 많아 계산량이 큰 작업을 처리하기 어려운 경우에도 신경망을 학습시킬 수 있음, 병렬 계산 가능(미니배치 학습)
- 공통점 : 분포 가설에 기초, ‘단어의 동시발생 가능성을 얼마나 잘 모델링 하는가’가 중요
3.2. 단순한 word2vec
- CBOW (Continuous bag-of-words)
- $W_{in}$의 각 행이 각 단어의 분산 표현에 해당
- $W_{out}$에 단어의 의미가 인코딩 된 벡터가 저장됨(열 방향)
word2vec에서는 최종적으로 이용하는 단어의 분산 표현으로 대부분 입력층의 가중치만 이용
- 입력층의 개수 : 맥락으로 고려할 단어의 개수
- word2vec에서 사용되는 신경망으로, 맥락으로부터 타깃을 추측하는 용도의 신경망
3.3. 학습 데이터 준비
3.4. CBOW 모델 구현
# 하이퍼파라미터 설정
window_size = 1
hidden_size = 5
batch_size = 3
max_epoch = 1000
# 텍스트 전처리
text = 'You say goodbye and I say hello.'
corpus, word_to_id, id_to_word = preprocess(text)
vocab_size = len(word_to_id)
contexts, target = create_contexts_target(corpus, window_size)
target = convert_one_hot(target, vocab_size)
contexts = convert_one_hot(contexts, vocab_size)
# 학습 모델
model = SimpleCBOW(vocab_size, hidden_size)
optimizer = Adam()
trainer = Trainer(model, optimizer)
trainer.fit(contexts, target, max_epoch, batch_size)
trainer.plot()
# 단어 분산 표현 결정: 밀집벡터
word_vecs = model.word_vecs
for word_id, word in id_to_word.items():
print(word, word_vecs[word_id])
3.5. word2vec 보충
- 확률로 표현한 CBOW 모델 : $P(w_t|w_{t-1},w_{t+1})$
- 손실함수(말뭉치 전체) : $L = -{1\over T} \sum logP(w_t|w_{t-1},w_{t+1})$
- 맥락으로 $w_{t-1},w_{t+1}$이 주어졌을 때 타깃이 $w_t$가 될 확률
- skip-gram 모델
- 확률로 표현한 skip-gram 모델 : $P(w_{t-1},w_{t+1}|w_t)$
- 손실함수(말뭉치 전체) : $L = -{1\over T} \sum (logP(w_{t-1}|w_t)+logP(w_{t+1}|w_t))$
- CBOW와 반대로 중앙의 단어(타깃)로부터 주변의 여러 단어(맥락)를 추측함
- 비교 CBOW skip-gram
학습 속도 |
faster |
slower |
성능 |
worse |
better |
요약
- 단어의 의미를 표현해 컴퓨터에게 이해시키는 방법
- 추론 기반 기법 : 미니배치 학습으로 단어의 분산 표현을 학습
- 통계 기반 기법 vs 추론 기반 기법
- 통계 기반 기법 : 단어의 유사성 인코딩
- 추론 기반 기법 : 단어의 유사성 + 단어 간 패턴 파악, 단어 추가 및 갱신에 유리
정확도는 명확히 우열을 가릴 수 없음, 서로 연결되어 있음
댓글