Comments 73
Обновили silero-stress до версии 1.1.
Добавили несколько QoL изменений, о которых попросило комьюнити, а так же внесли немного фиксов и обновили документацию.
Модели можно использовать на CPU/GPU. Примеры тут.
Добавили флаги put_stress, put_yo, put_stress_homo, put_yo_homo, которые позволяют включать/выключать простановку ударений и/или буквы ё как в обычных словах, так и в омографах.
Добавили флаг stress_single_vowel, который отвечает за расстановку ударений в односложных словах.
Добавили пример, как расставлять ударения в обычных словах и в омографах независимо друг от друга.
Пофиксили небольшой баг — акцентор удалял символы переноса строки из исходного текста.
Репозиторий проекта - https://github.com/snakers4/silero-stress;
В ссылку тихо закралась точка с запятой...
Ого! Вы крутые!!
Я сначала даже не понял, что за предложение "Я из готов". Мозг воспринял гОтов как готОв. Думал это специально какую-то нерусскую конструкцию подсунули.
И как оно решит фразу
"скоро мы все передохнем"
ск+оро м+ы вс+ё перед+охнем.
ск+оро м+ы вс+ё хорош+о передохн+ём.
ск+оро м+ы вс+ё хорош+о передохн+ём +и пойд+ём оп+ять раб+отать.
ск+оро м+ы вс+ё перед+охнем +и н+аши тел+а забер+ёт земл+я.
Ну норм имхо, базу выдаёт
а где вариант "все" без ё?
Это шутка или вы не заметили Ё в "всё"?
Заметили. Метрики у нас хоть и хорошие, но не идеальные. Учитывая, что каждое слово формально - это отдельная задача классификации, метрики отдельно взятых слов могут отличаться заметно (см. гистограмму в разделе Метрики качества).
Конкретно в кейсе именно со словосочетанием "мы все", модель действительно в большинстве случаев ставит "мы всё". Хотя в целом метрики пары "все/всё" неплохие.
В будущих релизах мы этот кейс (как и другие, до которых дотянемся) постараемся исправить.
Пусть тогда хоть запятую ставит тогда или тире: "Скоро мы всё - перед+охнем"))
С одной стороны - расстановка знаков препинания более простая задача, т.к. для неё тривиально фармить датку.
С другой - она более необъятная и склонная к большим моделям.
С третьей - пользы на практике от неё на порядок меньше.
С четвёртой - в устной речи не действуют законы расстановки знаков препинания и живые люди говорят совсем иначе, нежели чем принято писать. Ну то есть половина всей речи (условно) не поддаётся ей в той или иной степени.
Поэтому я бы наверное не мешал это в кучу.
Омографы также можно разделить на смысловые, пресловутый "замок" и морфологические — скалы, краю. С последними неплохо справляются морф-таггеры — например Natasha (быстрая) и ее исторический предок DeepPavlov (точнее, но медленно). Не сравнивали с ними? А еще есть сложнейшая задач классификации (не)совершенных глаголов — узнаю, признаюсь; и чуть попроще, но кмк ненамного, изъявительные/повелительные — цените, служите. Не проверяли качество отдельно по таким группам?
В связи с вышесказанным, есть ли возможность разрешать неоднозначности только у указанных пользователем омографов? Естественно среди списка вами поддерживаемых. Чтобы появилась возможность использовать сильные стороны там, где справляется лучше, и отказаться от использования в областях, где не устроит.
С последними неплохо справляются морф-таггеры — например Natasha (быстрая) и ее исторический предок DeepPavlov (точнее, но медленно). Не сравнивали с ними?
Не сравнивали, но использовали сигнал от них для дистилляции знаний. Но конкретно бить омографы на типы с точки зрения лингвистики для снятия метрик руки не дошли. Это хорошая идея, так как разобрать 5-6к слов из итогового списка на типы будет несложно. И будет такой стресс тест, способ нарезать данные перпендикулярно, когда будем катить новую модель.
Чисто на правах наброса первое что в голову пришло:
+Я узн+аю ег+о лиц+о +из т+ысячи.
+Я н+е узна+ю ничег+о н+ового!
Но тут оно довольно шаткое на таких кейсах. Шаг влево шаг вправо.
В связи с вышесказанным, есть ли возможность разрешать неоднозначности только у указанных пользователем омографов? Естественно среди списка вами поддерживаемых. Чтобы появилась возможность использовать сильные стороны там, где справляется лучше, и отказаться от использования в областях, где не устроит.
Ну есть два способа:
Не подавать такие предложения;
Подавать, но самому поставить ударение заранее как надо:
sample_sent = "пр+изнаюсь, я кот!"
print(accentor(sample_sent))
пр+изнаюсь, +я к+от!
И там, где проставлено, оно оставляет как было.
Ну есть два способа:
Вообще, есть третий, мб кому-то удобнее покажется.
accentor = torch.hub.load(repo_or_dir='snakers4/silero-stress)
homodict = accentor.homosolver.homodict
Можно просто фильтрануть homodict, убрав из него ненужные слова. Поиск по нему как раз идёт.
Опережая возможный вопрос - туда можно добавить свои. Но когда мы тестили, генерализация по омографам не из трейна была в районе 60%, то есть смысла в этом около нуля. Чисто на случай слов по типу "звонишь" / "творог", если хочется получать рандомное ударение, а не фиксированное.
С обычными ударениями понятно. Нет — поставим, есть — пропустим. Но не помешают ли расставленные плюсы деомо-модели? sent = "Я с легкостью узнаю их л+ица ", если морфологию рд.ед/им.мн решил доверить другой библиотеке.
Еще, предложу не ставить ударения в словах с одной гласной. Зачем "+я к+от"?
В целом, отличное решение для "ленивых", просто и достаточно качественно. Намного лучше чем голый текст и другие простые решения. Но если подготовка текста для создания аудиокниг (для личного прослушивания) требует чуть больше перфекционизма, будут проблемы.
Например немало омографов имен собственных. Начиная с явных Ангара́ и Саха́ра, которые вы наверное отслеживаете, заканчивая более специфичными Ба́совым, Бережно́го и даже среди имен встречается омография — бере(ё)зина, Бере́зина (фамилия), Березина́ (река). У меня таких более 400. Бывает надо поработать с аббревиатурами — КГБешник=кэгэбэ́шник или со словосочетаниями "под руку=по́друку", "не с кем=не́скем" (200 правил).
Все это делается в программах словарной коррекции, на стадии после омографии, чтобы не помешать ей, но до расстановки ударений. То есть, как минимум, нужна возможность по отдельности снять омографию и проставить ударения.
Но не помешают ли расставленные плюсы деомо-модели? sent = "Я с легкостью узнаю их л+ица ", если морфологию рд.ед/им.мн решил доверить другой библиотеке.
Нашей - не помешают. Другой - не могу сказать.
Еще, предложу не ставить ударения в словах с одной гласной. Зачем "+я к+от"?
Ну убрать плюсик тут довольно рудиментарная операция, имхо.
Например немало омографов имен собственных. Начиная с явных Ангара́ и Саха́ра, которые вы наверное отслеживаете, заканчивая более специфичными Ба́совым, Бережно́го и даже среди имен встречается омография — бере(ё)зина, Бере́зина (фамилия), Березина́ (река). У меня таких более 400. Бывает надо поработать с аббревиатурами — КГБешник=кэгэбэ́шник или со словосочетаниями "под руку=по́друку", "не с кем=не́скем" (200 правил).
Ну тут по идее всё вписывается в вышеописанную логику, меняете на "правильное" прочтение, ставите ударение, библиотека игнорирует. Или правите сами пост-фактум.
То есть, как минимум, нужна возможность по отдельности снять омографию и проставить ударения.
Ну по логике можно конечно будет добавить флаги на включение / выключение правки буквы, омографов и простых ударений отдельно. Но вообще решаемых омографов буквально 5000 слов, тут имхо гораздо проще просто поверх менять в них ударение на нужное. Если у вас своё кастомное решение, то у вас уже настроена санация текста, и это по идее буквально пара абзацев кода будет на замену ударения в конкретных словах.
Ну убрать плюсик тут довольно рудиментарная операция, имхо.
Сразу уточню для чего это. Некоторые синтезаторы, вроде даже Google TTS в Android, не любят такие ударения. А библиотека будет использоваться не только с вашим синтезатором.
В коде убрать, точнее, найти слова с одной гласной несложно, но для словарной коррекции, это достаточно нетривиально — таких одногласных слов довольно много, в том числе при неожиданном авторском словообразовании. Так может сразу убрать или не ставить в вашем коде? Это может даже на капельку увеличит скорость.
Аналогично с "поверх менять в них ударение на нужное" при словарной коррекции. Нужно иметь две версии словаря или по два правила — для чистого текста и для неправильного ударения. Усложняется пайплайн. Впрочем, если плюсы вам не мешают, то библиотеку можно поставить в конец цепочки. Что не отменяет влияния правил меняющих сам текст ( "не с кем=не́скем" ).
Нашей - не помешают. Другой - не могу сказать.
Коллега, а вы меня обманули.
Я взял еду на пикник -> Я взял ед+у на пикник
Я вз+ял еду на пикник -> Я взял +еду на пикник
То есть коррекция до деомографии недопустима.

Скорее это баг в коде с этим конкретным словом (не в моделях), скорее всего ударение в начале слова,
Я хотел показать влияние модификации контекста плюсами на распознавание формы. Раз наткнулся в отношении "еду", то и в любом другом омографе можно будет словить. Считать это багом или штатным поведением — на ваше усмотрение. Я скорее отношу к штатному. А вот удвоение ударений +ед+у это действительно баг.
Также посмотрите, не ставите ли сами себе подножки. Не может ли собственная предыдущая коррекция, попасть в окно оценки следующих за ней омографов. Предыдущий оутпут попадает в инпут следующего. Такое может как помочь ("берегу озера", если контекст указал на "бе́регу", то "о́зера", если на "берегу́", то "озёра"), так и помешать. Сам стараюсь избегать такого seq2seq, но вы там лучше в языках разбираетесь.
То есть коррекция до деомографии недопустима.
Ну в какой-то степени сейчас так, да. Можно корректировать сами омографы, но не другие слова. Например, как вы писали выше, "доверить морфологию другой библиотеке". В таком случае, "перезаписывать" ударения в омографах наша не будет.
В остальных случаях сейчас да, результат может измениться.
В идеале пайплайн сейчас такой для вашего юзкейса, если я правильно понял:
- корректируете ударения в омографах, если хочется;
- запускаете наш классификатор омографов;
- делаете свою коррекцию текста;
- запускаете нашу расстановку обычных ударений.
Если будет запрос, в следующих обновлениях мы постараемся сделать предикты более стабильными. Сейчас действительно шальная пунктуация чаще влияет на результат, чем хотелось бы. Заодно флаг для 1-сложных слов прокинем.
Спасибо, особенно за маленький размер. Перевел один проект и освободил 3гига gpu
Эту модель можно крутить и на CPU. Для 1-2 омографов на 1 предложение разница не прямо существенна.
о, круто. а как этим управлять через silero_stress?
посмотрел, не хватает таких настроек:
# CPU
model = load_accentor(device='cpu')
# GPU (первая видеокарта)
model = load_accentor(device='cuda')
# или
model = load_accentor(device='cuda:0')
# Вторая видеокарта (если есть)
model = load_accentor(device='cuda:1')
# Автоматический выбор (GPU если доступен, иначе CPU)
model = load_accentor(device='auto')
Примеры:
тв+орог/твор+ог,щ+авель/щав+ель,зв+онишь/звон+ишь(да простят нас учителя русского языка, но с точки зрения реальности, в которой мы живём, это допустимые варианты);
Филологи отмечают, что в русском ударение сейчас потихоньку смещается к началу слова:
-звони́т -> зво́нит
-подключён -> подклю́чен
-новорождённый -> новоро́жденный
-сбоёв -> сбо́ев
-творо́г -> тво́рог
Учителя русского знают, что язык живой и меняется. В этих словах тоже победят варианты с ударением на первую гласную.
Тут открытый вопрос конечно, как с точки зрения акцентора расставлять ударения / ё в таких словах. Конкретных правил, насколько мне известно, на этот счёт нет (если ошибаюсь - буду рад узнать).
На данный момент мы остановились на том, что просто в таких словах ставим одно фиксированное ударение. Был ещё вариант ставить случайным образом, но мы от него по итогу отказались. А по текстовому контексту определить конкретный вариант произношения в таких словах задачка вряд ли в принципе выполнимая. За исключением быть может конкретных случаев, где реплики нарочито с "говором" прописаны.
В русском ещё есть пара (+1) слов, которые пишутся одинаково, но могут звучать по разному - "теста" и "Питер" (+стен). Замечаю, что в русском идёт переход с Е на Э где оно так звучит, поэтому они со временем должны исчезнуть, став "тестом/тэстом" и "Питером/Питэром". А "стен" считается устаревшим и пропадёт сам собой.
Ох, тут есть ещё бездонная бездна иностранных слов, которые читаются не по правилам, типа шинель / панель / Нинель, мы в нее пока только заглядывали, но пока контакт не наладили. Это скорее имеет отношение уже к синтезу, но в каком-то смысле это похоже на постановку буквы ё.
Возможно вы неправильно поняли. Дело не в измененной, а в контекстно измененной фонетике. Взвесьте килограмм теста и После тэста по математике. Утром придет Стэн и Даже у стен есть уши.
А вечером Питэр посмотрит на Питер.
Да не, я в всё понял, по сути вы просто привели пример ещё более экзотического "омографа", но у вас от смысла меняется звучание, а не ударение (хотя это близкие понятие). Есть нечто похожее в обычных омографах, это слова Один и одИн. Тоже разные языки как бы.
Просто ваш пример мне напомнил про более частотный кейс с шинелями. Я к тому, что на самом деле бездна всего такого, что учесть крайне сложно.
Спасибо огромное. Добавил в свою Читалку книг в голос. Стало прямо намного лучше.
Я осознанно использую там предыдущую генерацию публичных моделей (третью), т.к. на слух реально слышу обрезанность четвёртой. И раньше имел только одну претензию - очень битые ударения. Сейчас всё ещё иногда бьёт, но реально стало прямо намного лучше. Silero-stress прям спаситель в данной ситуации.
И отдельное спасибо за фокус на производительность. У меня читалка бежит на слабеньком NAS-хранилище. О большом процессоре или крутой видеокарте там и не мечтается. А читалку с Silero оставляю на ночь, а утром получаю книгу, начитанную приятным голосом. Xenia лучшая :-)
Когда мы делали релиз 4й версии, мы увидели, что нашу говорилку используют мошенники при звонках, поэтому скрутили звучание.
В ближайшее время мы планируем сделать релиз 5й версии, там будет ускорение синтеза ещё в несколько раз, повышение качества, и упаковка модели омографов прямо в модель синтеза речи.
В последнее время синтезаторы, в том числе открытые, растут как грибы после дождя. Онлайн Яндекс и Edge; оффлайн Дмитрий/Светлана из edge-пула, в том числе с SAPI адаптером; новые модели Vosk (ver9 и 10), которые по метрикам приблизились к Яндекс/Edge и опередили вашу ver.3; синтезаторы с вообще клонированием голоса, раздолье для мошенников — VITS и базирующиеся на нем, F5, Chatterbox. И это только то что вспомнилось, из последнего обсуждаемого на TTS-форуме.
Более того, найти вашу ver.3 мошенникам не представляет ни малейшей сложности. То есть можно было не улучшать качество, но в ухудшении точно смысла не много.
Более того, найти вашу ver.3 мошенникам не представляет ни малейшей сложности. То есть можно было не улучшать качество, но в ухудшении точно смысла не много.
Ну тут вы получается спорите с нами, но 3-4 года назад. Ситуация тогда была совсем иная. Мы видели проблему в моменте, и решали её как могли, тогда этого всего или не было, или оно было менее на слуху, на порядок.
синтезаторы с вообще клонированием голоса, раздолье для мошенников
По поводу на чём базируются мошенники - я бы не писал (удолите), т.к. они потом будут использовать Хабр как базу знаний для этого в поиске. У этих решений есть свои моменты, но для генерации 10 аудио можно использовать вообще всё что угодно, хоть платные сервисы дорогие.
которые по метрикам приблизились к Яндекс/Edge и опередили вашу ver.3
Тут я бы поспорил, но не с точки зрения абстрактного "качества звучания", оно у моделей класса VITS или "больших" моделей или моделей на основе flow matching-а действительно чуть "бархатнее", а с точки зрения реальной применимости:
По ресурсам там как правило всё довольно печально. VITS можно натянуть на глобус, но с проблемами. Маленькие flow matching модели, имхо теряют свою фишку по сравнению с большими, а большие сразу получают ярлык GPU-only и на два порядка медленнее ПОСЛЕ всех оптимизаций;
Небольшой прирост качества звучания идёт ценой сильно более высоких вычислительных ресурсов и стабильности. То есть если с нашими актуальными моделями мы боремся с ударениями и какими-то странными краевыми кейсами у клиентов, то с новыми моделями мы ловим краевые случаи и нестабильности сразу при "лакмусовых" тестах при оценке адекватности технологии;
При этом фишка в виде разнообразия генерации прикольная, как мне кажется. Но тут tech отрасль и академические метрики, как мне кажется, идут немного вбок. Но если писать про это - это уже отдельная большая статья, да и вряд ли у неё найдутся читатели (в одиночку не перебить шквал контента AGI is near), тут поможет только прорыв пузыря.
Про пиратские решения или решения за облаком гига-корпораций я не буду комментировать)
Это не спор. С прошлым нельзя спорить, его можно только оценивать. Не представляю, на кого повлияло ваше решение, при сохранении широкой доступности предыдущей более качественной модели (что легко предсказывалось) и опаска использовать в одном предложении представителей широко распространённой технологии voice cloning общего применения, вместе с нехорошими людьми. Все это гуглится за 10-30 минут. Это даже не против мамкиных хакеров действительно, а лишь их личинок. Которые купюры на ч/б ксероксе копируют. И, как понял, после вашего ответа, редактирование поста мне стало недоступно.
Про метрики я говорил про Vosk. Это быстрая модель, плюс-минус сопоставимая с вашей. Часть информации взята из их презентации на какой-то конференции (там старая модель сравнивается), часть из ридми актуальной модели. Про VITS с вами абсолютно согласен.
Кстати, раз уж зашел разговор про метрики, позвольте обсудить один вопрос. Есть старые "быстрые" синтезаторы. Фонетика — ахтунг и максимум удовлетворительно, просодия и интонирование — хорошо и местами отлично. Даже стихи заходят в их исполнении (некоторыми). Получше, чем половина школьников на уроке декламирует. Есть новые нейросетевые синтезаторы. Как достаточно быстрые, так и медленные. Фонетика — хорошо и местами отлично, просодия и интонирование — деградация, местами сильная. Причем практически независящая от ресурсоемкости.
Это принципиальная невозможность заложить их в новый пайплайн (обучение-MEL-вокодер)? Или просто создатели новых моделей настолько увлеклись новыми технологиями, что забили болт и видят только фонетику? В лучшем случае тянут тяжеленный непредсказуемый BERT, с таким же непредсказуемым результатом.
Все это гуглится за 10-30 минут. Это даже не против мамкиных хакеров действительно, а лишь их личинок. Которые купюры на ч/б ксероксе копируют. И, как понял, после вашего ответа, редактирование поста мне стало недоступно.
Ну гуглить ещё надо уметь, плюс на инглише. Надеюсь, что мошенники им владеют меньше) А вы помогли им, своим постом, азазаза, живите с этим
Про метрики я говорил про Vosk. Это быстрая модель, плюс-минус сопоставимая с вашей.
Про VITS с вами абсолютно согласен.
Насколько я знаю они сидели на витсе, а потом перешли на флоу матчинг модели. Мы гоняли и оригинальные модели авторов статей и их пре-трейн, и с точки зрения продукта эти архитектуры нас не впечатлили. Они скорее приносят больше проблем, чем решают.
Что касается скорости, обычно сравнивают со старой медленной моделью, потому что v4 не торт. Наши текущие актуальные модели ~ на порядок быстрее. Плюс никто никогда не пишет сколько это потоков, на каком процессоре. Там мягко говоря можно взять оверклокнутный процессор на 5 гигагерц и подогнать всё к нужным параметрам. А менее оптимизированные модель могут жрать процессора в 2-3 раза больше на самом деле при "такой же" скорости.
При этом есть и много других критериев, в которые мало смысла погружаться. Но тут не буду прямо пускаться в рассказ, достаточно качественно оформлять наши выводы для публичного использования - лень, да и мало смысла. А иначе можно скатиться в такое.

