2017-12-12 14 views
0

기존의 gensim Doc2Vec 모델을 가지고 있으며, 교육 세트 및 확장 모델에 대한 반복적 인 업데이트를 시도하고 있습니다.gensim Doc2Vec 모델의 교육 문서 업데이트

나는 정상으로 preproecssing 새로운 문서를 가지고 가고, 수행

stoplist = nltk.corpus.stopwords.words('english') 
train_corpus= [] 
for i, document in enumerate(corpus_update['body'].values.tolist()): 
    train_corpus.append(gensim.models.doc2vec.TaggedDocument([word for word in gensim.utils.simple_preprocess(document) if word not in stoplist], [i])) 

난 다음, 원래 모델을로드 어휘를 업데이트하고 재교육 :

#### Original model 
## model = gensim.models.doc2vec.Doc2Vec(dm=0, size=300, hs=1, min_count=10, dbow_words= 1, negative=5, workers=cores) 

model = Doc2Vec.load('pvdbow_model_6_06_12_17.doc2vec') 

model.build_vocab(train_corpus, update=True) 

model.train(train_corpus, total_examples=model.corpus_count, epochs=model.iter) 

그때 훈련 세트를 업데이트 Pandas 데이터 프레임에 새 데이터를 추가하고 인덱스를 재설정합니다. 그러나

corpus = corpus.append(corpus_update) 
corpus = corpus.reset_index(drop=True) 

, 나는 업데이트 모델 infer_vector()를 사용하려고 :

inferred_vector = model1.infer_vector(tokens) 
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs)) 

결과 품질이 제안, 가난한입니다 모델없이 훈련 세트 dataframe에서 인덱스 더 긴 일치.

수정되지 않은 교육 세트 데이터 프레임과 비교하면 (다시 업데이트 된 모델을 사용하여) 결과는 괜찮지 만 분명히 새로운 문서가 누락되었습니다.

모델을 완전히 재 훈련하지 않고도 모델을 자주 업데이트하고 싶다면 두 가지 모두 업데이트해야합니까?

답변

1

Gensim Doc2Vec은 아직 확장 어휘 (build_vocab(..., update=True) 통해)에 대한 공식적인 지원이 없으므로 여기서 모델의 동작은 유용하지 않습니다. 사실, 기존의 모든 doc 태그는 완전히 삭제되고 최신 코퍼스의 모든 것으로 대체됩니다. (this issue 등, Doc2Vecupdate_vocab()를 사용하려고 할 때 또한, 메모리 오류 프로세스 충돌의 뛰어난 해결되지 않은보고가있다.)

그 일을하더라도, 만약에 이제까지 계속 고려 어두운 균형 문제가 있습니다 초기 교육 세트와 다른 텍스트가있는 모델에서 train()으로 전화하십시오. 특히, 그러한 각 트레이닝 세션은 모델을 새 예제에서 더 나으나, 원래 훈련의 가치를 잃어 버려 모델을 일부 경우 또는 전반적으로 악화시킬 수 있습니다.

증가하는 코퍼스에서 가장 방역 할 수있는 정책은 모든 교육 예제를 하나의 코퍼스로 결합하여 처음부터 재 훈련하는 것입니다. 업데이트 롤링에 대한 가능한 프로세스의 또 다른 개요가 my recent post to the gensim discussion list에서 논의되었습니다.

사용자의 설정에 대한 몇 가지 다른 의견 : (hs=1) 계층 - softmax를 음의 샘플링을 모두 사용하여

  • 은 (negative> 0) 모델의 크기 및 교육 시간을 증가, 그러나 어떤 이점을 제공하지 않을 수도 있습니다 반복 모드 (또는 다른 개조)가있는 모드를 하나만 사용하는 것과 비교하면 두 모드가 모두 활성화되는 경우가 거의 없습니다.

  • iter을 지정하지 않으면 Word2Vec의 기본값 인 '5'가 사용됩니다. , 출판 된 Doc2Vec 작업은 종종 10-20 회 이상의 반복을 사용합니다 및/또는 (0.1의 기본을 가지고) alpha의 값이 작은

  • 으로, (단지 5의 기본을 가지고)의 선택적 매개 변수 steps에 대해 많이 높은 값으로 더 나은 작업

  • 많은 보고서 infer_vector