Сохраненный Tfidf-Vectorizer ValueError при повторной загрузке

Я подготовил Tfidf-Vectorizer для PassiveAgressive Classifier и проверил его, все работает просто отлично. Затем я сохранил установленный векторизатор и обученный классификатор для последующего использования. Когда я снова загрузил векторизатор, я преобразовал в него новый набор данных (так как я хочу классифицировать невидимые данные с помощью классификатора) и попытался предсказать новый набор данных. Когда я запускаю код, я получаю:

ValueError: X has 1375913 features per sample; expecting 1373084

Вот код, который я использовал для получения векторизатора и классификатора:

X_train, X_test, y_train, y_test = train_test_split(df['Processed_text'], y, test_size=0.2)
tfidf_vectorizer = TfidfVectorizer()
tfidf_train = tfidf_vectorizer.fit_transform(X_train)
with open('vectorizer.pkl', 'wb') as fin:
    pickle.dump(tfidf_vectorizer, fin)
tfidf_test = tfidf_vectorizer.transform(X_test)
linear_clf = PassiveAggressiveClassifier(n_iter=50)
linear_clf.fit(tfidf_train, y_train)
pred = linear_clf.predict(tfidf_test)
with open('topic_classifier.pkl', 'wb') as fid:
    pickle.dump(linear_clf, fid)  

И вот как я снова открываю и использую это:

classifier = pickle.load(open('topic_classifier.pkl', 'rb'))
vectorizer = pickle.load(open('vectorizer.pkl', 'rb'))
tfidf_vectorizer = vectorizer
tfidf_articles = tfidf_vectorizer.transform(texts)
topics = classifier.predict(tfidf_articles)

Я также проверил еще раз в файле, где я обучил классификатор и посмотрел на длину словаря и получил

len(tfidf_vectorizer.vocabulary_)
1371569

Итак, еще один номер... Я действительно не знаю, что здесь происходит не так. Я обработал тексты для наборов данных поезд / тест, а также тексты, которые необходимо классифицировать после повторной загрузки всего точно таким же образом, поэтому я не думаю, что это связано с вводом, который я даю векторизатору. Я не могу снова подогнать векторизатор или обучить классификатор снова, так как использую оба в приложении - так что он должен как-то работать с сохраненными версиями.

1 ответ

После проверки снова и снова выяснилось, что существует проблема с сохранением векторизаторов и классификаторов с помощью pickle.dump. Когда я использовал joblib.dump/load для обоих, это работало как шарм! Видимо, не очень хорошая идея использовать рассол для сохранения данных здесь!

Другие вопросы по тегам