Описание рабочего процесса:
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, используемых в проекте.