Узнайте, как создать наивный байесовский классификатор с нуля, чтобы классифицировать отзывы о фильмах как положительные или отрицательные.
Введение
В этом руководстве мы познакомим вас с реализацией наивного байесовского классификатора для анализа настроений в наборе данных IMDb Movie Reviews. Наивный байесовский алгоритм — это простой, но мощный алгоритм вероятностной классификации, который идеально подходит для текстовых данных. Давайте погрузимся!
Шаг 1: Импорт необходимых библиотек
Для начала нам нужно импортировать несколько основных библиотек Python:
import os import numpy as np import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import accuracy_score, confusion_matrix
Шаг 2. Загрузите и предварительно обработайте набор данных IMDb.
В этом уроке мы будем использовать набор данных IMDb Movie Reviews. Предполагая, что вы загрузили и извлекли набор данных, давайте загрузим и предварительно обработаем его:
def load_imdb_data(path): reviews, labels = [], [] for sentiment in ['neg', 'pos']: folder = os.path.join(path, sentiment) for filename in os.listdir(folder): with open(os.path.join(folder, filename), 'r', encoding='utf-8') as file: text = file.read() reviews.append(text) labels.append(sentiment) return reviews, labels train_data_path = 'aclImdb/train' test_data_path = 'aclImdb/test' train_reviews, train_labels = load_imdb_data(train_data_path) test_reviews, test_labels = load_imdb_data(test_data_path) train_data = pd.DataFrame({'text': train_reviews, 'category': train_labels}) test_data = pd.DataFrame({'text': test_reviews, 'category': test_labels}) train_data['category'] = train_data['category'].astype('category') train_data['category_code'] = train_data['category'].cat.codes test_data['category'] = test_data['category'].astype('category') test_data['category_code'] = test_data['category'].cat.codes
Шаг 3: векторизация текстовых данных
Чтобы работать с текстовыми данными, нам нужно преобразовать их в числовые признаки с помощью модели Bag-of-Words:
vectorizer = CountVectorizer() X_train = vectorizer.fit_transform(train_data['text']) X_test = vectorizer.transform(test_data['text']) y_train = train_data['category_code'] y_test = test_data['category_code']
Шаг 4: Обучите наивный байесовский классификатор
Пришло время обучить наш наивный байесовский классификатор:
clf = MultinomialNB() clf.fit(X_train, y_train)
Шаг 5: Делайте прогнозы и оценивайте модель
Теперь мы можем делать прогнозы на тестовых данных и оценивать производительность модели:
y_pred = clf.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy)
Шаг 6: Необязательно — протестируйте свой классификатор
Чтобы увидеть, как ваш классификатор работает с новыми данными, вы можете ввести образец текстового документа:
sample_text = "Your sample text goes here." sample_vector = vectorizer.transform([sample_text]) prediction = clf.predict(sample_vector) print("Predicted category:", train_data['category'].cat.categories[prediction[0]])
Развертывание вашей модели машинного обучения в облаке
Введение в развертывание
В этом разделе мы покажем вам, как развернуть вашу модель машинного обучения, такую как классификация текста, с использованием наивного байесовского алгоритма в облаке. Мы будем использовать Flask, облегченную веб-инфраструктуру, для создания веб-приложения и Heroku, облачную платформу, для развертывания.
Шаг 1: Настройте каталог вашего проекта
Создайте новый каталог для вашего проекта и настройте следующую структуру:
your_project/ | |-- app.py |-- requirements.txt |-- Procfile |-- model/ | |-- model.py | |-- model.pkl |-- templates/ | |-- index.html | |-- result.html
Шаг 2: Установите Фласк
Если вы еще этого не сделали, установите Flask с помощью следующей команды:
pip install Flask
Шаг 3: Создайте свое веб-приложение
В app.py
создайте простое веб-приложение Flask для обработки пользовательского ввода и отображения результатов:
from flask import Flask, render_template, request import model.model as model app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': user_input = request.form['user_input'] prediction = model.predict(user_input) return render_template('result.html', prediction=prediction) return render_template('index.html') if __name__ == '__main__': app.run(debug=True)
Шаг 4: Создайте HTML-шаблоны
Создайте два HTML-шаблона в папке templates
: index.html
для пользовательского ввода и result.html
для отображения результатов.
index.html
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Your Model</title> </head> <body> <h1>Your Model</h1> <form action="/" method="POST"> <label for="user_input">Enter your input:</label> <input type="text" name="user_input" id="user_input" required> <button type="submit">Predict</button> </form> </body> </html>
result.html
:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Your Model</title> </head> <body> <h1>Your Model</h1> <p>Prediction: {{ prediction }}</p> <a href="/">Try again</a> </body> </html>
Шаг 5: Сохраните и загрузите свою модель
В папке model
создайте файл model.py
, содержащий функции для сохранения и загрузки обученной модели машинного обучения. Сохраните обученную модель в виде файла .pkl
в той же папке:
import pickle def save_model(model, filename): with open(filename, 'wb') as file: pickle.dump(model, file) def load_model(filename): with open(filename, 'rb') as file: return pickle.load(file) def predict(user_input): model = load_model('model.pkl') # Preprocess the user input and make predictions using your model # The preprocessing and prediction code will vary depending on your model (ARIMA or Naive Bayes) # For example: # processed_input = preprocess(user_input) # prediction = model.predict(processed_input) # Add the appropriate code for your specific model and return the prediction return prediction
Шаг 6: Создайте требования и Procfile
Создайте файл `requirements.txt` со следующими библиотеками:
Flask gunicorn numpy pandas matplotlib statsmodels scikit-learn yfinance
Убедитесь, что вы включили все дополнительные библиотеки, которые вы использовали в своем конкретном проекте.
Создайте Procfile
со следующим содержимым:
web: gunicorn app:app
Имея эти файлы, вы готовы развернуть свое приложение на Heroku.
Шаг 7. Разверните приложение на Heroku
Сначала установите интерфейс командной строки Heroku и создайте учетную запись на Heroku.
Инициализируйте репозиторий Git в каталоге вашего проекта и зафиксируйте изменения:
git init git add . git commit -m "Initial commit"
Войдите в Heroku и создайте новое приложение Heroku:
heroku login heroku create your-app-name
Разверните приложение:
git push heroku master
Ваша модель машинного обучения теперь развернута на Heroku! Посетите https://your-app-name.herokuapp.com
, чтобы просмотреть свое веб-приложение.
Заключение
В этом руководстве мы внедрили наивный байесовский классификатор для анализа настроений с использованием набора данных IMDb Movie Reviews. Вы можете легко адаптировать этот код к вашему конкретному варианту использования и набору данных. Удачного кодирования!