Обработка естественного языка
Sentiment Analysis
Предварительные знания
- Классификация текста: pipeline, метрики, fine-tuning энкодера
- Named Entity Recognition: извлечение спанов из текста (база для Aspect Term Extraction)
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