2016-08-04 12 views
0

Я использую модель Gensim Doc2vec для обучения векторов документов. Я распечатал представления для слова «хорошо», но я нашел каждую эпоху, я не нашел обновления! Пока я распечатывал представления для документа с идентификатором «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

Неправильный способ проверки представлений после каждого обновления. Gensim doc2vec использует iter параметр, чтобы определить, что число эпох должно быть (см docs), чье default значение 5.

По сути то, что происходит в следующем цикле:

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

вы обучение ваша модель 10 раз, с нуля до 5 эпоха.

Я не думаю, что Gensim в настоящее время позволяет проверять представления после каждой эпохи. Один сырого способа сделать это будет:

0

в каждой эпохе gensim использовать случайное значение вектора слов на первом, а затем начинает обучать модели. в 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», вектор слов получает случайное значение для векторов слов. в другом слове «поезд» функция начала учебной модели от начала и слова вектор получить случайное значение. –

+0

Это правильно. Функция «поезд» начинает обучение с начала. Поскольку значение по умолчанию параметра 'seed' функции' train' фиксировано равным 0, каждый раз, когда вы начинаете обучение, векторы векторов будут инициализированы одинаковыми случайными значениями, а после «n эпох» вы получите одинаковые векторы (по существу эксперименты воспроизводимы) – kampta

2

Чистый PV-DBOW модель (dm=0) не влечет за собой использование или обучение словесных векторов вообще. (Это всего лишь артефакт общего кода с Word2Vec, который они выделены и случайно инициализированы вообще.)

Если вы хотите, чтобы текстовые векторы обучались чередующимся образом, вы должны использовать нестандартные dbow_words=1 параметр. (Или переключитесь в режим PV-DM, dm=1, где по существу связаны слова-векторы.)