Предполагается, что расположение слов будет различным. Нет никакого «правильного» места для слов, просто взаимных договоренностей, которые хороши в задании обучения (предсказывая слова из других близлежащих слов) - и алгоритм включает случайную инициализацию, случайный выбор во время обучения и (как правило) многопоточную операцию, которая может меняться эффективный порядок учебных примеров и, следовательно, конечные результаты, даже если вы должны были попытаться устранить случайность, полагаясь на генератор псевдослучайных чисел с детерминированным посевом.
В gensim есть класс, называемый TranslationMatrix
, который реализует метод learn-a-projection-between-two-spaces, используемый для машинного перевода между естественными языками в одной из ранних статей word2vec. Для этого требуется, чтобы некоторые слова, которые вы указываете, должны иметь эквивалентные векторы - набор привязки / набора ссылок, а затем другие слова найдут свои позиции по отношению к ним. Существует демо-версия его использования в ноутбуках документации gensim:
https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/translation_matrix.ipynb
Но есть и другие методы, которые вы могли бы также рассмотреть:
model.trainables
есть экспериментальное свойство с окончанием имени _lockf
, которое позволяет масштабировать обновления для каждого слова. Если вы установите его значения равным 0.0, вместо определенных по умолчанию 1.0 для определенных слотов слов эти слова не могут быть дополнительно обновлены. Поэтому после повторной загрузки модели вы можете «заморозить» ваши опорные слова, установив их значения _lockf
равными 0.0, чтобы только другие слова обновляются по второстепенному обучению, и , они все еще связаны с координатами, которые имеют смысл в отношении неподвижных якорных слов. Читайте исходный код , чтобы лучше понять как работает _lockf
.)