Конвертировать модель PySpark ML Word2Vec в модель Gensim Word2Vec - PullRequest
0 голосов
/ 28 декабря 2018

Я сгенерировал модель PySpark Word2Vec следующим образом:

from pyspark.ml.feature import Word2Vec

w2v = Word2Vec(vectorSize=100, minCount=1, inputCol='words', outputCol = 'vector')
model = w2v.fit(df)

(Данные, которые я использовал для обучения модели, не актуальны, важно то, что все в правильном формате иуспешно возвращает объект pyspark.ml.feature.Word2VecModel.)

Теперь мне нужно преобразовать эту модель в модель Gensim Word2Vec.Как бы я пошел по этому поводу?

1 Ответ

0 голосов
/ 29 декабря 2018

Если у вас все еще есть данные обучения, повторное обучение модели gensim Word2Vec может быть самым простым подходом.

Если вам нужны только векторы слов, возможно, модель PySpark сможет их экспортироватьв формате word2vec.c, который gensim может загрузить с .load_word2vec_format().

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

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

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

  • известные векторы слов (model.wv.vectors в генсиме)
  • известный словарь слов, включая статистику о частотах слов и позиции отдельных слов (model.wv.vocabв gensim)
  • вес скрытых для вывода моделей (`model.trainables 'и его свойства в gensim)
  • другие свойства модели, описывающие режимы и метапараметры модели

Разумный интерактивный подход может быть следующим:

  • Напишите несколько приемочных тестов, в которых используются модели обоих типов, и проверьте, действительно ли они «эквивалентны» для ваших целей.(Это относительно просто, если просто проверить, присутствуют ли векторы для отдельных слов и идентичны ли они, но почти так же сложно, как и само преобразование, для проверки других типов поведения, готовых к обучению.)

  • Затем в интерактивной записной книжке загрузите исходную модель, а также создайте фиктивную модель Генсима с таким же размером словарного запаса.Изучая исходный код, напишите операторы Python, чтобы итеративно копировать / преобразовывать ключевые свойства из источника в цель, многократно проверяя их на эквивалентность.

  • Когда они это сделают, выполните эти шагивы сделали вручную и объединить их в служебный метод, чтобы сделать преобразование.Снова проверьте его работу, затем попробуйте использовать преобразованную модель, как вы и надеялись - возможно, обнаружив упущенную информацию или обнаружив другие ошибки в процессе, а затем улучшив метод проверки и метод преобразования.

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

Удачи!(Но перенастройте модель gensim из исходных данных, если хотите, чтобы все было просто и работало.)

...