Я строю модель Word2Vec для рекомендации по категориям для набора данных, состоящего из ~ 35 000 предложений, в общей сложности ~ 500 000 слов, но только ~ 3.000 отдельных. Я строю модель в основном так:
def train_w2v_model(df, epochs):
w2v_model = Word2Vec(min_count=5,
window=100,
size=230,
sample=0,
workers=cores-1,
batch_words=100)
vocab = df['sentences'].apply(list)
w2v_model.build_vocab(vocab)
w2v_model.train(vocab, total_examples=w2v_model.corpus_count, total_words=w2v_model.corpus_total_words, epochs=epochs, compute_loss=True)
return w2v_model.get_latest_training_loss()
Я пытался найти правильное количество эпох для такой модели, как эта:
print(train_w2v_model(1))
=>> 86898.2109375
print(train_w2v_model(100))
=>> 5025273.0
Я нахожу результаты очень противоречивыми. Я не понимаю, как увеличение количества эпох может привести к снижению производительности. Кажется, это не является неправильным пониманием функции get_latest_training_loss
, так как я наблюдаю результаты с функцией most_similar
намного лучше только с 1 эпохой:
100 эпох:
w2v_model.wv.most_similar(['machine_learning'])
=>> [('salesforce', 0.3464601933956146),
('marketing_relationnel', 0.3125850558280945),
('batiment', 0.30903393030166626),
('go', 0.29414454102516174),
('simulation', 0.2930642068386078),
('data_management', 0.28968319296836853),
('scraping', 0.28260597586631775),
('virtualisation', 0.27560457587242126),
('dataviz', 0.26913416385650635),
('pandas', 0.2685554623603821)]
1эпоха:
w2v_model.wv.most_similar(['machine_learning'])
=>> [('data_science', 0.9953729510307312),
('data_mining', 0.9930223822593689),
('big_data', 0.9894922375679016),
('spark', 0.9881765842437744),
('nlp', 0.9879133701324463),
('hadoop', 0.9834049344062805),
('deep_learning', 0.9831978678703308),
('r', 0.9827396273612976),
('data_visualisation', 0.9805369973182678),
('nltk', 0.9800992012023926)]
Любое понимание того, почему он так себя ведет? Я бы подумал, что увеличение количества эпох наверняка окажет положительное влияние на тренировку потери.