Анализ настроений — это тип обработки естественного языка (НЛП), который включает анализ эмоций и мнений, выраженных в тексте. Этот метод можно использовать для определения общего настроения части контента, например твита, обзора продукта или новостной статьи. Анализ настроений может быть невероятно полезен для компаний, которые хотят оценить отношение клиентов к своему бренду, или для маркетологов, которые хотят понять, как люди говорят о той или иной теме в социальных сетях.

В этом блоге я расскажу об основах анализа настроений и о том, как его можно реализовать с помощью Python. Мы также предоставим вам 5 практических исходных кодов, которые вы можете сразу же использовать для анализа тональности текстовых данных.

Начало работы с анализом настроений в Python

Прежде чем мы углубимся в практические исходные коды, давайте сначала разберемся с основами анализа тональности и как он работает. Существует два основных подхода к анализу настроений: на основе правил и на основе машинного обучения.

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

С другой стороны, подходы, основанные на машинном обучении, включают в себя обучение модели машинного обучения распознаванию шаблонов в текстовых данных, связанных с положительным или отрицательным настроением. Этот подход требует большого количества помеченных обучающих данных, которые используются для обучения модели.

В этом блоге мы сосредоточимся на подходе к анализу настроений, основанном на машинном обучении. В частности, мы будем использовать библиотеку Natural Language Toolkit (NLTK) в Python, которая предоставляет набор инструментов и алгоритмов для работы с данными человеческого языка.

Практический исходный код 1: установка и импорт NLTK

Первым шагом к реализации анализа настроений с помощью Python является установка и импорт библиотеки NLTK. Вы можете сделать это, выполнив следующие команды в своем терминале:

pip install nltk

После того, как вы установили NLTK, вы можете импортировать его в свой код Python, используя следующую команду:

import nltk

Практический исходный код 2: загрузка и предварительная обработка текстовых данных

Следующим шагом является загрузка и предварительная обработка текстовых данных, которые вы хотите проанализировать. Это включает в себя преобразование текстовых данных в формат, который может использоваться алгоритмами машинного обучения.

В этом примере мы будем использовать набор данных обзоров фильмов из библиотеки NLTK. Чтобы загрузить этот набор данных, вы можете использовать следующий код:

from nltk.corpus import movie_reviews
reviews = []
for fileid in movie_reviews.fileids():
    category = movie_reviews.categories(fileid)[0]
    reviews.append((movie_reviews.raw(fileid), category))

Этот код загружает набор данных обзоров фильмов и сохраняет каждый обзор вместе с его категорией (положительной или отрицательной) в списке.

Следующим шагом является предварительная обработка текстовых данных путем выполнения таких задач, как токенизация (разбиение текста на отдельные слова), удаление стоп-слов (обычные слова, такие как «the» и «a», которые не добавляют особого значения) и выделение корней. (приведение слов к корневой форме).

Для выполнения этих задач можно использовать следующий код:

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
stop_words = set(stopwords.words('english'))
stemmer = PorterStemmer()
def preprocess_text(text):
    tokens = word_tokenize(text.lower())
    filtered_tokens = [token for token in tokens if token not in stop_words]
    stemmed_tokens = [stemmer.stem(token) for token

Функция preprocess_text() принимает на вход строку текста и выполняет задачи предварительной обработки. Во-первых, он разбивает текст на отдельные слова, используя word_tokenize(). Затем он удаляет стоп-слова, используя набор общих стоп-слов из библиотеки NLTK. Наконец, каждое слово вычленяется с помощью алгоритма формирования корня Портера из библиотеки NLTK.

Практический исходный код 3: извлечение признаков

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

Для извлечения функций с помощью набора слов вы можете использовать следующий код:

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
corpus = [review[0] for review in reviews]
X = vectorizer.fit_transform(corpus)
y = [review[1] for review in reviews]

Этот код создает объект CountVectorizer, который используется для извлечения функций из текстовых данных. Затем он создает список всех обзоров фильмов в наборе данных (corpus) и использует метод fit_transform() объекта CountVectorizer для извлечения функций из текста. Результирующая матрица признаков X представляет собой разреженную матрицу, в которой каждая строка представляет обзор фильма, а каждый столбец представляет слово из словаря. Целевые метки (y) также извлекаются из набора данных.

Практический исходный код 4: обучение и оценка модели машинного обучения

Теперь, когда мы предварительно обработали текстовые данные и извлекли функции, следующим шагом будет обучение модели машинного обучения на данных. В этом примере мы будем использовать модель логистической регрессии, которая является широко используемым алгоритмом для задач бинарной классификации, таких как анализ настроений.

Чтобы обучить модель логистической регрессии и оценить ее производительность, вы можете использовать следующий код:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

Этот код разбивает матрицу признаков и целевые метки на наборы для обучения и тестирования с помощью функции train_test_split(). Затем он создает модель логистической регрессии (clf) и обучает ее на обучающем наборе с использованием метода fit(). Наконец, он делает прогнозы на тестовом наборе, используя метод predict(), и вычисляет точность модели, используя функцию accuracy_score().

Практический исходный код 5: анализ тональности новых текстовых данных

Теперь, когда мы обучили модель машинного обучения на наборе данных обзоров фильмов, мы можем использовать ее для анализа тональности новых текстовых данных. Для этого нам сначала нужно предварительно обработать текстовые данные, используя те же шаги предварительной обработки, которые мы использовали для набора данных обзоров фильмов. Затем мы можем использовать обученную модель логистической регрессии, чтобы делать прогнозы на основе предварительно обработанных текстовых данных.

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

text = "This movie was terrible. The acting was bad and the plot was boring."
preprocessed_text = preprocess_text(text)
features = vectorizer.transform([preprocessed_text])
sentiment = clf.predict(features)[0]
if sentiment == 'neg':
    print("The text is negative.")
else:
    print("The text is positive.")
``

Этот код берет новый фрагмент текста, предварительно обрабатывает его с помощью функции preprocess_text() и извлекает функции, используя тот же объект CountVectorizer, который мы использовали для извлечения функций из набора данных обзоров фильмов. Затем он делает прогноз для предварительно обработанного текста, используя обученную модель логистической регрессии, и распечатывает, является ли тональность положительной или отрицательной.

В этом блоге мы рассмотрели основы анализа настроений и то, как его можно реализовать с помощью Python. Мы рассмотрели основанный на машинном обучении подход к анализу тональности и предоставили вам 5 практических исходных кодов, которые вы можете сразу же использовать для анализа тональности текстовых данных.

Следуя этим примерам, вы сможете лучше понять, как работает анализ настроений и как вы можете применять его в своих проектах. Независимо от того, анализируете ли вы отношение клиентов к компании или пытаетесь понять, как люди говорят на определенную тему в социальных сетях, анализ настроений может стать мощным инструментом для получения ценных сведений из текстовых данных.