DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Дата публикации: 15.05.2026

Анализ тональности текста

Хочу себе такие же кнопки

Введение

Анализ тональности текста — это способ заставить компьютер «прочитать» сообщение и понять, насколько он положительный, отрицательный или нейтральный. Вы научитесь:

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

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


1. Основные понятия

Термин Описание Пример
Тональность Оценка эмоционального окраса текста (положительный / отрицательный / нейтральный) «Отличный сервис!» — положительный
Лексикон Словарь, где каждому слову сопоставлен вес (положительный/отрицательный) AFINN, SentiWordNet
Токенизация Разделение строки на отдельные «токены» (слова, суб‑слова, символы) «Привет, мир!» → [«Привет», «,», «мир», «!»]
Стоп‑слова Часто встречающиеся слова, не несущие смысловой нагрузки «и», «в», «на»
Векторизация Преобразование токенов в числовой вектор (bag‑of‑words, TF‑IDF, эмбеддинги) «молодой» → [0,0,1,0,…]
Классификатор Алгоритм, который на основе вектора предсказывает тональность Logistic Regression, BERT
Метрика Способ измерения качества модели (accuracy, F1‑score) accuracy = 0.85

2. Подготовка данных

2.1 Очистка и нормализация

  1. Удаление HTML‑теговre.sub(r'<.*?>', '', text)
  2. Приведение к нижнему региструtext.lower() (если язык чувствителен к регистру)
  3. Удаление пунктуацииstr.translate(str.maketrans('', '', string.punctuation))
  4. Лемматизация / стемминг – приведение слов к их базовой форме (для русского: pymorphy2, для английского: nltk.stem.PorterStemmer)

Аналогия: очистка текста — как подготовка овощей перед готовкой: сначала моете, потом нарезаете, а потом удаляете лишние части.

2.2 Токенизация

  • Word‑level – разбивает на слова. Хорошо работает с короткими предложениями.
  • Sub‑word (BPE, WordPiece) – разбивает редкие слова на части, позволяя модели «видеть» новые термины.
from nltk.tokenize import word_tokenize
tokens = word_tokenize(text, language='russian')

2.3 Удаление стоп‑слов

from nltk.corpus import stopwords
stop = set(stopwords.words('russian'))
tokens = [t for t in tokens if t not in stop]

2.4 Векторизация

Метод Принцип Плюсы Минусы
Bag‑of‑Words (BoW) Счёт частоты слов Простой, быстрый Игнорирует порядок
TF‑IDF Частота умноженная на обратную документную частоту Уменьшает вес часто встречающихся слов Всё ещё без контекста
Word2Vec / GloVe Слово → вектор фиксированной длины, обученный на большом корпусе Сохраняет семантику Требует большого объёма данных
BERT‑style embeddings Контекстные вектора, учитывающие соседние слова Самый точный Дорого в вычислениях

3. Подходы к анализу тональности

3.1 Словарные (правила) методы

  1. Подбор словаря – готовый набор слов с оценкой полярности (например, SentiWordNet).
  2. Суммирование весов – для каждого токена берём его вес, суммируем, получаем общий «баланс».
def sentiment_score(tokens, lexicon):
    score = 0
    for t in tokens:
        score += lexicon.get(t, 0)   # 0, если слова нет в словаре
    return score

Плюсы: быстро, не требует обучения.
Минусы: не учитывает контекст (слово «не» может полностью менять смысл).

Пример: «не хороший» → словарь даст +1 за «хороший», но без учёта частицы «не» получим ошибочный положительный результат.

3.2 Классические машинные методы

Алгоритм Признаки Пример использования
Naïve Bayes TF‑IDF, n‑grams Быстрый baseline
Logistic Regression TF‑IDF, частерные n‑grams Хорошо работает на небольших датасетах
Support Vector Machine TF‑IDF, хеш‑векторы Высокая точность при правильной настройке
Random Forest TF‑IDF, дополнительные метки (длина текста, наличие эмодзи) Интересен для объяснимости

Пайбор:

  1. Вычисляем TF‑IDF‑матрицу X.
  2. Делим данные на обучающую и тестовую части (train_test_split).
  3. Обучаем модель (model.fit(X_train, y_train)).
  4. Оцениваем (model.predict(X_test)).
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

