- PVSM.RU - https://www.pvsm.ru -
В нашей прошлой статье [1] мы ускорили наши модели в 10 раз, добавили новые высококачественные голоса и управление с помощью SSML, возможность генерировать аудио с разной частотой дискретизации и много других фишек.
В этот раз мы добавили:
eugeny
);ё
со словарем в 4 миллиона слов и точностью 100% (но естественно с рядом оговорок);Пока улучшение интерфейсов мы отложили на некоторое время. Ускорить модели еще в 3+ раза мы тоже смогли, но пока с потерей качества, что не позволило нам обновить их прямо в этом релизе.
Попробовать модель как обычно можно в нашем репозитории [2] и в колабе [3].
Для самых нетерпеливых — вот основные примеры звучания на русском языке:
Как обычно, все инструкции, все модели и языки можно найти:
v3
;Вот самый минималистичный пример вызова модели:
import torch
device = torch.device('cpu')
torch.set_num_threads(4)
speaker = 'xenia' # 'aidar', 'baya', 'kseniya', 'xenia', 'eugene', 'random'
sample_rate = 48000 # 8000, 24000, 48000
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_tts',
language='v3_1_ru')
model.to(device)
audio = model.apply_tts(text=example_text,
speaker=speaker,
sample_rate=sample_rate)
Спикеров и принимаемые символы для каждой модели можно посмотреть в свойствах модели model.speakers
и model.symbols
.
import os
import torch
device = torch.device('cpu')
torch.set_num_threads(4)
local_file = 'model.pt'
speaker = 'xenia' # 'aidar', 'baya', 'kseniya', 'xenia', 'eugene', 'random'
sample_rate = 48000 # 8000, 24000, 48000
if not os.path.isfile(local_file):
torch.hub.download_url_to_file('https://models.silero.ai/models/tts/ru/v3_1_ru.pt',
local_file)
model = torch.package.PackageImporter(local_file).load_pickle("tts_models", "model")
model.to(device)
audio = model.apply_tts(text=example_text,
speaker=speaker,
sample_rate=sample_rate)
Больше примеров вы можете найти по ссылкам в репозитории. С недавнего времени у моделей также появился своё pip
-пакет, аналогичный по функционалу импорту через torch.hub
.
Более подробное описание всех фишек, связанных с управлением голосом вы сможете найти в прошлой cтатье [1], тут не будем повторяться.
Язык модели | Название модели | Число языков | Число голосов |
---|---|---|---|
Английский | v3_en |
1 | 118 |
Английский (Индия) | v3_en_indic |
1 | 15 |
Испанский | v3_es |
1 | 3 |
Калмыцкий | v3_xal |
1 | 2 |
Немецкий | v3_de |
1 | 5 |
Русский | v3_1_ru |
1 | 5 |
Татарский | v3_tt |
1 | 1 |
Узбекский | v3_uz |
1 | 1 |
Украинский | v3_ua |
1 | 1 |
Французский | v3_fr |
1 | 6 |
Языки народов Индии | v3_indic |
10 | 17 |
Для всех моделей с более чем одним спикером доступен "случайный" спикер.
Чтобы не делать статью гигантской, просто приведу примеры звучания для каждого языка под спойлером. Попробовать модели как обычно вы можете:
v3
;
Но если без шуток, то задача простановки ударений оказалась сильно сложнее, чем предполагалось, но мы смогли добиться в ней впечатляющего прогресса. Если коротко, то нам удалось:
Сложность такой задачи покоится на 3 китах:
Про каждый из этих пунктов мы отдельно расскажем.
Нам удалось собрать словарь размером примерно в 4 миллиона слов. Эти 4 миллиона слов примерно разбиваются на следующие категории:
Из этих 4 миллионов слов примерно 100 тысяч имели "спорное" ударение и были "кандидатами" в омографы. Из этих 100 тысяч у нас получилось выделить следующие категории:
Из 15,000 самых популярных "кандидатов" для части слов (примерно 5,000 штук) мы смогли найти наиболее популярную форму с помощью морфологических парсеров и принять ее за "эталонную". Для остальных — мы просто случайно выбрали одну из форм. Это одна из проблем словаря.
Другая проблема состоит в том, что в словаре много мусора или очень редких форм и часть слов из топовых 100,000 слов имеет просто неверное ударение.
Тут небольшая ремарка, на момент отправки статью в публикацию, мы успели проверить 20,000 самых популярных слов из словаря. Процесс автоматизированный и с многократной проверкой, но естественно не идеальный.
Мы добились того, что наша модель выдает 100% точность на нашем словаре, но в голове нужно держать этот ряд оговорок:
Чтобы дать примерную оценку качества нашего словаря приведем статистику покрытия на популярных интернет корпусах:
Домен | Текстов | Словарь | … P95 | Покрытие текстов, % | … словаря, % | … P95, % |
---|---|---|---|---|---|---|
Финансы | 39,357,993 | 289,182 | 11,531 | 90.9 | 76.05 | 95.37 |
Common Crawl | 300,021,148 | 536,319 | 17,236 | 90.07 | 61.7 | 95.99 |
Книги | 100,013,036 | 903,862 | 29,268 | 91.09 | 61.71 | 95.27 |
Новости | 25,403,505 | 839,365 | 14,559 | 82.53 | 32.09 | 92.49 |
Субтитры | 44,641,621 | 299,061 | 11,764 | 92.82 | 73.14 | 92.97 |
Поэзия, литература | 100,014,088 | 824,830 | 28,031 | 92.56 | 66.38 | 97.65 |
Википедия | 29 401,392 | 768,451 | 21,916 | 85.93 | 54.78 | 96 |
Общая статистика | 638,852,783 | 1,382,006 | 73,556 | 90.69 | 51.57 | 93.28 |
Словарь корпуса включает в себя только слова, встречающиеся более 10 раз (иначе общий словарь всех корпусов вырастет до 40 миллионов "слов").
Также для удобства пользования мы выкладываем наш словарь омографов [4] и словарь из слов "кандидатов" в омографы [5], на которых мы случайно проставили ударение.
Также опережая очевидный вопрос, почему покрытие P95 не составляет 100%, мы посмотрели каких слов не хватает. В основном там:
Со всеми вышеописанными оговорками, наше решение имеет точность в 100% на нашем словаре и занимает примерно 0.2 миллисекунды на 1 слово.
Ради интереса, мы также сравнили метрики на нашем словаре с другими публично доступными решениями для простановки ударений:
Инструмент | Точность на всём словаре, % | … на словаре P95, % | … на словаре P50, % |
---|---|---|---|
espeak |
89.58 | 95.86 | 81.37 |
russtress |
89.47 | 91.98 | 85.63 |
russian_accentuation |
70.3 | 83.86 | 58.86 |
Словарь на 4 миллиона слов весит примерно 100 мегабайт. Наша модель весит примерно 2.6 мегабайта.
Сжатие | Размер, MB | Сжатие, раз |
---|---|---|
Словарь | 98 | 1.0 |
Словарь + gzip | 23 | 4.3 |
Наша модель | 2.6 | 37.7 |
То есть у нас получилось с учетом всех вспомогательных файлов и весов модели добиться сжатия словаря примерно в 40 раз. Мое личное мнение — это отличный результат.
Причем если словарь допустим увеличить до 10 миллионов слов, размер модели должен вырасти в сильно меньшей пропорции.
Для полноты картины опишем явно известные нам, решенные и еще не решенные краевые случаи.
Решенные краевые случаи:
как-то
, кое-кто
, где-нибудь
, итд;ё
;квадратно-гнездовой
);Частично и ещё не решенные краевые случаи:
заднеприводный
);Модель так построена, что она в первую очередь хорошо умеет запоминать слова. Но ее архитектура не мешает ей иметь ограниченную генерализацию. В общем — чем длиннее слово — тем лучше генерализация.
И естественно мы пробовали подавать ей разного рода экзотические текста, и в целом по нашим наблюдениям:
Несколько примеров:
гл+окая к+уздра кудлан+ула б+окра +и кудр+ячит бокренк+а
Ег+о н+е призн+али в г+ороде родн+ом +и вс+е ег+о шпын+яли +и н+очью, +и дн+ём. Н+е ст+оит огорч+аться +и н+е ст+оит роб+еть, +а л+учше +эту п+есенку вм+есте проп+еть: "К+отопес! К+отопес! Ед+инственный в м+ире мал+ыш К+отопес!
П+осле П+ервой войн+ы с Мельк+ором Вал+ар воздв+игли в Ард+е дв+а Вел+иких Свет+ильника +и созд+али п+ервое корол+евство н+а +острове Алмарен.
+Этому д+олгому м+иру приш+ёл кон+ец, когд+а Мельк+ор т+айно верн+улся в +Арду +и низв+ерг Свет+ильники. Вал+ар в Ам+ане основ+али втор+ое корол+евство Валин+ор.
Йав+анна в+ырастила дв+а Др+ева Св+ета, кот+орые освещ+али Валин+ор, н+о оставл+яли Средиз+емье в+о тьм+е Мельк+ора. В б+олее п+оздних эп+охах +эти дер+евья дал+и плод+ы, кот+орые ст+али С+олнцем +и Лун+ой.с+аша +аня паш+а м+аша зуб+арджат аннаб+ель +анна-мар+ия ангел+ина лар+иса нат+аша д+аша игн+ат иннок+ентий дил+яра караб+ас-бар+абас бурат+ино пуш+инчик ман+я юр+а +юрий +юрасик
Мы не планируем останавливаться на достигнутом и собираемся продолжать развивать наш синтез:
Автор: Alexander Veysov
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/375870
Ссылки в тексте:
[1] статье: https://habr.com/ru/post/660565/
[2] репозитории: https://github.com/snakers4/silero-models#text-to-speech
[3] колабе: https://colab.research.google.com/github/snakers4/silero-models/blob/master/examples_tts.ipynb
[4] словарь омографов: https://github.com/snakers4/silero-models/files/8844789/1_5k_homos_frequent.txt
[5] "кандидатов" в омографы: https://github.com/snakers4/silero-models/files/8844790/10k_homos_random.txt
[6] Источник: https://habr.com/ru/post/669910/?utm_source=habrahabr&utm_medium=rss&utm_campaign=669910
Нажмите здесь для печати.