Я понимаю, что на длине метрики с чем-то коррелируют, но в статьях всегда очень странное видение мира, и синтез реально "обогнал" реальный мир ещё во время второго такотрона. Особенно забавно анализировать perceptual метрики и следование интонации, когда у исследователей нет ground truth того как сами дикторы говорят.
Мы гоняли perceptual метрики на спикерах на разных языках на разных микрофонах - там тупо от языка, ресепмлинга, формата исходного файла, голоса или настроения диктора могут метрики меняться на 0.5 - 1 (из 5 баллов). При этом мы игрались оценкой обычных людей - они перестали по 1 фразе отличать синтез ещё года 3+ назад. А в телефонном канале в 8 килогерц и тому подавно.
С абзацами у всех проблемы. Но тут имхо нужны совсем гигантские модели. Либо будет звучать плоско. То есть как бы синтез будет нашколен на абзац, а на 1 фразу. То есть на втором абзаце станет понятно, что синтез.
И это, конечно, без музыки, в 48 kHz, в наушниках, молодыми ушами, без шума на фоне.
Кстати, раз уж зашел разговор про метрики, позвольте обсудить один вопрос. Есть старые "быстрые" синтезаторы. Фонетика — ахтунг и максимум удовлетворительно, просодия и интонирование — хорошо и местами отлично. Даже стихи заходят в их исполнении (некоторыми). Получше, чем половина школьников на уроке декламирует. Есть новые нейросетевые синтезаторы. Как достаточно быстрые, так и медленные. Фонетика — хорошо и местами отлично, просодия и интонирование — деградация, местами сильная. Причем практически независящая от ресурсоемкости.
Ну кожаные ублюдки, потраченный перевод и подобное - банально смешное само по себе. Это раз, оно не дошло до uncanny valley.
Чем больше или новее модель, тем она более "end-to-end". То есть грубо говоря труд инженеров заменяется на "GPU go brrrr" в широком смысле. То есть не делается отладка всего, сравнение разных систем, взвешивание за и против, длинный путь по допиливанию напильником.
Это не хорошо и не плохо (более того во многих областях ML это дало кембрийский взрыв возможностей), просто становится меньше "крутилок" и больше соблазн "закинул всё и пусть оно само так учится". А модели, чем более продвинутые, тем более "умные" по-своему, то есть они хорошо всасывают домен, и как бы не торопятся генерализовываться, если прямо сильно палками не бить. Отчасти многие генераторы картинок в поздней версии стали выдавать одно и то же рафинированное и скучное - будто финально оверфитнулись все на один сет красивых картинок. Хотя недавно я пробовал nano banana от гугл и был в принципе удивлён. Но уже давно перестал следить в чём там фишка.
Соответственно получаем высокие метрики звучания, но при этом само звучание может быть скучным и нет никаких крутилок. Ну или крутилки в духе "вкидывай промпт, с 100й попытки чет получится, но и то будет на рандоме".
просодия и интонирование — деградация, местами сильная.
Думаю хороший пример тут - вокалоиды. Просто определение проклятого синтеза и контроля. Там буквально можно пением до % тона управлять и приёмов пения. Но в интернете мемов про то, что Хацуне Мику не умеет говорить по-английски - тысячи с миллионами просмотров.
При этом сделать качественный хорошо поющий синтез - это задача со звёздочкой, ну или как минимум немалая работа. Если честно я хз как он сделан у сервисов генерации музыки. Моя догадка, что там присутствуют "голливудские" банки условно всей лицензированной музыки. Аранжировки там точно часто не MIDI, а реальные шаблоны из реальных записей. Что касается редактирования поющего голоса - тут есть ряд идей, но как минимум это отдельная работа со всеми вытекающими. Но Хацуне Мику хорошо поёт … и плохо говорит. А тут наоборот.
Это принципиальная невозможность заложить их в новый пайплайн (обучение-MEL-вокодер)? Или просто создатели новых моделей настолько увлеклись новыми технологиями, что забили болт и видят только фонетику? В лучшем случае тянут тяжеленный непредсказуемый BERT, с таким же непредсказуемым результатом.
Тут не могу за всех сказать. Могу сказать, что как и в IT присутствует огромный культ-карго, "неповторимые" эксперименты, парки на сотни тысяч GPU и прочий пузырь. Ну и если представить, что вы ТРУЪ рисёрчер, и хотите потратить два годика, чтобы сделать лучший мире маленький, компактный классный синтез. Вам нужно как-то обойти все эти ваши "стартапы" с US$100m финансирования и опен-ай-ай. Отсюда наблюдаем, что наблюдаем. Кембрийский взрыв систем синтеза, где по сути одна и та же идея в виде LLM и GPU go brrrr.

