![Девушки кричат на кота на якутском](https://habrastorage.org/webt/4j/3w/zc/4j3wzclvudczuwyaztjcbn49t0a.jpeg)
Недавно мы закончили проект по синтезу якутского языка. Хотя наши договорённости не позволяют выложить нам модели в общий доступ, какими-то соображениями на тему того, как можно делать синтез якутского языка мы поделиться можем.
Под котом катом вы узнаете:
Как звучит синтез на якутском языке;
Чем отличается якутский алфавит от русского и какие "дополнительные" звуки там есть;
Как работать с ударениями на якутском языке, с учетом полного отсутствия каких-либо корпусов или словарей;
И, в качестве бонуса, как якутский синтез речи говорит на русском с якутским акцентом;
Фонетика якутского языка
Как звучит якутский язык?
Возможно вы никогда его не слышали (или не отдавали себе отчёт, что звучит именно якутский), но звучит он так:
Примеры синтеза на якутском языке
Это случайные фразы синтезированные на якутском. Если он для вас - родной, отпишите, пожалуйста, в комментариях.
Алфавит, дифтонги и длинные звуки
Начнём с простого, а именно с алфавита. Нам всем очень повезло, на самом деле. Ситуаций как со словами по типу 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](https://habrastorage.org/webt/op/lp/ma/oplpma3fyhbzyqmbyhtj2c_y7x8.jpeg)
![Английский мем 2](https://habrastorage.org/webt/xc/os/h7/xcosh77mhd3ml3epnx2qegcob0q.jpeg)
![Английский мем 3](https://habrastorage.org/webt/7y/mf/an/7ymfanyhfyj13kryzp_23ufj-nq.jpeg)
![Английский мем 4](https://habrastorage.org/webt/ug/fu/lo/ugfulobrabyp8n21lpnvmdlhq_e.jpeg)
В русском языке всё обстоит получше, но нужно знать ударение. Кроме редких примеров типа "солнце" или "дожди", если проставить ударение, чтение слова довольно однозначно.
Но как обстоят дела в якутском языке? Оказывается, что ударений как таковых в нём как будто бы нет. Мы задавали вопросы разным носителям языка и лингвистам, и не получили консенсуса. На Википедии на эту тему вообще написано что-то странное.
Естественно по причине того, что у языка мало носителей и из-за "простой" фонетики - мы не нашли публично доступных орфоэпических словарей или словарей с ударениями.
Но даже если ударения нет, нужно иметь систему, которая была бы совместима с русским языком, если например нужно будет вставить русское слово, не "адаптируя" его на якутский. А у русских слов нужно иметь возможность проставлять ударения.
По этой причине наш коллега, говорящий на якутском языке, сел отслушивать записи на якутском, и пришёл к выводу, что ударение несильное и падает или на все слоги сразу, или там где стоит дифтонг или двойная гласная.
Распарсив корпус слов, получившийся от анализа сайтов СМИ на якутском, мы смогли расставить "ударения" с помощью правил, чтобы они работали обратно совместимо с русским языком.
Моделирование
Так, отлично. Палатализация не очень ярко выражена, практически всё как слышится так и пишется, ударения можно не ставить, но мы лучше поставим.
По сути после записи корпусов речи на русском и якутском остается только ответить на ряд вопросов / гипотез, чтобы наконец определиться с дизайном системы синтеза речи:
Использовать графемы или фонемы? Тут выбор точно в пользу графем. У обоих языков письмо "фонетическое";
В экспериментах с фонемами у нас лучше работали модели, где палатализация выделена в отдельный символ. А в экспериментах с графемами лучше работало … когда мы просто подавали графемы "как есть". Получается тут тоже особо без вариантов;
Вопрос как подавать ударение по идее тоже не особо стоит - отдельным символом для обоих языков. Мы пробовали НЕ подавать ударения для якутского языка, но модель начинала "путаться". Если не подавать ударения в русский язык … ну можно не продолжать;
По сути остаётся только решить как подавать дифтонги и длинные гласные. Мы пробовали как выделять отдельные символы на них, так и наивный способ, огромной разницы не увидели. Значит действуем по пути сокращения сущностей;
Получается, что если грамотно решить вопрос с ударениями, то можно получить простую в использовании систему синтеза языка, которая будет сразу работать на двух языках и позволит также "говорить на русском с якутским акцентом" и наоборот.
Русская речь с якутским акцентом
В качестве бонуса вот несколько аудио русской синтезированной речи с "якутским акцентом".
Речь на русском с якутским акцентом:
Итоги
Тут триллера особо не получилось, мы просто аккуратно исследовали предметную область и сделали синтез речи на якутском, который работает одновременно и на русском языке. Несмотря на кажущуюся экзотику или сложность, на самом деле нам очень "повезло" с фонетическим алфавитом языка и тем, что один из нас говорит на якутском.
Также нужно ещё отметить, что вопреки популярным трендам в духе "закинуть все данные в сетку на сотни миллиардов параметров", наша модель работает даже на 1-4 потоках процессора локально и показывает очень бодрые показатели скорости.
Скорость модели:
В таблице указаны секунды сгенерированного аудио в секунду.
![Скорость модели](https://habrastorage.org/webt/od/zi/a8/odzia8p-f6hgcmbfpo14ehroera.jpeg)
Впереди нас ждёт ещё 8 языков, но там, к сожалению, так "просто" уже не будет ...
PS
Долго боролся с хостингом аудио, некоторые файлы он не принимает вообще никак. Поэтому если кого-то очень заинтересуют все файлы, вот ссылка на гугл-диск.
Комментарии (11)
einhorn
21.08.2024 03:18+1Впереди нас ждёт ещё 8 языков, но там, к сожалению, так "просто" уже не будет ...
Армянского там случайно не будет?
Я ищу модельку для озвучки армянского (с целью аудиоподкрепления при изучении языка), и в опенсорсе вообще ничего нет.snakers4 Автор
21.08.2024 03:18До армянского руки наверное дойдут только если какой-то заказчик этого сильно захочет, но он может также не захотеть, чтобы мы публиковали модель.
Вообще с армянским насколько понимаю основная проблема будет не только в отсутствии материалов, но и в древности их алфавита. Обычно чем древнее письмо, тем оно "менее логичное".
Зайцем проехать на фонетическом алфавите (который на 85% еще с русским совпадает) скорее всего не получится.
einhorn
21.08.2024 03:18+1Наоборот, получится.
Алфавит древний, но современная орфография еще более фонетическая, чем русская. Там только нужно запомнить, что диграф ու - это у; ե, ո и և в начале слова произносятся по-другому; ну и есть редкие исключения. Ударение слабое и всегда на последний слог. В общем, рабочий переводчик текста в список фонем пишется элементарно.
У меня была идея обучить легкую модель (список фонем -> аудио) для отдельных слов для одного языка [датасет можно с проприетарного TTS собрать, что не всегда легально, но для себя можно]. Я не очень знаю, как такие модели скейлятся, и сколько нужно компьюта.
snakers4 Автор
21.08.2024 03:18Там только нужно запомнить, что диграф ու - это у; ե, ո и և в начале слова произносятся по-другому; ну и есть редкие исключения. Ударение слабое и всегда на последний слог. В общем, рабочий переводчик текста в список фонем пишется элементарно.
Повезло армянам =)
A_kris7
21.08.2024 03:18+1Ничего не понимаю в синтезе речи, но написано интересно и понятно не только для тех, кто в теме. Спасибо большое за легкую подачу информации))
Правда, я бы не сказала, что по синтезу с акцентом сразу узнаю людей с основным языком - якутский. Слышала подобную речь от граждан ближнего зарубежья. Особенно мягкая г - зацепило когда-то.
Chamie
21.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 Автор
Ну потому что на практике зачастую не нужен только якутский язык, а нужно или говорить на двух языках попеременно, или вставлять русские слова в якутскую речь (и возможно наоборот).
Статьи на Хабре хороший пример - они обычно это смесь русского текста, терминов на латинице и русификации или перевода устоявшихся терминов.