Сборка Demagog для models VOSK-TTS от tonio_k
|
|
Dlmon | Дата: Суббота, 15.02.2025, 22:55 | Сообщение #61 |
Группа: Пользователи
Сообщений: 34
Статус: Offline
| мде..., кто о тёплом, кто о мягком... я про корявость встроенных функций вообще, которые за 10 лет, нормально так и не написали, а вы про какие-то непонятные chisla, index
Цитата в любой сомнительной ситуации правила можно поместить в другой словарь, а не пихать все в одно место вот это оч интересное замечание 
вот просто выделил и скопировал несколько строк из моего основного словаря:
Код моложавого лица=моложавого литс+а опера пытаются=опер+а пытаются опера как * пытаются=опер+а как * пытаются мои опера=мои опер+а многие из * занимаются дома=многие из * занимаются д+ома многие * занимаются дома=многие * занимаются д+ома занимаются дома с учителями=занимаются д+ома с учителями занимаются дома с * учителями=занимаются д+ома с * учителями места в зале были=мест+а в зале были места в * были=мест+а в * были хорошего виски=хорошего в+иски бутылк* * виски=бутылк* * в+иски бутылк* виски=бутылк* в+иски бутылку хорошего виски=бутылку хорошего в+иски отпираемых замков=отпираемых замк+ов личного учителя=личного уч+ителя
очень интересно как бы вы делили это на разные словари , а потом сортировали..., и в какой последовательности применяли 
а это несколько строк из словаря "всё"
Код она все выдала=она всё выдала представители * родов, да и то не все.=представители * родов, да и то не вс+е. на все кроме=на всё кроме все рассудит=всё рассудит все в этом * прекрасно знают причину=вс+е в этом * прекрасно знают причину $Все так — согласил*=Всё так — согласил* $Все — не смеши меня=Всё — не смеши меня $Все, не смеши меня=Всё, не смеши меня $Все не смеши меня=Всё, не смеши меня $Все! Этого достаточно=Всё! Этого достаточно делать все каникулы=делать вс+е каникулы делать все выходные=делать вс+е выходные делал* все выходные=делал* вс+е выходные делал* все каникулы=делал* вс+е каникулы у нас с * все хорошо=у нас с * всё хорошо Так что все, на сегодня=так что всё, на сегодня $Все из * начал выкачивать=Всё из * начал выкачивать все получилось=всё получилось все хорошо получилось=всё хорошо получилось
его тоже предлагаете делить? ?)
Сообщение отредактировал Dlmon - Суббота, 15.02.2025, 23:44 |
|
| |
tonio_k | Дата: Воскресенье, 16.02.2025, 05:07 | Сообщение #62 |
Группа: Пользователи
Сообщений: 178
Статус: Offline
| Цитата Dlmon (  ) очень интересно как бы вы делили это на разные словари , а потом сортировали..., и в какой последовательности применяли возьмите мою любую сборку и на конкретном примере посмотрите как. В названии словарей подсказка по какому признаку они разбиты, нумерация показывает в какой последовательности. Обратите внимание на папку dic2 она срабатывает первой! Попробуйте применить словарь "20..... (index).rex" (название не помню с телефона пишу) к книге штатно, в Демагоге или Балаболке, а потом запустите через скрипт в составе сборки - сравните скорость. Возникнут вопросы - спрашивайте.
Цитата Dlmon (  ) я про корявость встроенных функций вообще, которые за 10 лет, нормально так и не написали Я более 5 лет занимаюсь составлением словарей в Демагоге и могу сказать, что что все функции очень даже продуманы. В создании некоторых я даже был инициатором . То что вы не знаете про тонкости, про chisla и index говорит как раз о том, что вы на проблемы словарей смотрите линейно. Тогда меня удивляет, почему вас не устраивает "штатная" сортировка в Демагоге и в Балаболке по длине левой части правил в правилах dic. Это достаточно линейно и логически обосновано - чем длиннее правило, тем более оно защищено от ложного срабатывания. И тут как раз плюсик (+) в правиле является гарантом того, что следущее (по сортировке) за длинным более короткое правило уже ложно не сработает, потому это правило ищет словосочетания без плюсика, а плюсик в текст уже поставлен предыдущим правилом.
Если вы делаете свои словари с нуля, то конечно, мои советы через призму моей сборки будут неуместны. Но если вы взяли словари из моей сборки за основу и неразобравшись дополняете своими правилами, то тогда, получив неожиданные результаты, начинаете грешить на функции Демагога. Может, имеет смысл узнать тонкости, по какому принципу они работают и в чем их преимущество и недостатки. Тогда, спросить совета, как это обойти, как можно схитрить.
Например, схематично в моей сборке словари условно разделены на 2 половины и последовательности срабатывания: 1) словари с регуляными выражениями Регулярные выражения используются в сложных многословных комбинациях, где правила "статистически" захватывают большой "вероятностный" диапазон срабатываний и подразумевает допущения, что такое сочетание слов "чаще будет иметь такое то ударение" на этом этапе ложные срабатывания имеют высокую вероятность. Словари с регуляными выражениями работают медленно, но благодря index и особенности составления словаря rex скорость в моей сборке возрастает в разы! Возможно, современные ПК работают так быстро, что разницы уже никакой нет. (10 секунд с index или 40 секунд без index. Разница аж в 4! раза, но пользователю такой разницей уже можно пренебречь. Но если старый ноутбук на 7-ке, то 10 минут или 40 минут? Вроде те же "в 4 раза" но пользователю уже интересно что там про index говорили? ))
2) словари простых замен dic Здесь сначала идут словари со звёздочками. Они похоже на регулярные выражения в плане допущения, что все словосочетания, попадающие под фильтр со звёздами скорее всего будут иметь вероятностно такое-то ударение. Т.е. в правилах со звёздочкой вероятность ложного срабатывания относительно высокая. Затем идут простые словари с правилами из двух слов - Тут тоже высокая вероятность ложных срабатываний, затем идут словари сочетания из трех и больше слов. И все эти словари не используют (+) как ударение потому что поставил + в правило, больше его не поправить. И лишь затем идут уточняющие словари и словари итоговые, которые ставят плюсик (+) или подставляют фонему MFA тем самым изковеркуют в слово в тексте так, что дальнейшие словари уже не имеют смысла т.к.уже не сработают. Тут я не уточняю о необходимости срабатывания первыми словари ёфикации, т.к. последующие словари содержат правила с буквой ё. И следовательно, для работы со словарями желательно предварительно прогнать текст через предвариткельную чистку и расстановку букв ё. И работать с полученым текстом, что бы не городить правила, которые в дальнейшем не сработают, т.к. забыли про ё Если словарь dic со звёздочками, то лучше к нему применять алгоритм прямого перебора. Сравнительно работает быстрее и точнее чем быстрый алгоритм. Если словарь состоит из простых правил 1-2 слова, то лучше применять словари с быстрым алгоритм. Если словари с правилами из 3+ слов, то быстрый алгоритм особо от прямого перебора не отличается. В моей сборке сортировка везде отключена. Как пользователь отсортировал правила в словаре-в такой последовательности к тексту и применяется. Про умолчанию DicRepl применяет быстрый алгоритм и сортирует по длине правил. В скрипте это отключаете и вот DicRepl уже заменяет по алгоритму прямого перебора без сортировки. Соответственно, в функции WFilterAutoDicAlgorithm(i, j, d, g, y, z) можно регулировать (включить/отключить) сортировку или алгоритм (быстрый или перебор) путём переименования название файла словаря. У этой функции приемущество, что можно открыть текст в окне Демагога в utf8 кодировке и применить словари содержащие правила с utf8 символами без заморочек и быстро по скорости. (Особенно если использовать окно (-1). И подобных нюансов довольно много. Надо Учитывать их при заполнении словаря, что приходит с опытом и эксперименами. К счастью или к сожалению, современные голосовые движки уже в течении года появляются по нескольку штук или обновляются старые. Причём, намного быстрее, чем составляются пльзовательские словари. В итоге большой продуманный словарь будет в делать ложные срабатывания больше, чем голосовой движок ошибается "по умолчанию". Зато тут проще будет создать новый словарь "с нуля" чем тащить словари из устаревших сборок. Я фанат ivona Maxim. Это устаревший движок. К нему требуется особый подход, сложные правила и поддержка utf8 символов. Сложности требовали сложных и нестандартных решений, которые сейчас с успехом решены. Поэтому немного обидно читать про отсутствие логики и о кривизне программы, которая писалась по стандартам Говорилки для голоса Николая и на протяжении многих лет считалось достаточным и логичным. Попытки уйти в сторону на практике всегда возвращало обратно к стандарту Говорилки. ТОЛЬКО благодаря поддержке Демагогом скриптов удалось выйти из вшитого в него шаблонов. Любую "корявость" можно исправить скриптом, а потом узнать, что, оказывается, все давно придумано кем -то до нас)) Пару лет назад автору Демагога стало проще написать маленький скрипт или добавить новую функцию в calculator.lua, чем переписать Демагог. Тем более, перепишешь программу под новичка, а потом окажется, что кто то до сих пор слушает Николая и делает правки в словаре раз в две книги благодаря своим наработками, а тут Демагог полностью переписан.... К сожалению, есть у меня подозрение, уже превращающееся в уверенность, что последний Демагог это уже последний Демагог 😥 и только скрипты продлевают ему жизнь.
|
|
| |
Dlmon | Дата: Воскресенье, 16.02.2025, 12:16 | Сообщение #63 |
Группа: Пользователи
Сообщений: 34
Статус: Offline
| Цитата tonio_k (  ) Если вы делаете свои словари с нуля, ну не с нуля конечно, когда зрение начало меняться, установил на планшет YandexTSS. когда привык "почти" не смотреть на текст в читалке MoonReader, начал использовать еще и Alisa-fb2 куда добавил правила из словаря от YandexTSS
потом узнал про Demagog+YandexTSS добавил туда чтение с экрана но словари не понравились и в сборку вставил словарь от YandexTSS + Alisa-fb2
потом узнал про Silero надергал откуда можно словари чисел и 3-х-миллионные простые словари...
в общем, у меня не все словари с нуля и даже дернул из вашей сборки "mylib_index.lua" - использую для применения 3-х миллионного словаря
|
|
| |
Suravel | Дата: Понедельник, 17.02.2025, 15:09 | Сообщение #64 |
Группа: Пользователи
Сообщений: 14
Статус: Offline
| Цитата tonio_k (  ) Я более 5 лет занимаюсь составлением словарей в Демагоге и могу сказать, что что все функции очень даже продуманы. Словари, действительно очень продуманы и, кроме того, в них вложено, не могу даже представить, сколько времени. Это огромный труд. Проблема в том, что обычному пользователю, не знакомому с регулярными выражениями и прочей программистской кухней, на которых, собственно, и должна быть рассчитана программа, очень сложно в них разобраться. Я вот оценила скорость работы словарей, но, в конечном счете, это очень мало помогает, если сталкиваешься с ошибкой именно по вине словарей, не знаешь на каком этапе их применения она возникает и как ее исправить, чтобы она не появлялась снова. Кроме того, если словари подогнаны под определенный голосовой движок, то для других, более современных некоторые правила могут быть не только не нужны, но и вызывать ошибки произношения.
Приведу примеры. Не так давно даже Яндекс, не говоря уж о большинстве офлайновых движков, не мог правильно прочитать букву "ц" и приходилось заменять ее на "тс". Но для новых голосов яндекса это не нужно. Без замены они читают лучше. Так же с ёфикацией. Модель, за очень редким исключением, правильно определяет, где е, а где ё. Но после ёфикации, например, вместо слова "вперёд" получаем "вперьод". И поскольку мягкий знак в русском языке имеет ещё и разделительную функцию, пример тому: льёт. пьёт и т.п., то робот так и читает "вперьёд". Кроме того, какой-то словарь упорно исправляет слова, которые, видимо по его разумению, написаны неправильно. Так у меня в тексте несколько раз встретилось слово "слабо", (возможно, у переводчика недостаточный словарный запас). И везде это злополучное слово было исправлено на "слаб+а". Это звучало так: Пелл слаб+а пошевелился... Он слаб+а покачал головой... Он слаб+а тряхнул рукой... Ну, и т.д. И здесь теряется весь смысл использования словарей, которые, несомненно, составлялись с целью ускорить работу и облегчить жизнь пользователю, потому что после обработки словарем всё равно приходится вычитывать текст и исправлять появившиеся ошибки. Я открыла словари, посмотрела на регулярные выражения и... естественно, закрыла. Я не совсем чайник, но я нисколько не переоцениваю свои возможности, и отмерянное мне время, а потому в регулярные выражения лезть не хочу.
Омографы. С моей точки зрения, там тоже слишком много лишнего. Вряд ли стоит включать в общие словари фразы, присущие какому-то определенному автору или встречающиеся в какой-то одной книге. У меня в балаболке небольшой словарь омографов, который я составляла сама и пополняю по мере надобности. Так большинство ударений в омографах, зависит от падежного окончания предшествующего слова или склонения следующего за ним. Так же учитываются предлоги. Трудность составляют только омографы, которые не только одинаково пишутся, но и одинаково склоняются, например, з+амок и зам+ок. Но таких не так уж много. В таких словах, пока не придумала ничего нового, ударения я расставляю вручную. Благо балаболка подсвечивает их другим цветом. Но вот над этой задачей я продолжаю думать, потому что это мне интересно. Мне нравится озвучивать книги и я стараюсь делать это по-возможности максимально хорошо. И я бы с удовольствием работала с вашими словарями, но с точки зрения непрофессионала, там сам чёрт ногу сломит.
К ним нужна инструкция мало-мальски понятная любому чайнику. Но проблема в том, что профессионалам очень трудно понять, что же там кому-то может быть не понятно. Мне, например, очень жаль, что такой огромный труд из-за этого может быть недооценен. Ведь во всё, что мы делаем, мы вкладываем часть нашей, не такой уж длинной, жизни, что особенно хорошо понимаешь, когда она почти вся уже позади.
Сообщение отредактировал Suravel - Понедельник, 17.02.2025, 15:13 |
|
| |
Lecron | Дата: Понедельник, 17.02.2025, 19:59 | Сообщение #65 |
Группа: Пользователи
Сообщений: 26
Статус: Offline
| Цитата Suravel (  ) Модель, за очень редким исключением, правильно определяет, где е, а где ё. Когда-то смотрел словари сборок и они мне показались логичными. Но потом перешел на свой движок коррекции, где словари разделены на несколько типов: * подготовительные * обработка чисел и скоращений * омографы. Часть правилами, часть морфологической нейросетью Natasha (ед — скалы`, мн — ска`лы), часть собственным решением (смысловые — берет/берёт, пиро`га/пирога`) * общие — ударения и та же ё-фикация. льет=льёт. Если движок "ругается" на льёт, то это плохой движок и винить надо его, а не словарь. Ибо ё это штатная буква и многие книги изначально ё-фицированы. * движковые — вперёд=вперьод и преобразования внутренней метки ударений в нужную движку.
Никаких проблем в понимании места ошибки и редактировании.
Цитата Suravel (  ) Модель, за очень редким исключением, правильно определяет В последнее время кажется начинаем работать/слушать не с моделью, а моделями — silero, vosk, ёж, гугл, яндекс, MultiTTS на Андроиде с кучей разных движков. Поэтому нужно либо плевать на словари, топ-10000 слов модель действительно умеют сами и мирится с 1 ошибкой на 100-200 слов, либо полностью подменять их препроцессинг, брать всю подготовку на себя. Промежуточное решение скорее грузит процессор, чем несет пользу.
|
|
| |
Sazonik | Дата: Среда, 19.02.2025, 07:37 | Сообщение #66 |
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Подскажите а обрабюотку слоаврем из консоли реализовано как то?
|
|
| |
tonio_k | Дата: Среда, 19.02.2025, 10:30 | Сообщение #67 |
Группа: Пользователи
Сообщений: 178
Статус: Offline
| Цитата Sazonik (  ) обрабюотку слоаврем из консоли реализовано как то? можно сделать копию текущего скрипта и в нём заремарить все диалоговые окна. При этом, все настройки применения словарей и включение/отключение/настройки записи в аудио берутся из сохранённых ранее настроек последнего запуска скрипта (они хранятся в файле #UserForm.txt можно и тут поменять, если разберётесь). К Демагогу можно обратиться через cmd командную строку. Она заставит Демагог запуститься, (можно в свёрнутом виде), запустить указанный в командной строке ваше копию скрипта без диалогов и закрыть Демагог после отработки скрипта. Полностью сделать Демагог невидимым не получится. Командная строка описана в справке Демагога (F1) в 9 главе.
|
|
| |