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

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

Федеральное автономное образовательное учреждение высшего образования

Национальный исследовательский университет «Высшая школа экономики»

Московский институт электроники и математики им. А.Н. Тихонова

Направление 09.03.01 Информатика и вычислительная техника

Выпускная квалификационная работ

На тему:

Разработка сервиса Speech-to-text на базе существующего API

Студент: Елесин А.И.

Руководитель Королев Д.А.

Москва - 2018

Аннотация

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

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

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

Объем работы - 32 страницы, количество иллюстраций - 7, количество таблиц - 1, количество использованных источников - 15.

Annotation

The goal of this final qualifying work is the development of a service for speech recognition using third-party APIs for speech recognition such as Google Speech API.

This paper discusses the main problems encountered in the development of software for speech recognition services, such as providing support for all popular media formats and the ability to recognize speech from audio to text cost-effectively, faster than real time and regardless of the length of the original audio file. The result of the final qualifying work is the created software that fully meets the initial requirements for the technical task.

The volume of work - 32 pages, the number of illustrations - 7, the number of tables - 1, the number of sources used - 15.

Оглавление

Введение

1. Анализ существующих решений

2. Постановка задачи

3. Методология

3.1 Архитектура

3.2 Программная часть

3.3 Описание решения поставленной задачи

3.3.1 Исследование, тестирование и выбор решений для распознавания речи

3.3.2 Обработка входных данных

3.3.3 Создание алгоритма распознавания

3.3.4 Разработка HTTP Request API

3.4 Описание структуры и рабочего процесса программного обеспечения

3.4.1 Работа app_recognition.py

3.4.2 Работа wit_recognition.py

3.5 Описание алгоритма работы разрабатываемого сервиса

3.6 ТЗ на создание сервера веб интерфейса и очереди задач

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

Заключение

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

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

Введение

Цель ВКР

Разработка сервиса по распознаванию речи на базе готовых API для распознавания речи

Задачи

1. Разработать ПО для распознавания речи из медиафайлов популярных аудио и видео форматов с быстрой скоростью и дешевой ценой распознавания одной минуты.

2. Разработать интерфейс для обмена данными между серверным приложением, что будет использовать ПО из пункта номер 1 и веб-сервером поддерживающим пользовательский сайт на основе запросов HTTP POST.

3. Подготовить ТЗ на разработку пользовательского веб-интерфейса.

4. Отладить работу компонентов сервиса и ПО на основе с использованием уже имеющейся старой версии веб-интерфейса.

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

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

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

1. Анализ существующих решений

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

? Голосовое управление

? Голосовые команды

? Голосовой ввод текста

? Голосовой поиск

Примерами успешного применения распознавания речи являются ввод адреса в навигаторах и голосовые помощники, такие как, например, Apple Siri. Помимо мобильных устройств, данные технологии широко распространены в сферах бизнеса: телефонии (голосовые системы самообслуживания), решения «умный дом», бытовой технике, автомобилях и социальных сервисах для людей с ограниченными возможностями.

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

В контексте моего проекта рассматривается задача распознавания речи, уже записанной в медиа файлы, и при изучении рынка сервисов, представляющих похожие услуги, было обнаружено, что основной конкурент разрабатываемого сервиса - услуги по ручному распознаванию записей. Такие услуги предоставляют качество распознавания, близкое с 100%, однако цены на такие услуги как правило в 10-20 раз дороже, чем предполагаемая себестоимость распознавания через разрабатываемый сервис. Так же были обнаружены неочевидные варианты [1] получить распознанный текст к любому видео, находящемуся на платформе Youtube, но данный вариант неочевиден для обычного пользователя, не обладающего технической подкованностью, и попросту неудобен в применении.

2. Постановка задачи

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

1. Поддержка всех популярных медиа форматов, включая аудио и видео записи, а именно mp3, wav, ogg, aac, mp4, mov, avi, 3gp.

2. Возможность распознавания записей любой длины.

3. Быстрое распознавание - одна секунда аудиозаписи должна распознаваться быстрее, чем за одну секунду реального времени.

4. Низкая стоимость распознавания по сравнению с распознаванием через Google Speech API (меньше 1.44$ за минуту распознавания)

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

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

1. Преобразование файлов от пользователей в формат, поддерживаемой выбранным решением для распознавания речи (далее «S2T решение»)

