Моделі text-to-speech для синтезу української мови: як працюють, хто їх створює та де знайти

Всім привіт, мене звати Юрій Панів, Software Engineer, у вільний час працюю над своїм стартапом Rakourse для створення фільмів з книжок. Також працюю над open source бібліотеками і моделями для україномовного синтезу мовлення, зокрема зробив модель під ліцензією GPL v3. Онлайн-демо, як працює модель, можна переглянути тут.

У цій статті хочу розповісти спільноті про те, який стан справ із синтезом української мови зараз, а також планую залучити якомога більше людей для покращення напрацювань. Якщо після прочитання статті вам захочеться долучитися до роботи над цим, пишіть мені.

Також у статті є посилання на датасети, де можна послухати більш чи менш вдалі моделі синтезу мови.

Як я почав займатись синтезом української

Я зіткнувся з проблемою наявності програм для синтезу у кінці 2019-го, коли почав працювати над своїм стартапом для автоматичного дубляжу фільмів голосами акторів оригіналу.

Тоді я шукав якісь інструменти, якими можна було б озвучити фільми двоголосим (чоловічим і жіночим) закадровим дубляжем (у дусі того, як на телебаченні озвучують дешеві фільми).

З опцій для синтезу більшість були або платні, або тільки під Windows. Єдиною можливістю, яку я знайшов, було використання Google TTS голосу, але у нього було декілька обмежень:

  1. роботичне звучання, не схоже на справжню мову;
  2. не можна проставити наголос, який легко «гуляє» в українській;
  3. тільки жіночий голос.

Тоді я вирішив дивитись у сторону створення та подальшого тренування своєї моделі для синтезу. Так я натрапив на проєкт від Mozilla TTS (тепер Coqui TTS) — це фреймворк для text-to-speech моделей, який надає набір функцій для обробки аудіо і тренування власних моделей для синтезу.

Прогрес дуже вповільнила пандемія коронавірусу, а саме: брак GPU, через що трейнінг був на CPU (боляче) або Colab, і спроби подружити тренінг на GPU + AMD відеокарту + PyTorch (боляче, і дізнаєшся багато цікавого про deep learning на не-CUDA платформах), тому великого прогресу не було.

Перший та наступні датасети

Перший датасет, який я використав для тренування — був M-AILABS. Це багатомовний датасет, який містить записи аудіокнижок у виконанні професійних дикторів різними мовами. Записи зроблені на частоті 16 Кгц. Перші спроби не вдались, оскільки датасет був порізаний нерівномірно (деякі букви обрізані), диктор читає не ті слова, які написано, записи шумні, наголоси зроблені не за словниковими правилами, через що модель була низької якості.

З досвіду запису датасету для моделі одного з «голосів», Дмитра Чаплинського: «Для якісного синтезу потрібно не стільки багато семплів, скільки увага і задротство під час запису аудіо :)». Приклади цього синтезу можна послухати тут.

Потім, завдяки чистці та роботі над якістю датасету, у наступному релізі вдалось зробити якість більш прийнятною, але все-таки проблема з датасетом залишалась.

Власне після багатьох більш і менш вдалих спроб Єгор Смоляков, засновник українського ком’юніті з розпізнавання та синтезу мови, почав запис датасету з наголосами, на частоті 48 Кгц. Перший голос має назву «Микита», який з’явився у другій версії. Прослухати голос можна тут.

Тут вже з’явилась можливість задавати наголоси: проставляти їх вручну за допомогою символу «+» перед голосною. Ця версія має правильні наголоси завдяки тому, що у датасеті коректність проставлення наголосів попередньо перевірив вчитель української мови.

Перші успіхи надихнули на запис нових голосів — Олени, Дмитра (автор Дмитро Чаплинський), Ольги та Лади (виконала популярна тікток-блогерка). Згодом ми всім ком’юніті збирали кошти на запис голосу Лади у студії з ліцензією Apache 2.0, що дозволяє комерційне використання записаних голосів. Датасет можна отримати тут.

Це стало основним фактором покращення якості звучання моделей, що можна глянути тут.

Після запису датасетів результатом тренування все одно були якісь дивні паузи, які не видалялись, бо містили шуми, і їх пропускав Voice Activity Detection — є і кліки мишки, й інші шуми середовища. Для тренування моделі, щоб досягти найкращої якості, необхідно за тренувальні дані мати тільки сигнал голосу, то ж необхідно було якось обрізати тишу, і перед мовленням, і після мовлення.

Для цього ще один учасник, Володимир Кирилов, натренував модель для вирівнювання (alignment) символів відносно аудіо, що дозволяє отримати позиції кожної букви в аудіо. Завдяки чому ми отримали можливість точно сказати, де закінчується аудіо і починається фоновий шум. Саме це ми і використали перед фінальним тренувальним запуском, таким чином позбавивши модель зайвих пауз.

Чим можна скористатися

Крім самої моделі, важливо також мати супутню інфраструктуру для того, щоб користувачі могли спробувати демо і одразу оцінити якість.

Для цього з першої версії було створено Gradio демо на HuggingFace, доступне усім охочим за посиланням.

Тут можна обрати голос, який ви хочете використати та модель для наголосів. Є дві моделі:

  • За словником від Олексія Сивоконя. Ця модель шукає слово у словнику, дивиться, у якому відмінку сусідні слова, і може таким чином проставити коректно наголос у ситуації, наприклад:
    Москаль миє р+уки. / У москаля не має рук+и.

