Всего ~ 100 документов слишком мало для осмысленного обучения модели Doc2Vec
(или Word2Vec
). Опубликованная Doc2Vec
работа имеет тенденцию использовать от десятков тысяч до миллионов документов.
В той степени, в которой вы сможете получить слегка значимые результаты из небольших наборов данных, вам обычно нужно будет уменьшить вектор- размеры намного - намного меньше, чем количество слов / примеров - и увеличивают эпохи обучения. (У ваших игрушечных данных есть 4 текста и 6 уникальных слов. Даже для получения 5-мерных векторов вам, вероятно, понадобится что-то вроде 5 ^ 2 ограничивающих документов.)
Кроме того, Doc2Vec
от gensim не предлагает никаких официальных возможность импортировать слова-слова из других мест. Внутреннее Doc2Vec
обучение - это не процесс, в котором слово-векторы обучаются 1-ым, а затем вычисляются c -векторы. Скорее всего, c -векторы и словосочетания обучаются одновременно, постепенно улучшаясь вместе. (Некоторые режимы, такие как быстрый и часто очень эффективный DBOW
, который можно включить с помощью dm=0
, вообще не создают и не используют векторы слов.)
На самом деле в ваших 4 нет ничего странного -присутствие результатов, если смотреть на данные так, как если бы мы были алгоритмами Doc2Vec
или Word2Vec
, которые не имеют предварительных знаний о словах, а только то, что находится в данных обучения. В ваших тренировочных данных токен 'love'
и токен 'hate'
используются практически одинаково, с одинаковыми окружающими словами. Только увидев множество едва различимых альтернативных вариантов использования слов, наряду со многими контрастирующими окружающими словами, эти модели «плотного встраивания» могут переместить векторы слов на полезные относительные позиции, где они ближе к связанным словам и дальше от других слов. (И, так как вы не предоставили обучающие данные с токеном 'adore'
, модель ничего не знает об этом слове - и если оно предоставлено в тестовом документе, как если бы оно было в методе infer_vector()
модели, оно будет проигнорировано. Таким образом, тестовый документ, который он «видит», - это только известные слова ['i', 'hot', 'chocolate']
.)
Но также, даже если вам удалось тренироваться на большом наборе данных или каким-то образом внедрить знания из других векторов слов, которые 'love'
и 'adore'
в некоторой степени похожи, важно отметить, что антонимы, как правило, очень похожи в наборах слов-векторов, так как они используются в одних и тех же контекстах, часто синтаксически взаимозаменяемы и одной и той же общей категории. , Эти модели часто не очень хорошо хорошо распознают воспринимаемое человеком изменение значения путем замены слова на его антоним (или вставкой единственного слова «не» или других слов с изменяющимся намерением) ,
В конечном счете, если вы хотите использовать Doc2Vec
от gensim, вы должны обучить его гораздо большему количеству данных. (Если вы были готовы взять некоторые другие предварительно обученные векторы слов, почему бы не получить какой-то другой источник несколько похожих предложений массовых предложений? Эффект от использования данных, который не совсем соответствует вашей реальной проблеме, будет аналогичным, если вы используете это внешние данные с помощью объемного текста или предварительно обученной модели.)
Наконец: это плохой, подверженный ошибкам шаблон, который вызывает train()
более одного раза в вашем собственном l oop, с вашим собственным alpha
корректировки. Вы можете просто позвонить ему один раз с нужным номером epochs
, и модель выполнит несколько тренировочных проходов и будет плавно управлять внутренним alpha
в течение нужного количества эпох.