Много непонятных слов, в целом понял, но на вопрос вы плохо ответили. Ушли сильно в сторону. Попробую перефразировать. Есть алгоритм, в терминологии плаваю, поэтому назову его параметрическим. Человек фиксировано задал кривые интонирования, как понимаю, из знаков пунктуации и количества слов между ними. Он работает. Работает неплохо и даже хорошо. Куда и почему это "хорошо" исчезло в нейросетевых синтезаторах? И можно ли этот параметрический метод надстроить над графическим для MEL или волновым представлением звука? В зависимости от того, в какой этап проще внедрить. Получив гибридную нейро-параметрическую модель, взяв лучшее от старых — интонирование, и новых синтезаторов — фонетика.
Впрочем, даже многие слушатели в первую очередь обращают внимание на фонетику, а интонирование за скобки. Хотя книга превращается в бу-бу-бу-бу. Я же стараюсь на это обращать внимание. Предлагаю слушать стихотворение, где ритм заложен изначально или синтетический тест, который сделал на основе как раз вашей демки.
В недрах тундры. Выдры в гетрах. Тырят в ведра. Ядра кедров.
В недрах тундры, выдры в гетрах. Тырят в ведра, ядра кедров.
В недрах тундры, выдры в гетрах, тырят в ведра, ядра кедров.
В недрах тундры, выдры в гетрах? Тырят в ведра, ядра кедров!
В недрах тундры, выдры в гетрах! Тырят в ведра, ядра кедров?
Нужно анализировать даже не само произношение, а различие между строками. В идеале, слушатель должен уверено восстановить пунктуацию прослушанной строки.
Короткий ответ - потому что нейросетки выучивают просодию из данных. И иногда там есть так называемый inductive bias (крутилки для юзера по-простому), которые учитывает сетка. В новых сетках крутилок меньше.
А чем более новый и огромный синтез - тем он лучше выучивает что-то, но непонятно что.
А старый синтез весь был грубо говоря на хардкоде. У нас в нашем старом синтезе тоже вот такие рофлы работали. А в новом такого веселого ада уже нет.
Здравствуйте. Упоминалась фильтрация по "homodict". Как это сделать? Можно ссылку на документацию. И почему бы в Вашей библиотеке не иметь разные функции для расстановки ударений в омографах и во всем остальном. Спасибо.
нейросетки выучивают просодию из данных.
Скажу как читатель со стажем. Впоследствии перешедшим на аудио. Как декламаторов, так и синтезированное. Подход если не полностью, то существенно ошибочен.
Как сознание читает текст? В нейтральном ключе, последовательно строит фрагмент реальности. Видит знак препинания и фиксирует этот фрагмент в соответствующем ключе. Для вопросительного и возможно восклицательного, ища и подсвечивая точку внимания. Ретроспективно.
С печатным текстом иное невозможно. Там нет указаний на акцентирование. Что авторы учитывают, возможно подсознательно. Вопросительные и восклицательные статистически заметно короче и обладают более простой внутренней структурой.
А что же с аудио, создаваемому синтезатором по этому тексту? С хорошим декламатором, который подсвечивает точку внимания, в ближайшем будущем сравниться невозможно. Нужно понимать смысл. Без него, более целевое декламаторское интонирование, только повредит выучиванию. А с пониманием смысла пока беда-беда.
А что же надо? Достаточно интонацией уверенно "ставить" знак препинания. Обобщенно. Не мешая мозгу излишней ажиотацией, самому находить и подсвечивать эту точку. То есть стать подобным обычному чтению! Тем более, мозгу сложнее обрабатывать ошибки, чем достраивать нюансы. Лучше нейтрально обозначить знак препинания, который получен из текста, гарантированно, чем ошибиться во внимании, о котором нужно догадываться.
Как это сделать? Пара соображений есть. Но общий низкий уровень понимания говорит — не позорься. Думайте, вы больше в этом понимаете!
Спасибо огромное, звучит очень вкусно - жду.
А есть ли шанс на появление новых языков? Особенно меня интересуют чешский и белорусский. Чешский вроде даже когда-то был в планах.
А ещё мечтаю увидеть Silero TTS с помощью ONNX Runtime. Тогда можно будет Windows-приложение делать на основе быстрой и худенькой Windows ML, плюс на картах всех производителей, а не только Nvidia :-)
Вы пишите, что ruaccent "удаляет некоторую пунктуацию / пробелы без какой-либо очевидной логики". Я использую ruaccent с моделью "turbo3.1" и не сталкивался с таким поведением.
Однако при переключении на silero-stress я обнаружил, что из текста удаляются все символы переноса строки. Является ли это ожидаемым поведением? Если да, можно ли как-то настроить модель, чтобы она сохраняла исходное форматирование текста?
Замечал, что символы процента удаляются, и пробелы перед дефисами. Кажется, еще перед кавычками и скобками.
По переносу строки проверим, спасибо за репорт.
удаляются все символы переноса строки
Тут можно заметить только, что у нас тулза для расстановки ударения в предложениях / нескольких предложениях, а не книгах целиком.
То есть знак переноса строки действительно лучше не удалять при санации (или потом возвращать назад), но если засунуть в инструмент целую главу или страницу книги - работать, понятное дело, не будет, или будет работать хуже.
Я передаю отдельные абзацы (RAG), иногда они содержат списки, каждый пункт которых идет с новой строки. После расстановки ударений я еще добавляю паузы (ssml) в том числе по символам перевода строки. Безусловно можно обрабатывать каждое предложение отдельно, просто текущее решение работает без этого.
Поэтому в древности люди пользовались древнегреческим. Там проставляются все ударения и орфография, так что как ты слово написал, так оно и читается, как будто специально для общения с роботами язык придумывали
Вся история языка - это его "порча". Люди "и так понимают всё", а в быту и па письме всё диктуется законом языковой экономии.
Наш алфавит и система письма практически минималистичны и основаны на морфологическом принципе орфографии. То есть всё прекрасно, если, конечно, знать ударение наперёд.
Поэтому вы по сути предлагаете пойти против законов развития языка и 400 лет языковой традиции.
Поэтому в древности люди пользовались древнегреческим
Времени было побольше, а сейчас английский язык общения. А там вообще с правилами чтения полная жесть. Но проще, чем в китайском.
Я видимо неясно выразился. Я никого не призываю учить древнегреческий. И прекрасно понимаю, что со временем язык меняется и упрощается ради удобства.
Что я хотел сказать, так это то, что если провести параллель с нашим временем и допустить, что им был нужен язык для общения с компьютером, и чтобы этот язык был на сто процентов однозначен. То все эти чрезмерные усложнения языка выглядят уже не такими чрезмерными.
Обновили silero-stress до версии 1.1.
Добавили несколько QoL изменений, о которых попросило комьюнити, а так же внесли немного фиксов и обновили документацию.
Модели можно использовать на CPU/GPU. Примеры тут.
Добавили флаги put_stress, put_yo, put_stress_homo, put_yo_homo, которые позволяют включать/выключать простановку ударений и/или буквы ё как в обычных словах, так и в омографах.
Добавили флаг stress_single_vowel, который отвечает за расстановку ударений в односложных словах.
Добавили пример, как расставлять ударения в обычных словах и в омографах независимо друг от друга.
Пофиксили небольшой баг — акцентор удалял символы переноса строки из исходного текста.
Здравствуйте.
Спасибо за Вашу работу.
Есть пара вопросов.
При sample_sent = 'Моя мать, моя посуду, рассказала о нем, что он нем. Ну... Говорить не умеет. И с этого момента все завертелось, и все завертелись. А елка моей сестры засияла!'
Если использовать, как я понимаю, фильтрафию по множеству омографов, то
print(accentor.homosolver(sample_sent)) выдает:
Мо+я мать, м+оя посуду, рассказала о н+ём, что он н+ем. Ну... Говорить не умеет. И с этого момента вс+ё завертелось, и вс+е завертелись. А елка моей сестр+ы засияла!'
Если использовать флаги, то:
print(accentor(sample_sent, put_stress=False, put_yo=True, put_stress_homo=True, put_yo_homo=True, stress_single_vowel=False))
выдает:'Мо+я мать, м+оя посуду, рассказала о нём, что он нем. Ну... Говорить не умеет. И с этого момента всё завертелось, и все завертелись. А ёлка моей сестр+ы засияла!'
Т.е. омограф 'все' в 'все завертелись' остался не обработанным.
И еще, зачем ставть знак '+' перед всегда ударной 'ё'?
И еще, зачем ставть знак '+' перед всегда ударной 'ё'?
То, что ё всегда ударная, это верно в 95% случаев, но строго говоря это не так. Плюс бывают слова с двумя буквами ё. Значит по закону Оккама проще не делать отдельное правило, а просто ставить ударение всегда даже на букву ё.
В русском языке во всех словах, где присутствует буква ё, ударение обязательно падает на неё. Исключением являются заимствованные (сёгун, сёрфингист, кёнигсбергский) и сложные, составные слова (трёхярусный). Также в группу исключений входят формы косвенных падежей (родительного, дательного и предложного) числительных "триста" и "четыреста": трёхсот, трёмстам, о трёхстах; четырёхсот, четырёмстам, о четырёхстах; слова с побочным ударением, например, самолётостроение; и ещё слово-неологизм ёфикатор = программа, которая умеет превращать в тексте букву Е в букву Ё где нужно.
—
print(accentor(sample_sent, put_stress=False, put_yo=True, put_stress_homo=True, put_yo_homo=True, stress_single_vowel=False))
выдает:'Мо+я мать, м+оя посуду, рассказала о нём, что он нем. Ну... Говорить не умеет. И с этого момента всё завертелось, и все завертелись. А ёлка моей сестр+ы засияла!'
Т.е. омограф 'все' в 'все завертелись' остался не обработанным.
Ну омограф-то обработался, просто ударение пропустилось из-за флага stress_single_vowel=False, который вы поставили.
Если поставить такие флаги:
accentor(sample_sent,
put_stress=False,
put_yo=True,
put_stress_homo=True,
put_yo_homo=True,
stress_single_vowel=True)
То будет так: Мо+я мать, м+оя посуду, рассказала о н+ём, что он н+ем. Ну... Говорить не умеет. И с этого момента вс+ё завертелось, и вс+е завертелись. А ёлка моей сестр+ы засияла!
То всё будет в порядке. Ведь слова нем / нём / все / всё имеют всего 1 гласную, вот и пропускаются.
Решение работает на 1 потоке процессора с поддержкой AVX2 инструкций
В таком случае подумайте, возможно, стоит дописать в Readme инструкцию для установки на CPU (разница в трафике весомая, сколько Гб?).
Я попробовал установку по описанным шагам на лимитном тарифе, не понравилось:pip install -q silero-stress (скачал ~1Гб... И, не дождавшись финала, прервал установку).
Вот решение для CPU (~200Mb):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -q silero-stress

Мы решили задачу омографов и ударений в русском языке