Обработка естественного языка

Sentiment Analysis

Предварительные знания

  • Классификация текста: pipeline, метрики, fine-tuning энкодера
  • Named Entity Recognition: извлечение спанов из текста (база для Aspect Term Extraction)
  • Классификация текста
  • Named Entity Recognition

Pang, Lee, Vaithyanathan и рождение sentiment classification

В 2002 году Бо Пан, Лиллиан Ли и Шивакумар Вайтьянатан опубликовали статью 'Thumbs up? Sentiment Classification using Machine Learning Techniques' - первую работу, где sentiment-анализ ставился как задача supervised-классификации на отзывах о фильмах. Они показали, что наивный байес, max entropy и SVM на bag-of-words заметно обходят подход со списками тональных слов, но что sentiment сложнее тематической классификации из-за иронии и контекста. В 2008 Пан и Ли выпустили обзор 'Opinion Mining and Sentiment Analysis', оформивший область как самостоятельную. Следующий скачок - Stanford Sentiment Treebank (Сошер и др., 2013): рекурсивная модель над синтаксическими деревьями ловила композицию полярности, например инверсию от 'not'. Эти три вехи проложили путь от bag-of-words к ABSA и нейросетевым моделям. Ирония и композиция, выделенные ещё в 2002, остаются открытыми проблемами и определяют структуру современного sentiment-анализа

«Отличный продукт!» - позитивно? А если это сарказм? А если батарея отличная, но камера ужасная? А если лицо говорящего выражает злость? Классический sentiment-анализ проваливается во всех трёх случаях. Этот урок - про инструменты, которые не проваливаются.

  • **Amazon Product Reviews:** ABSA выделяет аспекты (quality, price, delivery) и агрегирует sentiment по каждому - это основа рейтингов
  • **Brand Monitoring (Twitter):** детекция иронии и stance - без них мониторинг репутации даёт ложные алерты
  • **Call Centers (Cisco, Salesforce):** мультимодальный sentiment в реальном времени по голосу оператора и клиента

Aspect-Based Sentiment Analysis

Отзыв «Батарея держит отлично, но камера разочаровала» имеет **два** sentiment-а в одном предложении. Классический подход даст «нейтральный» по всему тексту - и потеряет оба сигнала. **Aspect-Based Sentiment Analysis (ABSA)** решает это: нужно найти аспект (атрибут объекта) и связать с ним полярность.

ABSA разбивается на три подзадачи: **ATE** (Aspect Term Extraction) - найти слово-аспект («батарея», «камера»); **ASC** (Aspect Sentiment Classification) - определить полярность для каждого аспекта; **APC** (Aspect-oriented Polarity) - joint-задача, решающая обе сразу. Современные модели (BERT-fine-tuned, GRACE, SentimentGPT) решают APC в end-to-end режиме.

**Датасеты:** SemEval-2014 Task 4 (рестораны, ноутбуки), SemEval-2016. **Метрики:** F1 по каждому аспекту отдельно, macro-F1 по всем аспектам. Baseline: BERT + CRF для ATE, BERT + linear head для ASC.

Отзыв: «Еда вкусная, но сервис ужасный». Классический sentiment-классификатор вернёт «нейтральный». ABSA вернёт:

Stance Detection

Твит «Вакцины спасают жизни» может быть написан как сторонником, так и противником вакцинации - в зависимости от контекста. Sentiment-анализ скажет «positive», но не скажет, **за** или **против** конкретного тезиса. **Stance Detection** отвечает именно на это: каков stance автора по отношению к заданному target (теме, утверждению, персоне)?

Метки stance: **FAVOR** (поддерживает target), **AGAINST** (против), **NONE** (нейтрально или не связано). Ключевое отличие от sentiment: stance относителен к target. Один и тот же позитивный текст может быть AGAINST, если автор хвалит оппонента target.

**Stance vs Sentiment:** sentiment - эмоциональная окраска текста. Stance - позиция по конкретному тезису. Текст «Этот политик, к сожалению, прав» - negative sentiment, FAVOR stance. **Датасеты:** SemEval-2016 Task 6, RumourEval, VaccinStance.

Текст: «Жаль, что придётся голосовать за Кандидата X - лучших нет». Sentiment - negative. Stance по Кандидату X:

Ирония и сарказм в NLP

«О, отличная идея задержать рейс на 6 часов» - буквально positive, реально negative. Ирония переворачивает буквальный смысл, и именно это делает её главным врагом sentiment-классификаторов. Без детекции иронии точность на Twitter-данных падает на 20-30%.

**Виды:** ирония (мягкое несоответствие буквального и намеренного), сарказм (ирония с негативным подтекстом), overstatement/understatement. Ключевые признаки: контраст с контекстом (упомянуто плохое событие + положительная фраза), пунктуация (восклицание в негативном контексте), лексические маркеры («конечно», «ну да», «очень умно»).

**Датасеты:** SemEval-2018 Task 3 (ирония в Twitter), Reddit Sarcasm Corpus. **Модели:** RoBERTa fine-tuned показывает F1 ~0.72 на SemEval-2018 - задача всё ещё открытая. Мультимодальный подход (текст + интонация в голосе) даёт +5-8% F1.

Почему детекция иронии критична для sentiment-систем мониторинга бренда в Twitter?

Мультимодальный sentiment

Видеоотзыв: человек говорит «Продукт отличный» ровным голосом с напряжённым лицом. Текстовый классификатор скажет positive. Мультимодальная модель учтёт голос (монотонность = возможная ирония) и мимику (напряжение = недовольство) - и, скорее всего, скажет negative или ironic. **Мультимодальный sentiment** объединяет текст, акустику и видео.

**Три модальности:** Text (слова, синтаксис), Audio (pitch, темп, паузы, интенсивность), Visual (мимика, Action Units по FACS). Стандартные датасеты: CMU-MOSI, CMU-MOSEI (видеоотзывы), IEMOCAP (диалоги). Архитектура: каждая модальность кодируется отдельно (BERT/wav2vec/ResNet), затем **fusion** - ранний (concatenation признаков), поздний (усреднение предсказаний) или cross-modal attention.

**Практика:** YouTube-комментарии + видео анализирует Google для Content Policy. Call-center системы Cisco/Salesforce используют акустический sentiment в реальном времени. CMU-MOSI benchmark: текст даёт MAE 0.92, лучший мультимодальный - 0.71 (меньше = лучше).

Мультимодальный sentiment - просто усреднение предсказаний text/audio/video моделей

Ранняя или cross-modal fusion значительно лучше позднего усреднения: модальности взаимодействуют, а не просто голосуют

Интонация противоречит тексту не случайно - это ирония или ложь. Учёт взаимодействия между модальностями ловит именно такие случаи

В мультимодальном sentiment-анализе cross-modal attention нужен для:

Sentiment Analysis: полная картина

  • ABSA: найти аспекты в тексте + привязать полярность к каждому (не к тексту целиком)
  • Stance Detection: позиция автора по конкретному target - независима от общего sentiment
  • Ирония инвертирует буквальный смысл - без детекции даёт систематическую ошибку в ~10-15% Twitter-текстов
  • Мультимодальный sentiment: text + audio + video через cross-modal attention, -20% MAE vs text-only на CMU-MOSEI

Связанные темы

Sentiment Analysis строится на базе классификации и embeddings, а результаты применяются в диалоговых системах.

  • Text Classification и fine-tuning BERT — Базовый инструмент для всех подзадач sentiment
  • Word Embeddings и контекст — Embeddings несут эмоциональную окраску, используются в sentiment-моделях
  • Dialogue Systems и Opinion Mining — Sentiment в диалогах - вход для emotion-aware систем

Вопросы для размышления

  • Почему stance detection не заменяет sentiment analysis, а дополняет его? В каком сценарии нужны оба?
  • Мультимодальный sentiment точнее текстового, но значительно сложнее в деплое. Когда дополнительная сложность оправдана?
  • Как детекция иронии влияет на задачу мониторинга политических дебатов в Twitter?

Связанные уроки

  • nlp-07 — Классификация текста - основной инструмент задач тональности
  • nlp-04 — Эмбеддинги кодируют эмоциональную окраску как признаки
  • nlp-21 — Мультимодальная тональность сочетает текст, аудио и видео
  • ml-05-evaluation — Несбалансированные классы тональности требуют выбора метрик
  • ml-01-intro
Sentiment Analysis

0

1

Войти