2016-08-04 14 views
0

Gensim Doc2vec 모델을 사용하여 문서 벡터를 학습합니다. 나는 '좋은'이라는 표현에 대한 표현을 인쇄했지만 모든 신기원을 발견했다. ID가 '3'인 문서에 대한 표현을 인쇄하는 동안 모든 다른시기는 다릅니다!Doc2vec Gensim : 각 에포크 중에 단어 삽입이 업데이트되지 않음

내 코드는 다음과 같습니다. 무슨 일이 일어나고 있는지 잘 모릅니다.

model = gensim.models.Doc2Vec(dm = 0, alpha=0.1, size= 20, min_alpha=0.025) 

model.build_vocab(documents) 

print ('Building model....',(time4-time3)) 
for epoch in range(10): 
    model.train(documents) 

    print('Now training epoch %s' % epoch) 
    print(model['good']) 
    print(model.docvecs[str(3)]) 

답변

1

매번 업데이트 후에 표현을 확인하는 올바른 방법이 아닙니다.

for epoch in range(10): 
    model.train(documents) 

당신이 훈련은 다음과 같습니다 Gensim doc2vec 누구 default 값 다음 루프에서 무슨 일이 일어나고 있는지 기본적으로 5

이며, 시대의 수는 수 (docs 참조)해야하는지 정의 할 iter 매개 변수를 사용하여 귀하의 모델 10 번, 처음부터 5 신까지.

Gensim은 현재 모든 신기원 이후에 표현을 점검 할 수 있다고 생각하지 않습니다. 그것이 될 것입니다 일을 한 원유 방법 : 처음에는 워드 벡터에 대한 임의의 값을 사용하고 모델을 학습하기 시작 gensim 모든 시대에

0

. doc2vec (또는 word2vec)에서 한 단어 (exp. 'good')의 모든 최종 단어 벡터는 동일하지만 유사한 단어가 비슷한 단어 벡터가 아니어야합니다.

model['good'] = [0.22 0.52 0.36] 
model['better'] = [0.24 0.50 0.39] 

다른 시대에 : 한 시대에, 예를 들어

model['good'] = [0.58 0.96 0.24] 
model['better'] = [0.59 0.90 0.21] 
+1

나는 당신이 암시하는 것을 얻지 못했습니다. (1) 모든 신기원에서, 단어 벡터는 무작위로 시작하지 않고 단어 벡터의 이전 값으로부터 시작합니다. 첫 번째 시대에서만 단어 벡터가 무작위로 시작됩니다. – kampta

+0

"train"함수를 호출 할 때마다 단어 벡터는 단어 벡터의 임의 값을 가져옵니다. 달리 말하면 "train"function은 시작부터 훈련 모델을 시작하고 word 벡터는 무작위 값을 얻는다. –

+0

맞습니다. 'train' 기능은 처음부터 훈련 모델을 시작합니다. 'train' 함수의'seed' 매개 변수의 기본값은 0으로 고정되어 있으므로 훈련을 시작할 때마다 단어 벡터가 동일한 임의 값으로 초기화되고'n epochs '후에 동일한 벡터를 얻을 수 있습니다 실험은 재현 가능합니다.) – kampta

2

순수한 PV-DBOW 모델 (dm=0는) 전혀 워드 벡터의 사용 또는 훈련을 포함하지 않습니다. (Word2Vec 공유 코드의 인공물 일뿐입니다.

단어 벡터가 인터리브 된 방식으로 학습되도록하려면 기본값이 아닌 코드를 사용해야합니다 dbow_words=1 매개 변수 (또는 PV-DM 모드로 전환하십시오. dm=1, 단어 벡터가 본질적으로 관련되어 있습니다.)