Узнайте, как создать наивный байесовский классификатор с нуля, чтобы классифицировать отзывы о фильмах как положительные или отрицательные.

Введение

В этом руководстве мы познакомим вас с реализацией наивного байесовского классификатора для анализа настроений в наборе данных 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. Вы можете легко адаптировать этот код к вашему конкретному варианту использования и набору данных. Удачного кодирования!