Ошибка с TfidfVectorizer, но с CountVectorizer все в порядке - PullRequest
0 голосов
/ 13 июля 2020

Я работал над этим весь день, но не повезло

Мне удалось устранить проблему одной строкой TfidfVectorizer

Вот мой рабочий код

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
vectorizer.fit(xtrain) 

X_train_count = vectorizer.transform(xtrain)
X_test_count  = vectorizer.transform(xval)
X_train_count


from keras.models import Sequential
from keras import layers

input_dim = X_train_count.shape[1]  # Number of features

model = Sequential()
model.add(layers.Dense(10, input_dim=input_dim, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))


model.compile(loss='binary_crossentropy', 
              optimizer='adam', 
              metrics=['accuracy'])
model.summary()

history = model.fit(X_train_count, ytrain,
                    epochs=10,
                    verbose=False,
                    validation_data=(X_test_count, yval),
                    batch_size=10)

Но когда я меняю на

from sklearn.feature_extraction.text import TfidfVectorizer

#TF-IDF initializer
vectorizer = TfidfVectorizer(max_df=0.8, max_features=1000)

vectorizer.fit(xtrain) 

X_train_count = vectorizer.transform(xtrain)
X_test_count  = vectorizer.transform(xval)
X_train_count


from keras.models import Sequential
from keras import layers

input_dim = X_train_count.shape[1]  # Number of features

model = Sequential()
model.add(layers.Dense(10, input_dim=input_dim, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))


model.compile(loss='binary_crossentropy', 
              optimizer='adam', 
              metrics=['accuracy'])
model.summary()

history = model.fit(X_train_count, ytrain,
                    epochs=10,
                    verbose=False,
                    validation_data=(X_test_count, yval),
                    batch_size=10)

Единственное, что изменилось, это две строки

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(max_df=0.8, max_features=1000)

, а затем я получаю эту ошибку

InvalidArgumentError: индексы [1] = [0,997] не работают. Многие редкие операции требуют отсортированных индексов. Используйте tf.sparse.reorder, чтобы создать правильно упорядоченную копию.

[Op: SerializeManySparse]

Как это исправить и почему это происходит?

1 Ответ

3 голосов
/ 13 июля 2020

vectorizer.transform(...) создает разреженный массив, и это плохо для keras. вам просто нужно преобразовать его в простой массив. это просто возможно с помощью:

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