Моделі text-to-speech для синтезу української мови: як працюють, хто їх створює та де знайти
Всім привіт, мене звати Юрій Панів, Software Engineer, у вільний час працюю над своїм стартапом Rakourse для створення фільмів з книжок. Також працюю над open source бібліотеками і моделями для україномовного синтезу мовлення, зокрема зробив модель під ліцензією GPL v3. Онлайн-демо, як працює модель, можна переглянути тут.
У цій статті хочу розповісти спільноті про те, який стан справ із синтезом української мови зараз, а також планую залучити якомога більше людей для покращення напрацювань. Якщо після прочитання статті вам захочеться долучитися до роботи над цим, пишіть мені.
Також у статті є посилання на датасети, де можна послухати більш чи менш вдалі моделі синтезу мови.
Як я почав займатись синтезом української
Я зіткнувся з проблемою наявності програм для синтезу у кінці
Тоді я шукав якісь інструменти, якими можна було б озвучити фільми двоголосим (чоловічим і жіночим) закадровим дубляжем (у дусі того, як на телебаченні озвучують дешеві фільми).
З опцій для синтезу більшість були або платні, або тільки під Windows. Єдиною можливістю, яку я знайшов, було використання Google TTS голосу, але у нього було декілька обмежень:
- роботичне звучання, не схоже на справжню мову;
- не можна проставити наголос, який легко «гуляє» в українській;
- тільки жіночий голос.
Тоді я вирішив дивитись у сторону створення та подальшого тренування своєї моделі для синтезу. Так я натрапив на проєкт від Mozilla TTS (тепер Coqui TTS) — це фреймворк для text-to-speech моделей, який надає набір функцій для обробки аудіо і тренування власних моделей для синтезу.
Прогрес дуже вповільнила пандемія коронавірусу, а саме: брак GPU, через що трейнінг був на CPU (боляче) або Colab, і спроби подружити тренінг на GPU + AMD відеокарту + PyTorch (боляче, і дізнаєшся багато цікавого про deep learning на не-CUDA платформах), тому великого прогресу не було.
Перший та наступні датасети
Перший датасет, який я використав для тренування — був
З досвіду запису датасету для моделі одного з «голосів», Дмитра Чаплинського: «Для якісного синтезу потрібно не стільки багато семплів, скільки увага і задротство під час запису аудіо :)». Приклади цього синтезу можна послухати тут.
Потім, завдяки чистці та роботі над якістю датасету, у наступному релізі вдалось зробити якість більш прийнятною, але все-таки проблема з датасетом залишалась.
Власне після багатьох більш і менш вдалих спроб Єгор Смоляков, засновник українського ком’юніті з розпізнавання та синтезу мови, почав запис датасету з наголосами, на частоті 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. Посилання на бота є тут.
Особливість цього бота в тому, що фрази, які ви отримуєте для начитування, взяті з датасету для створення синтезу. Це дає можливість на вашому голосі створити як модель розпізнавання, так і синтезу. Якщо це вас зацікавило, то напишіть нам, ми допоможемо якнайкраще записати свій голос і отримати свою модель!
- Також розпочинаємо новий проєкт: зараз шукаємо кримськотатарський голос, тому якщо ви хотіли б зголоситись або маєте знайомих, пишіть мені у приват. Ми робитимемо відкриту модель, а також онлайн-демо у такому ж вигляді, як і для української мови.
В цілому, запрошую долучатись до нашої спільноти з розпізнавання мови, там є багато цікавого й корисного.
21 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів