
Недавно мы закончили проект по синтезу якутского языка. Хотя наши договорённости не позволяют выложить нам модели в общий доступ, какими-то соображениями на тему того, как можно делать синтез якутского языка мы поделиться можем.
Под котом катом вы узнаете:
- Как звучит синтез на якутском языке; 
- Чем отличается якутский алфавит от русского и какие "дополнительные" звуки там есть; 
- Как работать с ударениями на якутском языке, с учетом полного отсутствия каких-либо корпусов или словарей; 
- И, в качестве бонуса, как якутский синтез речи говорит на русском с якутским акцентом; 
Фонетика якутского языка
Как звучит якутский язык?
Возможно вы никогда его не слышали (или не отдавали себе отчёт, что звучит именно якутский), но звучит он так:
Примеры синтеза на якутском языке
Это случайные фразы синтезированные на якутском. Если он для вас - родной, отпишите, пожалуйста, в комментариях.
Алфавит, дифтонги и длинные звуки
Начнём с простого, а именно с алфавита. Нам всем очень повезло, на самом деле. Ситуаций как со словами по типу the / though / thought / Thomas / eighth / lighthouse ни в русском, ни в якутском нет.
В русском как слышится так и пишется с учётом ударения (да, я понимаю, это огромное допущение), а в якутском так же, но ударение мало влияет на произношение слова. И большая часть звуков нам известна. Нам также повезло, что алфавит унифицирован с кириллицей и письмо фонетическое (современный алфавит существует с 1939 года и с тех пор официально не подвергался правкам).
Якутский алфавит:
| Кириллица | IPA | Примечания | 
|---|---|---|
| А а | [a] | |
| Б б | [b] | |
| В в | [v] | Только в заимствованных словах | 
| Г г | [g] | |
| Ҕ ҕ | [ɣ], [ʁ] | "Г с крюком" (фрикативный "г") | 
| Д д | [d] | |
| Дь дь | [ɟ] | "Д с мягким знаком" (сверхмягкий "дь") | 
| Е е | [e], [je] | Только в заимствованных словах | 
| Ё ё | [jo] | Только в заимствованных словах | 
| Ж ж | [ʒ] | Только в заимствованных словах | 
| З з | [z] | Только в заимствованных словах | 
| И и | [i] | |
| Й й | [j], [j̃] | |
| К к | [k], [q] | |
| Л л | [l] | |
| М м | [m] | |
| Н н | [n] | |
| Ҥ ҥ | [ŋ] | Лигатура "нг" (заднеязычное "н") | 
| Нь нь | [ɲ] | "Н с мягким знаком" (сверхмягкое "н") | 
| О о | [o] | |
| Ө ө | [ø] | "О с перекладиной" | 
| П п | [p] | |
| Р р | [r] | |
| С с | [s] | |
| Һ һ | [h] | |
| Т т | [t] | |
| У у | [u] | |
| Ү ү | [y] | Прямая "у" | 
| Ф ф | [f] | Только в заимствованных словах | 
| Х х | [x] | |
| Ц ц | [ʦ] | Только в заимствованных словах | 
| Ч ч | [ʧ] | |
| Ш ш | [ʃ] | Только в заимствованных словах | 
| Щ щ | [ɕː] | Только в заимствованных словах | 
| Ъ ъ | . | Только в заимствованных словах | 
| Ы ы | [ɯ] | Заднеязычное, неогублённое "у" | 
| Ь ь | [ʲ] | Только в заимствованных словах | 
| Э э | [e] | |
| Ю ю | [ju] | Только в заимствованных словах | 
| Я я | [ja] | Только в заимствованных словах | 
Как мы видим, существенная часть алфавита вообще используется только в заимствованных словах (из русского языка в первую очередь), но также есть аж четыре разные группы "звуков", у которых нет аналогов в русском языке (ну или они совсем редкие или используются в заимствованных словах):
- дьи- ньхоть формально и не являются буквами, но обозначают звуки- ɟи- ŋ, аналогов которых в русском нет;
- Буквы - ҕ,- ҥ,- ө,- һ,- үобозначают звуки- ɣ,- ŋ,- ø,- h,- yи не имеют аналогов в русском языке;
- Дифтонги - ыа,- уо,- иэи- үө;
- Длинные звуки - аа,- оо,- ыы,- уу,- ии,- ээ,- үү,- өө;
Далее мы подробно пройдемся по каждому из звуков, приведём примеры его звучания и опишем понятными словами как он звучит и на что похож.
Также якутский на слух звучит немного "нараспев". Это происходит потому, что в якутском языке есть пять долгих гласных (аа, ыы, уу, ии, үү), встречающихся лишь в корне. Дифтонги, возникшие в результате соединения звуков, встречаются в любом слоге.
Употребление гласных звуков подчиняется правилу гармонии гласных, при котором гласные в слове следуют друг за другом в строго определённом порядке. Например, если в предыдущем слоге стоит звук ы, то в следующем может быть только ы или а, или ыа: ылыым, ылаар, ылыа.
Еще важно затронуть палатализацию ("смягчение" согласных перед гласными звуками). В русском языке она встречается повсеместно. В якутском палатализация перед гласными и, э, ө, ү, иэ, үө - присутствует не у всех согласных. У л, м, т, c - присутствует. По поводу н - спорно, ведь есть звук нь.
Дополнительные буквы и звуки
Опишем звуки, которых нет в русском языке:
- Сочетание букв - дьпередаёт звук- ɟ, который русскими буквами можно записать примерно как- дьй;
- Сочетание букв - ньпередаёт звук- ɲ, который похож- ньили- nʲ, однако- нь- альвеолярный звук (передняя часть языка соприкасается с альвеолярным отростком), а в палатальном носовом согласном- ɲсредняя часть языка соприкасается с твёрдым нёбом. Самый простой пример - тут английское слово- onionили любое испанское слово с буквой- ñ, например- señor;
- Звук - ɣ, передаваемый буквой- ҕ, читателю скорее известен как звук между- ги- хиз русских южных диалектов, или звук буквы- гв словах- господи,- ага,- Бог;
- Носовой звук - ŋпередаваемый буквой- ҥ, читателю скорее всего известен из английского языка в словах типа- thing, заканчивающихся на- -ing;
- Буква - өпередаёт звук- ø, который нам известен из "немецких слов с точками", например- schön, и звучит как нечто среднее между- ои- у;
- Буква - һпередаёт звук- h, который читателю известен как английское "легкое"- хна выдохе, например в слове- high;
- Буква - үпередаёт звук- y, который вы наверное все слышали миллион раз в слове- überв разных контекстах;
Послушать примеры слов с указанными звуками можно ниже:
Примеры новых звуков на якутском:
Дифтонги и длинные звуки
Фух, можно выдохнуть. По сути дифтонги это просто сочетания звуков, а долгие звуки это как будто два звука, идущих подряд. С этим связано ударение, но об этом чуть дальше.
Послушаем эти звуки.
Дифтонги и длинные звуки:
Ударения
Не секрет, что например на английском языке без перевода слов в фонемы в синтезе речи обойтись нельзя, потому что там пишется "понедельник, а читается четверг".
Мемы про английское прочтение слов:




