Описание. В этом проекте мы создадим инструмент, способный классифицировать настроение (положительное или отрицательное) заданного текста с использованием методов машинного обучения. Мы будем использовать популярную библиотеку scikit-learn для создания и обучения модели классификатора с использованием набора данных с помеченными обзорами фильмов и набор инструментов Natural Language Toolkit (NLTK) для предварительной обработки текстовых данных.
Шаг 1. Во-первых, давайте установим необходимые библиотеки и загрузим список стоп-слов NLTK.
!pip install scikit-learn nltk !python -m nltk.downloader stopwords
Шаг 2. Затем давайте импортируем библиотеки и определим функцию для предварительной обработки текстовых данных с использованием списка стоп-слов NLTK и стеммера Porter. Эта функция принимает список строк и возвращает список предварительно обработанных строк.
from nltk.corpus import stopwords from nltk.stem import PorterStemmer stop_words = stopwords.words('english') stemmer = PorterStemmer() def preprocess_text(texts): processed_texts = [] for text in texts: text = text.lower() text = [stemmer.stem(word) for word in text.split() if word not in stop_words] processed_texts.append(' '.join(text)) return processed_texts
Шаг 3. Теперь воспользуемся scikit-learn для загрузки и разделения набора данных обзора фильмов на наборы для обучения и тестирования.
from sklearn.datasets import load_files from sklearn.model_selection import train_test_split reviews = load_files('movie_reviews') X, y = reviews.data, reviews.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Шаг 4. Теперь давайте предварительно обработаем текстовые данные с помощью функции, определенной на шаге 2, и векторизируем их с помощью TfidfVectorizer от scikit-learn.
from sklearn.feature_extraction.text import TfidfVectorizer X_train = preprocess_text(X_train) X_test = preprocess_text(X_test) vectorizer = TfidfVectorizer() X_train = vectorizer.fit_transform(X_train) X_test = vectorizer.transform(X_test)
Шаг 5. Теперь воспользуемся классификатором LogisticRegression scikit-learn для обучения модели предварительно обработанным и векторизованным текстовым данным.
from sklearn.linear_model import LogisticRegression classifier = LogisticRegression() classifier.fit(X_train, y_train)
Шаг 6. Продолжая предыдущий фрагмент кода, добавим еще несколько строк кода, чтобы оценить производительность модели классификатора на тестовом наборе.
from sklearn.metrics import accuracy_score y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(f'Model accuracy: {accuracy:.2f}')
Шаг 7. Наконец, давайте определим функцию для классификации тональности заданного текста с использованием обученной модели. Эта функция будет принимать строку текста, предварительно обрабатывать ее с помощью функции, определенной на шаге 2, векторизовать ее с помощью TfidfVectorizer и передавать в классификатор для создания прогноза.
def classify_sentiment(text): preprocessed_text = preprocess_text([text]) vectorized_text = vectorizer.transform(preprocessed_text) prediction = classifier.predict(vectorized_text)[0] return 'positive' if prediction == 1 else 'negative'
С помощью этих шагов у вас должен быть работающий инструмент анализа тональности, способный классифицировать тональность заданного текста с помощью методов машинного обучения. Вы можете поэкспериментировать с различными моделями классификаторов и методами предварительной обработки, чтобы попытаться повысить точность инструмента.