Ошибка типа: ufunc 'add' не содержит цикла с типами соответствия сигнатуры dtype - PullRequest
0 голосов
/ 07 сентября 2018

Я бы хотел передать вектор X_train_word2vec в качестве входных данных для модели Gensim Word2Vec. Тип вектора numpy.ndarray, например:

X_train_word2vec[9] = array([   19,     7,     1, 20120,     2,     1,   856,   233,   671,
       1,  1208,  6016,     2,    32,     0,     0,     0,     0, ....)]

Когда я запускаю этот код:

model_word2vec = models.Word2Vec(X_train_word2vec, size=150, window=9)
model_word2vec.train(X_train_word2vec,total_examples=X_train_word2vec.shape[0], epochs=10)

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

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U11') dtype('<U11') dtype('<U11')

Я прочитал этот пост, где проблема связана с различными типами данных во входном массиве, но, в моем случае, у меня есть все данные одного типа: int.

Обновление: Код перед model_Word2Vec:

tokenizer = Tokenizer()
tokenizer.fit_on_texts(X)
sequence = tokenizer.texts_to_sequences(X)

seq_max_len = 50
X_seq = pad_sequences(sequenza, maxlen=seq_max_len,padding='post',truncating='post',dtype=int)

X_train_word2vec, X_test_word2vec, y_train_word2vec, y_test_word2vec = train_test_split(X_seq, y_cat, test_size=0.2, random_state=123)

1 Ответ

0 голосов
/ 07 сентября 2018

Gensim's Word2Vec требует набора текстов - например, в 1-м аргументе его инициализатора - это итеративный объект последовательности списков-строковых токенов. Это не займет необработанный массив NumPy.

Далее, если вы предоставляете корпус при создании экземпляра, как в вашей строке кода ...

model_word2vec = models.Word2Vec(X_train_word2vec, size=150, window=9)

... тогда он автоматически выполнит шаги по созданию словарного запаса и обучению. Вам не нужно тогда явно вызывать train(). (И, хотя можно снова вызывать train(), очень немногие пользователи, выполняющие очень сложные задачи, должны будут это сделать. Обычный, безопасный подход - это один сеанс обучения на полном корпусе, после которого модель «готово». )

Наконец, train() также ожидает любой корпус как итеративный объект последовательности списков-строковых токенов.

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

...