Как построить модель, распознающую человеческие чувства по аудио- и текстовым записям. Соавторы: Цяньвэнь Гуань, Александр Лоран.

В контексте финального проекта буткемпа Le Wagon мы с моей командой решили взять на себя увлекательную задачу: распознавание настроений речи.

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

Наши данные

Мы нашли набор данных из Университета Карнеги-Мелон под названием CMU-MOSEI ¹, который представляет собой самый большой набор данных по анализу тональности предложений и распознаванию эмоций в онлайн-видео. Он содержит более 65 часов аннотированного видео от более чем 1000 докладчиков и 250 тем.

Данные были разделены между сегментами переменной длины, каждый из которых представляет собой полное устное предложение (особенности), и настроением, нашей целью, которое варьировалось от -3 до 3 (от отрицательного к положительному, 0 - нейтральный).

Мы решили проанализировать как аудиозаписи, так и текстовые расшифровки, чтобы предсказать настроение, стоящее за предложением человека. Наша интуиция заключалась в том, что объединение двух моделей с двумя разными источниками с использованием мультимодального обучения может улучшить нашу производительность.

Предварительная обработка данных

Первый шаг нашей работы - очистить как текстовые, так и аудиоданные.

Хотя текст уже был извлечен из видео, редактирование в основном заключалось в выполнении базового форматирования текстовых файлов (удаление знаков препинания, чисел и прописных букв). Однако при обработке естественного языка (NLP) сложно выбрать, какие части текста нужно удалить, а какие оставить (отдельные слова, предложения, целые разговоры). Я попытался преобразовать слова в лемматы, но никаких улучшений в производительности не обнаружил.

Аудио формат был немного сложнее, мы попробовали два подхода:

1. Первым было извлечение звуковых функций с использованием библиотеки Python librosa. Это позволяет извлекать 5 основных характеристик (средних значений) из каждой записи: MFCC, Chroma, Mel Spectrogram, Spectral Centroid & Tonnetz. Из них я получил около 190 функций, которые затем можно было использовать для моделирования в виде табличных данных.

2. Второй был аудио для спектрограммы Мела, который позволил нам интерпретировать аудио как изображение и смоделировать его с визуальной точки зрения. На следующем рисунке ось абсцисс представляет время (с), частота оси ординат (Гц), а интенсивность цвета представляет собой амплитуду сигнала (дБ). В этом случае изображения позволяли извлекать признаки в условиях глубокого обучения (сверточная сеть).

Укладка моделей машинного обучения

Текстовая модель ML

Сначала я попытался увидеть, каких результатов мы можем достичь с помощью простой модели НЛП из набора слов.

Представление Мешок слов состоит в подсчете вхождений каждого слова в текст. Счетчик каждого слова становится столбцом. Я решил использовать CountVectorizer scikit-learn и реализовал поиск по сетке для поиска лучших гиперпараметров.

Эти гиперпараметры включают:

  • игнорирование слов, частота которых в наборе данных превышает заданный порог (max_df)
  • указание количества основных функций, которые необходимо сохранить при векторизации (max_features)
  • определение длины рассматриваемых последовательностей (ngram_range).

Удивительно, но ngram_range, который дал наилучшие результаты, - это тот, который сохранил только одно слово в обучении ((1,1)). Таким образом, наша модель потенциально не сможет определить «несчастье» как негативное настроение. Наша интерпретация заключалась в том, что большую часть времени наша модель будет сосредоточена на ключевых словах («хорошо», «катастрофа»), чтобы выявить правильные настроения.

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

Чтобы оценить производительность модели, я использовал среднюю абсолютную ошибку (MAE), меру ошибок между предсказанными значениями и «реальными» наблюдениями. Здесь эта базовая модель НЛП дала нам 0,87 MAE, что означает, что разница между прогнозируемым значением настроений и реальным значением в среднем составила 0,87, где шкала настроений была [-3, 3].

Для сравнения я создал базовую модель, используя случайные выборки из равномерного распределения, что дало MAE 1,77.

Модель ML Audio

Как упоминалось выше, входные переменные (X) для звука - это акустические характеристики, извлеченные из аудиофайлов.

Чтобы предсказать настроения, мы построили модель случайного леса (RF) с помощью scikit-learn. RF - это метод ансамбля, который объединяет набор деревьев решений в подвыборки набора данных. Преимущество этого метода заключается в том, что RF использует усреднение для повышения точности прогноза и контроля чрезмерной подгонки.

Затем мы выполнили поиск по сетке, чтобы оптимизировать гиперпараметры RF, которые включают:

  • Количество деревьев в лесу (n_estimators)
  • Минимальное количество выборок, необходимое для разделения внутреннего узла (min_samples_split)
  • Максимальная глубина дерева (max_depth).

Здесь эта модель RF, оснащенная аудиофункциями, дала нам MAE 0,91.

Объединение моделей машинного обучения в стек для улучшения наших прогнозов

После того, как две модели были построены, мы намеревались объединить их прогнозы, чтобы увидеть, может ли это улучшить наши результаты.

Во-первых, я создал настраиваемый селектор функций, чтобы наш конвейер мог выбирать правильные функции для каждой модели, прежде чем складывать их:

Затем я использовал scikit-learn 'Stacking Regressor и MLP Regressor, чтобы создать структуру нашей составной модели. Идея состоит в том, чтобы добавить слои нейронов, чтобы объединить обе модели при выполнении конвейера. После итерации мы выбрали единственный слой с пятью нейронами.

