doc2vec 훈련 파라미터 설명

Word2vec이 단어를 vector로 변경하는 word embedding 방식이라면 doc2vec은 문서를 vector로 변경하는 document embedding 방식입니다. Word2vec 방식을 문서에 대해서 확장하였기 때문에 기존의 word2vec의 장점을 그대로 가지며 훈련 방식도 word2vec의 cbow와 skip-gram과 유사한 distributed memory(dm)과 distributed bag of words(dbow)을 사용합니다.

주변의 단어들로 가운데 있는 단어를 유추하는 CBOW, 가운데 있는 단어로 주변 단어들을 유추하는 skip-gram

doc2vec 알고리즘 소개

논문 연결

Doc2vec에서는 paragraph id(document id)를 하나의 단어(paragraph token)처럼 사용해서 문서를 훈련 데이터로 사용합니다. paragraph id, paragraph vector, paragraph token 등 다양한 이름으로 불리지만 의미는 동일합니다.  

PV-DM 방식은 이런 paragraph vector 와 앞의 단어들을 사용해서 다음에 나오는 단어를 유추합니다.  window라는 정해진 사이즈의 단어들을 문맥정보(context)로 사용하며 맨 앞에서부터 한 단어씩 옆으로 이동하면서 훈련 데이터로 사용합니다.

같은 패러그래프에서 생성된 훈련 데이터에서는 하나의 패러그래프 벡터로 공유되기 때문에 패러그래프 벡터는 훈련시 문서의 주제를 잡아주는 memory 같은 역할을 하고 있습니다. 그래서 이 알고리즘의 이름 자체가 분산화된 메모리를 가진 패러그래프 벡터(paragraph vector with distributed memory) 로 지어졌습니다.

PV-DBOW 방식은 위 방식에서 나오는 context 단어들을 사용하지 않고 paragraph id 만 가지고 이 패러그래프에서 나오는 단어를 랜덤하게 예측하는 방식을 사용합니다.  input은 패러그래프 벡터이고 output은 패러그래프에서 random하게 뽑인 단어들입니다.

 

doc2vec 훈련시 주요 파라미터

class gensim.models.doc2vec.Doc2Vec(documents=None,

 corpus_file=Nonedm_mean=Nonedm=1dbow_words=0,

 dm_concat=0dm_tag_count=1docvecs=None

docvecs_mapfile=Nonecomment=None,

 trim_rule=Nonecallbacks=()**kwargs)

document는 doc2vec 모델을 훈련시키기 위한 말뭉치(corpus) 입니다. taggeddocument 리스트를 생성해서 입력하면 됩니다. taggedDocument는 문서 별로 문서 tag, 문서 안의 단어들의 리스트로 구성됩니다.

dm은 doc2vec 훈련 알고리즘입니다. dm=1으로 설정하면 distributed memory(PV-DM)이 사용되고 그 외는 distributed bag of words( PV-DBOW) 알고리즘이 사용됩니다.  Distributed Representations of Sentences and Documents 페이퍼에서는 PV-DM 방식만 사용해도 대부분의 작업에 좋은 결과를 보였으나 PV-DBOW와 함께 사용하는 것을 추천한다고 합니다.

 


vector_size 는 임베딩 벡터의 크기입니다. 벡터 사이즈가 클수록 생성된 모델의 성능이 정교해지나 훈련 시간 및 메모리의 크기가 사이즈가 커진다는 단점이 있습니다. Glove 논문에 따르면 vector size가 커질수록 모델 성능이 좋아지는 것을 확인할 수 있습니다. vector 사이즈가 100까지 증가할 경우 가장 극적인 성능 향상을 보이고 그 이상의 사이즈일 경우 정확도 그래프가 완만하게 증가하는 것을 확인 할 수 있습니다.


alpha 는 learning rate 입니다.

window 는 훈련시 앞 뒤로 고려하는 단어의 개수입니다.  “a little, (cat), sit, on”의 windows 는 2 입니다.  window 사이즈가 커지면 훈련 결과로 나오는 word vectors의 성능이 높아지지만 대신 훈련 시간이 오래 걸린다는 단점이 있습니다. 보통 5에서 10 사이의 값이면 적당합니다.

min count 는 데이터에서 등장하는 단어의 최소빈도수입니다.  Word2Vec/Doc2vec 은 자주 등장하지 않은 단어에 대해서는 제대로 학습이 이뤄지지 않습니다. 또한 min_count 가 작으면 모델에 지나치게 많은 단어가 포함되어 모델의 크기가매우 커집니다.   10에서 100 사이의 값이면 적당할 것 같습니다.

negative 는 negative samples 의 개수입니다. 이 역시 기본값 쓰셔도 됩니다. 클수록 학습속도가 느려집니다. 하지만 지나치게 작으면 학습이 제대로 이뤄지지 않습니다.

그리고….

doc2vec 알고리즘은 일반적인 document embedding 방식으로 훌륭한 성능을 보여줍니다. 하지만 doc2vec 인코딩을 사용하기 위해서는 다량의 말뭉치를 준비하고 형태소 분석기를 사용하여 띄어쓰기를 하고 gensim 등 doc2vec 툴으로 훈련 시키는 등의 다량의 준비 작업이 필요합니다.

로보리포트 기계학습 서비스에서는 이런 준비 과정 없이 간단하게 클릭만으로 기계학습에 사용할 문서를 doc2vec 인코딩으로 변환하거나, 실험에 사용되는 단어 속성들을 word2vec 인코딩으로 변환하도록 준비 하고 있습니다.

저희 서비스에 관심있으신 분들은 로보리포트 사이트에 회원가입하고
(선택) 서비스 업데이트 정보 알람 수신 동의를 클릭하시면 해당 서비스가 업데이트 될 경우 이메일 알람을 받아볼 수 있습니다 : )

그리고 위키 문서 및 경제 뉴스에서 에서 훈련된 doc2vec 모델은 roboreport 오프소스로 이미 등록되어 있으니 이곳도 참조 부탁드립니다.

참고 문서들

https://radimrehurek.com/gensim/models/doc2vec.html

https://lovit.github.io/nlp/representation/2018/03/26/word_doc_embedding/

https://ronxin.github.io/wevi/

https://programmers.co.kr/learn/courses/21/lessons/1698

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다