Овладейте основами распознавания речи с помощью TensorFlow: узнайте, как создавать и обучать модели, внедрять распознавание звука в реальном времени и разрабатывать практические приложения.

Самые продвинутые планы развития науки о данных, которые вы когда-либо видели! Поставляется с тысячами бесплатных учебных ресурсов и интеграцией ChatGPT! https://aigents.co/learn/roadmaps/intro

«В предыдущем уроке я показал вам, как распознавать рукописные предложения. Теперь пришло время распознавания речи! Распознавание речи — важная область искусственного интеллекта (ИИ), которая используется для распознавания речи человека и преобразования ее в машиночитаемый текст. Он имеет множество применений во многих отраслях, таких как обслуживание клиентов, здравоохранение, автомобилестроение, образование и развлечения. С развитием глубокого обучения и обработки естественного языка распознавание речи стало более точным и эффективным. В этом руководстве будут рассмотрены основы распознавания речи и построение базовой модели распознавания речи с помощью TensorFlow.

История распознавания речи

Развитие технологии распознавания речи восходит к 1940-м годам, когда она использовалась для военных систем связи и управления воздушным движением.

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

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

В 1970-х годах исследователи разработали первые системы распознавания речи с большим словарным запасом. Эти системы были способны распознавать связанную речь и могли обрабатывать большие словари. В то же время развитие искусственных нейронных сетей и глубокого обучения начало революционизировать область распознавания речи. Это привело к разработке более точных систем распознавания речи в 1980-х годах.

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

В 2000-х годах развитие технологии распознавания речи продолжало развиваться за счет разработки более точных моделей и включения акустических моделей. Это привело к разработке устройств виртуального помощника, таких как Google Home и Amazon Alexa.

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

Каковы проблемы и вызовы

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

Еще одна проблема связана со словами, похожими по звучанию. Например, слова «to» и «too» могут звучать одинаково, но иметь разное значение. Модель должна различать эти слова, чтобы генерировать точные выходные данные. Точно так же модели могут быть трудны для точной интерпретации слова с несколькими значениями.

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

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

Все эти проблемы делают распознавание речи сложной задачей. Однако с развитием глубокого обучения и обработки естественного языка распознавание речи стало более точным и эффективным. При наличии правильных методов и данных можно создать высококачественную модель распознавания речи.

Техники распознавания речи:

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

Глубокое обучение — один из самых популярных методов машинного обучения в распознавании речи. Глубокое обучение использует искусственные нейронные сети для изучения больших наборов данных и может использоваться для распознавания сложных закономерностей. Он использовался для разработки устройств виртуального помощника, таких как Google Home и Amazon Alexa, а также служб транскрипции речи в текст.

Другие методы машинного обучения, используемые при распознавании речи, включают скрытые марковские модели (HMM), динамическое преобразование времени (DTW) и фонетические подходы. HMM — это статистический подход к моделированию данных временных рядов, который используется для распознавания речевых паттернов. DTW — это метод, используемый для сравнения двух временных последовательностей и используемый для распознавания похожих речевых образов. Подходы, основанные на фонетике, распознают речь на основе их фонетического сходства.

Кроме того, существуют методы повышения точности моделей распознавания речи. Beamforming — это метод, который уменьшает фоновый шум, фокусируясь на источнике звука. Шумоподавление — это метод, используемый для уменьшения фонового шума путем вычитания его из звукового сигнала. Оба эти метода могут повысить точность моделей распознавания речи.

До 2018 года наиболее распространенной техникой распознавания речи были глубокие нейронные сети с LSTM, и все изменилось, когда были выпущены трансформеры. Когда трансформеры были выпущены, они значительно повлияли на область распознавания речи. Трансформеры — это тип нейронной сети, используемый для задач обработки естественного языка и распознавания сложных паттернов во входном аудио. Они полезны для таких задач, как распознавание речи, поскольку могут моделировать долгосрочные зависимости в данных.

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

Выполнение:

В этом руководстве я покажу, как объединить 2D-сверточную нейронную сеть (CNN), рекуррентную нейронную сеть (RNN) и потерю временной классификации Connectionist (CTC) для построения модели автоматического распознавания речи (ASR).

В этом руководстве будет использоваться набор данных LJSpeech, в котором представлены краткие аудиозаписи одинокого говорящего, читающего отрывки из семи научно-популярных книг.

Чтобы оценить эффективность нашей модели, мы будем использовать показатели оценки Word Error Rate (WER) и Character Error Rate (CER). Эти метрики вычисляют расхождение между распознанными словами/символами и исходными произнесенными словами/символами. WER определяется путем суммирования количества замен, вставок и удалений, которые встречаются в последовательности распознанных слов, и деления результата на общее количество первоначально произнесенных слов. CER следует тому же принципу, но на уровне символов.

Предпосылки:

Прежде чем мы начнем, вам необходимо установить следующее программное обеспечение:

  • Питон 3;
  • TensorFlow (в этом руководстве мы будем использовать версию 2.10);
  • млту==0.1.6

Набор данных LJSpeech:

Мы начнем с загрузки набора данных LJSpeech. Этот набор данных содержит 13000 аудиофайлов в формате «.wav». Все актуальные метки также даны нам в файле аннотаций.

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

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

Теперь у нас есть загруженный набор данных, и нам нужно предварительно обработать его, прежде чем перейти к следующему шагу. Предварительная обработка состоит из нескольких шагов. Всю предварительную обработку мы можем сделать с помощью следующего кода:

