Классификация звуков, музыка и эмоции

Не только речь: учим машину различать события, жанры и интонации.

Классификация звука — задача отнести аудиофрагмент к одной из категорий: тип события, музыкальный жанр, эмоция говорящего.

Огромный пласт аудио-AI вообще не про речь как текст. Это распознавание звуковых событий, анализ музыки и эмоций. Удивительно, но технически все они похожи: берут спектрограмму и пропускают через классификатор. Меняются лишь данные и метки.

Звуковые события

Задача: по короткому фрагменту понять, что за звук — разбилось стекло, плачет ребёнок, сработала сирена, лает собака. Применения: умный дом, безопасность, мониторинг города и природы (например, обнаружение выстрелов или болезней леса по звукам). Обучают на размеченных датасетах вроде AudioSet (миллионы помеченных клипов).

Анализ музыки

Музыкальный information retrieval (MIR) решает: определение жанра, темпа (BPM), тональности, распознавание мелодии (Shazam), разделение на дорожки (вокал/барабаны). Здесь важны ритмические признаки и долгая структура. Рекомендательные системы стримингов частично опираются на такой анализ аудио.

Эмоции и состояние

По интонации (не словам) определяют эмоцию: радость, злость, грусть, нейтральность. Признаки — F0 (высота), её колебания, темп, энергия. Применения: оценка качества в колл-центрах, образование, медицина (по голосу выявляют депрессию, болезнь Паркинсона, усталость). Задача тонкая: эмоция размыта, разметчики часто не согласны между собой.

ЗадачаМеткиКлючевые признаки
Событиястекло, лай, сиренаспектральные паттерны
Жанр музыкирок, джаз, попритм, тембр, структура
Эмоциирадость, злостьF0, темп, энергия

Простой классификатор по правилу

Покажем идею: по двум признакам (высота F0 и темп) грубо отнесём фрагмент к эмоции. Реальная модель учит это сама, но логика похожа.

def classify_emotion(f0, tempo):
    # f0 — средняя высота, tempo — скорость речи (усл. ед.)
    if f0 > 200 and tempo > 5:
        return "радость/возбуждение"
    if f0 > 200 and tempo <= 5:
        return "злость"
    if f0 < 130:
        return "грусть/усталость"
    return "нейтрально"

print(classify_emotion(230, 7))
print(classify_emotion(220, 3))
print(classify_emotion(110, 4))

Вывод:

радость/возбуждение
злость
грусть/усталость

Высокий F0 с быстрым темпом — возбуждение, низкий F0 — упадок. Нейросеть улавливает куда более тонкие комбинации признаков, но направление мысли то же.

Чтобы прочувствовать разницу масштабов времени, сравните три задачи из этого урока. Звуковое событие вроде разбитого стекла укладывается в доли секунды — модели достаточно короткого окна. Эмоция в голосе проявляется на протяжении фразы, секунды-двух. А жанр и структура музыки раскрываются лишь на десятках секунд: по одному аккорду рок от джаза не отличить. Поэтому одно и то же «спектрограмма + классификатор» требует совершенно разной длины входа, и подобрать её под задачу — половина успеха. Слишком короткое окно для музыки — частая причина, почему модель «слышит» тембр, но не понимает жанр.

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

Анализ эмоций — отрезвляющий пример того, что в машинном обучении не всё сводится к точности. Даже люди-разметчики, слушая одну и ту же фразу, спорят, это раздражение или усталость, ведь интонация культурно и индивидуально окрашена. Поэтому здесь не гонятся за WER-подобной строгостью: модель, совпадающая с людьми так же часто, как люди совпадают между собой, уже считается отличной. Это важный навык зрелого инженера — понимать, что «потолок» метрики задаётся не моделью, а размытостью самой задачи, и не пытаться выжать точность, которой в данных физически нет.

Как работает под капотом

Общий рецепт: спектрограмма (или мел) → свёрточная сеть или аудио-трансформер (например, AST — Audio Spectrogram Transformer) → классификатор. Для событий часто нужна многометочная классификация (одновременно «дождь» и «гром»). Музыка и эмоции требуют усреднения по более длинному окну, чем отдельный звук. Но фундамент — всё та же спектрограмма из середины курса.

Частые ошибки

  • Брать слишком короткое окно для музыки. Жанр и темп проявляются на секундах, не миллисекундах.
  • Ждать объективности от эмоций. Метки субъективны; высокая «ошибка» здесь нормальна.
  • Однометочная классификация событий. В реальности звуки накладываются — нужна многометочная схема.

Итоги

  • События, музыка, эмоции — это классификация спектрограммы с разными метками.
  • События нередко многометочные; музыка и эмоции требуют длинного окна.
  • Эмоции опираются на F0, темп и энергию; задача субъективна.
  • Под капотом — свёртки/трансформеры по спектрограмме, как в зрении.
Проверьте себя
1. Что объединяет классификацию событий, жанров и эмоций технически?
AВсе они синтезируют речь
BВсе берут спектрограмму и пропускают через классификатор; меняются данные и метки
CВсе работают только с текстом
DОни не используют нейросети
2. Почему распознавание звуковых событий часто многометочное?
AЗвуки всегда одиночные
BВ реальности звуки накладываются (например, дождь и гром одновременно)
CТак быстрее
DЭто требование PCM
3. Почему метрики анализа эмоций обычно «плавают»?
AМодели сломаны
BЭмоция субъективна, и разметчики часто не согласны между собой
CЭмоций не существует
DИз-за частоты сэмплирования