Преобразование речи в текст, EDA и анализ тональности текста

Способность машины или программы распознавать произносимые слова и преобразовывать их в читаемый текст называется распознаванием речи (преобразование речи в текст). В этом руководстве я проведу вас через анализ речевых данных и их преобразование в полезный текст для анализа тональности с помощью Pydub и библиотеки SpeechRecognition в Python.

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

Содержание

  • Предпосылки
  • Установки
  • Исследовательский анализ данных
  • Речь в текст
  • Тональный анализ текста
  • Возможное улучшение

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

Чтобы понять это руководство, вам потребуются базовые знания программирования Python и основы обработки естественного языка. Ниже приведены два отличных курса для тех, кто менее знаком с этими процессами.

Установки

Нам потребуется установить необходимые библиотеки для этого проекта:

#install pydub to read and explore audio files
pip install pydub
#install SpeechRecognition to transcribe speech to text
pip install SpeechRecognition
#install ffmpeg to work with different video format (Linux)
sudo snap install ffmpeg
#install nltk-- Natural language tool kit from sklearn
pip install nltk
#download some packages from nltk; pretrained sentiment models
nltk.download("punkt")
nltk.download("vader_lexicon")

Примечание: чтобы установить FFmpeg для Windows, следуйте инструкциям здесь.

Импорт и преобразование аудиоданных в формат .wav

На этом этапе предполагается, что у вас успешно установлены зависимости. Следовательно, давайте напишем функцию, которая считывает наши аудиоданные и преобразует формат данных в файл .wav из любого другого аудиоформата (mp3, mp4 и т. Д.).

В блоке кода выше был создан экземпляр класса AudioSegment библиотеки pydub (он содержит многие из методов, которые вы могли бы использовать), а библиотека SpeechRecognition была импортирована как sr. Кроме того, функция принимает аргумент filename (имя аудиофайла) и использует метод from_file класса AudioSegment для чтения имени файла и сохранения его как звуковой переменной. В следующей строке используется метод split, чтобы отделить имя файла от его расширения и добавить его в .wav с помощью арифметики «+», которая объединит строку. Затем результат сохраняется как переменная new_filename. Наконец, аудиофайл был экспортирован в формат файла .wav.

Исследовательский анализ данных (EDA)

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

Функция ниже сгенерирует перечисленные выше атрибуты аудиоданных:

Ожидаемый результат:

Приведенный выше вывод - это то, что вы должны получить при запуске функции с именем файла.

Также вы можете выполнить базовую индексацию видеоконтента следующим образом:

#Extract the first 2minutes
first_2_min = audio_segment[:2000]
#Extract the last 2 minutes
last_2_min = audio_segment[-2000:]

По сути, нарезка звука выполняется так же, как индексирование в Python, но видео отображается в миллисекундах. Следовательно, чтобы получить две минуты, вам нужно проиндексировать к 2000 году.

Таким же образом вы можете увеличить или уменьшить громкость звука.

#increase the volume by 5db
increase_vol_by_5db = audio_segment + 5
#decrease the volume by 5db
decrease_vol_by_5db = audio_segment - 5

Преобразование речи в текст

Одна из проблем при работе с аудиоданными - преобразовать их в текст для дальнейшего анализа. Целостность записанного текста будет иметь прямое влияние на результат анализа и, следовательно, на необходимость обеспечения правильной расшифровки данных. В библиотеке SpeechRecognition есть несколько методов преобразования речи в текст от разных разработчиков. В этом проекте мы будем использовать преобразование речи в текст Google, заключенное в метод библиотеки learn_google. Напишем функцию transcribe_audio:

Вышеупомянутая функция принимает файл .wav в качестве аргумента, а класс распознавателя SpeechRecognition объявляется в переменной распознавателя. Кроме того, метод AudioFile SpeechRecognition используется для чтения имени файла и сохранения как audio_file (структура данных AudioFile). Структуру данных AudioFile необходимо преобразовать в AudioData (используемую структуру данных для преобразования речи в текст), и это делается с помощью метода распознавателя .record. Наконец, в коде, поскольку структура данных готова для транскрипции в текст, затем используется преобразование речи Google в текст для преобразования в блок текста.

Анализ тональности текста

На этом этапе вы должны преобразовать аудио в текст и подготовить его для анализа. Итак, в этом проекте вы будете использовать предварительно обученную модель в NLTK (Vader), обученную на твитах. Это потому, что основная цель - показать, как работать с форматом аудиоданных. Процесс анализа настроений остается таким же после того, как произнесенные слова аудио были расшифрованы.

Предполагается, что вы успешно установили необходимые пакеты из nltk, как указано в разделе установки ранее. Поэтому давайте проанализируем некоторые настроения!

Аудиоданные можно прослушать здесь перед запуском кодов.

В приведенном выше коде я импортировал функции, которые мы написали ранее, и SentimentIntensityAnalyzer из модели Vader NLTK. Экземпляр анализатора сохраняется в sid , а аудиоданные сохраняются в имени файла (для использования в качестве аргумента функции), и я назвал версию данных .wav в переменной new_name (это будет сгенерировано, когда звук будет изменен на .wav с помощью convert_to_wav функция). Я расшифровал звук для тестирования с помощью функции и использовал polarity_scores из SentimentIntensityAnalyzer, чтобы получить оценку настроений.

Ожидаемый результат

hello welcome to ask me Studio support line my name is Daniel how can I best help you hey Daniel this is John I've recently bought a smartphone from you guys and I'm already having issues with no that's not good to hear John let's get your cell number and then we can we can set up a way to fix it for you

{'neg': 0.064, 'neu': 0.745, 'pos': 0.192, 'compound': 0.8517}

Блок текста выше - это то, что вы должны получить после запуска вышеупомянутых кодов. Первый раздел - это транскрибированный текст аудиоданных. Кроме того, последняя часть кода является результатом анализа тональности, представленного в словаре. Результаты показывают отрицательный (отрицательный), нейтральный (neu), положительный (положительный) и сложный. Соответствующие значения для каждого ключа показывают степень, в которой слово является отрицательным, нейтральным, положительным и комбинированным (составным). По результатам мы могли видеть, что мир более нейтрален. Тем не менее, соединение масштабируется в пределах от -1 до +1, так что по мере приближения баллов к -1, тем более отрицательным и наоборот.

Улучшение

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

Приветствую вас за то, что вы дочитали этот урок до конца. Удачного обучения!

Свяжитесь со мной в Twitter

Свяжитесь со мной в LinkedIn

Ссылка





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

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

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.