vectorizer = TfidfVectorizer(ngram_range=(1,2), min_df=2)
X = vectorizer.fit_transform(texts)
y = labels

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)

pred = clf.predict(X_test)
print(classification_report(y_test, pred))

3.3 Глубокие нейросетевые модели

Модель Архитектура Преимущества Пример кода
CNN for Text Сверточные слои + pooling Выявляет локальные паттерны (фразы) nn.Conv1d в PyTorch
RNN / LSTM Последовательные слои Учитывает порядок слов nn.LSTM
Transformer (BERT, RoBERTa, DistilBERT) Само‑внимание Контекстные эмбеддинги, лучшая точность transformers library

3.3.1 BERT‑подход

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

def predict_sentiment(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)
    with torch.no_grad():
        logits = model(**inputs).logits
    prob = torch.nn.functional.softmax(logits, dim=-1)
    label = torch.argmax(prob, dim=1).item()
    return "positive" if label == 1 else "negative", prob.squeeze().tolist()

Почему BERT лучше?

  • Контекстность: одно и то же слово в разных предложениях получает разные вектора.
  • Бай‑тюнинг: небольшая дообуча на вашем датасете даёт огромный прирост точности.

3.3.2 Практические советы

  • Смещение классов – если положительных отзывов больше, используйте class_weight='balanced' или oversampling.
  • Тонкая настройка (fine‑tuning) – обучайте только последние несколько слоёв, чтобы не «переписать» уже полезные представления.
  • Регуляризация – dropout ≈ 0.1‑0.3, early stopping по validation loss.

4. Оценка качества

Метрика Что измеряется Как считать
Accuracy Доля правильных предсказаний (TP+TN)/(TP+TN+FP+FN)
Precision Доля действительно положительных среди предсказанных положительных TP/(TP+FP)
Recall Доля найденных положительных среди всех реальных положительных TP/(TP+FN)
F1‑score Гармоническое среднее precision и recall 2·(P·R)/(P+R)
ROC‑AUC Площадь под кривой ROC (для бинарной классификации) sklearn.metrics.roc_auc_score

Для мультиклассовой задачи (положительно/отрицательно/нейтрально) удобно использовать macro‑averaged F1‑score, который не зависит от дисбаланса классов.


5. Применения в реальном мире

Сфера Пример задачи Как использовать
Маркетинг Автоматический анализ отзывов о продукте Словарный метод для быстрых проверок, BERT для детального анализа
Образование Оценка эмоционального тона эссе студента LSTM‑модель, обученная на школьных текстах
Поддержка клиентов Приоритизация запросов (негативные → срочно) Классификатор на основе TF‑IDF + Logistic Regression
Социальные сети Мониторинг общественного мнения о событии Streaming‑pipeline с BERT‑моделью, обновляемой каждые 24 ч

6. Подводные камни и как их избежать

Проблема Почему возникает Как решить
Ирония / сарказм Текст выглядит положительным, но смысл отрицательный Добавить обучающие примеры с сарказмом, использовать модели, обученные на таких датасетах (например, Twitter‑Sarcasm)
Доменные термины Словарь не знает специфических слов («криптовалюта», «мем») Обучить собственный Word2Vec/fastText на доменной коллекции, добавить новые слова в лексикон
Краткие сообщения Недостаточно контекста для точного предсказания Использовать эмодзи и пунктуацию как дополнительные признаки
Перекос (bias) Данные содержат предвзятость (например, гендерные стереотипы) Проверять fairness‑метрики, сбалансировать датасет, применять debiasing‑техники

