Один из моих проектов выходного дня привел меня в глубокие воды обработки сигналов. Как и во всех моих проектах кода, которые требуют некоторой тяжелой математики, я более чем рад найти свой путь к решению, несмотря на отсутствие теоретического обоснования, но в этом случае у меня его нет, и я хотел бы получить несколько советов по моей проблеме а именно: я пытаюсь понять, когда именно зрители смеются во время телешоу.
Я потратил довольно много времени на изучение подходов машинного обучения для обнаружения смеха, но понял, что это больше связано с обнаружением отдельного смеха. У двухсот человек, смеющихся одновременно, будут разные акустические свойства, и моя интуиция заключается в том, что их следует различать с помощью гораздо более грубых методов, чем нейронная сеть. Я могу быть совершенно не прав, хотя! Был бы признателен за мысли по этому вопросу.
Вот что я попробовал до сих пор: я разделил пятиминутный отрывок из недавнего эпизода Saturday Night Live на два вторых клипа. Затем я пометил эти «смех» или «не смеется». Используя экстрактор функций Librosa MFCC, я запустил кластеризацию данных K-Means и получил хорошие результаты - эти два кластера очень аккуратно сопоставились с моими метками. Но когда я попытался перебрать более длинный файл, прогнозы не оправдались.
Что я собираюсь попробовать сейчас: я собираюсь быть более точным в создании этих клипов для смеха. Вместо того, чтобы делать слепое разделение и сортировку, я собираюсь вручную извлечь их, чтобы никакой диалог не загрязнял сигнал. Затем я разделю их на клипы четверти секунды, вычислю их MFCC и использую их для обучения SVM.
Мои вопросы на данный момент:
Есть ли в этом смысл?
Может ли статистика помочь здесь? Я прокручивал в режиме просмотра спектрограммы Audacity и довольно четко вижу, где происходит смех. В спектрограмме логарифма речь имеет очень характерный, «нахмуренный» вид. Напротив, смех покрывает широкий спектр частот довольно равномерно, почти как нормальное распределение. Даже можно визуально отличить аплодисменты от смеха по более ограниченному набору частот, представленных в аплодисментах. Это заставляет меня думать о стандартных отклонениях. Я вижу, что-то называется тестом Колмогорова-Смирнова, может ли это быть полезным здесь? (Вы можете видеть смех на изображении выше как стену апельсина, поражающую на 45% пути.)
Линейная спектрограмма, кажется, показывает, что смех более энергичен на низких частотах и затухает к более высоким частотам - означает ли это, что он квалифицируется как розовый шум? Если это так, может ли это быть точкой опоры для проблемы?
Я прошу прощения, если я неправильно использовал любой жаргон, я был в Википедии довольно много для этого и не удивлюсь, если я получу некоторую путаницу.
Ответы:
Исходя из ваших наблюдений, этот спектр сигнала достаточно различим, вы можете использовать его как функцию для классификации смеха от речи.
Есть много способов взглянуть на проблему.
Подход № 1
В одном случае, вы можете просто посмотреть на вектор MFCC. и применить это к любому классификатору. Поскольку у вас много коэффициентов в частотной области, вы можете захотеть взглянуть на структуру Cascade Classifiers с основанными на этом алгоритмами повышения, такими как Adaboost , вы можете сравнить класс речи с классом смеха.
Подход № 2
Вы понимаете, что ваша речь по сути является изменяющимся во времени сигналом. Поэтому один из эффективных способов сделать это - посмотреть на изменение во времени самого сигнала. Для этого вы можете разделить сигналы на партии сэмплов и посмотреть на спектр за это время. Теперь вы можете осознать, что смех может иметь более повторяющиеся паттерны в течение оговоренного периода времени, когда речь по своей сути обладает большей информацией и, следовательно, вариация спектра будет гораздо больше. Вы можете применить это к модели типа HMM, чтобы увидеть, постоянно ли вы находитесь в одном и том же состоянии для некоторого частотного спектра или постоянно меняете свое состояние. Здесь, даже если иногда спектр речи напоминает спектр смеха, он будет меняться больше времени.
Подход № 3
Принудительно применить кодирование типа LPC / CELP к сигналу и наблюдать за остатком. CELP Coding создает очень точную модель производства речи.
Из ссылки здесь: ТЕОРИЯ КОДИРОВАНИЯ CELP
Проще говоря, после того, как вся речь, предсказанная анализатором, удалена - остается остаток, который передается для воссоздания точной формы волны.
Как это поможет с вашей проблемой? В основном, если вы применяете CELP-кодирование, речь в сигнале в основном удаляется, а остается остаток. В случае смеха большая часть сигнала может быть сохранена, потому что CELP не сможет предсказать такой сигнал при моделировании голосового тракта, где отдельная речь будет иметь очень небольшой остаток. Вы также можете проанализировать этот остаток обратно в частотной области, чтобы увидеть, смех или речь.
источник
Большинство распознавателей речи используют не только коэффициенты MFCC, но также первую и вторую производные уровней MFCC. Я предполагаю, что приступы будут очень полезны в этом случае и помогут вам отличить смех от других звуков.
источник