gensim의 word2vec/doc2vec에서 학습 손실을 출력하면서 학습률 alpha의 값을 바꾸어 학습한다

개요



gensim을 사용한 word2vec/doc2vec의 실행은 아래와 같이 모델을 작성하고 학습시키는 것만으로 간결하게 실현할 수 있습니다.
# https://rare-technologies.com/word2vec-tutorial/
model = gensim.models.Word2Vec(iter=1)  # an empty model, no training yet
model.build_vocab(some_sentences)  # can be a non-repeatable, 1-pass generator
model.train(other_sentences) 

다만, 섬세한 학습의 관리 등은 gensim에 맡겨 버리므로, 가능한 한 정중한 튜닝을 할 수 있도록, 이 기사에서는
  • 학습시 학습 손실을 출력합니다
  • 학습률 alpha 의 값을 바꾸면서 학습시킨다

  • 두 가지 방법을 설명합니다.

    참고로 기본적으로 학습률 alpha 의 값은 min_alpha 를 향해 선형으로 떨어지므로 보통 이번과 같은 방법을 취하지 않아도 alphamin_alpha 를 지정하면 문제 없습니다 .

    alpha is the initial learning rate (will linearly drop to min_alpha as training progresses).
    htps : // 라라 m 흔들림 k. 이 m/겐시 m/모두 ls/를 rd2ゔぇc. HTML

    방법



    학습시 손실을 출력한다



    학습의 손실을 출력하기 위해서는, 모델에 compute_loss=True 를 지정한 후에 get_latest_training_loss() 로 취득할 수 있습니다.
    model = word2vec.Word2Vec(min_count=1, compute_loss=True)
    model.build_vocab(texts)
    model.train(texts, total_examples=model.corpus_count, epochs=model.iter)
    
    model.get_latest_training_loss()
    

    alpha 값을 변경하면서 학습



    학습을 반복하는 동안 학습률 alpha 를 매번 지정하도록 합니다. 또한, min_alpha 가 설정되어 있으면 alpha 의 값이 작아져 가므로, alpha 와 같은 값을 넣어 변화하지 않게 하고 있습니다.
    alpha = 0.025
    alpha_delta = 0.001
    passes = 20
    
    loss_val_list = []
    for epoch in range(passes):
        model.alpha, model.min_alpha = alpha, alpha
        model.train(texts, total_examples=model.corpus_count, epochs=model.iter)
    
        alpha -= alpha_delta
        loss_val_list.append(model.get_latest_training_loss())
    

    또한 위에서 설명한 학습 손실을 출력하여 목록에 저장하면 다음과 같이 학습 손실을 시각화할 수 있습니다.



    참고


  • Loss through each iteration in skip gram · Issue #999 · RaRe-Technologies/gensim
  • [WIP] Computes training loss for Word2Vec model (fixes issue #999) by chinmayapancholi13 · Pull Request #1201 · RaRe-Technologies/gensim
  • dietmar/gensim_word2vec_loss
  • 좋은 웹페이지 즐겨찾기