Внедрение классификатора в производство

Я сохранил свой конвейер классификатора, используя joblib:

vec = TfidfVectorizer(sublinear_tf=True, max_df=0.5, ngram_range=(1, 3))
pac_clf = PassiveAggressiveClassifier(C=1)
vec_clf = Pipeline([('vectorizer', vec), ('pac', pac_clf)])
vec_clf.fit(X_train,y_train)
joblib.dump(vec_clf, 'class.pkl', compress=9)

Теперь я пытаюсь использовать его в рабочей среде:

def classify(title):

  #load classifier and predict
  classifier = joblib.load('class.pkl')

  #vectorize/transform the new title then predict
  vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, ngram_range=(1, 3))
  X_test = vectorizer.transform(title)
  predict = classifier.predict(X_test)
  return predict

Я получаю сообщение об ошибке: ValueError: Vocabulary не подходит или пуст! Я думаю, я должен загрузить словарь из te joblid, но я не могу заставить его работать


person Ruben    schedule 11.09.2014    source источник
comment
Какую ошибку вы получаете при сохранении/загрузке векторизатора?   -  person Andreas Mueller    schedule 11.09.2014
comment
я не получил ошибку при загрузке, проблема теперь решена. Чем вам за вашу помощь   -  person Ruben    schedule 11.09.2014


Ответы (1)


Просто замените:

  #load classifier and predict
  classifier = joblib.load('class.pkl')

  #vectorize/transform the new title then predict
  vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, ngram_range=(1, 3))
  X_test = vectorizer.transform(title)
  predict = classifier.predict(X_test)
  return predict

by:

  # load the saved pipeline that includes both the vectorizer
  # and the classifier and predict
  classifier = joblib.load('class.pkl')
  predict = classifier.predict(X_test)
  return predict

class.pkl включает в себя полный конвейер, нет необходимости создавать новый экземпляр векторизатора. Как говорится в сообщении об ошибке, вам необходимо повторно использовать векторизатор, который был обучен в первую очередь, потому что сопоставление признаков из токена (строковые ngrams) в индекс столбца сохраняется в самом векторизаторе. Это отображение называется «словарь».

person ogrisel    schedule 11.09.2014
comment
Спасибо, @ogrisel отлично работает ... кроме того, только что нашел этот полезный блог об оптимизации моего классификатора ссылка - person Ruben; 11.09.2014