2. Непосредственно распознавание речи, что включается в себя:

a. Разделение входного файла на сегменты

b. Отправку сегментов на распознавание бесплатным S2T решением

c. Повторную отправку на распознавание платным S2T решением

d. Разбор результатов распознавания и подготовка файлов результатов

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

3. Методология

3.1 Архитектура

Серверы распознавания и веб интерфейса разделены для возможности расширения. При повышенной нагрузке на сервер возможно развертывание второго сервера распознавания (далее «воркер») для обслуживания большего количества клиентов.

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

3.2 Программная часть

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

3.3 Описание решения поставленной задачи

3.3.1 Исследование, тестирование и выбор решений для распознавания речи

Во время исследования рынка решений для распознавания речи оказалось, что у каждого есть свои недостатки, и ни одно из них не подходит идеально для разработки сервиса. Были исследованы и протестированы такие S2T решения как: Google Speech API, Yandex SpeechKit, Nuance Dragon, Vocapia REsearch, Microsoft Bing Speech API, Wit.ai и Speechmatics Speech Made Simple. Главными проблемами этих решений оказались отсутствие поддержки русского языка, не подходящие режимы работы для создания сервиса, ограничения на длину распознаваемого аудио и высокая цена распознавания.

Таблица 1

Исследованные решения для распознавания речи

Название

Языки

Длительность записи / поддержка аудиостримов

Стоимость

1

Google Speech API

Ru/En

Потоковый режим, 1 минута Записи - до 80 минут

0.006$(0.4р) за 15 сек0.026р/сек

2

Yandex SpeechKit Cloud

Ru/En

Потоковый режим без ограничений Короткие записи

В среднем 400 рублей за 1000 запросов, что равно при запросе - 20 сек:0,02р/сек 1.2р/мин72р/час

4

Nuance Dragon SDK Server Edition

En/Ru(?)

Только предварительно записанные данные

Оговаривается (платно)

5

Vocapia REsearch (VoxSigma)

Ru/En

Потоковый режим(?), длинные записи

Оговаривается (платно)

6

Microsoft Bing Speech API

En

Короткие записи, потоковый режим

0-10 часов - $9/час10-100 часов - $7.50/час Больше 100 часов - $5.50/час

7

Speechmatics Speech Made Simple

Ru/En

Только предварительно записанные данные

0.006Ј/мин

8

Wit.ai Speech

Ru/En

Короткие записи (1.5-2Mb, до 50 сек)

Бесплатно

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

? требование производить вычисления на графических ускорителях либо мощных процессорах

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

? направленность на распознавания коротких фраз и команд, а не длинных речей

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

Для дальнейшей разработки программного обеспечения было решено выбрать два сервиса, предоставляющих свои API для распознавания речи: Google Speech API [2] и Wit.ai [3].

3.3.2 Обработка входных данных

Проблема возможности преобразования большого количества входных форматов медиа-данных в форматы, поддерживаемые S2T решениями, была решена с помощью использования FFmpeg [4], программного обеспечения для преобразования и изменения медиа данных. При изначальном тестировании также рассматривался вариант использования GStreamer [5], однако при тестировании этого решения оказалось, что такое вариант намного более сложен и неудобен в реализации, а также имеет ряд технических проблем, например утечку памяти, появляющуюся при использовании GStreamer через Python [6]. Так же во время тестирования решения с использование Gstreamer был найден критический баг, связанный с некорректным чтением поврежденных заголовков файла формата wav [7]. Об ошибке было сообщено на багтрекер разработчиков Gstreamer, и вскоре она была исправлена.

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

Рис. 1. Разделение первичной аудиозаписи на фрагменты

3.3.3 Создание алгоритма распознавания

Для решения проблемы создания алгоритма для быстрого и дешевого распознавания речи было выбрано использовать два решения для распознавания речи. Google Speech API используется как самое неприхотливое к качеству звука, а Wit.Ai как самое дешевое в применении. Комбинация этих S2T API позволила снизить стоимость распознавания минуты речи на 50-100% в зависимости от качества записи в оригинальной аудиодорожке. Параллельное распознавание в 12 потоков было использовано для достижения быстроты распознавания. Это решение позволило достичь средней скорости распознавания в 10 раз быстрее реального времени.