Как мне получить word2vec для загрузки строки? проблема: у объекта 'dict' нет атрибута '_load_specials' - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблема при использовании word2vec и lstm, код:

def input_transform(string):
    words=jieba.lcut(string)
    words=np.array(words).reshape(1,-1)
    model=Word2Vec.load('lstm_datamodel.pkl')
    combined=create_dictionaries(model,words)
    return combined

def lstm_predict(string):
    print ('loading model......')
    with open('lstm_data.yml', 'r') as f:
        yaml_string = yaml.load(f)
    model = model_from_yaml(yaml_string)

    print ('loading weights......')
    model.load_weights('lstm_data.h5')
    model.compile(loss='binary_crossentropy',
              optimizer='adam',metrics=['accuracy'])
    data=input_transform(string)
    data.reshape(1,-1)
    #print data
    result=model.predict_classes(data)
    if result[0][0]==1:
        print (string,' positive')
    else:
        print (string,' negative')

и ошибка:

Traceback (most recent call last):
File "C:\Python36\lib\site-packages\gensim\models\word2vec.py", line 1312, in load
model = super(Word2Vec, cls).load(*args, **kwargs)
File "C:\Python36\lib\site-packages\gensim\models\base_any2vec.py", line 1244, in load
model = super(BaseWordEmbeddingsModel, cls).load(*args, **kwargs)
File "C:\Python36\lib\site-packages\gensim\models\base_any2vec.py", line 603, in load
return super(BaseAny2VecModel, cls).load(fname_or_handle, **kwargs)
File "C:\Python36\lib\site-packages\gensim\utils.py", line 423, in load
obj._load_specials(fname, mmap, compress, subname)
AttributeError: 'dict' object has no attribute '_load_specials'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/GitHub/reviewsentiment/veclstm.py", line 211, in <module>
lstm_predict(string)
File "C:/GitHub/reviewsentiment/veclstm.py", line 191, in lstm_predict
data=input_transform(string)
File "C:/GitHub/reviewsentiment/veclstm.py", line 177, in input_transform
model=Word2Vec.load('lstm_datamodel.pkl')
File "C:\Python36\lib\site-packages\gensim\models\word2vec.py", line 1323, in load
return load_old_word2vec(*args, **kwargs)
File "C:\Python36\lib\site-packages\gensim\models\deprecated\word2vec.py", line 153, in load_old_word2vec
old_model = Word2Vec.load(*args, **kwargs)
File "C:\Python36\lib\site-packages\gensim\models\deprecated\word2vec.py", line 1618, in load
model = super(Word2Vec, cls).load(*args, **kwargs)
File "C:\Python36\lib\site-packages\gensim\models\deprecated\old_saveload.py", line 88, in load
obj._load_specials(fname, mmap, compress, subname)
AttributeError: 'dict' object has no attribute '_load_specials'enter code here

Прошу прощения за включение такого большого количества кода.

Я впервые спрашиваю о StackOverflow, и я изо всех сил пытался найти ответ самостоятельно, но не смог. Так ты можешь мне помочь? Большое спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Ошибка происходит на линии ...

model=Word2Vec.load('lstm_datamodel.pkl')

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

Суффикс вашего имени файла, lstm_datamodel.pkl, предполагает, что он мог быть создан с помощью pickle() Python. Метод gensim Word2Vec.load() предполагает загрузку только моделей, которые были сохранены с помощью собственной save() процедуры модуля, , а не любого протравленного объекта.

gensim native save() использует pickle для некоторой части его сохранения, но не для всех, и, следовательно, не будет ожидать полностью протравленный объект в предоставленном файле.

Это может быть причиной вашей проблемы. Вместо этого вы можете попробовать загрузку, основанную исключительно на Python pickle:

model = pickle.load('lstm_datamodel.pkl')

В качестве альтернативы, если вы можете восстановить модель в файле, но обязательно сохраните ее с помощью встроенного gensim model.save(filename), это также может решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...