Программа синтеза речи
Способы реализации синтеза речи. Существующие text-to-speech системы. Обзор технологий для реализации интерфейса API, клиентской и серверной части веб-приложения. Преобразование чисел в слова. Результат обработки входящего текста. Склейка фонем в слово.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 04.12.2019 |
Размер файла | 5,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http: //www. allbest. ru/
ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»
Факультет компьютерных наук
Департамент программной инженерии
Выпускная квалификационная работа
по направлению подготовки 09.03.04 «Программная инженерия»
на тему «Программа синтеза речи»
Научный руководитель
наук доктор технических наук
Александров Дмитрий Владимирович
Выполнил студент группы БПИ151
4 курса бакалавриата образовательной программы
«Программная инженерия» Лобанов Илья Андреевич
Москва 2019
Реферат
речь интерфейс серверный клиентский
Разработка методов синтеза человеческого голоса ведется в течение уже многих лет, но все еще остается актуальной, поскольку решения и технологии постоянно развиваются. Для того, чтобы создать синтезированную речь, максимально приближенную к человеческой, при разработке алгоритмов синтеза речи необходимо учитывать специфические структуры и правила языка, для которого он разрабатывается, а именно, правила построения транскрипций, извлечение минимальных смыслоразличительных единиц языка (фонем) и огромного объема исключений.
Цель данной работы - создать программу, которая позволит синтезировать человекоподобную речь по заранее неизвестному входному тексту на русском языке. Для этого необходимо изучить основные способы синтеза речи и обобщить полученные знания для определения наиболее подходящего подхода.
В работе приведены существующие способы синтеза речи, описаны их достоинства и недостатки, а также определен и подробно изложен выбранный подход. Полностью описан процесс синтеза речи от создания базы данных, содержащей озвучку фонем русского языка, до алгоритмов получения аудиофайлов, содержащих синтезированную речь по полученному на вход программы тексту.
Результатом работы является программа, позволяющая получать синтезированную речь на русском языке по заранее неизвестному тексту. Программа включает в себя веб-приложение для демонстрации работы синтезатора голоса и открытый API, позволяющий интегрировать сервис синтеза речи по входящему текстовому запросу практически в любое приложение.
Работа содержит 51 страниц, 3 главы, 8 таблиц, 4 приложения, список использованных источников из 30 наименований.
Ключевые слова: синтез речи, система перевода текста в речь, фонемы, веб-приложение, API, Python, Java, React.
Abstract
Development of methods for synthesizing human-like voice from text has been conducted for many years, but still remains relevant, because the solutions and technologies are constantly evolving. In order to create a synthesized speech, as close as possible to the human, in the development of speech synthesis algorithms, it is necessary to consider the specific structures and rules of the language for which it is developed, namely, the rules of transcription, the extraction of the minimum semantic units of the language (phonemes) and a huge amount of exceptions.
The purpose of this study is to create a program that will allow to synthesize human-like speech on an unknown input text in Russian. To do this, it is necessary to study the basic methods of speech synthesis and summarize the knowledge to determine the most appropriate approach.
The paper presents the existing methods of speech synthesis and describes their advantages and disadvantages, as well as defined and described in detail the chosen approach. The process of speech synthesis from the creation of a database containing the voice acting of Russian phonemes to the algorithms for obtaining audio files containing the synthesized speech from the text received at the input of the program is fully described.
The result of the work is a program that allows you to get a synthesized speech in Russian on an unknown text. The program includes a web application to demonstrate the quality of the voice synthesizer and an open API that allows you to integrate the speech synthesis service on an incoming text request into almost any application.
The paper contains 51 pages, 3 chapters, 8 tables, 4 applications, 30 sources.
Keywords: speech synthesis, text-to-speech systems, phonemes, web-application, API, Python, Java, React.
Оглавление
Реферат
Abstract
Основные определения, понятия и термины
- Введение
- Глава 1. Обзор существующих решений и технологии
- 1.1 Существующие text-to-speech системы
- 1.1.1 IVONA и Acapela group
- 1.1.2 Festival
- 1.1.3 Необходимость разработки собственного решения
- 1.2 Обзор способов реализации синтеза речи
- 1.2.1 Существующие способы синтеза речи
- 1.2.2 Выбранный подход и его особенности
- 1.3 Обзор технологий для реализации интерфейса API, клиентской и серверной части веб-приложения
- 1.3.1 Обзор технологий для реализации серверной части веб-приложения
- 1.3.2 Обзор технологий для реализации открытого API
- 1.3.3 Обзор технологий для реализации клиентской части веб-приложения
- Глава 2. Описание используемых методов
- 2.1 Архитектура приложения
- 2.2 Используемый стек технологий
- 2.3 Алгоритмы обработки входящего текста
- 2.3.1 Нормализация входящего текста
- 2.3.2 Преобразование чисел в слова
- 2.3.3 Поиск ударения в словах
- 2.3.4 Деление слов на слоги
- 2.3.5 Результат обработки входящего текста
- 2.4 Методы получения синтезированной речи
- 2.4.1 Поиск подходящих фонем
- 2.4.2 Склейка подобранных фонем в слово
- 2.4.3 Склейка слов в предложение
- Глава 3. Методы реализации и практические результаты
- 3.1 Функциональные требования
- 3.1.1 Функциональные требования пользовательского интерфейса
- 3.1.2 Функциональные требования сервиса, реализующего открытый API
- 3.1.3 Функциональные требования синтезатора речи
- 3.2 Описание клиентской части
- 3.2.1 Структура проекта
- 3.2.2 Диаграмма классов проекта
- 3.2.3 Принцип работы приложения
- 3.2.4 Сборка и разворачивание проекта
- 3.3 Описание сервиса, предоставляющего интерфейс API
- 3.3.1 Структура проекта
- 3.3.2 Диаграмма классов проекта
- 3.3.3. Описание интерфейса API
- 3.3.4 Формат данных
- 3.3.5 Разворачивание сервиса
- 3.4 Описание сервиса, представляющего синтезатор речи
- 3.4.1 Структура проекта
- 3.4.2 UML-диаграмма связей проекта
- 3.4.3 Принцип работы сервиса
- 3.4.4 Описание интерфейса API
- 3.4.5 Формат данных
- 3.4.6 Разворачивание сервиса
- Заключение
- Список источников
- Приложения
Основные определения, понятия и термины
1. Синтез речи - это процесс преобразования заранее неизвестной текстовой информации в речь, приближенную к человеческой. А программы, которые реализуют необходимые алгоритмы для достижения данной цели, называются программами синтеза речи (text-to-speech systems).
2. Фонема - минимальная смыслоразличительная единица языка.
3. Аллофон - реализация фонемы, её вариант, обусловленный конкретным фонетическим окружением.
4. Веб-приложение - клиент-серверное приложение, в котором клиент взаимодействует с сервером при помощи браузера, а за сервер отвечает программно-аппаратная часть приложения.
5. API (англ. application programming interface, API) - набор готовых классов, процедур, функций и структур, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах.
6. REST (англ. Representational State Transfer, REST) - набор архитектурных принципов построения сервис-ориентированных систем.
7. SOAP (от англ. Simple Object Access Protocol, SOAP) - протокол обмена структурированными сообщениями в распределённой вычислительной среде.
Введение
Благодаря современным технологиям все больше и больше различных систем приводят к такому автономному состоянию, что работа человека в них минимизируется. И с появлением большего числа автоматизированных систем и центров, где отсутствует человек в качестве оператора, появляется острая необходимость в донесении до пользователей той или иной информации не только в зрительном формате, но и так, чтобы они могли ее услышать. Так в современном мире появилась необходимость в аппаратном (компьютерном) синтезе речи.
Самый первый синтез речи уже давно появился в средствах телефонии и общественном транспорте, но там использовались записанные шаблоны фраз и предложений, которые воспроизводились в указанном порядке. Однако для полноценного синтеза человекоподобной речи по заранее неизвестному тексту необходима была более развитая система, которая могла бы использоваться для абсолютно любых целей: от акустического диалога человека с компьютером при прочтении компьютером вслух утренних новостей до организации помощи людям с ограниченными возможностями, в частности, слепым людям, которым необходимо получить информацию с информационного стенда или экрана.
В настоящее время существует несколько решений, предоставляющих системы для синтеза человекоподобной речи из текста в свободном доступе. Но подавляющее большинство из них пишется универсальными таким образом, чтобы одна система поддерживала работу с широким набором языков. В этом и заключается главная проблема, потому что каждый человеческий язык уникален, это сложная знаковая система со своими правилами звучания сочетания букв и слов. В каждом языке существуют базовые элементы обозначения звуков - аллофоны, на которых строятся диаллофоны и слоги, образующие фонемы, а уже из фонем в свою очередь строится звучание слов. Помимо правил звучания сочетания букв существуют правила ударения в словах и огромное количество исключений. Поэтому построение качественного синтезатора речи для конкретного языка - нетривиальная задача, требующая анализа со стороны разных областей, таких как лингвистика, просодика и фонетика.
Для решения существующей проблемы была поставлена цель - разработать программу, которая позволит синтезировать человекоподобную речь на русском языке по заранее неизвестному тексту.
Достижение поставленной цели предполагает выполнение следующих задач:
? изучить современные способы синтеза речи;
? изучить фонетические особенности русского языка;
? собрать базу данных, содержащую необходимый набор озвученных фонем на русском языке;
? сформулировать требования к веб-приложению;
? сформулировать требования к интерфейсу API;
? разработать архитектуру приложения и методы взаимодействия между компонентами;
? реализовать приложение в соответствии с поставленными требованиями;
? сформировать пакет технической документации.
Разработанный интерфейс API является открытым, и любой желающий имеет возможность интегрировать функционал по синтезу речи практически в любой сервис. Разработанное веб-приложение является инструментом визуализации результатов работы сервиса. Оно позволяет отправить на обработку программе любое текстовое сообщение на русском языке и получить аудиофайл, который можно прослушать в интерфейсе веб-приложения.
Использование описанной программы позволит интегрировать систему синтеза человекоподобной речи в любое приложение. Так как данная программа имеет открытый исходный код и распространяется бесплатно, то ее интеграция позволит сократить расходы на покупку другого готового решения, потому что практически все решения на русском языке с приемлемыми результатами синтеза речи распространяются только по платной подписке.
Работа структурирована следующим образом: в первой главе рассмотрены существующие решения и аналоги, а также технологии, которые могут быть использованы для реализации проекта, предложено обоснование выбранных методов; вторая глава посвящена описанию архитектуры приложения и используемых методов для обработки текста и синтеза речи; в третьей главе описываются функциональные требования и раскрываются детали реализации каждого модуля программы.
В Приложениях к работе приведена техническая документация, включающая техническое задание, руководство оператора, программа и методика испытаний, текст программы.
Глава 1. Обзор существующих решений и технологий
В данной главе будут рассмотрены существующие аналоги программы, будет проведен обзор технологий для реализации алгоритмов синтеза речи, реализации интерфейса API и веб-приложения, обоснованы выбранные средства и описаны особенности продукта.
1.1 Существующие text-to-speech системы
Системы синтеза речи в настоящее время сделали шаг вперед. Некоторые компании активно занимаются разработкой собственных сервисов, позволяющих синтезировать человекоподобную речь для неизвестных входных данных.
Но у каждого решения есть свои особенности и недостатки, сравнительная характеристика которых будет представлена ниже.
1.1.1 IVONA и Acapela group
IVONA - это решение от Amazon Company, предоставляющее text-to-speech систему, которая позволяет синтезировать речь для 24 различных языков [18].
Acapela group - это решение предоставляет text-to-speech систему, которая позволяет синтезировать речь для более 30 различных языков [11].
Оба решения - IVONA и Acapela group - имеют общие особенности и недостатки, поэтому сравнительные характеристики приведены в общую таблицу.
Таблица 1.1 Система синтеза речи “IVONA” и “Acapela group”
Особенности |
Недостатки |
|
· есть поддержка различных языков, в том числе русского · возможность управления следующими аспектами речи: громкость, высота голоса, скорость |
· платное распространение · нет возможности проверить качество речи на неизвестном входном тексте без покупки подписки на продукт · закрытый исходный код |
1.1.2 Festival
Festival - text-to-speech система, разработанная на территории Эдинбургского университета [14].
Таблица 1.2 Система синтеза речи “Festival”
Особенности |
Недостатки |
|
· Бесплатное распространение · Открытый исходный код |
· нет поддержки русского языка · нет поддерживаемого интерфейса API - решение устанавливается при помощи дистрибутива на локальную машину · нет возможности проверить качество речи на неизвестном входном тексте, не устанавливая программу |
1.1.3 Необходимость разработки собственного решения
Исходя из анализа существующих решений, предоставляющих сервис для синтеза речи, можно прийти к выводу, что разработка собственного решения имеет смысл. Очевидно, что идея синтеза речи не является принципиально новой, однако, объединение отличительных черт существующих решений и добавление нескольких новых функций, оправдывают реализацию собственного решения.
Продукт, описанный в данной работе, будет иметь объединение следующих особенностей:
· Поддержка русского языка;
· Веб-приложение, реализующее возможность синтезировать речь по заранее неизвестному входному тексту и демонстрирующее работу сервиса;
· Открытый интерфейс API для интеграции сервиса для синтеза речи в любое приложение;
· Бесплатное распространение.
Поддержка русского языка выбрана как отправная точка развития программы, ведь это является наиболее важным пунктом в распространении программы для синтеза речи в русскоязычном обществе. К тому же человек, который владеет русским языком, в полной мере может оценить звучание сгенерированной речи и понять вектор необходимых доработок.
1.2 Обзор способов реализации синтеза речи
1.2.1 Существующие способы синтеза речи
Современные способы синтеза речи можно разделить на следующие группы:
· параметрический синтез;
· конкатенативный (компилятивный) синтез;
· синтез речи по правилам [8].
Параметрический синтез применяется для декодирования речевого сигнала, в качестве которого передают только значения его определённых параметров. Такой подход используют в вокодерных системах [1]. В теории, можно было бы подобрать параметры речевого сигнала, приходящего на вход синтеза, и получить полноценный синтез речи, но проблема такого метода заключается в невозможности работать с произвольными, заранее неизвестными сообщениями.
Конкатенативный или компилятивный синтез сводится к компиляции речи из предварительно заготовленных шаблонов - слов, фраз, предложений, но длина каждого шаблона не меньше слова. Таким образом содержание и вариативность синтезируемых сообщений ограничивается объемом словара, содержащего озвучку каждого шаблона. Поэтому основная проблема конкатенативного синтеза - это объемы памяти, выделенные под хранение словаря. Данный вид синтеза может использоваться в узконаправленных сферах или там, где набор озвучиваемых сообщений ограничен и не выходит за рамки темы, слова которой озвучены в словаре.
Синтез речи по правилам обеспечивает управление всеми параметрами синтезируемой речи и, таким образом, может генерировать человекоподобную речь по заранее неизвестному входному сообщению. В этом случае, как и с конкатенативным синтезом, используется словарь шаблонов, но он содержит уже не слова и фразы, а минимально возможные звуковые единицы, собрав которые в единое целое можно получить любые слова. Причём в процессе подбора значений параметров по входящему тексту, каждую минимальную единицу вводят последовательно через определённый временной интервал, например 20-50 мс. Такой метод синтеза речи основан на запрограммированном знании лингвистических и акустических ограничений, которые уже учтены при составлении базы данных единичных звуков. Однако и такой подход содержит два варианта компиляции базы данных: форматный способ и способ сбора базы данных с использованием предварительно запомненных отрезков естественного языка.
В первом случае словообразующие звуки составляются путем моделирования человеческого речевого аппарата при помощи цифровой техники (изменение частоты, амплитуды звукового сигнала). Этот тип синтеза речи известен как формант, потому что форманты - это 3-5 ключевых (резонансных) частот звука, которые человеческий речевой аппарат генерирует и объединяет для создания звука речи. В отличие от способов синтеза речи, которые используют конкатенацию, которая ограничена перестановкой предварительно записанных звуков, формантные речевые синтезаторы могут воспроизводить абсолютно все, даже слова, которые не существуют, но речь, сгенерированная на основе такой базы получается похожей на “голос робота”, неестественной - ее сложно воспринимать на слух, так как хорошо слышна компьютерная модуляция.
Во втором случае способ с использованием предварительно запомненных отрезков естественного языка отличается теми же достоинствами, что и форматный метод, но так как в основе словообразующих звуков лежат записи, которые озвучивал человек, речь становится более приятной на слух и более похожей на натуральную. Такой вид синтеза может основываться на следующих видах минимальных звуковых элементах: аллофонах, диаллофонах, трифонах, полуслогах и слогах, которые в процессе алгоритма по синтезу речи образуют фонемы, составляющих результирующий аудиофайл с сгенерированной речью. Но так как акустические и просодические характеристики слов изменяются в зависимости от места слова в предложении и типа предложения (вопросительное, восклицательное), единственным минусом такого подхода является сложность в управлении интонационными характеристиками предложения [30].
1.2.2 Выбранный подход и его особенности
Исходя из всей информации, изложенной выше, в качестве способа генерации речи был выбран подход синтеза речи по правилам с использованием предварительно сохраненных в базе данных отрезков естественного языка. Соответственно, для реализации данного метода необходимо неким образом скомпилировать базу данных, состоящую из большого числа минимальных звуковых элементов языка.
Для достижения поставленной цели было решено записывать базу данных самостоятельно. В качестве минимальных звуковых сочетаний языка были выбраны диаллофоны - вариант фонемы, зависящий от окружения, и слоги - сегменты, содержащие согласную и примыкающего к нему гласную. В таком случае будут минимизированы потери качества речи при склейке фонем друг с другом [10].
Для того, чтобы определить, какую именно фонему необходимо использовать вместо каждой конкретной буквы или сочетании букв в слове, каждое входное слово будет разбиваться на транскрипцию, по которой уже и будет происходить озвучка слов.
1.3 Обзор технологий для реализации интерфейса API, клиентской и серверной части веб-приложения
Разрабатываемая система представляет собой веб-приложение. Пользователи взаимодействуют с веб-браузером через веб-приложение, которое обращается к API и вызывает соответствующие методы. В случае, когда пользователями программы являются не люди, а другие приложения, в которых интегрировали разрабатываемый в данной работе сервис, эти приложения обращаются к API самостоятельно.
Необходимо отметить, что в данной работе создание серверной части программы поделено на 2 части: первая часть является модулем, непосредственно отвечающим за синтез речи, а вторая часть является модулем, ответственным за предоставление открытого API и первоначальной обработки запросов. Иными словами, серверная часть логически поделена на 2 модуля: один ответственный за синтез речи, второй является middleware-слоем, который предоставляет открытый API для обработки запросов и перенаправляет запросы к самому синтезатору.
1.3.1 Обзор технологий для реализации серверной части веб-приложения
Выбор языка программирования для модуля, реализующего интерфейс API. Для построения надежного веб-сервиса, который бы выполнял бесперебойную работу, был выбран язык программирования Java и фреймворк Spring Framework, обеспечивающий инструменты для организации работы веб-сервиса. Данный фреймворк был признан миллионами разработчиков по всему миру, как один из лучших для enterprise разработки.
Выбор языка программирования для модуля, представляющего синтезатор речи. Для реализации сервиса, реализующего синтез речи, был выбран язык программирования Python. Он отлично справляется с задачами обработки данных и имеет богатую библиотеку встроенных полезных методов.
1.3.2 Обзор технологий для реализации открытого API
Выбор подхода - REST или SOAP. В качестве подхода к реализации API был выбран архитектурный подход REST. Такое решение принято по ряду весомых причин:
· SOAP - это целое семейство протоколов и стандартов, а это означает, что это более тяжеловесный вариант для машинной обработки. Поэтому REST работает быстрее.
· Ответ REST может быть представлен в различных форматах, а SOAP привязан к XML.
· В отличие от SOAP, архитектура REST может использовать давно известные коды HTTP ошибок, что упрощает использование API [26, 28].
1.3.3 Обзор технологий для реализации клиентской части веб-приложения
Так как клиентская часть веб-приложения необходима лишь для демонстрации работы сервиса, то она должна быть максимально простой и лаконичной. Для создания простых одностраничных веб-приложений подходит JavaScript-библиотека - React. Она позволяет сделать интерфейс приложений современным и приятным в вид.
Выводы по главе
В первой главе были рассмотрены существующие сервисы и аналоги разрабатываемого приложения, были выделены их особенности и недостатки. На основании проведенного анализа определен состав функций необходимый для реализации в новом приложении.
Также был проведен обзор способов синтеза речи и технологий для реализации клиентской и серверной части программы. На основании результатов обзора был определен подход в разрабатываемом приложении.
В следующей главе будет описана архитектура приложения и более подробная реализации алгоритмов по синтезу речи.
Глава 2. Описание используемых методов
Основной целью данной работы является разработка программы, принимающей на вход текст на русском языке, а на выход отдающей сгенерированную человекоподобную речь. Поэтому для отображения результатов работы программы разрабатывается веб-приложение с возможностью воспроизвести полученную речь, а также открытый API, который возможно будет встроить практически в любую систему, будь то мобильное приложение или информационный терминал для помощи людям с ограниченными возможностями.
Для понимания работы программы с точки зрения синтеза речи и полученного решения, в данной главе будет описана архитектура приложения, алгоритмы по обработке входящего текста и последующего синтеза речи и используемый стек технологий.
2.1 Архитектура приложения
Разрабатываемая система реализует микросервисную архитектуру - это вариант сервис-ориентированной архитектуры программного обеспечения, ориентированный на взаимодействие скольких, различающихся по смыслу, модулей. Они изменяемы, и каждый не теряет своей смысловой функциональности при замене другого. Таким образом данная архитектура способствует масштабируемости и управляемости создаваемых модулей - микросервисов.
На схеме ниже представлено разрабатываемое веб-приложение, включающее в себя 3 микросервиса (рис. 1). На рисунке показаны основные процессы передачи запросов, происходящие в приложении. Если данные поступают из пользовательского веб-интерфейса, обозначенного на схеме “Веб-интерфейс”, то он вызовет модуль, реализующий открытый API, который в свою очередь вызовет сервис по синтезу речи. Если же данная система вызывается другой программой, то вызов пойдет сразу из точки, обозначенной “Открытый API” к микросервису, ответственному за синтез речи.
Рисунок 1 Архитектурная схема разрабатываемой программы
2.1 Используемый стек технологий
В таблицах ниже указаны основные технологии, фреймворки и библиотеки, которые были использованы для разработки пользовательского веб-интерфейса (фронтенда), сервиса, реализующего открытый API (бэкенда) и модуля, отвечающего за синтез речи.
Таблица 1 Технологический стек фронтенда
React.js |
Javascript-библиотека для построения интерфейса пользователя. Данная библиотека позволяет строить как одностраничные веб-интерфейсы, так и сложные, динамические системы [25]. |
|
TypeScript |
Типизированное надмножество JavaScript, которое компилируется в простой JavaScript. Позиционируется, как средство разработки веб-приложений, расширяющее возможности JavaScript [29]. |
|
npm |
Менеджер пакетов, входящих в Node.js [22]. |
Таблица 2 Технологический стек бэкенда
Java |
Объектно-ориентированный язык программирования. Отличается быстротой и надежностью. |
|
Java Spring Boot |
Упрощает создание веб-приложений и конфигурирование интерфейса API. Предоставляет такие особенности, как встроенные контейнеры сервлетов (tomcat) и управление зависимостями [19]. |
|
Lombok |
Представляет плагин компилятора, который превращает аннотации в Java-код непосредственно перед компиляцией, делая код более читабельным. И так как зависимость Lombok отсутствует в runtime, использование плaгина не увеличивает размер сборки [21]. |
|
Maven |
Инструмент для сборки Java-проекта. Позволяет легко управлять всеми сторонними зависимостями проекта и содержит всего один настроечный файл [12]. |
Таблица 3 Технологический стек модуля синтеза речи
Python |
Скриптовый язык программирования с динамической типизацией. Является удобным инструментом для разработки, если стоит задача обработки данных, так как стандартная библиотека включает большой объем полезных функций. |
|
Flask |
Микрофреймворк для создания интерфейса API на языке Python, отличается минималистичностью и гибкостью. Позволяет настроить обработку всех необходимых роутов и их воспроизводимых ошибок [15]. |
|
pymorphy2 |
Библиотека, предоставляющая морфологический анализатор для русского языка. Она позволяет определить все морфологические характеристики слова на основе того, как оно пишется, и поставить любое слово в нужную форму [24]. |
|
LibROSA |
Представляет пакет для анализа музыки и аудиофайлов на языке Python. Он содержит большинство необходимых методов и инструментов для загрузки, обработки и сохранения аудиофайлов [20]. |
|
pydub |
Высокоуровненый интерфейс для управления и обработки аудоифайлов. Позволяет управлять такими свойствами аудиоряда, как высота звука, громкость в децибелах и другими показателями [23]. |
Таблица 4 Другие средства, используемые при разработке
git |
Распределенная система контроля версиями, предназначенная для сохранения версий программного проекта и отслеживания изменений. Позволяет удобно управлять изменениями в проекте [16]. |
|
SAP Cloud Platform: Cloud Foundry |
Представляет стандарт разработки облачных приложений. Он имеет контейнерную архитектуру, которая запускает приложения на большинстве языках программирования. Он позволяет уделять больше внимания на написание самой программы и не задумываться о ее развертывании на сервере [27]. |
|
SAP Cloud Platform: Neo Environment |
Среда разработки, которая позволяет запускать Java-приложения в модульном и легком runtime-контейнере tomcat. Является подходящим решением для развертывания разрабатываемого Java-приложения [27]. |
2.3 Алгоритмы обработки входящего текста
2.3.1 Нормализация входящего текста
Под нормализацией входящего текста понимается его предобработка с целью удаления лишних, не влияющих на произношение, символов и элементов, приведение текста в вид, пригодный для дальнейшей обработки.
1. Удаление пустых символов с начала и конца строки, удаление лишних (двойных, тройных) пробелов из середины введенного текста.
2. Удаление символов, которые не влияют на произношение предложения (круглые и фигурные скобки, кавычки, апострофы и др.), удаление букв алфавита, отличного от русского.
3. Отделение слов и цифр пробелами, если написаны слитно.
4. Приведение текста к нижнему регистру.
Все операции удаления производятся при помощи регулярных выражений.
2.3.2 Преобразование чисел в слова
Для того, чтобы синтезатор речи мог корректно озвучить ту или иную комбинацию из цифр, составляющих числа, ее необходимо перевести в словесную форму. К примеру, необходимо, чтобы входная строка “студенту 19 лет” преобразовалась в “студенту девятнадцать лет”, а строка “он родился 25 ноября 2012 года” преобразовалась именно в “он родился двадцать пятого ноября две тысячи двенадцатого года”. Здесь необходимо учитывать несколько важных факторов: определение количественных и порядковых числительных, число, род и падежная форма связанного существительного.
Ниже приведена таблица, по которой определяется тип числительного (таб. 5) [9].
Таблица 5 Определение типа числительного
Числительное количественное, если |
Числительное порядковое, если |
|
Число заканчивается на цифры 2, 3, 4, и последние 2 цифры в числе не равны 12, 13, 14, и зависимое слово в именительном или винительном падеже.Пример: 2 года - два года. |
Число заканчивается на цифры 2, 3, 4, и последние 2 цифры в числе не равны 12, 13, 14, и зависимое слово не в именительном или винительном падеже.Пример: 2 году - второму году. |
|
Если зависимое слово равно одной из форм зависимого слова во множественном числе.Пример: 30 дней. Слово “дней” имеет множественную форму, поэтому пишется “тридцать дней”. |
Если зависимое слово не равно ни одной из форм зависимого слова во множественном числе.Пример: 30 день. Слово “день” не может быть множественным ни в одном падеже, поэтому пишется “тридцатый день”. |
|
Нет зависимого словаПример: 61 - шестьдесят один. |
Процесс преобразования числа из цифровой формы в словесную представлен ниже:
1. Преобразование числа в словесную форму начального вида (количественное числительное, именительный падеж, единственное число). Если зависимого слова нет, то число остается в форме начального вида и алгоритм заканчивается.
2. Определение типа числительного - порядковое или количественное (согласно таблице 5).
3. Если числительное порядковое и больше 99, то часть числительного, что находится левее десятых, то есть сотые, тысячные и так далее, ставятся в количественную форму. Пример: 2019 год - две тысячи (количественная форма) девятнадцатый год (порядковая форма).
4. Происходит согласование полученного числа с зависимым существительным по падежу, лицу и числу.
2.3.3 Поиск ударения в словах
Для каждого, из полученный на предыдущих шагах слов, находится ударение согласно полной акцентуированной парадигме по А. А. Зализняку [6]. Она содержит 2645347 форм слов. Если ударение не было найдено, а слово содержит всего одну гласную, то она автоматически становится ударной. Если ударение не было найдено для слова, содержащего более одной гласной, ударение в нем не ставится.
2.3.4 Деление слов на слоги
Каждое слово представляется в виде списка слогов, на которые оно делится. Под слогом в данном контексте понимается одна или несколько букв, которые составляют обособленный звук, который уже в свою очередь составляет звучание слова. Комбинации гласных и согласных отделяются в отдельные слоги, как и отдельные гласные и согласные. Если в слове идет несколько согласных или гласных подряд, то они разделяются в различные слоги. К примеру, слово “предло'г” делится на следующие слоги с обозначением ударной гласной: “п”, “ре”, “д”, “ло”, “ ' ”, “г”. Так при последующем синтезе речи будет проще подобрать правильные фонемы и соединить их, выделив ударную гласную.
Однако не все слова читаются так, как они пишутся. В русском языке огромное количество правил произношения слов, к примеру, безударная буква “о” в закрытом слоге читается, как “а”, поэтому слово “молоко” будет произноситься, как “малако”. Также существует большое количество исключений, где буквы не произносятся. К примеру, в слове “солнце” буква “л” не произносится, а в слове “солнечный” уже произносится. Также примерами могут быть слова “празДник” и “окресТность”. Для учета таких слов ведется словарь исключений.
Поэтому слово “предло'г” должно быть представлено так, как оно слышится, а именно: “п”, “ри”, “д”, “ло”, “ ` ”, “к”.
2.3.5 Результат обработки входящего текста
После выполнения каждого шага, расписанного выше, должен получиться набор букв, который будет передаваться на этап озвучивания. К примеру, фраза
“Привет! “Принц” принес 5коробок для ножей, а?”
должна быть преобразована в
[['п', 'ри', 'ве', "'", 'т'], ['!'], ['п', 'ри', "'", 'н', 'ц'], ['п', 'ри', 'нё', "'", 'с'], ['пя', "'", 'ть'], ['ка', 'ро', "'", 'бо', 'к'], ['д', 'ля', "'"], ['на', 'же', "'", 'й'], [','], ['а'], ['?']].
Знаки, не влияющие на произношение фразы были убраны (к примеру, кавычки), но знаки препинания, такие как запятая, восклицательный знак, вопросительный знак, были выделены в отдельные ячейки, так как они влияют на интонацию и на паузу между словами.
2.4 Методы получения синтезированной речи
2.4.1 Поиск подходящих фонем
На сервере, на котором расположен синтезатор речи, лежат wav-файлы, содержащие записанные отрезки речи. Каждый отрезок - это одна из всевозможных комбинаций пар букв и отдельные буквы, воспроизводящие различные звуки. Таким образом на сервере записаны следующие звуки:
· Безударные и ударные звуки, обозначаемые парой букв, где первая буква гласная, а вторая - согласная (прим. “ав”);
· Безударные и ударные звуки, обозначаемые парой букв, где первая буква согласная, а вторая - гласная (прим. “ва”);
· Безударные и ударные одиночные гласные (прим. “а”);
· Мягкие и твердые звуки одиночных согласных (прим. “ль”);
· Звуки, составляющие исключения. К примеру, из слова “солнце”, записан звук, обозначаемый буквами “лн”.
По полученным слогам из предыдущего этапа обработки входящего текста подбираются соответствующие звуки. Для слова “привет”, которое на данном этапе в программе выглядит, как ['п', 'ри', 'ве', "'", 'т'] подбирается твердый звук “п”, безударный звук пары букв “ри”, ударный звук пары букв “ве” и твердый звук “т” [2].
2.4.2 Склейка подобранных фонем в слово
Синтезированные слова получаются в результате склейки одной фонемы с другой, получение которых описано в пунктах выше. Для того, чтобы получить равномерное по звучанию слово, места склейки необходимо сгладить. Для этого используется алгоритм интерполяции звуковых сигналов.
Интерполяцией называют увеличение частоты дискретизации сигнала в N раз путём вычисления промежуточных отсчетов по уже имеющимся. Она работает с дискретным набором известных значений, которым в случае работы с звуковым сигналом, является набор сэмплов. Сэмплом называется последовательность бит, описывающая акустическую волну в момент времени. Интерполяция позволяет восстановить значения сигнала в промежуточных отсчётах. Таким образом выравниваются резкие переходы между двумя фонемами, и они станут звучать как единое целое, согласно тому, как люди воспроизводят речь [3, 5].
2.4.3 Склейка слов в предложение
Помимо склейки фонем в одно слово, необходимо также собрать всю фразу целиком, если на вход синтезатору пришло более, чем одно слово. Для этого между словами выдерживается пауза, которая зависит от знаков препинания. Если между словами знаков препинания нет, то пауза будет непродолжительная, если же между словами стоит запятая, двоеточие или точка с запятой, то пауза будет немного дольше, чтобы сохранить смысл предложения и сделать его более понятным на слух.
Знаки эмоциональной окраски, такие как вопросительный и восклицательный знак также влияют на то, как будет звучать синтезированное предложение. К примеру, в вопросительном предложении, которое начинается с одного из вопросительных слов “как”, “когда”, “где” и тому подобных, громче выговаривается начальная часть предложения, потому что акцент идет на нее. Поэтому после склейки всех фонем на полученное предложение будет наложен небольшой эффект fade out - это эффект, когда начало предложения озвучивается немного громче, чем его конец. Благодаря такому эффекту, синтезированная речь будет немного эмоциональнее [4].
Выводы по главе
В настоящей главе была рассмотрена архитектура разрабатываемого приложения, описан стек используемых технологий, были описаны основные способы и методы, использующиеся для синтеза речи, был подробно разобран процесс подготовки входящего текста к озвучиванию. В следующей главе будут рассмотрены особенности реализации и получившиеся практические результаты.
Глава 3. Методы реализации и практические результаты
3.1 Функциональные требования
3.1.1 Функциональные требования пользовательского интерфейса
Интерфейс пользователя представлен в виде одностраничного приложения, написанного на React.js и TypeScript, и предназначен для того, чтобы пользователь имел возможность прослушать синтезированную речь по его текстовому запросу.
Интерфейс пользователя (фронтенд) должен обеспечивать возможность выполнения нижеперечисленных функций:
1) Пользователь должен иметь возможность ввести желаемый текст на русском языке в специальное окно для ввода.
2) Пользователь должен иметь возможность отправить текст на обработку, нажав на соответствующую кнопку.
3) Пользователь должен иметь возможность прослушать полученную синтезированную речь.
4) Пользователь должен видеть все полученные ранее аудиозаписи в нижней части страницы и должен иметь возможность их прослушать. Список аудиозаписей должен сохраняться до перезагрузки страницы.
5) Пользователь должен иметь возможность перейти на страницу с описанием используемого API, размещенную на хостинге IT-проектов - github.com.
6) В случае недоступности сервиса по синтезу речи, либо других ошибках, при отправке пользователем запроса на озвучку текста, должно появляться уведомление о недоступности системы.
3.1.2 Функциональные требования сервиса, реализующего открытый API
Сервис, реализующий открытый API (бэкенд), представлен в виде Java Spring приложения и отвечает за маршрутизацию запросов к пользовательскому интерфейсу и сервису, ответственному за синтез речи. Данный сервис обрабатывает данные, полученные от синтезатора речи и перенаправляет их по запросу. Обработка различных ошибок, таких как разрыв соединения, ошибка в создании аудиозаписи и других, также происходит в этом модуле.
Бэкенд должен обеспечивать возможность выполнения нижеперечисленных функций:
1) Веб-интерфейс, разрабатываемый в рамках данной работы, либо стороннее приложение должно иметь возможность обращаться к интерфейсу API, поддерживаемому данным сервисом.
2) Бэкенд должен валидировать входящий запрос на количество передаваемых символов в строке, предназначенной для синтеза речи. В случае нулевого количества символов сервис должен возвращать сообщение об ошибке. Если запрос валиден, то бэкенд должен иметь возможность вызывать сервис по синтезу речи по каждому валидному входящему запросу и возвращать от него ответ.
3) В случае недоступности сервиса по синтезу речи, либо любых других ошибках, бэкенд должен возвращать сообщение об ошибке при отправке запроса на озвучку текста.
4) В API устанавливается таймаут в 30 секунд на каждый запрос, по истечении которых будет возвращаться сообщение об ошибке.
3.1.3 Функциональные требования синтезатора речи
Сервис, представляющий синтезатор речи, отвечает за непосредственное создание аудиозаписей, содержащих озвучку входящего текста. Данный сервис реализован на Python и имеет свой API, но все взаимодействие с синтезатором речи происходит только через Java бэкенд.
Синтезатор речи должен обеспечивать возможность выполнения нижеперечисленных функций:
1) Java бэкенд должен иметь возможность обращаться к интерфейсу API, поддерживаемому данным сервисом.
2) Синтезатор речи должен обработать входящий по запросу текст и создать по нему аудиофайл, который будет храниться в физической памяти сервера. Если не возникло ошибок в создании аудиофайла, то в качестве ответа на запрос, синтезатор речи должен возвращать поток байт с указанием http-заголовка, представляющий аудиозапись, иначе синтезатор речи должен вернуть сообщение об ошибке и соответствующий http-заголовок.
3) В случае неуспешного создания аудиофайла или другой непредвиденной ошибки, сервис должен возвращать сообщение об ошибке.
3.2 Описание клиентской части
Клиентская часть является одностраничным приложением, написанным с помощью библиотеки React.js и надмножества над JavaScript - TypeScript.
3.2.1 Структура проекта
Структура проекта фронтенда представлена ниже (рис. 2).
Рисунок 2 Структура проекта фронтенда
3.2.2 Диаграмма классов проекта
Диаграмма классов проекта фронтенда представлена ниже (рис. 3).
Рисунок 3 Диаграмма классов фронтенда
3.2.3 Принцип работы приложения
При обращении к доменному имени сервер отдает веб-приложение браузеру. Далее взаимодействие происходит в браузере.
Так как основной функционал, которым может воспользоваться пользователь - это отправка запроса на получение аудиозаписи с синтезированной речью, ниже приведен сценарий, выполняющийся веб-приложением, при нажатии пользователем на кнопку отправки.
1. Пользователь вводит текст на русском языке в поле для ввода.
2. Пользователь нажимает на кнопку.
3. Компонент, с которым взаимодействует пользователь (форма), вызывает соответствующий обработчик событий (event listener).
4. Обработчик событий формирует синхронный POST-запрос, содержащий в теле запроса текст, введенный пользователем, к API бэкенда и ожидает ответа.
a. Если запрос будет успешным, то в качестве ответа вернется массив байт с заголовком, обозначающими формат аудиозаписи. В таком случае приложение завернет все входящие данные в объект BLOB (Binary Large OBject), предназначенный для управления двоичными объектами большого размера, и отобразит аудиозапись для пользователя [13].
b. Если запрос будет неуспешным, то в качестве ответа вернется объект в формате JSON. В таком случае веб-приложение отобразит для пользователя сообщение об ошибке.
3.2.4 Сборка и разворачивание проекта
Для того, чтобы установить все зависимости проекта, прописанные в файле package.json, необходимо через интерфейс командной строки перейти в папку проекта и выполнить npm install. Данная команда установит все прописанные зависимости. Далее проект можно развернуть локально - команда npm start, чтобы иметь возможность отладить работу, а можно сбилдить проект командой npm build и отправить полученную папку build сразу на сервер для того, чтобы приложение можно было развернуть.
В качестве облачной платформы, на которой разворачивается данное приложение, выбрана SAP Cloud Platform - она позволяет без проблем развернуть JavaScript приложение на своих ресурсах и предоставляет решение, которое позволяет динамически, без изменения кода менять API потребляемого сервиса. Для того, чтобы загрузить приложение на платформу, необходимо добавить проект в встроенную среду разработки (Web IDE, рис. 4) и задеплоить его для общественного доступа (рис. 5).
Подобные документы
Общая характеристика и функциональное назначение проектируемого программного обеспечения, требования к нему. Разработка и описание интерфейса клиентской и серверной части. Описание алгоритма и программной реализации приложения. Схема базы данных.
курсовая работа [35,4 K], добавлен 12.05.2013Характеристика программной системы автоматизации МЧС по контролю рыбаков дрейфующих на льдинах. Выбор инструментальных средств разработки системы, технологии ее реализации. Проектирование архитектуры системы. Анализ серверной и клиентской части системы.
курсовая работа [1014,5 K], добавлен 28.08.2012Появление поисковых систем. Применение семантических сетей для анализа текста. Определение релевантности, ранжирование и индексация. Особенности программы Balabolka. Системы анализа речи. Современные особенности поиска. Развитие сервисов поисковых систем.
реферат [3,2 M], добавлен 22.04.2015Особенности работы с SQL-базами данных. Установка и настройка локального сервера СУБД Interbase. Создание приложения "Торговая фирма", состоящее из серверной части и клиентской. Разработка спецификаций и описание интерфейса пользователя программы.
курсовая работа [634,5 K], добавлен 14.07.2012Разработка сетевой карточной игры "King" для операционной системы Windows XP. Реализация приложения с помощью интерфейса прикладного программирования Win32 API. Назначение серверной и клиентской части. Анализ исходных данных, тестирование приложения.
курсовая работа [209,3 K], добавлен 24.01.2016Реализация базы данных и серверной части информационной системы склада средствами СУБД Microsoft SQL Server. Анализ предметной области, информационных задач, пользовательской системы. Программа реализации проекта. Выработка требований и ограничений.
курсовая работа [2,4 M], добавлен 15.11.2015Строение артикуляционного аппарата человека с точки зрения возможности распознавания речи по артикуляции. Комплекс параметров артикуляции на основе контура внутренней области губ. Реализация модуля распознавания фонем русской речи по изображениям губ.
дипломная работа [3,1 M], добавлен 19.08.2012Сущность и возможности языка программирования Visual Basic. Элементы управления и функции Windows API, используемые в проекте. Структуры и составные части приложения "Video2Bmp". Организация режимов работы программы: "Склейка кадров", "Создание видео".
курсовая работа [1,0 M], добавлен 29.08.2013Принцип работы нейросетей и модели синтеза. Ключевые моменты проблемы распознавания речи. Система распознавания речи как самообучающаяся система. Описание системы: ввод звука, наложение первичных признаков на вход нейросети, модель и обучение нейросети.
курсовая работа [215,2 K], добавлен 19.10.2010Моделирование бизнес-процессов AS-IS и TO-BE. Построение логической и физической модели данных. Взаимодействие объектов и экранные формы к прецедентам. Диаграммы классов пользовательского интерфейса и компонентов клиентской и серверной части приложения.
курсовая работа [1,5 M], добавлен 19.12.2015