Обзор

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

Вступление

«Привет, Google. Какая сегодня погода?"

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

Это экономит мне массу времени, и я могу быстро взглянуть на свой экран и вернуться к работе. Беспроигрышный вариант для всех! Но как Google понимает, что я говорю? И как система Google преобразует мой запрос в текст на экране моего телефона?

Вот где проявляется красота моделей преобразования речи в текст. Google использует сочетание методов глубокого обучения и обработки естественного языка (NLP), чтобы проанализировать наш запрос, получить ответ и представить его в виде звука и текста. .

Та же концепция преобразования речи в текст используется во всех других популярных технологиях распознавания речи, таких как Amazon Alexa, Apple Siri и т. Д. Семантика может варьироваться от компании к компании, но общая идея остается той же.

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

Итак, в этой статье я расскажу вам об основах систем распознавания речи (также известных как введение в обработку сигналов). Затем мы будем использовать это как ядро ​​при реализации нашей собственной модели преобразования речи в текст с нуля на Python.

Ищете место для начала вашего глубокого обучения и / или НЛП? У нас есть для вас идеальные ресурсы:

Оглавление

  1. Краткая история распознавания речи на протяжении десятилетий
  2. Введение в обработку сигналов
  3. Различные методы извлечения признаков из аудиосигнала
  4. Понимание постановки проблемы для нашего проекта преобразования речи в текст
  5. Реализация модели преобразования речи в текст в Python

Краткая история распознавания речи на протяжении десятилетий

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

Знаете ли вы, что исследование распознавания речи восходит к 1950-м годам? Правильно - этим системам уже более 50 лет! Мы подготовили аккуратно иллюстрированный график, чтобы вы могли быстро понять, как развивались системы распознавания речи за десятилетия:

  • Первая система распознавания речи, Одри, была разработана еще в 1952 году тремя исследователями Bell Labs. Одри была разработана, чтобы распознавать только цифры
  • Спустя всего 10 лет IBM представила свою первую систему распознавания речи IBM Shoebox, которая могла распознавать 16 слов, включая цифры. Он мог идентифицировать такие команды, как «Пять плюс три плюс восемь плюс шесть плюс четыре минус девять, всего», и мог бы распечатать правильный ответ, то есть 17
  • Агентство перспективных оборонных исследовательских проектов (DARPA) внесло большой вклад в развитие технологии распознавания речи в 1970-е годы. DARPA финансировало около 5 лет, с 1971 по 1976 год, программу под названием Исследование понимания речи и, наконец, было разработано Harpy, способное распознавать 1011 слов. По тем временам это было большим достижением.
  • В 1980-х годах к системе распознавания речи применялась скрытая марковская модель (HMM). HMM - это статистическая модель, которая используется для моделирования проблем, связанных с последовательной информацией. Он хорошо зарекомендовал себя во многих реальных приложениях, включая распознавание речи.
  • В 2001 году Google представила приложение Голосовой поиск, которое позволяло пользователям искать запросы, разговаривая с машиной. Это было первое голосовое приложение, которое было очень популярно среди людей. Это сделало общение между людьми и машинами намного проще.
  • К 2011 году Apple запустила Siri, который предлагал в реальном времени, более быстрый и простой способ взаимодействия с устройствами Apple, просто используя свой голос. На данный момент Amazon Alexa и Google’s Home являются самыми популярными виртуальными помощниками на основе голосовых команд, которые широко используются потребителями по всему миру.

Разве не было бы замечательно, если бы мы могли также работать над такими замечательными сценариями использования, используя наши навыки машинного обучения? Именно этим мы и займемся в этом уроке!

Введение в обработку сигналов

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

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

Что такое звуковой сигнал?

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

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

Параметры звукового сигнала

  • Амплитуда. Амплитуда означает максимальное смещение молекул воздуха из исходного положения.
  • Гребень и впадина: гребень - это самая высокая точка волны, а впадина - самая низкая точка.
  • Длина волны. Расстояние между двумя последовательными гребнями или впадинами называется длиной волны.

  • Цикл: каждый звуковой сигнал проходит в виде циклов. Одно полное движение вверх и движение сигнала вниз образуют цикл
  • Частота. Частота означает, насколько быстро сигнал меняется за определенный период времени.

Приведенный ниже GIF прекрасно отображает разницу между высокочастотным и низкочастотным сигналами:

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

Различные типы сигналов

В повседневной жизни мы сталкиваемся с двумя разными типами сигналов - цифровыми и аналоговыми.

Цифровой сигнал

Цифровой сигнал - это дискретное представление сигнала за период времени. Здесь конечное число выборок существует между любыми двумя временными интервалами.

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

Аналоговый сигнал

Аналоговый сигнал - это непрерывное представление сигнала в течение определенного периода времени. В аналоговом сигнале существует бесконечное количество выборок между любыми двухвременными интервалами.

Например, аудиосигнал является аналоговым, поскольку он представляет собой непрерывное представление сигнала.

Хотите знать, как мы собираемся хранить аудиосигнал, если он имеет бесконечное количество отсчетов? Устройтесь поудобнее и расслабьтесь! Мы коснемся этой концепции в следующем разделе.

Что такое выборка сигнала и зачем она нужна?

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

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

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

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

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

Различные методы извлечения признаков для аудиосигнала

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

Область времени

