Как использовать обученную модель классификации текста - PullRequest
1 голос
/ 02 февраля 2020

Я реализовал модель SVM, которая может классифицировать данный текст на две категории. Модель была обучена и протестирована с использованием набора данных data.csv. Теперь я хочу использовать эту модель с живыми данными. Для этого я использовал библиотеку pickle python. Сначала я сохранил модель.

joblib.dump(clf, "model.pkl")

Затем я загрузил эту модель.

classifer = joblib.load("model.pkl")

Затем я использовал приведенный ниже ввод как текст для классификации.

new_observation = "this news should be in one category"
classifer.predict([new_observation])

Но после запуска это выдает ошибку.

ValueError: не удалось преобразовать строку в число с плавающей точкой: «эта новость должна быть в одной категории»

Я упоминал ниже ссылка, чтобы узнать о том, как сохранить и загрузить обученную модель. [https://scikit-learn.org/stable/modules/model_persistence.html] [1]

РЕДАКТИРОВАТЬ

Вот код, который я использовал для создания модели SVM.

data = pd.read_csv('data1.csv',encoding='cp1252')

def pre_process(text):

    text = text.translate(str.maketrans('', '', string.punctuation))

    text = [word for word in text.split() if word.lower() not in 
    stopwords.words('english')]

    words = ""

    for i in text:

            stemmer = SnowballStemmer("english")

            words += (stemmer.stem(i))+" "

    return words

textFeatures = data['textForCategorized'].copy()

textFeatures = textFeatures.apply(pre_process)

vectorizer = TfidfVectorizer("english")

features = vectorizer.fit_transform(textFeatures)

features_train, features_test, labels_train, labels_test = train_test_split(features, data['class'], test_size=0.3, random_state=111)

    svc = SVC(kernel='sigmoid', gamma=1.0)

    clf = svc.fit(features_train, labels_train)

    prediction = svc.predict(features_test)

И после реализации модели я пытаюсь внести свой вклад в модель.

joblib.dump(clf, "model.pkl")

classifer = joblib.load("model.pkl")

new_observation = "This news should be in one category"

classifer.predict(new_observation)

РЕДАКТИРОВАТЬ

joblib.dump(clf, "model.pkl") 
classifer = joblib.load("model.pkl")
textFeature = "Dengue soaring in ......" 
textFeature =pre_process(textFeature) 
classifer.predict(textFeature.encode())

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

ValueError: не удалось преобразовать строку в число с плавающей точкой: b'dengu soar '

1 Ответ

0 голосов
/ 07 февраля 2020

Вы должны предварительно обработать new_observation перед подачей на модель. В вашем случае, вы только предварительно обработали textFeatures для обучения, вы должны повторить шаги предварительной обработки и для new_observation.

  1. Применить функцию pre_process() к new_observation
  2. Используйте vectorizer для преобразования вывода, полученного из pre_process(new_observation)
...