Как слепой разработчик в одиночку создала синтезатор речи
Мы все, так или иначе, сталкивались с пользователями, имеющими проблемы зрения. Отвечающие за UI, не важно сайта, мобильного приложения или любого другого софта, скорее всего, знают про необходимость учитывать потребности таких людей и поэтому делали режимы повышенной контрастности, увеличенные шрифты и так далее.
А что, если пользователь совсем слепой и все эти режимы никак не упрощают его жизнь? Здесь на арену выходят программы для чтения экрана и синтезаторы звука, без которых им не обойтись. И вот про один из них я бы хотел вам сегодня рассказать.
Называется от RhVoice и упоминался в нескольких публикациях на Хабре. Но знаете-ли вы, что многие считают его лучшим бесплатным синтезатором русской (и не только) речи, а написан он в одиночку полностью слепым разработчиком — Ольгой Яковлевой?
Сегодня восстанавливаем историческую справедливость и немного узнаем про сам синтезатор вообще, и Ольгу в частности.
Сразу раскроем все карты: гитхаб синтезатора
Код синтезатора распространяется бесплатно по GPL, а значит его может встроить в свой продукт любой желающий. Доступен на трех платформах: Windows, Linux и Android. Ведет разработку Ольга одна и работает в Linux. Лучшим (из опенсорсных) синтезатором русской речи, его считают сами пользователи и это не только люди с плохим зрением. В своей работе синтезатор использует статистический параметрический синтез и был основан на наработках уже существующих проектов, таких как HTS, и опубликованных научных исследованиях. Это гибридная глубокая нейронная сеть, работающая со скрытой марковской моделью. Задача таких сетей, это разгадка неизвестных параметров на основе наблюдаемых. Можно считать, что это простейшая Байесовская сеть. Сам HTS был основан на наработках другого проекта — HTK. Но нас тут больше всего интересует, что часть наработок была опубликована для свободного использования, включая описание алгоритмов и примененных техник.
Сам синтезатор позиционируется как средство для ежедневной работы. Его можно использовать и в более творческих целях вроде озвучивания книг, но все же лучше, когда их озвучивают люди.
Ольга начала свой проект почти 10 лет назад, когда стала изучать Linux и не нашла там удобного для себя синтезатора. Пишет весь код она сама, используя для этого специальный Брайлевский дисплей. Это специальное устройство предназначенное для отображения текстовой информации в виде шести точечных символов азбуки Брайля. Также в работе использует JAWS, программу для чтения с экрана, которая ведет свою историю со времен DOS и тоже созданную при активном участии слепого.
А теперь, когда вводные даны, давайте немного углубимся в мир синтезаторов речи.
Что же такое синтезатор речи и что в него входит?
Традиционно принято считать, что любой синтезатор состоит из двух частей: языковой компонент и компонент генерации речевого сигнала. Языковой компонент анализирует текст, получаемый от чтеца экрана. Его задача разбить текст на предложения, предложения на фразы, слова и слоги. В конце строится транскрипция всех слов и по ней создается карта звуков (как всем известно, не всегда как пишется, так и говорится). Разбор этот можно делать с разной глубиной проработки. У RhVoice, например, нет ресурсов для сложных операций вроде определения роли в предложении или части речи. Но в любом случае в конце разбора у нас получается набор звуков, которые должен собрать компонент генерации речевого сигнала, используя базу пред записанных звуков. Немного позже мы подробнее остановимся на каждом из компонентов.
Демонстрация работы с синтезатором
История Ольги
Ольга живет в Чебоксарах, закончила математический факультет Чувашского государственного университета и работает программистом. Как и все незрячие люди, она училась в специализированных школах. Сначала были 6 классов в школе Нижнего Новгорода, потому что на тот момент в Чебоксарах не было мест, куда бы принимали полностью слепых детей. Но спустя шесть лет все же получилось вернуться в родной город, и доучилась Ольга уже в Чебоксарах. Там же в школе, Ольга полюбила математику, что в дальнейшем позволило ей поступить на математический факультет. В какой-то момент она думала о поступлении на ИВТ, но тут свою роль сыграла неуверенность в собственных силах. Да и среди выпускников математического факультета было несколько незрячих, а на вступительном собеседовании декан сказал, что у них программистов готовят даже лучше, чем на ИВТ.
Первый опыт работы с компьютерами Ольга получила не в школе, а в университете, в библиотеку которого закупили специальные компьютеры, оборудованные для использования слепыми, с установленной программой JAWS (программа для чтения с экрана, ведущая свою историю аж с 1989 года). Там она изучала знаменитый учебник по Windows 95 от Сары Морли. Скорее всего, вы сейчас удивитесь, ибо что за такой знаменитый учебник, про который вы и не слышали ни разу? Ответ кроется в его названии: «Windows 95 для незрячих и слабовидящих». Основное отличие подобных учебников от знакомых всем нам, это акцент на описании различных объектов и вариантах управления ими. Так как незрячему человеку инструкция вида «щелкните мышкой на ниспадающий список и выберите нужный пункт меню» несколько бесполезна. Они не видят ни экран, ни курсор мышки и даже больше — не знает, как выглядит окно и ниспадающий список. Кстати, из-за этого возникает еще один неочевидный нюанс — незрячие люди могут оказаться заложниками битности используемого синтезатора. Так, лет пять назад, при переходе на Windows 8 многие столкнулись с отсутствием поддержки 64 bit приложений со стороны синтезаторов речи и перешли на RhVoice, где эта поддержка уже была реализована.
Но вернемся во времена, когда Ольга только начинала изучение новой для себя области. Синтезатором речи тогда выступала программа Digalo с голосом Nikolay. Это настолько каноничная связка, что результаты ее работы слышал абсолютно любой человек, выходивший в сеть. Его голос можно считать синонимом термина «робовойс», настолько плотно он вошел в интернет культуру и был использован в бесконечном количестве видео на ютубе. Вероятно, поэтому абсолютное большинств уверено, что Дигало это фамилия Николая.
Digalo Nikolay во всей красе
Начало работы над собственным проектом
Путешествие в мир синтезаторов началось для Ольги примерно в 2010 году с разработки драйвера NVDA (NonVisual Desktop Access) для синтезатора Festival. NVDA, это бесплатная программа экранного доступа, позволяющая слабовидящим и незрячим полноценно работать с компьютером. Подобный класс программ включает в себя синтезатор речи и возможность вывода на брайлевский дисплей.
Благодаря Festival Ольга погрузилась в мир синтезаторов речи и открыла для себя, что возможность заставить компьютер говорить есть не только у коммерческих компаний, но и у любого желающего. На тот момент уже существовало несколько открытых синтезаторов речи, которые, в основном, распространялись учеными изучавшими технологии речевого синтеза.
Поэтому первые свои эксперименты на основе трудов более опытных коллег, Ольга делала вокруг все того же Festival. Это академический синтезатор речи, созданный в 1995 году группой ученых во главе с Аланом Блэком. Они разрабатывали методы синтеза и на основе своих исследований сделали собственный синтезатор, который изначально был просто демонстрацией результатов их работы. Со временем к нему добавился не менее важный проект FestVox, позволяющие генерировать новые искусственные голоса, а сверху это было приправлено довольно неплохой документацией. В то время в Festival уже был русский голос Alexander с довольно неплохой речевой базой.
Что такое речевая база: в случае RhVoice это более тысячи специальных предложений, начитанных диктором с четким и безэмоциональным произношением. Предложения эти должны быть подобраны таким образом, чтобы в них содержались все дифоны, то есть все комбинации из двух фонем. И хорошо бы, чтобы по несколько раз каждая для большей вариативности. По воспоминаниям в первых версиях использовалось около 600 фраз. В дальнейшем, синтезатор из этих фонем может сформировать любое слово. По-английски этот метод называется unit selection, а у нас он известен как метод выбора речевых единиц. Да, не самый модный и молодежный, однако работающий надежно как утюг. Каждое предложение заносится в базу и анализируется: определяются звуки, их позиции в слогах, в словах, в предложениях. Классифицируются отдельные фонемы, их расположение относительно друг друга и так далее. Во время обратной операции, то есть синтеза речи, для каждой фонемы, полученной из транскрипции, вы просто выбираете наиболее подходящий (читай: близкий) пример из базы. Иногда удается найти строгое соответствие, иногда приходится довольствоваться максимально похожим. В мире филологов это называется теоретической и практической фонетикой и придумано было далеко не вчера. Поэтому заниматься синтезаторами речи без чтения учебников по фонетике нельзя. К слову, особенно хорошие учебники выходили в свое время у МГУ.
А где брать эти предложения? Можно написать самому, но это довольно тяжелая затея и есть два альтернативных пути. Можно взять заранее написанный кем-то текст, но это может нарушить авторские права или стоить отдельных денег. Поэтому авторы некоторых голосов используют тексты с википедии. Для больших языков вроде английского или русского, там можно легко найти необходимые примеры. Небольшим языкам в этом смысле не повезло. Например, с белорусской википедией такой трюк не прошел.
А в чем разница между языком и голосом? Ведь лет семь назад еще не было ни украинского, ни татарского диктора. Как же они появляются в синтезаторах?
Голоса в синтезаторах речи
Начинается все с анализа языка, который заключается в создании базы данных, где формально описывается фонетическая система этого языка. Такие базы могут быть уже сделаны кем-то и продаваться на рынке (за весьма хорошие деньги). В противном же случае приходится заниматься этим самостоятельно. Для анализа каждого языка разрабатывается отдельная программа и это может занимать до полутора лет работы, в зависимости от сложности языка. Например, итальянский язык очень прост, с точки зрения синтеза речи, а такие языки, как арабский и китайский крайне сложны. Но в среднем анализатор языка создается за год. После его готовности пишется уже голос. На это уходит уже около трех месяцев. Непосредственно запись самого диктора и прочая работа в студии занимает две-три недели. Это связано с тем, что качественно и красиво диктор может говорить примерно четыре часа в день. Дальше он устает и уже не звучит достаточно чисто. Если вы думаете, что это пижонство, то нет — к качеству этих записей предъявляются очень серьезные требования. Коммерческие компании проводят целые кастинги, отбирая не только по субъективной красоте голоса, но и по возможности использовать конкретный голос для конкретного языка в своем синтезаторе.
Затем запись сегментируется на фрагменты, согласно базе данных, а затем с помощью анализатора языка, эти фрагменты комбинируются вместе. То есть делается разбор, что вот это существительное, это глагол, это стоит рядом с этим, значит должно звучать вот так и подставляется максимально близкая фонема. Так что роль анализатора чрезвычайно важна: он должен учитывать не только расположение слогов в слове, но и расположение слов в предложении и знаки препинания. Все это влияет на произношение. В некоторых языках, одно и то же слово может произноситься по-разному, в зависимости от того что это — существительное или глагол.
Но это больше путь для коммерческих продуктов, у создателей которых есть ресурсы для подобных углубленных исследований. Независимые разработчики используют варианты попроще: без полной классификации по частям речи, а, например, только на уровне самостоятельное слово/предлог/союз и т.д. Ольга пошла еще более своим путем и написала свой языковой модуль на основе учебников и статей по фонетике. Благо есть достаточное количество опубликованных исследований на эту тему.
А вы не замечали, что у большинства синтезаторов сначала появляются женские голоса? Это не из-за предпочтений авторов, а из-за сложности разработки именно женского голоса. Женский голос более высокий по своей природе, а высокие частоты обрабатывать сложнее, чем низкие. И если удается создать женский голос, то мужской уж точно получится. А вот наоборот, не факт.
Мотивация к созданию своего синтезатора речи
В случае Ольги, это личная увлеченность темой и, даже, необходимость. А что в случае с коммерческими разработками? Как они решают, какой язык добавить, а какой нет? Ответ на все, деньги. Первый, очевидный, вариант, это анализ возможного рынка сбыта для новых голосов. Если по-простому: каков экономический уровень страны и есть ли у ее жителей деньги для покупки их продукта. Второй стимул уже более интересный. Это желание правительственных, или иных организаций, создать синтез речи для данного языка. Поэтому были сделаны синтезаторы речи для очень небольших языков, просто потому, что кто-то этим озаботился и выделил деньги на разработку. А, например, в скандинавских странах есть законы, что все письменные документы должны быть доступны незрячим и слабовидящим. Поэтому любая выходящая газета должна иметь свою аудиоверсию.
И для понимания порядка цен: разработка нового голоса, у частных компаний стоит примерно от десяти до сорока тысяч евро, в зависимости от сложности языка. Разработка модуля анализатора стоит в разы больше. Касательно RhVoice, тут у Ольги позиция принципиальная — ее проект будет бесплатным всегда. Тогда откуда тогда берутся деньги на дикторов? На начальных этапах находились добровольцы, предложившие помощь. У них была своя студия и они предложили оплатить диктора, так что Ольге оставалось только прислать список предложений для озвучания. Так в RhVoice появилось несколько новых языков. Потом к ней уже стали обращаться с конкретными запросами.
Но судьба дальнейшей разработки зависит от нахождения в свободном доступе необходимых ресурсов. Например, для украинского языка раньше не было открытого словаря ударений, а построить синтезатор не зная, как расставляются ударения невозможно. Сейчас он уже добавлен, но работа была проведена большая. Русскому языку в смысле доступности материалов повезло намного больше. А каноничный голос «Александр», так и вовсе был выложен в открытый доступ его создателем, благодаря чему Ольга смогла начать свои первые эксперименты по созданию синтезатора речи.
А как можно создать синтезатор, если ты совсем не знаешь язык? Условно ты знаешь русский и английский, а просят разработать арабский? Технических ограничений нет, главное, найти в интернете какие-то статьи и материалы о языке, о его структурах или даже проконсультироваться с филологом. Этого может хватить для разработки первоначального синтезатора речи. Ведь по большому счету, объем стартовой информации стандартен: список фонем, правила транскрипции от буквенного представления к произношению, детали о вспомогательных частях речи и т.д. Главная проблема будет в том, что разработчику никак не проверить результаты своей работы без участия носителя языка. А носителю языка надо дать не просто отзыв понятно/непонятно говорит, но и объяснить все тонкости и нюансы мест, где что-то пошло не по плану. В случае с RhVoice таким сложным языком стал татарский. С ним Ольге очень помогли филологи, с которыми ее связали представители Казанской библиотеки для слепых и слабовидящих, которые и инициировали эти работы. В ходе работы над синтезатором был даже составлен отдельный словарь корректного произношения заимствованных из русского языка слов. Чтобы заимствования звучали именно по правилам татарского языка, я не русского. И это хорошо, что такой словарь был составлен профессиональными филологами. Вот, например, для Киргизского такой словарь отсутствует и там очень много проблемных мест, пути разрешения которых пока не найдены просто технически.
Отдельная проблема — это расстановка ударений. В некоторых языках местоположение ударения можно предсказать, но в тех же русском и украинском без словаря никак не обойтись. Причем существуют алгоритмы предсказания ударений, на основе этих словарей. Но сделать такое, не обладая базовым словарем, невозможно.
Что в будущем? Вернее — каких новых функций, или доработки имеющихся, чаще всего просят пользователи? Безусловный лидер здесь это запрос на добавление того, или иного языка. Работа над новыми языками ведется, но как было сказано выше, это все не очень быстро и зависит от помощи внешних специалистов. А также многие просят улучшить качество звучания, чтобы еще больше приблизить его к естественному. Однако с доступным Ольге инструментарием, каких-то драматических улучшений здесь не будет. Правда от версии к версии, изменения в звук все же вносятся.
Сейчас Ольга надеется, что появятся готовые компоненты для нейронных сетей, написанные на низкоуровневых языках С-подобных языках, которые смогут обеспечить достаточное быстродействие на мобильных устройствах. А если заведется на мобилках, значит и на остальных платформах будет работать. Подобные проекты уже разрабатываются, и тогда она сможет переработать свой синтезатор. Другая важная проблема, которую предстоит решить — в RhVoice нет простого и понятного способа добавить свой язык и голос. Есть люди, которые готовы оплачивать эту работу, но проблема el classico: запросов много, Ольга одна, а как и в большинстве for fun проектов, кодовая база представляет собой настолько волшебный лес, что разобраться в ней кому-то, кроме создателя, задача гиблая. В большинстве подобных проектов разработчики предоставляют желающим набор инструментов и документацию, по которой, зная фонетику языка и обладая остальными знаниями, можно создавать свой модуль языка. Пока у Ольги нет ни того, ни другого. Но есть планы это сделать.
В завершении хочется сказать, что вот так, благодаря одному увлеченному человеку много лет делается очень хорошее дело. Больше вам спасибо, Ольга.