Дипломная работа: Разработка сервиса Speech-to-text на базе существующего API

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Описание рабочего процесса:

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

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

3. По нажатию кнопки “распознать” происходит переход на платежную систему или сообщение о успешном создании задачи.

4. С помощью FFmpeg из медиафайла вырезается видеодорожка, исходный медиафайл удаляется.

5. Воркер(ы) каждые N секунд запрашивает с сервера, обслуживающего создание задач новую задачу.

6. При наличии задачи ответом являются параметры задачи, включающие ссылку на скачивание файла без видеодорожки, данные о языке в аудиозаписи и статус бесплатности распознавания.

7. Во время работы воркер посылает POST запросы со статусом задачи.

8. По выполнению задачи, воркер посылает POST запрос с прикрепленными файлами результатов.

9. После получения результатов распознавания, сервер, обслуживающий задачи, посылает email с результатами распознавания пользователю.

Языки разработки предпочтительно Ruby on Rails.

Технические детали:

? При успешной загрузке файла пользователю показывается оповещение на странице и отправляется оповещение в почту.

? Если файл, присланный пользователем содержит (ffprobe -i <in>) видеопоток, то нужно сохранить копию файла без видеопотока (ffmpeg -i <in> -nv -c:a copy <out>). Изначальный файл должен быть удален.

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

? При отправке (status=in_progress) файла на расшифровку, надо оповестить пользователя об этом по электронной почте.

Как только расшифровка файла завершена (status=complete), необходимо отправить пользователю письмо со ссылками на все результирующие файлы.

Рис. 7. Макет главной страницы веб интерфейса

Детали общения с воркерами:

? Используется HTTP Request API

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

? Результаты работы воркеры загружают в заданную папку через HTTP запрос.

4. Полученные результаты и тестирование полученной технологии

Для тестирования полученного программного обеспечения используется несколько подходов. Программная часть, взаимодействующая с HTTP API тестировалась с помощью скрипта на языке Python, эмулирующего выдачу задания на распознавание от сервера очереди задач. Таким образом, удалось убедиться в полном соответствии работы разработанного программного обеспечения по описанному ранее API HTTP запросов.

Для тестирования полученной технологии распознавания файлов использовалось 4 заранее приготовленные аудиозаписи.

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

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

Результаты тестирования:

1. Запись голоса с лекции на конференции (5 минут анализа ошибок, 20 минут 26 секунд статистики)

Количество неверных окончаний или букв в словах: 49 знаков из 4022. 1.22% ошибки

Количество неверно распознанных или пропущенных слов: 27 слов из 646. 4.17%

Время распознавания: 3 минуты (на 20 минут 26 секунд полной аудиозаписи конференции)

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

2. Новостной сюжет с телеканала (4 минуты)

Количество неверных окончаний или букв в словах: 38 знаков из 3991 знака. 0.95% ошибки.

Количество неверно распознанных или пропущенных слов: 42 слова из 638. 6.58% ошибки.

Время распознавания: 1 минута 7 секунд.

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

3. Запись телефонного разговора из колл-центра (3 минуты)

Количество неверных окончаний или букв в словах: 17 из 1795 знаков. 0.95% ошибки.

Количество неверно распознанных или пропущенных слов: 61 слово из 333. 18.3% ошибки.

Время распознавания: 1 минута 20 секунд.

Примечание: некачественно записанный звук, голоса «глухие» и нечетко записанные, перебивающие друг друга. Очень много сбитой, сумбурной речи.

4. Запись телефонного разговора с мобильного телефона (3G, 2 минуты)

Количество неверных окончаний или букв в словах: 30 знаков из 1623. 1.8% ошибки.

Количество неверно распознанных или пропущенных слов: 33 слова из 263. 12.5% ошибки.

Время распознавания: 1 минута 30 секунд.

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

При тестировании этих четырех аудиозаписей было совершено 106 запросов распознавания к Wit.ai и лишь 3 запроса к платному Google Speech API. Так как количество обращений к Google Speech API сильно зависит от качества аудиозаписи, точное метрику экономности разработанного программного обеспечения сложно рассчитать. На примере 4 аудиозаписей, протестированых ранее можно утверждать, что в большинстве случаев экономия составит как минимум 80%.

Заключение

В результате данной работы было разработано программное обеспечение, полностью отвечающее изначальным целям технического задания. Полученная технология получает результаты распознавания в районе 98.77% процентов знаков и 89.6% процентов правильно распознанных слов при скорости распознавания намного превышающей скорость решений Google Speech API и Wit.ai на которых построено разработанное программное обеспечение. Цена распознавания также была снижена на 80-95% относительно использования решения на базе исключительно платного сервиса Google Speech API.

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

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

Еще один вектор развития проекта - решения по распознавания речи в «оптовом» варианте, например, используя Google Drive. Такие запросы неоднократно приходили от пользователей во время тестирования разработанной технологии распознавания. Также возможна дальнейшая аналитика полученного текста, но это уже совсем другой вопрос и другая тематика исследования.

В дополнение хочется отметить, что в связи с тем, что русский язык грамматически очень сложный, его распознавание -- это очень сложная задача в сравнении с английским языком. Я бы очень хотел увидеть улучшения в качестве распознавания таких сервисов как Google Speech API и Wit.ai, используемых в проекте.

Перечень сокращений, условных обозначений, символов и терминов

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

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

Список используемых источников

1. T. Klosowski "Use YouTube for Instant Transcription"

2. "Google Cloud Speech API Documentation"

3. "Wit.ai API Documentation"

4. "FFmpeg Documetation"

5. В.Супрун "Знакомство с GStreamer: Введение"

6. J.Persson, R.Gonzalez, Brett.Viren "Python GStreamer Tutorial", 2014

7. "wavparse: Processing wav file with blank tag in metadata causes SIGSEGV"

8. "Wit.ai. Frequently Asked Questions"

9. "Commercial usage of Wit.Ai"

10. "What is WebRTC?"

11. "py-webrtcvad wrapper for Easy to use of Voice activity detection in python"

12. "Flask Documentation"

13. L.Fischer "A Beginner's Guide to HTTP and REST", 2013

14. "subprocess -- Subprocess management"

15. "threading -- Thread-based parallelism"