Неточное сходство результатов doc2vec с использованием библиотеки gensim - PullRequest
0 голосов
/ 12 сентября 2018

Я работаю с библиотекой Gensim, чтобы обучить некоторые файлы данных с использованием doc2vec, пытаясь проверить сходство одного из файлов с помощью метода model.docvecs.most_similar("file"), я всегда получаю все результаты выше 91% практически без разницы между ними (что не логично), потому что файлы не имеют сходства между ними. поэтому результаты неточны.

Вот код для обучения модели

model = gensim.models.Doc2Vec(vector_size=300, min_count=0, alpha=0.025, min_alpha=0.00025,dm=1)
model.build_vocab(it)
for epoch in range(100):
    model.train(it,epochs=model.iter, total_examples=model.corpus_count)
    model.alpha -= 0.0002
    model.min_alpha = model.alpha
model.save('doc2vecs.model')
model_d2v = gensim.models.doc2vec.Doc2Vec.load('doc2vecs.model')
sim = model_d2v.docvecs.most_similar('file1.txt')
print sim


это результат вывода

[('file2.txt', 0.9279470443725586), ('file6.txt', 0.9258157014846802), ('file3.txt', 0.92499840259552), ('file5.txt', 0.9209873676300049), ('file4.txt', 0.91840887, 0.91840830) , ('file7.txt', 0.9141069650650024)]

что я делаю не так? Как я могу улучшить точность результатов?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Каковы ваши it данные и как они подготовлены? (Например, что делает print(iter(it).next()), особенно если вы вызываете его дважды подряд?)

Вызвав train() 100 раз, а также сохранив значение по умолчанию model.iter из 5, вы фактически делаете 500 проходов по данным. И первые 5 проходов будут использовать train() s, внутреннее, эффективное alpha -управление, чтобы постепенно снижать скорость обучения до заявленного вами min_alpha значения. Тогда ваши следующие 495 проходов будут проходить по вашим собственным неуклюже управляемым альфа-скоростям, сначала возвращайтесь к отметке 0.025, а затем понижайте каждую партию из 5, пока не достигнете 0.005.

Ничего из этого не является хорошей идеей. Вы можете просто позвонить train() один раз, передав ему желаемый номер epochs. Типичное количество эпох в опубликованных работах - 10-20. (Немного больше может помочь с небольшим набором данных, но если вы считаете, что вам нужны сотни, возможно, что-то еще не так с данными или настройкой.)

Если это небольшой объем данных, вы не получите очень интересных Word2Vec / Doc2Vec результатов, поскольку эти алгоритмы зависят от множества различных примеров. В опубликованных результатах, как правило, используются обучающие наборы с документами от десятков тысяч до миллионов, а каждый документ содержит не менее десятков, но предпочтительно сотен слов. С меньшими наборами данных иногда вы можете получить адекватные результаты, используя больше тренировочных проходов и меньшие векторы. Также использование более простого режима PV-DBOW (dm=0) может помочь с небольшими корпусами / документами.

Значения, сообщаемые most_similar(), не являются «процентами» подобия. Это значения косинусоподобия от -1,0 до 1,0, и их абсолютные значения менее важны, чем относительные ранги различных результатов. Так что не должно иметь значения, если будет много результатов с> 0,9 сходствами - если эти документы больше похожи на документ запроса, чем те, которые находятся ниже в рейтинге.

Таким образом, проверка на отдельные документы, предложенные как наиболее похожие, является настоящим испытанием. Если они кажутся бессмыслицей, скорее всего, есть проблемы с вашими данными, их подготовкой или параметрами обучения.

Для наборов данных с достаточным количеством реального текста на естественном языке обычно более высокие значения min_count дают лучшие результаты. В реальном тексте, как правило, много низкочастотных слов, которые не подразумевают сильных вещей без множества других примеров, и, следовательно, сохранение их во время обучения служит шумом, делающим модель менее сильной.

0 голосов
/ 12 сентября 2018

Не зная содержания документов, вот два совета, которые могут вам помочь.

  • Во-первых, 100 эпох, вероятно, будут слишком малы, чтобы модель могла различить различия.

  • Кроме того, проверьте содержимое документов и корпус, который вы используете. Удостоверьтесь, что словарь соответствует вашим файлам?

...