З плюсів — економна по пам’яті і точна.

З обмежень — модель не розуміє контекст, тому з+амок і зам+ок не розрізняються. У поточній імплементації — якщо є таке слово, наголос не проставляється, і це віддається на розсуд text-to-speech модельки, як потрібно саме тут правильно наголошувати.

  • Трансформером від Богдана Михайленко — seq2seq transformer модель, яка проставляє наголос, споживає на піку 200 МБ RAM, опрацьовує 50 речень в секунду на 4 потоках.

Богдан також натренував кілька моделей, які можна спробувати тут. Їхня відмінність: у мене натренована одна багатоголоса модель, а в Богдана — по одній моделі на голос.

Всі ці опції доступні на вибір користувача, можна брати ту, яка найкраще підійде для потреб чи запиту вашого проєкту.

Також є зроблені скрипти для нормалізації тексту, наприклад: для заміни цифр на букви, тобто перетворення «100» —> «сто». Поки модель ще не вміє перетворювати «15 числа» —> «п’ятнадцятого числа» (pull request вітається!).

Є транслітерація англійського тексту, щоб модель його могла читати, а також і підтримка задання користувачем власного наголосу на певні слова.

Тестування моделі також доступно у вигляді Telegram-бота, а тут містяться моделі та код. Код нормалізаторів тексту та наголошувачів випущений під ліцензією MIT, а файли моделі — під ліцензією GPL v3.

Моделі будуть цікаві для тих, хто робить голосового асистента українською, озвучує тексти для себе, щоб слухати замість музики тощо. Нормалізатори будуть цікаві для тих, хто хоче натренувати і використовувати власну text-to-speech модель.

Чим зараз займаємось для розвитку синтезу української мови

Інші ініціативи, якими ми займаємось:

  • Записуємо датасет української через телеграм-бота для покращення розпізнавання мови, він буде у public domain. Посилання на бота є тут.

Особливість цього бота в тому, що фрази, які ви отримуєте для начитування, взяті з датасету для створення синтезу. Це дає можливість на вашому голосі створити як модель розпізнавання, так і синтезу. Якщо це вас зацікавило, то напишіть нам, ми допоможемо якнайкраще записати свій голос і отримати свою модель!

  • Також розпочинаємо новий проєкт: зараз шукаємо кримськотатарський голос, тому якщо ви хотіли б зголоситись або маєте знайомих, пишіть мені у приват. Ми робитимемо відкриту модель, а також онлайн-демо у такому ж вигляді, як і для української мови.

В цілому, запрошую долучатись до нашої спільноти з розпізнавання мови, там є багато цікавого й корисного.

Сподобалась стаття? Натискай «Подобається» внизу. Це допоможе автору виграти подарунок у програмі #ПишуНаDOU

👍ПодобаєтьсяСподобалось16
До обраногоВ обраному5
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Цим займались ще 10 років тому: www.youtube.com/watch?v=2aPLICU_TPM.
Але в ІТ вважали кращими фахівцями тих, кому зручніше мукати на общєпанятном московськім діалекті церковно-болгарської мови. Носії московського мукання цим скористалися і відтіснили розвиток питомо-українських технологій.

в чому суть цього повідомлення?
цього не треба було робити чи у вас є машина часу?

Ви не праві. Розвитку не було, бо самі українці не хотіли цього робити. Простіше і краще працювати за долари та вирішувати задачі направлені на зарубіжний ринок.

Завершили запис голосу Лада, тепер є 10.5 годин якісних даних для тренування, які можна завантажити тут — github.com/...​s-datasets/tree/main/lada

а ще дуже давно був проект, коли озвучували нову станцію метро за існуючими записами оголошення станцій, і там було дуже реалістично. може ті б дані підійшли теж

маєте посилання на проект чи датасет?

Згодом ми всім ком’юніті збирали кошти на запис голосу Лади у студії з ліцензією Apache 2.0, що дозволяє комерційне використання записаних голосів.

По-перше дякую за цікаву статтю і роботу яку робите. А написати хотів про наступне — послухав генеровану промову голосом Лади, постійне відчуття наче Лада ображена на когось. Пішов до її тіктоку подивитись чи вона в житті так розмовляє, декілька відео з тіктока підтвердили мої очікування. Я не знаю чи існує такий стандарт як вимова на телебаченні але мені як пересічному глядачу одразу помітно що диктори, телеведучі, репотрети всі підлаштувались під більш менш єдину вимову слів і наголосів. Проблема в тому що рядові громадяни не спілкуються з використанням такої вимови в житті. Навіть порівнявши вимову акторів озвучки кіно з вимовою репортерів наприклад Г+Г одразу відчутна і зрозуміла різниця. Схоже Лада в студії під час запису семплів для тренування використовувала якраз ті телевізійні «стандарти». Що я цим коментом хотів сказати? Хз, написав бо стало цікаво чи ще хтось помітив те саме, чи то я один такий «унікальний».

акцент може вам бути помітним бо типово люди так чітко у житті не спілкуються
«телевізійний» акцент тому і телевізійний, бо нейтральний для всіх регіонів

Дякую вам за вашу роботу. Хтось би ще розробив модель speech-to-text, бо як мінімум відкритих, здається досі немає.

Кількість відкритих моделей для speech-to-text вже перевалила за десяток. Можна подивитися цей репозиторій з ними — github.com/...​mkv/speech-recognition-uk або долучитися до нашого товариства у Telegram — t.me/speech_recognition_uk

Підписатись на коментарі