Модель работает как нейронная сеть с глубоким обучением: я реализовал 500 эпох (max_iter), функцию выпрямленной линейной активации в каждом нейроне (activation='relu') и инструмент ранней остановки, чтобы ограничить чрезмерную подгонку.

Процесс объединения моделей машинного обучения позволил значительно улучшить наши прогнозы: мы достигли MAE 0,78 с нашей финальной моделью.

Укладка моделей глубокого обучения

Модель NLP CNN

Для анализа текста с помощью нейронных сетей я выбрал модель сверточной сети с настраиваемым встраиванием.

Встраивание заключается в помещении каждого слова нашего обучающего набора в созданное нами многомерное пространство. Мы решили создать наш собственный словарь, чтобы потенциально сделать больший акцент на сентиментальной ценности каждого слова и, следовательно, большей точности, чем, например, Word2Vec. Для этого мы создали класс Словарь, чтобы тренировать и сохранять этот словарь для будущих предсказаний.

Что касается модели, мы реализовали сверточную нейронную сеть (CNN): модели глубокого обучения такого типа широко используются в изображениях, а также выполняют определенные задачи НЛП², это был случай сентиментального прогнозирования.

В следующем коде показано построение нашей нейронной сети с помощью библиотеки keras Tensorflow. После интегрированного встраивания обучающие данные проходят через один сверточный слой. Затем он уплощается и получает один плотный слой, состоящий из 32 нейронов. Все нейроны имеют выпрямленную линейную функцию активации (activation='relu').

Эта модель CNN дала нам 0,75 MAE в наших тестовых данных, что стало нашей лучшей моделью.

Аудио модель CNN

Наш следующий подход заключался в использовании звуковой спектрограммы Мела, которая широко применяется в глубоком обучении. Мы преобразовали частоты в шкалу Mel, результатом стала спектрограмма Mel, которая будет входом (как изображение) модели CNN.

Поскольку люди не воспринимают частоты в линейной шкале, шкала Мел близка к человеческому восприятию высоты звука. Таким образом, в нашем исследовании все частоты были сопоставлены со 128 диапазонами Mel.

Поскольку все входы для CNN должны иметь одинаковую форму ввода, мы добавили тишину для более короткого звука и клип для более длинного, чтобы получить уникальную форму ввода (128, 850,1), где 128 представляет 128 полос Mel, 850 указывает длина, а 1 - для 1 канала (изображение в оттенках серого).

Вот окончательная модель CNN, которую мы построили для предсказания настроений с использованием спектрограммы Мела.

Этот анализ спектрограммы Mel в виде изображений дал нам MAE 0,89.

Укладка моделей DL

Из результатов машинного обучения мы узнали, что наложение моделей НЛП и звука может улучшить наши прогнозы. Таким образом, мы сложили наши две выходные модели DL и один плотный слой перед выходным слоем для наложения благодаря методу Concatenate keras ’.

Используя тот же метод, что и в стейкинге машинного обучения, модель, по сути, выполняет регрессию на основе результатов обеих моделей. К сожалению, это не улучшило наши прогнозы на тестовых данных, так как эта модель суммирования также дала 0,75 MAE.

Результаты и дальнейшие поиски

В целом, лучшей моделью для нашей задачи стала наша модель глубокого обучения НЛП. Мы сочли наш окончательный показатель MAE 0,75 приемлемым, учитывая время, потраченное на проект, размер нашего набора данных и его качество:

Во-первых, она была аннотирована людьми: поскольку сантименты и эмоции очень субъективны (культура, различное толкование значений, сарказм и т. Д.), Качество модели ухудшилось. Во-вторых, в большинстве случаев настроения были нейтральными, а это означало, что данные могли быть искажены. Это привело к тому, что наша модель непропорционально предсказывала настроения как нейтральные (несмотря на то, что они положительные или отрицательные). Решением этой проблемы без ущерба для размера набора данных (балансировки данных) было бы сбор большего количества отрицательных и положительных данных для извлечения функций, которые предсказывают более широкий диапазон настроений.

Кроме того, мы считаем, что наши результаты можно было улучшить несколькими способами:

  • Уделять больше времени настройке модели, уделяя внимание гиперпараметрам, шагам очистки текста или размерам ядра.
  • Попытка объединить другие модели глубокого обучения, чтобы увидеть, могут ли они улучшить наши прогнозы. Спектрограмма Мела, похоже, не нашла закономерностей, которые могли бы дополнять текст, проанализированный на нашем NLP CNN. Мы пришли к выводу, что этот вопрос заслуживает более глубокого изучения, мы определенно открыты для комментариев и предложений от сообщества!
  • Иный подход к построению классификатора эмоций, способного предсказывать счастье, гнев, удивление и т. Д., А не рейтинг настроений.

Исходный код можно найти на GitHub. Мы с нетерпением ждем любых отзывов или вопросов.

В заключение, мы считаем, что распознавание настроений из аудио и текста имеет очень захватывающее будущее, поскольку оно позволяет собирать отличные идеи от людей. Если продвинуться еще дальше и в сочетании с классификацией эмоций, некоторые варианты использования проектов такого типа могут принести большую пользу обществу. Например:

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

[1] Заде А., Лян П.П., Пориа С., Видж П., Камбрия Э. и Моренси Л.П. (2018), Периодическая сеть с множественным вниманием для понимания человеческого общения, В Тридцать второй конференции AAAI по искусственному интеллекту.

[2]: Таха Бинхураиб. (13 октября 2020 г.). НЛП с CNN https://towardsdatascience.com/nlp-with-cnns-a6aa743bdc1e