В русском языке всё обстоит получше, но нужно знать ударение. Кроме редких примеров типа "солнце" или "дожди", если проставить ударение, чтение слова довольно однозначно.
Но как обстоят дела в якутском языке? Оказывается, что ударений как таковых в нём как будто бы нет. Мы задавали вопросы разным носителям языка и лингвистам, и не получили консенсуса. На Википедии на эту тему вообще написано что-то странное.
Естественно по причине того, что у языка мало носителей и из-за "простой" фонетики - мы не нашли публично доступных орфоэпических словарей или словарей с ударениями.
Но даже если ударения нет, нужно иметь систему, которая была бы совместима с русским языком, если например нужно будет вставить русское слово, не "адаптируя" его на якутский. А у русских слов нужно иметь возможность проставлять ударения.
По этой причине наш коллега, говорящий на якутском языке, сел отслушивать записи на якутском, и пришёл к выводу, что ударение несильное и падает или на все слоги сразу, или там где стоит дифтонг или двойная гласная.
Распарсив корпус слов, получившийся от анализа сайтов СМИ на якутском, мы смогли расставить "ударения" с помощью правил, чтобы они работали обратно совместимо с русским языком.
Моделирование
Так, отлично. Палатализация не очень ярко выражена, практически всё как слышится так и пишется, ударения можно не ставить, но мы лучше поставим.
По сути после записи корпусов речи на русском и якутском остается только ответить на ряд вопросов / гипотез, чтобы наконец определиться с дизайном системы синтеза речи:
- Использовать графемы или фонемы? Тут выбор точно в пользу графем. У обоих языков письмо "фонетическое"; 
- В экспериментах с фонемами у нас лучше работали модели, где палатализация выделена в отдельный символ. А в экспериментах с графемами лучше работало … когда мы просто подавали графемы "как есть". Получается тут тоже особо без вариантов; 
- Вопрос как подавать ударение по идее тоже не особо стоит - отдельным символом для обоих языков. Мы пробовали НЕ подавать ударения для якутского языка, но модель начинала "путаться". Если не подавать ударения в русский язык … ну можно не продолжать; 
- По сути остаётся только решить как подавать дифтонги и длинные гласные. Мы пробовали как выделять отдельные символы на них, так и наивный способ, огромной разницы не увидели. Значит действуем по пути сокращения сущностей; 
Получается, что если грамотно решить вопрос с ударениями, то можно получить простую в использовании систему синтеза языка, которая будет сразу работать на двух языках и позволит также "говорить на русском с якутским акцентом" и наоборот.
Русская речь с якутским акцентом
В качестве бонуса вот несколько аудио русской синтезированной речи с "якутским акцентом".
Речь на русском с якутским акцентом:
Итоги
Тут триллера особо не получилось, мы просто аккуратно исследовали предметную область и сделали синтез речи на якутском, который работает одновременно и на русском языке. Несмотря на кажущуюся экзотику или сложность, на самом деле нам очень "повезло" с фонетическим алфавитом языка и тем, что один из нас говорит на якутском.
Также нужно ещё отметить, что вопреки популярным трендам в духе "закинуть все данные в сетку на сотни миллиардов параметров", наша модель работает даже на 1-4 потоках процессора локально и показывает очень бодрые показатели скорости.
Скорость модели:
В таблице указаны секунды сгенерированного аудио в секунду.

