Ошибка Gensim / word2vec: ошибка встраивания слоя - PullRequest
0 голосов
/ 19 марта 2019

Я пытался реализовать слой встраивания, используя gensim's word2vec.Я загрузил свои данные, используя панд, мои данные являются текстовыми, когда речь заходит о части word2vec:

embedding_weights = train_word2vec(y_train, vocab['w2idx'], 
num_features=embedding_dim, min_word_count=min_word_count, context=context)
input_shape = (sequence_length,)
model_input = Input(shape=input_shape)
layer = Embedding(len(vocab['idx2w']), embedding_dim,
input_length=sequence_length, name="embedding")(model_input)
layer = Dropout(dropout_prob[0])(layer)

Я получаю эту ошибку:

   File "<ipython-input-9-423d0e432e5b>", line 3, in <module>
   min_word_count=min_word_count, context=context)

   File "C:\Users\ACER\Pod_Dsgn_Chatbot\Wor2vec.py", line 43, in 
   train_word2vec
   for key, word in vocabulary_inv.items()}

   File "C:\Users\ACER\Pod_Dsgn_Chatbot\Wor2vec.py", line 43, in <dictcomp>
   for key, word in vocabulary_inv.items()}

   File "C:\Users\ACER\Anaconda3\envs\py37\lib\site- 
   packages\gensim\utils.py", line 1398, in new_func1
    return func(*args, **kwargs)

   File "C:\Users\ACER\Anaconda3\envs\py37\lib\site- 
    packages\gensim\models\word2vec.py", line 821, in __getitem__
     return self.wv.__getitem__(words)
   File "C:\Users\ACER\Anaconda3\envs\py37\lib\site- 
   packages\gensim\models\keyedvectors.py", line 171, in __getitem__
   return vstack([self.get_vector(entity) for entity in entities])

   TypeError: 'int' object is not iterable

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

Редактировать: И это функция, где возникает проблема, Ps: я не разработал эту

def train_word2vec(sentence_matrix, vocabulary_inv,
               num_features=300, min_word_count=1, context=10):

model_dir = 'models'
model_name = "{:d}features_{:d}minwords_{:d}context".format(num_features, 
 min_word_count, context)
model_name = join(model_dir, model_name)
if exists(model_name):
    embedding_model = word2vec.Word2Vec.load(model_name)
    print('Load existing Word2Vec model \'%s\'' % split(model_name)[-1])
else:

    num_workers = 2   
    downsampling = 1e-3   


    print('Training Word2Vec model...')
    sentences = [[vocabulary_inv[w] for w in s] for s in sentence_matrix]
    embedding_model = word2vec.Word2Vec(sentences, workers=num_workers,
    size=num_features, min_count=min_word_count, window=context, 
    sample=downsampling)
    embedding_model.init_sims(replace=True)
    if not exists(model_dir):
        os.mkdir(model_dir)
    print('Saving Word2Vec model \'%s\'' % split(model_name)[-1])
    embedding_model.save(model_name)
    pyplot.scatter( embedding_model)
    embedding_weights = {key: embedding_model[word] if word in 
     embedding_model 
    else
                          np.random.uniform(-0.25, 0.25, 
      embedding_model.vector_size)
                     for key, word in vocabulary_inv.items()}
   return embedding_weights
...