Здесь аудиосигнал представлен амплитудой как функция времени. Проще говоря, это график между амплитудой и временем. Характеристики - это амплитуды, которые записываются в разные промежутки времени.

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

Частотный диапазон

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

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

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

Мы можем получить зависящие от времени частоты с помощью спектрограммы.

Спектрограмма

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

Правильные функции для извлечения из аудио зависят от варианта использования, с которым мы работаем. Наконец-то пришло время запачкать руки и запустить наш Jupyter Notebook!

Понимание постановки проблемы для нашего проекта преобразования речи в текст

Давайте разберемся в постановке проблемы нашего проекта, прежде чем мы перейдем к реализации.

Мы можем оказаться на грани того, что вокруг нас будет слишком много экранов. Кажется, что каждый день новые версии обычных объектов «изобретаются заново» со встроенным Wi-Fi и яркими сенсорными экранами. Многообещающее противоядие от нашей зависимости от экрана - голосовые интерфейсы.

TensorFlow недавно выпустил наборы данных речевых команд. Он включает 65 000 произнесений длиной в одну секунду из 30 коротких слов тысячами разных людей. Мы создадим систему распознавания речи, которая понимает простые голосовые команды.

Вы можете скачать набор данных здесь.

Реализация модели преобразования речи в текст в Python

Ожидание закончилось! Пришло время создать нашу собственную модель преобразования речи в текст с нуля.

Импортировать библиотеки

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

Исследование и визуализация данных

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

Визуализация аудиосигнала в области временных рядов

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

Частота выборки

Давайте теперь посмотрим на частоту дискретизации аудиосигналов:

ipd.Audio(samples, rate=sample_rate) print(sample_rate)

Повторная выборка

Из вышесказанного мы можем понять, что частота дискретизации сигнала составляет 16000 Гц. Давайте повторно отсчитаем его до 8000 Гц, поскольку большинство частот, связанных с речью, присутствует на 8000 Гц:

samples = librosa.resample(samples, sample_rate, 8000) ipd.Audio(samples, rate=8000)

Теперь давайте разберемся с количеством записей для каждой голосовой команды:

Продолжительность записи

Что дальше? Посмотрите на распределение продолжительности записей:

Посмотреть код на Gist.

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

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

Вот два шага, которые мы сделаем:

  • Повторная выборка
  • Удаление более коротких команд менее 1 секунды

Давайте определим эти шаги предварительной обработки в приведенном ниже фрагменте кода:

Преобразуйте выходные метки в целочисленные:

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

from keras.utils import np_utils y=np_utils.to_categorical(y, num_classes=len(labels))

Измените 2D-массив на 3D, поскольку входом в conv1d должен быть 3D-массив:

all_wave = np.array(all_wave).reshape(-1,8000,1)

Разделить на набор для обучения и проверки

Затем мы обучим модель на 80% данных и проверим оставшиеся 20%:

from sklearn.model_selection import train_test_split x_tr, x_val, y_tr, y_val = train_test_split(np.array(all_wave),np.array(y),stratify=y,test_size = 0.2,random_state=777,shuffle=True)

Модель архитектуры для этой проблемы

Мы построим модель преобразования речи в текст с помощью conv1d. Conv1d - это сверточная нейронная сеть, которая выполняет свертку только по одному измерению.

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

Построение модели

Реализуем модель с помощью функционального API Keras.

Определите функцию потерь как категориальную кросс-энтропию, поскольку это проблема множественной классификации:

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

Ранняя остановка и контрольные точки модели - это обратные вызовы, позволяющие остановить обучение нейронной сети в нужное время и сохранить лучшую модель после каждой эпохи:

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=10, min_delta=0.0001) mc = ModelCheckpoint('best_model.hdf5', monitor='val_acc', verbose=1, save_best_only=True, mode='max')

Давайте обучим модель на партии размером 32 и оценим производительность на удерживающем наборе:

history=model.fit(x_tr, y_tr ,epochs=100, callbacks=[es,mc], batch_size=32, validation_data=(x_val,y_val))

Диагностический график

Я собираюсь снова опираться на визуализацию, чтобы понять эффективность модели в течение определенного периода времени:

Загрузка лучшей модели

from keras.models import load_model model=load_model('best_model.hdf5')

Определите функцию, которая предсказывает текст для данного аудио:

Время предсказания! Сделайте прогнозы на основе данных проверки:

Самое лучшее еще впереди! Вот сценарий, предлагающий пользователю записывать голосовые команды. Запишите собственные голосовые команды и протестируйте их на модели:

Давайте теперь прочитаем сохраненную голосовую команду и преобразуем ее в текст:

Поздравляю! Вы только что создали свою собственную модель преобразования речи в текст!

Код

Найдите блокнот здесь

Конечные заметки

Должен полюбить силу глубокого обучения и НЛП. Это микрокосм того, что мы можем делать с помощью глубокого обучения. Я призываю вас попробовать это и поделиться результатами с нашим сообществом. 🙂

В этой статье мы рассмотрели все концепции и реализовали нашу собственную систему распознавания речи с нуля на Python.

Надеюсь, сегодня вы узнали что-то новое. Увидимся в следующей статье. Если у вас есть какие-либо вопросы / отзывы, пожалуйста, поделитесь ими в разделе комментариев ниже!

Вы также можете прочитать эту статью об Android-приложении Analytics Vidhya.

Первоначально опубликовано на https://www.analyticsvidhya.com 15 июля 2019 г.