7. Практика для закрепления

  1. Токенизация и очистка

    • Возьмите любой отзыв из Instagram (пример: «Классный сервис, но слишком долго ждём доставки 😕»).
    • Примените к нему очистку, токенизацию и удалите стоп‑слова.
    • Сохраните полученный список токенов в переменную tokens.
  2. Словарный расчёт баланса

    • Скачайте небольшую часть словаря AFINN (ключ — слово, значение — баланс от -5 до +5).
    • Напишите функцию sentiment_score(tokens, lexicon), которая возвращает итоговый балл.
    • Примените её к токенам из пункта 1 и интерпретируйте результат (положительный, отрицательный, нейтральный).
  3. Обучение простого Logistic Regression

    • Сформируйте небольшой датасет из 200 отзывов (по 50 положительных, 50 отрицательных, 100 нейтральных).
    • Преобразуйте их в TF‑IDF‑матрицу, обучите LogisticRegression.
    • Выведите метрики accuracy и macro‑F1.
  4. Fine‑tuning BERT

    • Установите библиотеку transformers.
    • Возьмите предобученную модель distilbert-base-uncased-finetuned-sst-2-english.
    • Дообучите её на 100 примерах из вашего датасета (положительные/отрицательные).
    • Сравните метрики с пунктом 3.
  5. Анализ ошибок

    • Составьте таблицу из 10 примеров, где модель дала неправильный ответ.
    • Для каждого примера укажите, почему ошибка произошла (ирония, отсутствие слов в словаре, короткий текст и т.п.).
    • Предложите, как можно улучшить модель для этих случаев.

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


Что такое нейросети и как они работают (простое объяснение)
Обзор популярных нейросетей: ChatGPT, Claude, Gemini, DeepSeek
Как правильно формулировать запросы (промты) для нейросетей
Регистрация и настройка аккаунтов в основных сервисах
Безопасность: что нельзя загружать в нейросети
Использование нейросетей для генерации идей для проектов
Написание писем и деловой переписки с помощью ИИ
Создание структуры доклада или презентации
Автоматическое реферирование больших текстов
Как нейросети помогают учить иностранные языки
Генерация тестов и экзаменационных вопросов
Подготовка к собеседованию с помощью ИИ
Написание постов для соцсетей и блогов
Создание конспектов лекций и видеоуроков
Объяснение сложных тем простыми словами
Генерация примеров для решения задач по математике
Написание кода на Python с помощью нейросетей
Отладка и исправление ошибок в коде
Написание SQL-запросов через ИИ
Автоматизация рутинных отчётов в Excel и Google Sheets
Анализ данных и поиск трендов
Создание таблиц и сводок из неструктурированного текста
Генерация резюме и сопроводительных писем
Составление планов уроков для преподавателей
Проверка грамматики и стиля текста
Генерация названий для статей и видео
Создание аннотаций и кратких содержаний книг
Помощь в решении творческих задач (написание сценариев)
Использование нейросетей для переговоров и аргументации
Составление расписания и to-do листов
Подбор литературы и источников по теме
Генерация возражений для тренировки продаж
Написание инструкций и руководств
Анализ тональности текста
Создание чек-листов для рабочих процессов
Как нейросети помогают перефразировать текст (рерайтинг)
Составление меню и планов питания с обоснованием
Подбор образовательных траекторий под цели ученика
Написание отзывов и рекомендательных писем
Создание вопросов для интервью
Генерация заданий для учеников с ответами
Обобщение переписок в мессенджерах (подведение итогов)
Расчёт бюджета и приблизительных смет
Составление плана развития навыков (roadmap)
Генерация базы знаний для нового сотрудника
Ускорение чтения и обработки документов
Перевод профессиональной лексики с пояснением
Создание скриптов для автоматизации нейросетями (API)
Этика использования ИИ: плагиат и проверки на ИИ
Ограничения и галлюцинации нейросетей (как проверять факты)
Создание пайплайна: от идеи до готового текста с помощью ИИ
Бесплатный курс Excel: логистика, учёт остатков и подбор транспорта
Чат с искусственной подругой
Чатрулетка: чат с новыми друзьями
Чай и кофе: утренний ритуал
Экран с отображением времени в полном размере
Фототехника с подсветкой
Генератор паролей с буквами и цифрами
Игры на развитие воображения у детей
Инновационные методы 3D-печати в строительстве бетонных конструкций
Легковые и микроавтобусы от немецких брендов
Материализация подсказок в Oracle Advanced Security для обеспечения безопасности данных
Местные автобренды России
Нейросети и анализ данных: бесплатно
Оптимизация работы с CDN GEO
Политика конфиденциальности и пользовательское соглашение
Смех без конца
Создание мемов без фотошопа: пошаговое руководство
Средства IP видеосистем
VDSina для чайников: основы
Видеосвязь без задержек
Виджет обратной связи с поддержкой
Зачем видеочат-ролетка в чате



jAntivirus
Политика конфиденциальности