Впереди нас ждёт ещё 8 языков, но там, к сожалению, так "просто" уже не будет ...
PS
Долго боролся с хостингом аудио, некоторые файлы он не принимает вообще никак. Поэтому если кого-то очень заинтересуют все файлы, вот ссылка на гугл-диск.
Комментарии (11)
 - einhorn21.08.2024 03:18+1- Впереди нас ждёт ещё 8 языков, но там, к сожалению, так "просто" уже не будет ... - Армянского там случайно не будет? 
 Я ищу модельку для озвучки армянского (с целью аудиоподкрепления при изучении языка), и в опенсорсе вообще ничего нет. - snakers4 Автор21.08.2024 03:18- До армянского руки наверное дойдут только если какой-то заказчик этого сильно захочет, но он может также не захотеть, чтобы мы публиковали модель. - Вообще с армянским насколько понимаю основная проблема будет не только в отсутствии материалов, но и в древности их алфавита. Обычно чем древнее письмо, тем оно "менее логичное". - Зайцем проехать на фонетическом алфавите (который на 85% еще с русским совпадает) скорее всего не получится.  - einhorn21.08.2024 03:18+1- Наоборот, получится. - Алфавит древний, но современная орфография еще более фонетическая, чем русская. Там только нужно запомнить, что диграф ու - это у; ե, ո и և в начале слова произносятся по-другому; ну и есть редкие исключения. Ударение слабое и всегда на последний слог. В общем, рабочий переводчик текста в список фонем пишется элементарно. - У меня была идея обучить легкую модель (список фонем -> аудио) для отдельных слов для одного языка [датасет можно с проприетарного TTS собрать, что не всегда легально, но для себя можно]. Я не очень знаю, как такие модели скейлятся, и сколько нужно компьюта.  - snakers4 Автор21.08.2024 03:18- Там только нужно запомнить, что диграф ու - это у; ե, ո и և в начале слова произносятся по-другому; ну и есть редкие исключения. Ударение слабое и всегда на последний слог. В общем, рабочий переводчик текста в список фонем пишется элементарно. - Повезло армянам =) 
 
 
 
 - A_kris721.08.2024 03:18+1- Ничего не понимаю в синтезе речи, но написано интересно и понятно не только для тех, кто в теме. Спасибо большое за легкую подачу информации)) - Правда, я бы не сказала, что по синтезу с акцентом сразу узнаю людей с основным языком - якутский. Слышала подобную речь от граждан ближнего зарубежья. Особенно мягкая г - зацепило когда-то. 
 - Chamie21.08.2024 03:18+3- Про имена и названия в английском целая песня есть, раз уж вы и их как пример взяли. - Скрытый текст- На всякий случай, поясню: в руках у господина бумажки с написанием произносимых в песне названий мест и фамилий. 
 
           
 
