МАШИНОСТРОЕНИЕ | ОБРАБОТКА ЕСТЕСТВЕННОГО ЯЗЫКА
Простой классификатор рецензий на фильмы в 3 шага!
Создайте классификатор обзоров фильмов с положительными / отрицательными характеристиками всего в нескольких строках кода.
Хотя есть много подходов, которые вы можете использовать для создания классификатора, который классифицирует, является ли обзор фильма положительным или отрицательным, мы можем создать простой с помощью Bag of Words и Naive Bayes всего за 3 простых шага! Перейдем непосредственно к кодированию. Мы собираемся использовать набор данных обзора фильмов IMDB.
1. Импорт и предварительная обработка!
Мы будем использовать наивный байесовский классификатор sklearn и CountVectorizer из Bag of Words для создания словаря функций и векторов.
import re from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import CountVectorizer
Пришло время предварительно обработать наш корпус. Нам нужно очистить наш текст, чтобы при его создании в словаре функций не было недопустимого токена.
for line in open('full_train.txt', encoding="utf8"): reviews_train.append(line.strip().lower()) for i in range(len(reviews_train)): reviews_train[i] = re.sub(r'<br.?.?>','',reviews_train[i]) reviews_test = [] for line in open('full_test.txt', encoding="utf8"): reviews_test.append(line.strip().lower()) for i in range(len(reviews_test)): reviews_test[i] = re.sub(r'<br.?.?>','',reviews_test[i])
2. Векторизация и маркировка
В нашем наборе данных первые 12500 являются положительными, а остальные 12500 - отрицательными как для данных поездов, так и для тестовых данных. Мы преобразуем наши данные (данные обучения и данные тестирования) в векторы с помощью CountVectorizer. Вы можете узнать больше о CountVectorizer здесь . Он создает словарь функций, и с его помощью мы можем преобразовывать наши обзоры в векторы.
training_labels = [1 if i < 12500 else 0 for i in range(25000)] test_labels = [1 if i < 12500 else 0 for i in range(25000)] # Defining bow_vectorizer: bow_vectorizer = CountVectorizer() # Defining training_vectors: training_vectors = bow_vectorizer.fit_transform(reviews_train) # Defining test_vectors: test_vectors = bow_vectorizer.transform(reviews_test)
Метод .fit_transform () предназначен для создания словаря функций на основе заданного параметра и преобразования входных данных в векторы. Точно так же метод .transform () только преобразует входные данные в векторы на основе словаря функций.
3. Прогноз!
Пришло время обучить и спрогнозировать нашу наивную байесовскую модель. Мы будем кормить обзоры обучения в виде векторов вместе с их метками. После обучения нам нужно принять наш ввод и преобразовать его в вектор, прежде чем передать его модели для прогнозирования.
classifier = MultinomialNB() def pos_or_not(label): return "Positive" if label else "Negative" classifier.fit(training_vectors, training_labels) accuracy = classifier.score(test_vectors, test_labels) print("Accuracy: ", accuracy*100, "%") sentence = input().strip().lower() input_vector = bow_vectorizer.transform([sentence]) print("Probability for review being Negative:",classifier.predict_proba(input_vector)[0][0]) print("Probability for review being Positive:",classifier.predict_proba(input_vector)[0][1]) predict = classifier.predict(input_vector) print(pos_or_not(predict))
Давайте проверим нашу модель, сделав прогноз для обзора: «Мне понравилась сцена на показе мод, когда Джесси шел по подиуму, глядя на синий неоновый треугольник перед собой». Ниже приведены результаты прогнозирования метки для нашего обзора вместе с вероятностями.
Если изменить отзыв так: «Мне не понравилась сцена на показе мод, когда Джесси шла по подиуму, глядя на синий неоновый треугольник перед собой». Мы получим следующий результат.
Это простейший классификатор обзоров фильмов, созданный с помощью классификатора Наивного Байеса. Приведенный выше код и набор данных можно найти здесь. Вы можете найти меня здесь в LinkedIn. Удачного кодирования!