Во-первых, мы загружаем необработанные аудиоданные с помощью librosa.load(audio_path) из библиотеки Python librosa. Он загружает аудиофайл, указанный параметром audio_path, и возвращает кортеж из двух объектов: необработанный аудиосигнал в виде массива NumPy, представляющий аудиосэмплы и частоту дискретизации (количество сэмплов в секунду) аудиосигнала, обычно определяемую как целое число. Итак, мы перебираем метаданные набора данных и предварительно обрабатываем аудиоданные «wav» с фактической транскрипцией. Это выглядит следующим образом:

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

Аудиоспектрограмма — это визуальное представление частотного содержания аудиосигнала во времени. Он отображает спектральную плотность мощности сигнала (PSD), которая дает меру мощности различных частотных компонентов сигнала.

Спектрограмма обычно представляется в виде изображения. Ось X представляет время, ось Y представляет частоту, а цвет или яркость представляют величину частотных компонентов в каждом временном кадре. Чем ярче цвет или выше яркость, тем выше величина соответствующей частотной составляющей.

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

Пример аудиоспектрограммы будет выглядеть следующим образом:

Имейте в виду, что когда мы повторяли фактическую транскрипцию, мы заменили все заглавные буквы строчными и удалили все необычные буквы алфавита.

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

Как и прежде, я буду использовать свой пакет «mltu»:

Вы можете заметить, что я использую WavReader в качестве препроцессора данных и SpectrogramPadding, LabelIndexer и LabelPadding в качестве преобразователей. В данном коде назначение каждого компонента следующее:

  1. WavReader: этот класс читает аудиофайлы (в формате WAV) и преобразует их в спектрограммы. Он использует параметры frame_length, frame_step и fft_length, чтобы определить, как звуковые сигналы должны быть разделены на кадры и преобразованы в спектрограммы.
  2. SpectrogramPadding. Этот класс используется для заполнения спектрограмм до одинаковой длины, чтобы все спектрограммы в пакете имели одинаковую форму. Он использует параметр max_spectrogram_length, чтобы определить длину, до которой спектрограммы должны быть дополнены, и padding_value, чтобы определить значение, используемое для заполнения.
  3. LabelIndexer: этот класс преобразует текстовые метки в числовые представления, например, преобразуя слова в целые числа. Он использует параметр vocab, словарь всех слов в словаре, чтобы определить, как преобразовывать слова в целые числа.
  4. LabelPadding. Этот класс используется для заполнения текстовых меток до одинаковой длины, чтобы все текстовые метки в пакете имели одинаковую длину. Он использует параметр max_word_length, чтобы определить длину, до которой должны быть дополнены текстовые метки, и padding_value, чтобы определить значение, используемое для заполнения.

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

При обучении модели мы не можем полагаться на потери при обучении. Для этого мы разделим набор данных на 90% обучения и 10% проверки:

Архитектура модели:

CNN для распознавания речи. Сверточные нейронные сети — это тип архитектуры машинного обучения, который в основном используется для анализа наборов визуальных данных. Они хорошо анализируют изображения, потому что могут улавливать пространственные и временные отношения между пикселями изображения.

Слой свертки исследует основные характеристики входных данных, а слой субдискретизации сжимает эти функции в более простую форму.

Для распознавания речи CNN берут спектрограмму речевого сигнала, которая представлена ​​в виде изображения, и используют эти функции для распознавания речи.

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

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

Итак, мы определим нашу модель:

Для более глубокого понимания архитектуры мы можем открыть наш файл model.py, в котором мы шаг за шагом создаем последовательную модель TensorFlow:

Отлично, теперь у нас есть модель, которую нужно скомпилировать. Давай сделаем это:

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

Теперь мы можем определить наши обратные вызовы (представленные в предыдущих уроках) и начать процесс обучения:

Тренировочный процесс:

Для отслеживания процесса обучения мы добавили метрику TensorBoard, там мы можем проверить, какие у нас были кривые потерь, метрики CER и WER. Вот кривая потерь:

Мы видим, что во время тренировок наши потери постоянно уменьшались; это то, что мы ожидали увидеть. Но мы могли видеть, что потери при проверке уменьшались с 48-го шага обучения, а затем увеличивались. Это означает, что наш режим может быть переобученным. Мы можем увидеть аналогичные сценарии на наших кривых CER и WER. Давайте посмотрим на них. Вот кривая CER:

Я был неправ; CER проверки постоянно улучшался до шага 100. Но здесь мы видим огромный разрыв между CER обучения и проверки. Это потому, что мы не используем какие-либо методы увеличения для наших аудиоданных. Давайте посмотрим на кривую WER:

Он очень похож на CER; это то, чего я ожидал. Но в целом наш CER составляет всего 1,7%, а наш WER — 7%. Это означает, что наша модель хорошо работает с этим набором данных!

Вывод тестовой модели:

Наша модель обучена, и это дало нам довольно удовлетворительные результаты. Как мы можем проверить это на одиночном выводе? Я написал скрипт, который перебирает данные проверки из наших обучающих данных:

Если вы хотите проверить это на своей записи, удалите итеративный цикл и свяжите нашу аудиозапись «wav», она должна с этим справиться! Обученную модель можно скачать по этой ссылке.

Заключение:

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

  • работа с изменчивостью речи человека;
  • Распознавание похожих слов;
  • Качество звукового сигнала.

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

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

В этом руководстве показано, как построить базовую модель распознавания речи с помощью TensorFlow, объединив потери 2D CNN, RNN и CTC. При наличии правильных методов и данных распознавание речи может стать мощным инструментом во многих отраслях.

Обученную модель, используемую в этом руководстве, можно скачать по этой ссылке.

Полный код учебника на GitHub.

Первоначально опубликовано на https://pylessons.com/speech-recognition