asantat
Молодцы, но есть несколько нюансов:
1) в Вашей статье нет валидации. Модель нужно валидировать на реальную речь. И примеры речи носителей были бы кстати.
2) почему Вы не использовали международное фонетическое письмо при описании алфавита?
3) все гласные группы "и" (i, ï, ü, u, в принятых для описания фонетики тюркских языков символах) в тюркских языках краткие вплоть до редукции. Исключений очень мало (литературный турецкий, гагаузский, в которых эти процессы выражены слабо).
4) в некоторых местах, например, в аффиксе инфинитива "арга" г должна быть ğ (то есть гамма на международном фонетическом алфавите, но у меня на раскладке в телефоне нет этого символа). Так во всех тюркских языках. И звук "ğ" обычно звучит более гортанно, это тоже нужно учитывать. Он не похож на украинское "г" и даже не полностью похож на греческую гамма (более шумный звук по сравнению с украинской "г").
5) в окружении палатальных и глоттализированных аффрикат фонема "а" обычно произносится в более задней позиции.
6) "ы" всегда звучит в более задней позиции (в русском этот звук средний и как бы с более широкой локализацией, а в тюркских языках он всегда задний). Исключение в тюркских языках - гагаузский, говоры крымского языка с румейским (византийским) субстратом, а также понтийские и лазский этнолекты турецкого языка и в некоторой степени современный литературный турецкий. В этих языках "ы" имеет в разной степени среднюю позицию, но в то же время узкую локализацию.
7) концепция ударения в русском языке отличается от таковой в большинстве индоевропейских языков. В русском языке ударение определяется и реализуется в первую очередь удлинением долготы. В других языках - напряжением гортани при произнесении звуков.
8) всё-таки лучше транслировать в фонетический алфавит, а затем синтезировать звук. Алфавит не в полной мере отражает фонетику, и это разные задачи. Лучше декомпозировать и затем отлавливать трудные случаи в каждом слое модели независимо.
snakers4 Автор
Спасибо за развернутый комментарий. Отвечу по порядку:
Реальная речь, сравнение синтеза и реальной речи - естественно были в процессе разработки. Просто юридически мы не имеем права выкладывать аудио дикторов в публичный доступ, т.к. у нас нет на это разрешения.
Что касается валидации именно в классическом ML-ном смысле, синтетические метрики приводить смысла мало вижу, большая часть детских проблем была давно побеждена через разные хаки и inductive bias-ы. По-хорошему надо бы конечно взять несколько десятков носителей якутского языка и попросить сделать двойной слепой тест … но мы делали когда-то это на русском, а тут с тех пор качество только выросло.
Анекдотически, носители языка каких-то сильных проблем с синтезом не заметили.
Так вроде IPA это же оно и есть.
До таких тонкостей мы не доходили, алгоритмы хвала бобрам сами умеют подсасывать такие вещи. За счёт этого (и общего словаря) кстати и работает "синтез с акцентом". Это бесполезно в 99% случаев, но забавно. Тот факт, что акцент похож на настоящий, показывает, что допущения были выбраны правильно.
То есть это в некое "дополнение" к букве
ҕ? Тоже в раздел тонкостей. Про фонемы ниже отпишу.Ниже развернутый комментарий про фонемы. Общий комментарий тут такой - когда мы допустим, смотрели очень детальные и точные IPA-транскрипции для русского и английского языков, начиная с какого-то уровня точности это вызывало проблемы и шло против житейской логики.
Понятно, что чем "нажористее" inductive bias и чем чище данные на вход тем лучше, но когда реальные пользователи будут пользоваться, некоторыми тонкостями лучше пренебречь для простоты. С точки зрения пользователя оно должно "just work".
Тут основная проблема в том, что синтез на якутском неразрывно связан с синтезом на русском языке. То есть модель должна одновременно уметь и в русский и в якутский язык. И то, что нужно произносить русские слова "с акцентом" или адаптируя их - это тоже фича.
А в русском языке фонемы конечно не вредны, но на наших экспериментах качество связки `ударение + фонемы + синтез` примерно равно связке `ударение + графемы + синтез`. Плюс еще точность фонемайзера достигает интересных значений только тогда, когда ударение известно. Ну то есть в русском ударения "тащат" и, чтобы сделать фонемы из текста желательно знать ударение. С точки зрения житейской логики - если прочитать слова с разным ударением, фонемы там будут разные.
Отсюда получается, что с точки зрения моделирования, нам надо иметь обратную совместимость с русским языком. А отсюда вытекает всё остальное. А эксперимент, что якутский язык начинает "течь", если убрать "ударение", подтверждает, что это было сделано не зря.
В идеальном мире да, но на практике в этом случае - нет.
На русском можно найти бесконечное число разной степени точности и детальности фонетических словарей, сделать ударения и фонемайзер с заданной точностью. На якутском этого всего нет, то есть надо будет написать свой фонемайзер на правилах. А он скорее всего не учтёт например тонкости, описанные выше. А носители языка нам скорее всего тут особо не помогут, т.к. они просто говорят не задумываясь. Отсюда получаем замедление релиза на порядок, т.к. надо будет найти носителей языка, которые одновременно и лингвисты. А поскольку письмо фонетические и не менялось с 1939 наверное оно всё-таки адекватное (вроде хотели что-то поменять недавно, но отказались). В общем не инглиш с его адом и отсутствием рефакторинга.
Еще момент. При использовании на практике с высокой вероятностью возникнут имена собственные. Причем возможна дикая смесь двух языков - адаптированные слова, слова "как бы на русском", смесь этого всего, игра слов. А здесь возможность использовать графемы - наверное всё-таки жирный плюс (при желании тег языка можно на каждое слово отдельно прокидывать, если очень захотеть).
Просто представьте себе пользователей, которым надо или гореть с ошибок фонемайзера на новых терминах, или использовать IPA, они скорее всего вскроются. А сделать отличный фонемайзер тут - ни разу не просто.
asantat
Нет, я писал именно об этой букве. Во всех тюркских языках, которые я слышал и в которых используется аффикс "-арга" для обозначения инфинитива, он произносится как [arγá].
В работах, которые я встречал, использовались другие обозначения для гласных. Предполагаю, что это просто видение у разных авторов отличается.
Я думаю, что не нужен отличный. Он должен быть настроен на фонетическую систему языка. Учесть эти правила несложно. А качество возрастет. IMHO, нельзя давать на откуп black box то, что можно контролировать с помощью небольшого набора правил.
Можно взять аудиозапись из публичного доступа, и синтезировать этот же фрагмент речи. А можно попросить волонтеров озвучить абзац из Википедии на якутском, и его же озвучить с помощью модели. Такого сравнения очень не хватало.
Люди обычно говорят, не задумываясь. Но когда слышат неправильное произношение, сразу начинают чувсвовать, что что-то тут не то. И в итоге обращают внимание на некоторые из тех нюансо, о которых они не задумывались.
Вами проделана огромная работа. Спасибо, что объяснили Ваши взгляды на разработку модели. Я с Вами согласен отчасти, некоторые вещи не пойму (как, например, зачем в модели синтеза речи на якутском языке настолько качественно реализовывать синтез реи на русском), с некоторыми вещами несогласен. Но уверен, что вы сделали взвешенный и адекватный выбор при поиске подхода. Желаю Вам удачи в развитии вашего проекта.
snakers4 Автор
Ну потому что на практике зачастую не нужен только якутский язык, а нужно или говорить на двух языках попеременно, или вставлять русские слова в якутскую речь (и возможно наоборот).
Статьи на Хабре хороший пример - они обычно это смесь русского текста, терминов на латинице и русификации или перевода устоявшихся терминов.