генсим: мариновать или нет? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть вопрос, связанный с gensim.Мне нравится знать, рекомендуется или необходимо использовать pickle при сохранении или загрузке модели (или нескольких моделей), так как я нахожу скрипты на GitHub, которые это делают.

mymodel = Doc2Vec(documents, size=100, window=8, min_count=5, workers=4)
      mymodel.delete_temporary_training_data(keep_doctags_vectors=True, keep_inference=True)

См. здесь

Вариант 1:

import pickle
# Save
mymodel.save("mymodel.pkl")  # Stores *.pkl file
# Load
mymodel = pickle.load("mymodel.pkl")

Вариант 2:

# Save
model.save(mymodel) # Stores *.model file
# Load
model = Doc2Vec.load(mymodel)

В gensim.utils мне кажется, что есть встроенная функция pickle: https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/utils.py

def save ... try: _pickle.dump (self, fname_or_handle,protocol = pickle_protocol) ...

Цель моего вопроса: Я был бы рад узнать 1) нужен ли мне pickle (для лучшего управления памятью) и 2) в случае, почему этолучше, чем загрузка файлов * .model.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Каждый раз, когда вы сохраняете модель, используя встроенную функцию Gensim save(), используется pickle независимо от расширения файла.Документация для утилит говорит нам об этом:

class gensim.utils.SaveLoad

Bases: object

Class which inherit from this class have save/load functions, which un/pickle them to disk.

Warning

This uses pickle for de/serializing, so objects must not contain unpicklable attributes, such as lambda functions etc.

Таким образом, gensim будет использовать pickle для сохранения любой модели.пока класс модели наследуется от класса gensim.utils.SaveLoad.В вашем случае gensim.models.doc2vec.Doc2Vec наследуется от gensim.models.base_any2vec.BaseWordEmbeddingsModel, который, в свою очередь, наследуется от gensim.utils.SaveLoad, который обеспечивает фактическую функцию save().

Чтобы ответить на ваши вопросы:

  1. Да, вам нужно использовать pickle, если вы не хотите написать свою собственную функцию для хранения ваших моделей на диск.Однако использовать pickle не должно быть проблематично, поскольку он есть в стандартной библиотеке.Вы даже не заметите этого.
  2. Если вы используете функцию gensim save(), вы можете выбрать любое расширение файла: * .model, * .pkl, * .p, * .pickle.Сохраненный файл будет замаринован.
0 голосов
/ 08 июня 2018

Это зависит от ваших требований.

Когда вы собираетесь использовать данные с Python и вам не нужно переключаться между версиями Python (у меня возникли некоторые проблемы с переносом с Python 2 на Python 3 с использованием маринованных моделей), двоичный формат будет хорошимвыбор.

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

...