Мы Опубликовали Качественный, Простой, Доступный и Быстрый Синтез Речи

    fiona


    Вокруг темы синтеза речи сейчас много движения: на рынке есть огромное число тулкитов для синтеза, большое число закрытых коммерческих решений за АПИ (как на современных технологиях, так и на более старых, т.е. "говорилки") от условных GAFA компаний, большое количество американских стартапов, пытающихся сделать очередные аудио дипфейки (voice transfer).


    Но мы не видели открытых решений, которые бы удовлетворяли одновременно следующим критериям:


    • Приемлемый уровень естественности речи;
    • Большая библиотека готовых голосов на разных языках;
    • Поддержка синтеза как в 16kHz так и в 8kHz из коробки;
    • Наличие своих собственных голосов у авторов решения, не нарушающих чужие права и лицензии;
    • Высокая скорость работы на "слабом" железе. Достаточная скорость работы на 1 потоке / ядре процессора;
    • Не требует GPU, команды ML инженеров или какой-либо дополнительной тренировки или для использования;
    • Минимализм и отсутствие зависимостей / использование в 1 строчку / не надо ничего собирать или чинить;
    • Позиционируется именно как готовое решение, а не очередной фреймворк / компиляция чужих скриптов / тулкитов для сбора плюсиков;
    • Решение никак не связано и не аффилировано с закрытыми экосистемами и продуктами Гугла / Сбера / Яндекса / вставить нужное;

    Мы попытались учесть все эти пункты и представить комьюнити свое открытое некоммерческое решение, удовлетворяющее этим критериям. По причине его публичности мы не заостряем внимание на архитектуре и не фокусируемся на каких-то cherry picked примерах — вы можете оценить все сами, пройдя по ссылке.


    Краткий Обзор Решений


    Данная статья не ставит своей целью глубокий технический обзор всех доступных решений. Мы хотим просто обрисовать некий ландшафт из доступных вариантов с минимальной степенью готовности. Понятно, что мы не рассматриваем многочисленные тулкиты, а смотрим в первую очередь какие есть более-менее готовые решения с ненулевой библиотекой голосов и подобием поддержки / комьюнити:


    • Конкатенативные модели (появившиеся до DL бума). Из того, что хоть как-то поддерживается и живо и можно запустить "as-is" без археологических раскопок, я нашел только rhvoice (я глубоко не копал, но есть целые форумы, посвященные использованию голосов из Windows, но вряд ли это можно назвать поддерживаемым решением). На момент, когда я пользовался проектом ради интереса, он по сути был заброшен, но потом у него появился новый "хозяин". К плюсам такого рода решений можно отнести их скорость и нетребовательность к ресурсам (исключая ресурсы, чтобы заставить это работать). Очевидный и основной минус — звучит как говорилка. Менее очевидный минус — довольно тяжело оценить стоимость обладания. Качество звучания: 3+ по пятибалльной шкале;


    • DL-based модели в основном разделяют end-to-end TTS задачу на подзадачи: текст -> фичи и фичи -> речь (вокодинг). Практически повсеместно для первой подзадачи используется Tacotron2. Выделим следующие сочетания моделей в соответствии с их эффективностью и простотой использования:


      • Tacotron2 + WaveNet (оригинальный WaveNet принимал на вход лингвофичи, но для такотрона поменяли на более удобные мелспектрограммы). Основная проблема — очень медленный инференс ввиду авторегрессионности модели и необходимость запретительно большого количества ресурсов и времени. Качество звучания: 4+;


      • Tacotron2 + WaveRNN (тоже с переходом от лингвофичей к спектрограммам). Вокодер заметно быстрее предыдущего: при использовании всех хаков можно получить даже риалтайм синтез без GPU, правда естественность звука несколько просядет. Качество звучания: 3.5-4;


      • Tacotron2 + Parallel WaveNet. Упомянутый выше медленный вокодер был использован в качестве учителя для получения новой довольно быстрой параллельной модели вокодера: с ней стал возможен синтез быстрее риалтайма, но все еще на мощных GPU. Из недостатков — дистилляция требует качественную учительскую модель и соответствующую схему обучения. Качество звучания: 4+;


      • Tacotron2 + multi-band WaveRNN. Тоже развитие предыдущих идей, тоже распараллеливание в некотором смысле — здесь доступен синтез быстрее риалтайма уже на CPU. Однако, не слишком популярная работа, меньше имплементаций и поддержки, хотя некоторые подходы хороши и были успешно использованы в более поздних моделях; Качество звучания: 3.5-4+;


      • Tacotron2 + LPCNet. Интересная идея про сочетание DL и классических алгоритмов, что может дать буст по скорости до подходящего для продакшена уровня и на CPU, но требует вдумчивого допиливания для качественных результатов. Качество звучания: 3.5-4+;


      • Многочисленные решения на базе Tacotron2 + Waveglow от Nvidia как нынешний стандарт для задачи синтеза речи. Никто не пишет про свой "секретный соус" (например как 15.ai делает голос по 15 минутам и сколько там моделей в цепочке). Есть много имплементаций и репозиториев, которые "копируют" чужой код. Может звучать на cherry-picked примерах неотличимо от живых людей, но когда смотришь реальные модели от комьюнити, качество заметно варьируется, а детали улучшенных решений не раскрываются. Архитектурно к такотрону и его аналогам по скорости и цене обладания претензий нет, но Waveglow очень прожорлив к ресурсам как на тренировке, так и в продакшене, что делает его использование по сути нецелесообразным. Качество звучания: 3.5-4+;


      • Замена Tacotron2 => FastSpeech / FastSpeech 2 / FastPitch, то есть уход к более простой сетке (на базе forced-align от такотрона и миллион более хитрых и сложных вариантов). Из полезного дает контроль темпа речи и высоты голоса, что неплохо, вообще упрощает и делает более модульной конечную архитектуру. Немаловажно, что сетка перестает быть рекуррентной, что открывает просторы для оптимизаций по скорости. Качество звучания: 3.5-4+;




    Оценки Качества и Примеры Аудио


    Чтобы не вдаваться в дебри, мы поступили максимально просто: синтезировали аудио из валидационной выборки датасетов (~200 файлов на спикера), смешали с оригинальными аудио этой же выборки и дали группе из 24 людей для оценки качества звучания по пятибалльной шкале. Для 8kHz и 16kHz оценки собирали раздельно, градация оценок — [1, 2, 3, 4-, 4, 4+, 5-, 5] — с большей детализацией для более качественного звука.


    Всего было поставлено 37,403 оценок. 12 человек сделали оценку полностью. Еще 12 людей успели проставить только от 10% до 75% оценок. Дальше для каждого спикера мы просто посчитали среднее (в скобочках приведено стандартное отклонение). Расчет среднего от медиан по каждому аудио завышает средние оценки на 0.1 — 0.2 балла, но не влияет на отношения. Показательны естественно скорее отношения средних баллов друг к другу. Дисперсия довольно высокая, но оценки пользователей отличались сильно и мы решили не выбрасывать никакие, т.к. оценки одного пользователя были консистентными друг с другом. По ряду соображений мы провели такую оценку только на своих уникальных голосах:


    Спикер Оригинал Синтез Отношение Примеры
    aidar_8khz 4.67 (.45) 4.52 (.55) 96.8% link
    baya_8khz 4.52 (.57) 4.25 (.76) 94.0% link
    kseniya_8khz 4.80 (.40) 4.54 (.60) 94.5% link
    aidar_16khz 4.72 (.43) 4.53 (.55) 95.9% link
    baya_16khz 4.59 (.55) 4.18 (.76) 91.1% link
    kseniya_16khz 4.84 (.37) 4.54 (.59) 93.9% link

    Мы просили людей в первую очередь оценивать естественность звучания речи (а не качество звука). Нас удивило, что по расспросам обычные люди на своих ежедневных девайсах не особо слышат разницу между 8 kHz и 16 kHz (что подтверждается оценками)! Самые низкие абсолютные оценки и самое низкое отношение у Байи. Самые высокие абсолютные оценки — у Ксении, а относительные — у Айдара. Тут важно отметить, что у Байи меньше поставлен голос, но поэтому он звучит более по-человечески за счет этого. У Байи также выше дисперсия оценок.


    Ручной просмотр аудио с большими расхождениями показывает ошибки спикеров, ошибки такотрона, ошибочные паузы (тоже вследствие ошибок такотрона), имена собственные и сложные слова, которые вообще непонятно как читать. Естественно 75% таких расхождений в синтезе (а не оригинале) и частота дискретизации особо не влияет.


    Если мы пытались дать численную оценку естественности, то еще хорошо бы оценить "неестественность" или "роботизированность" голоса. По идее ее можно оценивать, давая людям пару аудио на выбор и прося выбрать между ними. Но мы пошли дальше и по сути применили "двойной слепой тест". Мы в случайном порядке дали людям поставить оценки "одному и тому же аудио" 4 раза — оригинал и синтез с разной частотой дискретизации. Для участников исследования, разметивших весь датасет, получается такая таблица:


    Сравнение Хуже Одинаково Лучше
    16k против 8k, оригинал 957 4811 1512
    16k против 8k, синтез 1668 4061 1551
    Оригинал против синтеза, 8k 816 3697 2767
    Оригинал против синтеза, 16k 674 3462 3144

    Тут напрашивается несколько выводов:


    • В 66% случаев люди не слышат разницы между 8k и 16k;
    • В синтезе, 8k немного помогает скрыть ошибки;
    • Примерно в 60% случаев люди считают, что синтез не хуже оригнала по естественности;
    • Показательно, что два последних вывода не особо зависят от частоты дискретизации (8k имеет небольшое преимущество);

    Можете оценить сами, как это звучит, как для наших уникальных голосов, так и для спикеров из внешних источников (больше аудио для каждого спикера можно синтезировать в colab.


    Если вы не дружите с колабом или глаза разбегаются от количества файлов в папках с примерами, то вот несколько случайных аудио:


    Айдар:





    Байя:





    Ксения:





    Еще раз обращаю внимание, что это не cherry-picked примеры, а реальное звучание синтеза.


    Бенчмарки по Скорости


    После качества скорость является следующим определяющим свойством модели, для измерения скорости синтеза мы используем следующие простые метрики:


    • RTF (Real Time Factor) — какую долю длительности аудио занимает синтез этого аудио;
    • RTS = 1 / RTF (Real Time Speed) — насколько синтез "быстрее" риалтайма;

    Метрики мы снимали на двух устройствах с помощью встроенных в PyTorch 1.8 утилит:


    • CPU — Intel i7-6800K CPU @ 3.40GHz;
    • GPU — 1080 Ti;
    • При снятии метрик на CPU мы также ограничивали число используемых потоков;

    Для моделей 16 kHz получаются такие показатели:


    Батч Устройство RTF RTS
    1 CPU 1 thread 0.7 1.4
    1 CPU 2 threads 0.4 2.3
    1 CPU 4 threads 0.3 3.1
    4 CPU 1 thread 0.5 2.0
    4 CPU 2 threads 0.3 3.2
    4 CPU 4 threads 0.2 4.9
    --- ----------- --- ---
    1 GPU 0.06 16.9
    4 GPU 0.02 51.7
    8 GPU 0.01 79.4
    16 GPU 0.008 122.9
    32 GPU 0.006 161.2
    --- ----------- --- ---

    Для моделей 8 kHz получаются такие показатели:


    Батч Устройство RTF RTS
    1 CPU 1 thread 0.5 1.9
    1 CPU 2 threads 0.3 3.0
    1 CPU 4 threads 0.2 4.2
    4 CPU 1 thread 0.4 2.8
    4 CPU 1 threads 0.2 4.4
    4 CPU 4 threads 0.1 6.6
    --- ----------- --- ---
    1 GPU 0.06 17.5
    4 GPU 0.02 55.0
    8 GPU 0.01 92.1
    16 GPU 0.007 147.7
    32 GPU 0.004 227.5
    --- ----------- --- ---

    Также при расчетах скорости мы были удивлены ряду вещей:


    • Процессоры AMD показали себя сильно хуже;
    • Удивительно, но бутылочным горлышком в нашем случае оказался именно такотрон а не вокодер (еще остается существенный потенциал ускорения всей системы в 3-4 раза, а может даже и в 10 раз, если получится квантизация и дополнительное сжатие);
    • Более чем 4 потока CPU не помогают, равно как и батч больше 4;

    Список Доступных моделей и Ссылки на Датасеты


    Для простоты мы решили опубликовать все наши модели в рамках проекта silero-models. Список актуальных моделей всегда можно найти в этом yaml файле.


    На момент написания этой статьи доступны следующие голоса (доступны _16khz и _8khz версии голосов):


    Спикер Пол Язык Источник Лицензия Датасета Примеры Colab
    aidar m ru Silero Private 8000 / 16000 Open In Colab
    baya f ru Silero Private 8000 / 16000 Open In Colab
    ksenia f ru Silero Private 8000 / 16000 Open In Colab
    irina f ru Private contribution TBD 8000 / 16000 Open In Colab
    natasha f ru source CC BY 4.0 8000 / 16000 Open In Colab
    ruslan m ru source CC BY-NC-SA 4.0 8000 / 16000 Open In Colab
    lj f en source Public Domain 8000 / 16000 Open In Colab
    thorsten m de source Creative Commons Zero v1.0 Universal 8000 / 16000 Open In Colab
    gilles m fr source Public Domain 8000 / 16000 Open In Colab
    tux m es source Public Domain 8000 / 16000 Open In Colab

    Как Попробовать


    Все модели опубликованы в репозитории silero-models, там также есть примеры запуска синтеза в colab. Для полноты приведем минималистичный пример (да, это действительно так просто):


    import torch
    
    language = 'ru'
    speaker = 'kseniya_16khz'
    device = torch.device('cpu')
    
    (model,
     symbols,
     sample_rate,
     example_text,
     apply_tts) = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                              model='silero_tts',
                                              language=language,
                                              speaker=speaker)
    
    model = model.to(device)  # gpu or cpu
    audio = apply_tts(texts=[example_text],
                      model=model,
                      sample_rate=sample_rate,
                      symbols=symbols,
                      device=device)

    На данный момент поддерживаются следующие спец-символы: !\'(),.:;?¡¿. Кроме того, для большинства спикеров русского языка в тексте для озвучивания были использованы метки ударения (символ + перед ударной гласной, при тестировании таких моделей пока еще нужно ставить ударение вручную):


    Спикер С ударением
    aidar да
    baya да
    ksenia да
    irina да
    natasha да
    ruslan да
    lj нет
    thorsten нет
    gilles нет
    tux нет

    В будущем мы планируем перевести все модели на более простой и унифицированный формат, не требующий ударений. Чтобы не запутаться, в yml файле, который описывает все наши модели, явно указан набор токенов для каждой модели и пример фразы для генерации.


    Философия, Лицензия и Мотивация


    Как авторы моделей, мы считаем следующие правила использования моделей справедливыми:


    • Голоса из внешних источников приведены исключительно в целях демонстрации и будут удалены;
    • Любые из описанных выше моделей нельзя использовать в коммерческих продуктах;
    • Репозиторий silero-models опубликован под лицензией GNU A-GPL 3.0. Де-юре это не запрещает коммерческое использование, но по факту мы еще не встречали коммерческие решения с полностью открытым кодом, чего требует эта лицензия;
    • Если вы ставите своей целью некоммерческое использование наших моделей во благо общества — мы будем рады помочь вам с интеграцией моделей в ваше решение;
    • Если вы планируете использование наших моделей в личных целях (по фану или для озвучки каких-то текстов), то делитесь результатами своих экспериментов в репозитории;
    • Если вы планируете использование наших моделей в некоммерческих продуктах для людей с нарушениями речи или зрения — обращайтесь, мы поможем с интеграцией, чем умеем;

    Делая этот проект мы ставили своей целью ценой многочисленных компромиссов показать, что современный TTS, удовлетворяющий описанным выше критериям, возможен. И для этого не нужно быть заложником закрытых экосистем корпораций.


    Дальнейшая Работа


    Мы планируем постоянно развивать и улучшать свое решение, в частности:


    • Рано или поздно добавить поддержку изменения скорости и высоты голоса;
    • Продолжать работать над качеством и естественностью звучания и расширять библиотеку голосов;
    • Мы оцениваем, что есть еще запас ускорения всего пайплайна в целом примерно в 3-4 раза (возможно даже до 10 раз, если повезет);
    • Маловероятно но не исключено, что рано или поздно мы сможем добавить мульти-спикерную модель или voice-transfer;

    Скороговорки


    И в качестве бонуса, немного скороговорок.


    Русский язык:






    Другие языки:





    Only registered users can participate in poll. Log in, please.

    На какой платформе будете запускать / пробовать?

    • 21.2%Colab / Jupyter Notebook / Jupyter Lab25
    • 34.8%Windows 1041
    • 5.1%Windows, 7/86
    • 44.1%Linux52
    • 14.4%MacOS17
    • 1.7%Windows XP или старше2
    • 9.3%ARM / ARM6411
    • 4.2%iOS5
    • 21.2%Android25
    • 12.7%Raspberry Pi или подобное15
    • 0.8%Jetson / Jetson Nano или подобное1
    • 4.2%Другие ускорители или одноплатники5
    • 0.8%Свой вариант (пишите в комментарий)1
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 219

      +15

      Огромная титаническая работа! Вы молодцы! Желаю удачи.

        +2

        Отличная работа! Было бы круто послушать эту статью в озвучке например Ксении )))

          +10

          Да, это несложно по идее. Сейчас основной косяк в том, что надо руками ударение ставить (или править за алгоритмами). Но надо было с чего-то начинать.


          Может кто-то из комьюнити сделает по фану) Заодно найдутся какие-то грабли. Основные грабли, которые люди пока находили:


          • Кормить надо по одному предложению (можно батчами);
          • Знаки пунктуации надо оставлять, они влияют на интонацию;
          • Аббревиатуры и иностранные слова надо "перевести" (СССР = +эс+эс+эс+эр);
          • Ударения;

          Но поскольку задача была дать минималистичный end-to-end алгоритм, пока сделали, что смогли доступными ресурсами.

            0
            А вот такой вопрос: есть ли простые для пользователя и бесплатные (либо недорогие) сервисы по переводу аудиодорожки в текст? Именно готовые решения, может на основе сервисов Гугла или Яндекса.
              +3

              Мы планируем сделать полностью бесплатный некоммерческий сервис для физических лиц как раз (студенты / журналисты / юристы)


              Чтобы адресовать дыру а рынке как раз.


              Stay tuned как говорится

                +1

                И потом попробовать рекурсивно натравить эти сервисы друг на друга :)

                  0

                  Лучшее всегда враг хорошего.

                  +1
                  Сервис именно с таким функционалом? Аудио — в текст? Было бы круто, да и можно платные функции сделать, в любом случае надо же платить за хостинг и т.п.

                  Адресовать дыру? Не понял)))
                    0
                    Адресовать дыру? Не понял)))
                    Было бы круто, да и можно платные функции сделать, в любом случае надо же платить за хостинг и т.п.

                    Если опустить детали, я не верю, что разработка качественного личного кабинета тут окупится (даже компании не готовы нормально платить за STT, а физики тем более), у нас нет фронтенд команды, я сам не люблю платные сервисы, желанием заниматься маркетингом ноль, да и кажется что для обычных юзеров с малыми потребностями не нужно много.


                    Проще сделать простой, честный и маленький сервис с лимитами для всех. Некий аналог этого релиза, но для физиков и в распознавании.

                      0
                      Ок, но хоть номер кошелька можно оставить на донаты))
                        +1

                        Если есть желание оставить донаты, то я добавил наш open_collective в репозиторий.
                        В open_stt правда за год накидали всего US$500, что близко даже расходы на хостинг (пока не оптимизировали их) не покрыло =)
                        Нативные донаты в гитхабе не докатились пока до СНГ.

                          0

                          Patron?

                            0

                            Не помню почему его не выбрал
                            Но это не важно по идее
                            Open collective типа для it проектов

                  0

                  Прилепить к видео и залить на ютуб.

                  +2
                  С ударениями есть закономерность. Чаще всего ударение падает на гласную, которую можно вычислить по формуле: количество_гласных/2 + 1
                    0
                    Не убирайте такую возможность, ставить ручками ударение. Очень удобно (понимаю что это мне, а не всем, но реально сделать голос похожим на человеческую речь иначе сложно)
                    По мне уровень почти яндексовских премиальных голосов получается.
                    И хочу поблагодарить, огромная работа, супер результат.
                    А насколько сложно добавить клонирование голоса, ну пусть на 80% похожести? (для мошенников мало, для многих проектов достаточно)
                    В буржуйских проектах, открытых эта штука есть, пишут что достаточно и 10 минут текста, но только без русского языка. Ооо, в общем русский у нас отстает от мировых трендов TTS.
                      0
                      Не убирайте такую возможность, ставить ручками ударение

                      Логика будет такая — если ударение поставлено ручками, то оно останется как есть.
                      Если нет — то поставится само как-то автоматически.

                        0
                        А насколько сложно добавить клонирование голоса, ну пусть на 80% похожести? (для мошенников мало, для многих проектов достаточно)

                        Если коротко — я не особо верю в one-shot копирование голоса.
                        Даже говорилкам нужно 2-3 часа речи.
                        Мы будем точно работать над снижением количества аудио, но я не верю, что реально опуститься ниже нескольких часов.


                        В буржуйских проектах, открытых эта штука есть, пишут что достаточно и 10 минут текста, но только без русского языка. Ооо, в общем русский у нас отстает от мировых трендов TTS.

                        А вы их запускали =)?
                        Насчет трендов, покажите мне хоть один другой открытый проект, где готовые натурально звучащие голоса работают на 1 ядре процесса и запускаются 1 строчкой кода.
                        Все компании, который продают клонинг, почему сначала просят оплатить платформу и приглашают на вебинары =)

                          0
                          Так ведь есть же готовые словари ударений?
                          Филологи тоже без дела не сидели все эти годы )
                    +2
                    это шикарно! Удачи. Скоро вас купят и всё.
                      +7

                      Мы конечно были бы рады, если бы у нас что-то купил настоящий качественный стратег (а не как обычно), но суровая реальность состоит в том, что в СНГ технологии никто никогда не покупает у независимых команд за очень редкими исключениями.


                      Максимум выслушать, получить максимум информации, скопировать.

                        +2

                        Независимая команда — риск для крупных организаций. Любая серьезная болезнь или финансовые трудности ключевых членов команды приводят к остановке разработки и сопровождении продукта. Стараюсь это держать в голове, когда предлагаю свои решения.

                          +2

                          Ну если честно если вынести за скобки неправовые методы устранения конкуренции (надеюсь вы не на это намекаете), то многомесячные задержки случаются и в корпорациях по причине отсутствия владельца продукта и банального безразличия сотрудников даже чаще)


                          А в нормальных командах люди обмениваются опытом и прикрывают друг другу тыл)

                            +1
                            А коммерческие команды как защищены от «Любая серьезная болезнь или финансовые трудности ключевых членов команды приводят к остановке разработки и сопровождении продукта.»?
                            Если просто так на рынке труда участников проекта не набрать, а если брать то ещё и вводить в курс дела/обучать
                              0

                              Только нормальные бизнес процессы и обмен знаниями в команде помогают от такого

                            +9
                            Это да, грусть прямо.
                            Где-то nmivan писал про это в духе:
                            «Технический директор: да, я тоже считаю, что ваше решение кое-где лучше. Но! Если мы внедрим BIG_VENDOR_NAME и будут баги, то что скажут? Что „ну у всех так, что ж поделаешь“. А если мы внедрим ваше решение и будут баги, что скажут? Мне скажут „ну ты и лох, взял глючную систему“
                              0

                              А вы не хотите попробовать себя позиционировать по другому? Сейчас вы себя продвигаете как не совсем готовый и довольно нишевый продукт, но может быть правильнее будет продвигать себя как сервис? Например все те дикторы кто отказали вам в оцифровке голоса должны понимать, что их дар не вечен. Они смертны, голос подвергается возрастным изменениям и то, что они вовремя сделают цифровую модель своего голоса, обеспечит им и возможно их потомкам безбедное существование в случае потери голоса, и чем раньше они это сделают тем лучше. Кроме того можно сделать биржу голосов. Я думаю есть очень много людей у которых шикарный голос, но они сделали карьеру в совсем другой области. Если у них будет возможность один раз сделать модель своего голоса и поместить на биржу, а люди будут ею пользоваться и им будет переводится пассивный доход, то многие бы согласились.

                                0

                                Создание любой supply demand двойной платформы это очень дорого


                                По сути это инвестиционный проект который реально поднять только на средства инвесторов


                                Ну или написать все самому
                                Но я не люблю жс


                                Плюс ключевая компетенция тут это маркетинг, а им я заниматься не хочу

                                  0

                                  Ну и да
                                  Когда вау синтез будет заводиться с часа аудио это можно
                                  Но сейчас там это удел скорее американских стартапов привлекающих десятки миллионов долларов в стиле fake it till you make it

                            +2

                            Жаль нет легендарного Николая

                              +3

                              Речь про Digalo с голосом Nikolay? Современные системы как правило требуют как минимум от 5-10 часов аудио. Если записи голоса Николая есть в публичном доступе, то можно сделать.


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

                                +2
                                Есть новые хорошие чтецы, с идеальными голосами и хорошей звукозаписывающей аппаратурой, которые начитывают художественную литературу. Если бы с ними договориться? К примеру, Puffin Сafe.
                                  0

                                  Это отличная идея.
                                  А вы не знаете как ему написать напрямую (напишите в личку), чтобы не продираться через фильтры?
                                  Обычно чтецы конечно боятся за свой голос, но я напишу ему.

                                    +1
                                    У него на канале есть адрес email для связи.
                                      0

                                      Именно имейл я не увидел, может в упор не вижу, положил закладку, найду способ связаться с автором

                                        0

                                        Спросил автора.
                                        Естественно реакция негативная, как и у всех дикторов с брендом.
                                        Sad but true.
                                        Если вы знакомы с ним лично — может сможете уговорить =)

                                          +1

                                          Нет, к сожалению. Я только слушатель, ещё с пор, когда у него в подписчиках не больше сотни было. Ок спасибо что попытались.

                                            +1
                                            попробуйте выйти на Mr.FreeMan — там то же ребят а конкретно заморачивались с озвучкой, да и Голос Брендовый так что Может Добавить вашей разработке популярности…
                                              0

                                              Написал и студии toonbox.studio. Мистер Фриман точно известен в массах, разве что, когда он вышел я его не смотрел, т.к. мне казалось, что там все очевидно и так, а анимацию на ютубе я тогда не смотрел.


                                              Может им будет более интересно, т.к. персонаж уже на почти на пенсии да и все-таки это персонаж, а не голос.

                                    +2
                                    Ну а как же Модель для сборки?
                                    Я думаю у него самый большой в сети набор данных для обучения=)).
                                    То что есть на торрентах конечно не суперского качества, но материала МНОГО.
                                    Правовые вопросы конечно оставляю за кадром, но думаю вполне возможен положительный исход при связи с автором.
                                      0

                                      Голос хороший. Честно говоря удивительно первый раз слышу про это, хотя я люблю научно-популярное.
                                      Написал им.
                                      Не верю конечно, что мне ответят позитивно, но тут больше похоже, что люди про вечное, нежели, чем хайповые блоггеры, которые даже на почту не отвечают =)

                                        +1
                                        То что есть на торрентах конечно не суперского качества, но материала МНОГО.

                                        Для синтеза студийное или приближенное к нему качество это очень важно.


                                        Правовые вопросы конечно оставляю за кадром, но думаю вполне возможен положительный исход при связи с автором.

                                        С правовыми вопросами — мы конечно сделали больше голосов, чем выложили.
                                        Например мы сделали Ведьмака и Жириновского.


                                        Но в конце мы приняли коллективное решение не делиться этим по двум причинам:


                                        • Хреновое качество получившегося голоса
                                        • Сомнительная этическая составляющая вопроса

                                        Я конечно понимаю, что никого не волнует, что тот же Сбербанк рекламирует дип-фейк голоса персонажа мошенника, но выкладывать такой инструмент пусть даже некоммерческий — это давать жуликам лишние карты в руки.


                                        Опять же, если автор голоса ведьмака прочитает это и будет не против — мы можем сделать хорошо, если он поделится студийными записями и даст согласие, и будет всем Геральт =)


                                        С другой стороны, допустим если сделать какой-то пародийный сериал, где персонажи озвучиваю мемы известными голосами, это мне кажется сильно меньшим злом. Но заниматься b2c маркетингом и продакшеном видео — ноль умения и желания.

                                    +1
                                    Да уж, скучаю по лроцентам и шляпе.
                                    +4
                                    Попробовал протестировать английский.
                                    В requirements желательно указывать версию пакетов:

                                    |████████████████████████████████| 645kB 21.4MB/s
                                    |████████████████████████████████| 1.9MB 17.2MB/s
                                    |████████████████████████████████| 804.1MB 22kB/s
                                    ERROR: torchvision 0.9.0+cu101 has requirement torch==1.8.0, but you'll have torch 1.8.1 which is incompatible.
                                    ERROR: torchtext 0.9.0 has requirement torch==1.8.0, but you'll have torch 1.8.1 which is incompatible.


                                      0

                                      torchvision и torchtext тут не нужны (скорее всего тянутся там где-то или их просто еще не успели до 1.8.1 обновить, хз почему это пишется, мы их не ставим), да и на самом деле torchaudio не нужен, просто не хотелось отдельный репозиторий делать.


                                      По-хорошему, конечно надо ясно написать какие версии мы протестировали, но мы скорее просто пытаемся поддерживать работающие примеры на актуальных версиях библиотек и впиливать поправки в утилиты и колаб по мере развития библиотек.


                                      Вообще если копнуть еще глубже, там кроме торча или оникса вообще нет зависимостей — torchaudioзаменяется на вашу любимую библиотеку для работы с аудио, а omegaconf там просто для чтения конфига (можно просто взять нужную ссылку для себя и все).

                                        +1
                                        Благодарю за детальный ответ.
                                        Работаем с WellSaid. Качественный синтез.
                                        Интересно попробовать ваше решение.
                                        Насколько реально улучшить качество (убрать металлические нотки)?
                                          +1
                                          Насколько реально улучшить качество (убрать металлические нотки)?

                                          Короткий ответ — не знаю, есть еще много неопробованных идей, и мы еще не прошли весь путь. В списке наших приоритетов сначала скорость и доступность, а потом уже вау-фактор от качества и всякие фишки с интонацией и произношением.
                                          Однако если вы хотите что-то обсудить, пишите в личку в телегу.


                                          Интересно попробовать ваше решение.

                                          Вы можете пока попробовать публичную некоммерческую версию.
                                          Естественно там нет никакого обвеса, но на то она и публичная и некоммерческая.

                                      +5
                                      Еще бы какой FAQ по запуску этого дела для простого человека. :-(
                                      Посмотрел, понял что не понял как это всё запустить. :`-(

                                      Вообще моя мечта получить возможность использовать синтезатор голоса совместно с FBReader на андройде.

                                      Мне очень удобно когда часть текста книги я читаю, часть текста слушаю. На текущий момент использую FBReader c отученным от жадности VocalizerEX.

                                      Конечно очень и очень проигрывает вашим голосам. Но за несколько лет привык. ¯\_(ツ)_/¯
                                        +2
                                        Еще бы какой FAQ по запуску этого дела для простого человека. :-(

                                        Для начала чтобы просто попробовать, можно просто:


                                        (0)
                                        Пройти по ссылке — https://colab.research.google.com/github/snakers4/silero-models/blob/master/examples_tts.ipynb


                                        (1)
                                        Нажать на кнопочку здесь для установки зависимостей — image


                                        (2)
                                        Прокликать ячейки через через ctrl + Enter


                                        (3)
                                        Вывести переменную example_text и заменить ее на нужную вам путем создания новой ячейки и написания чего-то типа:


                                        print(example_text)

                                        А потом


                                        example_text = 'К+ошка пр+ыгает в ок+ошко!'

                                        И повторить генерацию.


                                        А для запуска на Андроиде надо брать новые легкие мобильные билды PyTorch и пробовать. В приложение для Android и FBReader не портировали, т.к. у нас нет Android разработчиков.

                                          +3
                                          Но ведь это очень сложно. Не для пользователей.

                                          Вот что нужно сделать, чтобы на обычном десктопе, в том же IceBookReaders можно было послушать книжку через ваш синтез?

                                            +3

                                            Я понимаю, но у нас нет разработчиков для десктопа (подразумеваю .Net) и вообще разработчиков в команде, если на то пошло =(
                                            Тут кто-то из комьюнити может откликнуться и запилить интеграцию.
                                            По сути все вызывается 1 строчкой кода, билды PyTorch под винду должны быть готовые и няшные из коробки.

                                              +1
                                              Просто именно вот такое использование — публичное и широкое, может принести продукту известность и узнаваемость.
                                                +1

                                                Это бесспорно, но заказывать такую фичу на стороне (если она такая важная) кажется странным, самому изучать новую "старую" перпендикулярную технологию, которая не нужна каждый день, не особо хочется, а нанимать команду из 1-3 людей ради одной фичи тоже неразумно. Вот как-то так.

                                                +1
                                                Под винду есть стандарт SAPI (SAPI4, SAPI5), через который остальной софт может общаться с синтезатором.
                                                +1
                                                Проблема с Deep Learning в том, что это Python, который в плане работы с зависимостями просто ужас-ужас. Хуже, пожалуй, только С++. Ведь никогда же ничего не заводится с первого раза, вечно приходится шаманить, разбираясь, что и в каком порядке ставить и куда потом какие симлинки подпихивать, чтобы наконец завелось. К примеру, на то, чтоб разобраться, как запускать GPT-3 от Сбербанка, потратил почти неделю, и для этого даже пришлось пересобирать TensorFlow, потому что под Linux не оказалось версии с поддержкой процессоров без AVX…
                                                  0

                                                  Ну тут из зависимостей по сути тут только PyTorch и все работает на версии из коробки.


                                                  Насчёт зависимостей в питоне, ну не знаю, conda / docker все решают.


                                                  Вопрос по сути только в наличии питорча под нужную платформу, но для x86 все есть.

                                                    +1
                                                    Запускаю пример, и…
                                                    RuntimeError: Backend «soundfile» is not one of available backends: ['sox', 'sox_io'].
                                                    Ладно, это исправляется в utils.py, меняем бэкенд на sox_io. Перезапуск…
                                                    [NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware.
                                                    А это уже от PyTorch привет, тоже где-то что-то не срослось, скорее всего с какой-то библиотечкой слинковаться не может. На этом месте мне надоело, как будет побольше времени — попробую разобраться.
                                                    В общем, ожидаемо. It's Python. Тут что-то сложнее HelloWorld'а всегда вызывает проблемы с зависимостями на любой машине, отличной от той, где оно создавалось. Так что какое-то время на шаманство тратить придётся в любом случае. За это его и не люблю.
                                                      0
                                                      [NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware.

                                                      А не просто warning а прямо ошибка?
                                                      Гугление выдало треды про процессора без AVX инструкций.
                                                      Мол оно просто предупреждает, но работает.
                                                      Вообще в питоне есть прекрасные пакетные менеджеры и билды торча есть для основных систем из коробки.


                                                      Ладно, это исправляется в utils.py, меняем бэкенд на sox_io. Перезапуск…

                                                      Тут я согласен, что если для синтеза вообще ничего кроме торча не нужно, то пакетировать вместе с utils.py вместе с STT неверно. Но тут единственное решение это под каждую платформу написать и протестировать гайд.


                                                      А платформ таких тонна:


                                                      • iOS
                                                      • Android
                                                      • x86 — Linux / Винда / Мак + CPU
                                                      • x86 — Linux / Винда / Мак + GPU
                                                      • ARM

                                                      Собственно по этой причине просто "потыкать" мы дали колаб, где все показано на примере.
                                                      И если совсем лень, то кто-то уже сделал бота в телеграме — @silero_tts_bot (это не мы, это кто-то из коммьюнити)
                                                      Правда там какие-то баги с ударением, оно меняет свое место, надо играться.

                                                        +1
                                                        Наконец удалось запустить. Спасибо.
                                                        Правда, похоже, что у «движка» есть ограничение на длину строчки:
                                                        tts_utils.py:27: UserWarning: Text string is longer than 140 symbols.
                                                        Т.е. не получится просто скормить целый абзац с расставленными ударениями и получить озвучку. Сейчас придумываю, как бы попроще порезать длинные предложения на кусочки.
                                                          0

                                                          Это не ограничение а предупреждение, но кормить реально лучше батчами из отдельных предложений. Обратите внимание что как и все сетки оно умеет в батчи.


                                                          Если текст письменный, то простые эвристики тут помогают. Ну конечно есть много разделителей — https://github.com/natasha/razdel

                                                            +1
                                                            Но при этом у меня пока что не выходит синтезировать звуковой сэмпл длиннее 12 секунд — конец слишком длинной фразы просто обрезается. Возможно, делаю что-то не так.
                                                            Используемый код
                                                            import torch
                                                            import torchaudio
                                                            
                                                            language = 'ru'
                                                            speaker = 'kseniya_16khz'
                                                            device = torch.device('cpu')
                                                            model, symbols, sample_rate, example_text, apply_tts = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                                                                                                                  model='silero_tts',language=language,speaker=speaker)
                                                            
                                                            example_text="нав+ерное, существ+уют друг+ие рец+епты, но я их не зн+аю. +или он+и мне не помог+ают. х+очешь моег+о сов+ета - пож+алуйста: сад+ись раб+отать. сл+ава б+огу, так+им л+юдям, как мы с тоб+ой, для раб+оты ничег+о не н+ужно кр+оме бум+аги и карандаш+а."
                                                            model = model.to(device)  # gpu or cpu
                                                            audio = apply_tts(texts=[example_text],
                                                                              model=model,
                                                                              sample_rate=sample_rate,
                                                                              symbols=symbols,
                                                                              device=device)
                                                            for i, _audio in enumerate(audio):
                                                              torchaudio.save(f'test_{str(i).zfill(2)}.wav',
                                                                              audio[0].unsqueeze(0),
                                                                              sample_rate=16000,
                                                                              bits_per_sample=16)
                                                            
                                                            В результате в wav-файле оказывается только начало фразы. Сейчас разбираюсь, почему так.
                                                              0

                                                              Скорее всего кто-то из коллег когда впиливал ограничение на длину, специально поставил warning.


                                                              Сейчас там немного странно ведет себя сортировка по длине (если кормить батчами, почему-то порядок путается) но пока ее не пофиксили можно делать так:


                                                              import torch
                                                              import torchaudio
                                                              
                                                              language = 'ru'
                                                              speaker = 'kseniya_16khz'
                                                              device = torch.device('cpu')
                                                              model, symbols, sample_rate, example_text, apply_tts = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                                                                                                                    model='silero_tts',language=language,speaker=speaker)
                                                              model = model.to(device)  # gpu or cpu
                                                              
                                                              example_text="нав+ерное, существ+уют друг+ие рец+епты, но я их не зн+аю. +или он+и мне не помог+ают. х+очешь моег+о сов+ета - пож+алуйста: сад+ись раб+отать. сл+ава б+огу, так+им л+юдям, как мы с тоб+ой, для раб+оты ничег+о не н+ужно кр+оме бум+аги и карандаш+а."
                                                              
                                                              for i, text in enumerate(example_text.split('. ')):
                                                                audio = apply_tts(texts=[text],
                                                                                  model=model,
                                                                                  sample_rate=sample_rate,
                                                                                  symbols=symbols,
                                                                                  device=device)
                                                                torchaudio.save(f'test_{str(i).zfill(2)}.wav',
                                                                                audio[0].unsqueeze(0),
                                                                                sample_rate=16000,
                                                                                bits_per_sample=16)
                                                                +1

                                                                Баг пофиксили
                                                                Можно и батчами процессить сейчас


                                                                import torch
                                                                import torchaudio
                                                                
                                                                language = 'ru'
                                                                speaker = 'kseniya_16khz'
                                                                device = torch.device('cpu')
                                                                model, symbols, sample_rate, example_text, apply_tts = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                                                                                                                      model='silero_tts',language=language,speaker=speaker,
                                                                                                                                      force_reload=True)
                                                                model = model.to(device)  # gpu or cpu
                                                                
                                                                example_text="нав+ерное, существ+уют друг+ие рец+епты, но я их не зн+аю. +или он+и мне не помог+ают. х+очешь моег+о сов+ета - пож+алуйста: сад+ись раб+отать. сл+ава б+огу, так+им л+юдям, как мы с тоб+ой, для раб+оты ничег+о не н+ужно кр+оме бум+аги и карандаш+а."
                                                                example_text = example_text.split('. ')
                                                                
                                                                print(example_text)
                                                                audio = apply_tts(texts=example_text,
                                                                                  model=model,
                                                                                  sample_rate=sample_rate,
                                                                                  symbols=symbols,
                                                                                  device=device)
                                                                +1
                                                                Предупреждение о превышении 140 символов можно закомментировать в tts_utils.py, а с ограничением в 12 секунд, видимо, проблема не в том, что «что-то не так» делаете, а глубже:
                                                                Despite being released two years ago, Tacotron 2 is still state of the art. But it has a couple issues,” explained Petrochuk. “One, it’s not fast — it takes three minutes to produce one second of audio. And it’s built to model 15 seconds of audio.
                                                                (Отсюда) Т.е. только резать предложениями.
                                                                У меня на Windows 10 назойливо высовывается предупреждение: «UserWarning: torchaudio C++ extension is not available», хотя всё запускается благополучно. Англичанка/американка «тараторит»…
                                                                  +1
                                                                  torchaudio C++ extension is not available»

                                                                  Торчаудио не нужен для синтеза.
                                                                  Он просто там потому что синтез живет в примерах рядом с распознаванием.
                                                                  Если юзер уже настолько разобрался, то можно просто залезть в hubconf и почикать ненужное.


                                                                  “One, it’s not fast — it takes three minutes to produce one second of audio. And it’s built to model 15 seconds of audio.

                                                                  Ну насчет трех минут это какой-то треш, у нас на всех бенчмарках >> 1 RTS, см. в статье. А насчет 140 символов и 15 секунд, это by design. И дело тут не столько в какотроне, а в принципе в рекуррентных сетях.

                                                                    +1
                                                                    можно просто залезть в hubconf
                                                                    Без подсказки не пришло в голову. Спасибо!
                                                                    Насчёт трёх минут – источник цитирует одного из авторов WellSaid Labs.
                                                                      0
                                                                      Насчёт трёх минут – источник цитирует одного из авторов WellSaid Labs.

                                                                      А вы просто замерьте время наших моделей.


                                                                      Показательно, что очередная калифорнийская компания, скорее всего привлекшая десятки миллионов долларов от инвесторов, говорит такой треш)

                                                                        +1
                                                                        А вы просто замерьте время наших моделей.
                                                                        Ни малейшего сомнения в корректности приведённых в статье цифр у меня не возникло. WellSaid сами не используют Tacotron. Надеюсь, что-то, в подтверждение заявленного превосходства своей технологии, у них должно быть, если дорожат репутацией.
                                                                        Насчёт «замеров», кстати, – замена «cpu» на «cuda» в «базовом» примере должно сказаться на результате? – Кроме предупреждения о недостатке памяти (16Гб+4Гб), не вижу отличий.
                                                                        А ограничение в 12 секунд присутствует.
                                                                          +1
                                                                          А ограничение в 12 секунд присутствует.

                                                                          Мы захардкодили его и поставили варнинг, чтобы юзеры делили на предложения, а не подавали туда аудио на час и не удивлялись, что все упало.


                                                                          У нас полный end-2-end, далеко не все люди в комментах понимают, что e2e синтез, запускающийся в 1 строчку на тостерах, это редкость.

                                                                            +1
                                                                            Тем более, респект!
                                                            0

                                                            Что-то они там не хорошо настроили, тараторит...

                                                            +3
                                                            Ладно, это исправляется в utils.py, меняем бэкенд на sox_io.
                                                            Такие ошибки — это version mismatch. Если у авторов бегает, значит нужно поставить их версии пакетов и не выдумывать как это все патчить. Потому что это интерпретируемый питон и когда оно свалится и какие ошибки оставит под капотом неизвестно. Отсюда эффектом домино вылезают недельные проблемы.
                                                            Поэтому, если не жалко своего времени, — свежее окружение, установка всего из requirements.txt. А где не так? Другие языки разве что сами форсят это — та же папка node_modules под проект. А окружение для С++ называется докер.
                                                            Второй момент — используйте конду, а не virtualenv. Там как минимум больше выбор бинарников, возможно даже найдется для своего некропроцессора. Но главное, там есть своя упакованная cuda, а pip в virtualenv будет полагаться на системную. Тоже источник несовместимостей.
                                                            Третий момент — обновите железо.

                                                            А это уже от PyTorch привет, тоже где-то что-то не срослось, скорее всего с какой-то библиотечкой слинковаться не может.
                                                            Да процессор без инструкций, очевидно же. При чем форсится это той же intel — очевидно же что они могли бы откатываться к легаси инструкциям в своей линейной алгебре при несовместимом процессоре, но делать этого не будут.

                                                            В случае со сбером — они не указали torch, apex и torch-blocksparse в requirements.txt, то есть там никто не озаботился протестить свой же репозиторий на свежем окружении. Ну как бы, спасибо на том, что выложили. Но вообще это не дело.
                                                              +1
                                                              Такие ошибки — это version mismatch. Если у авторов бегает, значит нужно поставить их версии пакетов и не выдумывать как это все патчить.

                                                              Пример в колабе — это как бы наш базовый пример.
                                                              Там ставятся просто последние мажорные версии либ и мы чиним, чтобы оно работало всегда ±. Основная цель — минимализм.


                                                              Торч в колабе ставится из коробки, но подразумевается, что каждый должен смочь поставить торч на свою систему и бремя поддержки билдов лежит на FAIR.


                                                              Если нужны пакеты, докерфайлы, докеризованные билды, дистрибутивы или standalone инструкции на какие-то конкретные платформы — то добро пожаловать в тикеты на гитхабе и поддерживайте проект — донатами, коммерчески или заказами.


                                                              Просто так поддерживать зоопарк бессмысленно.

                                                  +1
                                                  Огромная титаническая работа, большое спасибо. Было бы круто, если бы рассказали (показали) все-таки как запустить сие чудо и попробовать руками… Очень востребовано, хотя бы даже для Voip-телефонии (Asterisk).
                                                  — Есть VDS, есть виртуальная машина (VirtualBox)… Ubuntu, debian, да что угодно…
                                                  Скрипт, который установит зависимости… и какой-нибудь example.sh который можно вызвать и получить на выходе сгенерированный файлик озвучки было-бы очень круто!
                                                    +1

                                                    Привет, этот релиз позиционируется как некоммерческий. Астериск возникает как правило тут скорее уже в коммерческих проектах. Мы пока не планируем поддерживать публичные коммерческие дистрибутивы и выкладывать интеграции.


                                                    А так вообще все запускается с единственной зависимостью — по сути нужен только PyTorch как в примере.

                                                      –8
                                                      Asterisk — как пример, полностью открытая платформа, распространяемая по лицензии GPL.
                                                      Много различных бесплатных руководств как настроить тот или иной функционал. Ну не суть.
                                                      Ни кто не говорит про то, что бы вы сделали готовую интеграцию для Asterisk. Я говорю о том, что — я веб-разработчик, далек от Python, PyTorch — для меня это что-то неизведанное.
                                                      А хочется каким-то образом Воспользоваться Вашими трудами… И было бы очень круто, если бы уменьшили порог вхождения в Вашу технологию. Но судя по Вашему комментарию — цель вашего поста единственная — продаться. Без обид. Бизнес есть бизнес.
                                                        +4
                                                        Ваша мысль понятна, но авторами проделана и так большая работа, которая выложена под открытой лицензией.
                                                        Для человека, знакомого с Python, здесь всё понятно. Для незнакомого… ну, извините. На то он и Open Source.

                                                        Есть сотни разных технологий, с которыми потенциально можно интегрироваться — для меня Asterisk тоже выглядит совершенно неизвестно. Почему именно с ней — непонятно.

                                                        Но судя по Вашему комментарию — цель вашего поста единственная — продаться.

                                                        Если честно, вот это выглядит довольно несправедливо.
                                                          +7
                                                          > Я говорю о том, что — я веб-разработчик, далек от Python, PyTorch — для меня это что-то неизведанное.
                                                          > А хочется каким-то образом Воспользоваться Вашими трудами…
                                                          > И было бы очень круто, если бы уменьшили порог вхождения в Вашу технологию.

                                                          — А есть вы тоже за меня будете?
                                                          — Ага!

                                                          Не понимаю, каких бесплатных руководств вам не хватило, есть колаб, например.
                                                          Меня вот пугает астериск и порог вхождения в него.

                                                          > Но судя по Вашему комментарию — цель вашего поста единственная — продаться. Без обид. Бизнес есть бизнес.

                                                          А вот и не без обид. Почему вы так уверены, что это единственная цель? Давайте я тоже буду играть в предположения: единственная цель комментов, подобных вашим, — это выбить возможность украсть и продать?
                                                            –4
                                                            Да что вы зацепились за этот Asterisk. Он как пример был дан…
                                                            Суть моего вопроса была такая:
                                                            У меня есть только что установленный Debian\Ubuntu\etc..., что мне нужно сделать чтобы синтезировать фразу — Привет Мир! Мое имя Вася
                                                            В самом простом случае это сводится к вызову — script.py «Привет Мир! Мое имя Вася»
                                                            Все, мне больше ничего не требуется, ни колаб, ни школаб, ни чего…
                                                            +3
                                                              +1
                                                              Но судя по Вашему комментарию — цель вашего поста единственная — продаться.

                                                              По идеологическим соображениям мы скорее всего не "покупабельны" для обычных подразумеваемых покупателей / инвесторов.


                                                              У нас нет венчурных инвесторов, мы не ставим цели осваивать чужие деньги и строить космолеты. Мы просто делаем качественные и красивые вещи. И иногда звезды сходятся на небосклоне так, что мы ими делимся на некоммерческой основе.


                                                              Если кто-то решит поддержать нас грантом или проектом или заказом — хорошо. Если нет — мы и так как-то уже живем, продолжим как есть.


                                                              И было бы очень круто, если бы уменьшили порог вхождения в Вашу технологию.

                                                              Я тоже не против. Но я далек и от астериска и от явы (вроде там на яве с ним пишут интеграции). Я видел panoramisk вроде ничего так на питоне, но опять же, как описано в статье выше (blog.ploeh.dk/2021/03/22/the-dispassionate-developer), я не понимаю ваши претензии. Сделать все интеграции бесплатно, чтобы коммерсанты пользовались, нарушая лицензию, а авторы сосали лапу? Какой-то неправильный получается расклад.

                                                                –5
                                                                Но я далек и от астериска и от явы… Сделать все интеграции бесплатно, чтобы коммерсанты пользовались, нарушая лицензию,

                                                                Кто просит сделать интеграцию? Я говорю о том, что у меня есть — Ubuntu, Debian, etc… Голая, только установленная. Что мне нужно сделать чтобы синтезировать фразу «Привет Мир! Мое имя Вася!»?
                                                                Все, мне больше ничего не нужно, остальное за Вас сделает сообщество, само напишет различные интеграции, мануалы и прочие вещи. Вы рассказываете о технологии, делаете бенчмарки, показываете какие крутые вещи она умеет делать, предлагаете попробовать вживую данную технологию, но нет не единого примера — с какой стороны к ней подойти и как ей пользоваться.
                                                                  +4

                                                                  Ну базовый пример есть в тетрадке в колабе — тут выше спрашивали.


                                                                  А на голой системе достаточно просто поставить питон, питорч и зависимости из репозитория и просто запустить минимальный скрипт и все.


                                                                  Это не сделали так как чисто ради теста колаб проще, а кто знает что-то про питон за 5 минут у себя запустит.


                                                                  Я согласен что можно написать инструкцию для каждой платформы, но мы решили оставить это на волю комьюнити, уж больно много работы и так было проделано для некоммерческого релиза.


                                                                  А насчёт бурной реакции на астериск — все очень устали от инфоцыган и бизнес-халявщиков.

                                                                    +5

                                                                    Чтобы не повторяться — товарищ тут прекрасно описал современное статус кво — пушьте в oss и не получайте ничего — а бизнесу хорошо


                                                                    blog.ploeh.dk/2021/03/22/the-dispassionate-developer

                                                                    +1
                                                                    Все, мне больше ничего не нужно, остальное за Вас сделает сообщество, само напишет различные интеграции, мануалы и прочие вещи. Вы рассказываете о технологии, делаете бенчмарки, показываете какие крутые вещи она умеет делать, предлагаете попробовать вживую данную технологию, но нет не единого примера — с какой стороны к ней подойти и как ей пользоваться.

                                                                    Т.е. сообщество не может поставить питон с зависимостями и запустить скрипт, но если это сделают за него — сразу высококлассные специалисты напишут интеграции, мануалы и так далее?
                                                                      +1
                                                                      но нет не единого примера — с какой стороны к ней подойти и как ей пользоваться.

                                                                      Это не так.
                                                                      Мы потратили много усилий, чтобы по сути была одна зависимость — PyTorch и чтобы работало в одну строчку. Я не знаю, как сделать проще, чем команда на питоне в 5 строк.


                                                                      Есть очевидные косяки, связанные с тем, что мы решили не делать отдельный проект, не указали точные версии либ или не сделали пакеты, работающие на 10 версиях питона — но говоря простым языком — это не нужно, когда единственная зависимость это PyTorch.


                                                                      Чем пример в колабе не пример — я не знаю. Там 3 клика нужно чтобы прокликать. Понятно, что мотивация Гугла при создании колаба далеко не благая, но колаб есть.


                                                                      Если нужны нативные приложения на все платформы с GUI — у меня нет столько денег. Это по сути команда на каждую платформу, которую непонятно на что содержать.


                                                                      Там даже бота человек уже сделал, правда он как-то странно работает еще — но он его сделал просто так, по приколу.


                                                                      Если нужны пошаговые гайды — то волна юзеров, которые судя по комментам запустили — напишут как запускали на своих платформах.


                                                                      Понятно, что есть элемент пакетирования внутрь конечных приложений, но повторюсь — это огромная работа и тут миллиард платформ:


                                                                      • iOS
                                                                      • Android
                                                                      • x86 — Linux / Винда / Мак + CPU
                                                                      • x86 — Linux / Винда / Мак + GPU
                                                                      • ARM
                                                                      • Интеграции в конечные приложения и с АПИ операционных систем
                                                                        –1
                                                                        А вы точно мне хотели ответить? :)
                                                                          +2

                                                                          Ответил просто на последнее сообщение в треде.
                                                                          Но наверное надо было выше.

                                                                        +2
                                                                        Сообщество может все, даже написать новую систему по генерации речи…
                                                                        Есть библиотека — face recognition (на питоне сделанная). Ребята рассказали что они сделали, как они сделали, чего достигли, и как пользоваться их инструментом. В каждом проекте есть свои особенности, свои библиотеки, зависимости, свой способ вызова… Так вот, любой желающий без особых проблем может взять их библиотеку и поиграться без погружения в дебри разработки. Понять — надо оно ему или нет, если да — то адаптировать под свои задачи. Из-за того что все понятно и доступно — библиотека вирусно разлетелась по все интернету, с мануалами, howto, уроками и прочими плюшками… Здесь же — авторы провели колоссальную работу, но скажу честно — их позыва я не понял, они хотят похвастаться какие они крутые и чего достигли, дать инструмент сообществу или же стать похожими на ЦРТ Инновации…
                                                                          +1

                                                                          Да… автор превратил свою серию статей ML is fun… в проект по распознаванию лиц явно популярный в Китае судя по переводам. Не знаю, аплодировать мне или ужасаться.


                                                                          Поверхностное копание выдало мне другую картинку. Может конечно у меня глаз замылился, но может кто лучше тут разбирается.


                                                                          Есть библиотека — face recognition (на питоне сделанная)
                                                                          Built using dlib's state-of-the-art face recognition

                                                                          Выглядит как будто автор на пике ML-хайпа (а картиночки и лица были на 2-3 порядка популярнее голоса особенно в 2017-2018) написал обертку над чьими-то алгоритмами из dlib пару-тройку лет назад (тогда мне на радары это попадалось, не уверен на самом деле где там первоисточник), причем последний его релиз был Apr 2, 2018 и потом комьюнити как раз эти 2-3 года писало гайды, описывало как это устанавливать на разных платформах, пока автор занимался инфо-бизнесом.


                                                                          Если открыть последние инструкции — там это не выглядит как будто это активно поддерживается и ведется активная работа. Ну то есть один раз что-то собрали, хайпанули и потом забили — и все предсказуемо загрустило.


                                                                          Так вот, любой желающий без особых проблем может взять их библиотеку и поиграться без погружения в дебри разработки.

                                                                          О чем естественно говорит 500 незакрытых тикетов, на которые никто не отвечает и где ничего не ставится и не билдится, и последний релиз на pypi более года назад.


                                                                          При публикации чего-то в OSS или хотя бы в публичное пространство по идее надо брать на себя бремя развития и поддержки. Поддержка гайдов на все платформы, на все билды и дивайсы — это титанический труд, который зачастую не под силу даже Microsoft! Посмотрите на их проект ONNX runtime. Он хорош, но даже там нет всех платформ.


                                                                          дать инструмент сообществу или же стать похожими на ЦРТ Инновации…

                                                                          Не знаю ставилась ли цель тут получить в ответ эмоциональную реакцию, но я не до конца понимаю как в принципе можно прийти к такому сравнению.

                                                                            –2
                                                                            Выглядит как будто автор на пике ML-хайпа

                                                                            С таким подходом любого автора можно хаить сколь угодно и говорить что он ничтожество и зачем полез в эту нишу.
                                                                            написал обертку над чьими-то алгоритмами

                                                                            Здесь авторы так же не претендуют на алгоритмы… Алгоритмов много, есть экспериментаторы — которые берут алгоритмы из биологии и воплощают их в программировании, порой получаются вполне себе интересные вещи… Таксоны, эталоны построены по этим принципам.
                                                                            Ну то есть один раз что-то собрали, хайпанули и потом забили

                                                                            А Вам нужно готовое решение? Собрали, рассказали как это сделали, дали инструкцию как пользоваться… Порог вхождения ниже плинутса. Не надо ковыряться в чужом коде и разбираться — как это работает, потому как — автор дал подробные инструкции.
                                                                            При публикации чего-то в OSS или хотя бы в публичное пространство по идее надо брать на себя бремя развития и поддержки

                                                                            Зависит от поставленных целей. Программ без ошибок не бывает, любую программу можно совершенствовать бесконечно и всеравно идеала не будет. Человек выкатил вполне рабочее решение, которое повторюсь — любой желающий знакомый с Linux может взять и опробовать.
                                                                            без затраты тонны сил и времени, спотыкаясь на каждом шагу (не мне рассказывать вам как тяжко бывает в линуксе руками подтягивать зависимости для сборки той или иной штуки).
                                                                            — Статью прочитал, бенчмарки посмотрел (хотя мне не сведущему они вообще ни очем не говорят), я молчу про терминологию, англицизмы в перемешку с специфичными терминами данной области, если придерживаться научной терминологии, то и писать общепринятыми понятиями. Когда говорят о качестве — хочется видеть количественную оценку, а не что-то необъятное измеренное в попугаях.
                                                                            — Я без каких либо претензий к автору, я просто попросил дать HOWTO с минимальным примером, т.к. данная тема мне интересна и хотелось потрогать данную технологию собственноручно. Но в меня полетели минусы, упреки и кирпичи — мол Вам надо вы и делайте.
                                                                            Мне просто интересно — хоть 1-2 читателя данной статьи смогут воспользоваться наработками авторов?
                                                                          +1
                                                                          Пожалуйста, не сравнивайте довольно известных западных авторов, и не самых известных российских.

                                                                          Любое достаточно большое внимание на Западе относительно легко монетизируется и поддерживается сообществом, говорю, как человек, поработавший с OSS и у нас, и там. Только нацелено оно на западные же задачи. Для картинок это ок, а вот делать и поддерживать русский синтез голоса там никто не будет.
                                                                            +1

                                                                            Ну бутылочное горлышко есть и там. Там были слайды, говорящие что до Numfocus numpy якобы поддерживало 10 человек чуть ли не в нищете. Но это гуглите сами точнее.


                                                                            Еще прекрасный пример. Датасетopen_stt собрал за ГОД 500 долларов донатов. Понятно, что я сам дурак и сейчас его хостинг мне ничего не стоит, но в какой-то момент МЕСЯЧНЫЙ счет за хостинг стал по run-rate в районе тех же 300-400 долларов. Говоря на языке интернета — есть известное правило.


                                                                            Вообще пример выше скорее тянет на инфо-цыганство 90 уровня. Тут с этими статьями ML is fun все настолько прозаично, что к ним присосались в одно время даже наши инфо-цыгане. Шутка-ли — эти статьи переводил человек, который несколько официально (кажется 3 раза) раз был уличен в мошенничестве в конкурсах на Kaggle и майнинге в их кернелах. Своя атмосфера.


                                                                            Только нацелено оно на западные же задачи

                                                                            И всегда нужно зрить в корень и смотреть кто, зачем и почему там что-то поддерживает. Как правило ниточки ведут всегда в кровавый энтерпрайз за редким исключением, когда автор продает не реальное что-то, а ощущение "классности" своим патреонам.

                                                            +1
                                                            Звучит прям круто, спасибо!
                                                            А такой вопрос — вы разрешаете использование в школьных / студенческих исследовательских проектах?
                                                              +4

                                                              Всё, где нет коммерции и / или есть очевидная польза для общества — это ок.

                                                              +2
                                                              Как мне кажется, более актуальная обратная задача – речь в текст. Хотя на Ютубе эта фича работает, заливай видео и получай автоматическое распознавание голоса в виде субтитров.

                                                              А так, есть неплохие голосовые движки, которые можно использовать по делу. Например, для чтения аудио книг, обучению иностранному языку либо озвучке собственного обучающего видео, если не хочется использовать свой голос.

                                                              Но как показывает опыт, искусственная речь быстро надоедает. Нет в ней живой экспрессии и задора. А это, как оказывается, очень важно. Скажем, я, ради эксперимента, опубликовал озвучку основных французских слов с помощью голосовых движков:

                                                              youtu.be/MWCMmgTUlDs
                                                              youtu.be/F4mD-2vf0k4

                                                              Как бы неплохо, но с живыми голосами выглядит как-то веселее.
                                                                0

                                                                Для STT в silero-models тоже много что есть)

                                                                  +1
                                                                  Согласен с Вами, еще очень круто когда не просто речь в текст, а текст разбивает по ораторам (когда несколько человек ведут диалог)…
                                                                    +1
                                                                    Да, это очень актуально, если хочешь создать субтитры для видеоролика на иностранном языке. И если речь по персонажам можно разделить хотя бы вручную, даже не зная языка, то воспроизвести правильно «буржуйский» текст на слух маловероятно, особенно, если в «ихней мове» не силен. Тем более, что Ютуб допускает немало ошибок в распознавании речи.
                                                                      0

                                                                      Диаризация у нас естественно тоже есть, но там пока не продакшен качество.
                                                                      Да и честно говоря не пользуемся ей сами, а доводить до идеала нет ресурсов и мотивации.
                                                                      Как-то так и живем.

                                                                        +1
                                                                        Даже если бы было «продакшен качество», то вряд ли бы это закрыло проблему. Поэтому отсутствие «ресурсов и мотивации» вполне объяснимо, делать надо то, что приносит либо максимальную выгоду, либо такое же удовольствие.

                                                                        Однако безвыходных ситуаций не бывает, «как минимум всегда есть три выхода, даже если вас съели» :).

                                                                        Меня лично интересуют сейчас «улучшение» оригинальных обучающих роликов, либо подходящих на эту роль видео материалов. Конкретно, по французскому языку. В Интернете есть масса классных видео с чудесными голосами, отличной дикцией и разного уровня сложности.

                                                                        Но претензии к ним одни и те же. Вторым языком, если он есть, обычно идет английский, а не русский. Кроме того, хотелось бы, чтобы там были паузы и повторы. Для примера, я могу дать ссылки на свои эксперименты, того, что хотел бы иметь:

                                                                        Французский язык с нуля – Младший брат. Наложение двуязычных субтитров на французский обучающий ролик: my.mail.ru/mail/emmerald/video/_myvideo/2.html.
                                                                        Можно скачать в: m.my.mail.ru/mail/emmerald/video/_myvideo/2.html.

                                                                        Французский язык с нуля – Нубу и Яра. Наложение двуязычных субтитров на французский обучающий ролик: my.mail.ru/mail/emmerald/video/_myvideo/3.html.
                                                                        Можно скачать в m.my.mail.ru/mail/emmerald/video/_myvideo/3.html.

                                                                        Теперь, то же самое, но с повторами и паузами.

                                                                        Французский язык с нуля 1x1 – Младший брат. Наложение двуязычных субтитров на французский обучающий ролик. Каждый видеофрагмент со звуком, дублируется тем же фрагментом, без звука:
                                                                        my.mail.ru/mail/emmerald/video/_myvideo/4.html.

                                                                        Французский язык с нуля 3x3 – Младший брат. Наложение двуязычных субтитров на французский обучающий ролик. Каждый видеофрагмент со звуком, дублируется тем же фрагментом, без звука и так трижды: my.mail.ru/mail/emmerald/video/_myvideo/5.html.

                                                                        Есть у меня еще сайт: «Система обучения «Сколиум»: Запоминание руками + Интерактивный звук» ( scholium.webservis.ru ). Там английский язык и древняя программа. Но я готовлю ее новый вариант с дополнительными возможностями.

                                                                        Таким образом, поскольку «живых» материалов в Сети валом, то особой необходимости в голосовых движках у меня нет. Есть много материалов со встроенными субтитрами, которые я учусь распознавать с помощью собственной программы, куда я включил опенсорсный видеопроигрыватель, на базе FFPlay.c. Там есть определенные успехи, но сейчас я, тем не менее, отвлекся на внешние субтитры, с которыми работать легче. Причем, есть очень хорошие ролики, которые мне нравятся, но без всякого рода субтитров. Только автоматическое распознавание текста на Ютубе. Качество, конечно, оставляет желать лучшего, как я говорил, но «на безрыбье и рак рыба» :). Зато я заметил, что прослушивание незнакомого языка многие часы подряд тоже имеет некоторый смысл. Мозг привыкает к иностранной речи, начинает как-то работать с текстом. По ночам уже сняться целые фразы, которые повторяешь, как попугай, не зная их перевода. Но это все просто эксперименты.

                                                                        Главное, это слова и фразы. Для их интерактивного освоения я и пишу свою новую версию программы. Здесь такой расклад, который я провел в связи с утверждением суперполиглота Дмитрия Петрова, владеющего порядка 50 языками. Он, в частности сказал:

                                                                        «350 самых распространенных слов (позже он называл цифру – 400) составляют 90% всей лексики.»

                                                                        Я не поленился, скачал файл lexique-grammalecte-fr-v7.0.txt на более чем полмиллиона слов, в котором есть процент частоты использования 170 миллиарда слов из французского Интернета. Так вот из него следует такая статистика:

                                                                        10 самых распространенных французских слов составляют 17,64% всей лексики.
                                                                        100 слов, соответственно, дают 45,16%.
                                                                        200 слов – 50,77%.
                                                                        300 слов – 54,21%.
                                                                        400 слов – 56,70%.
                                                                        1000 слов – 65,34%.

                                                                        Как видим, наш Д. Петров дал нам несколько неточные данные. Вот сказал бы, что 200 слов занимают более половины всех используемых слов, то тогда бы это было бы куда точнее. А чтобы выйти на уровень 90% нужно выучить всего лишь 14330 слов!

                                                                        Вот эти слова и сопутствующие им фразы (с озвучкой, взятой из французских сайтов) и есть смысл изучать. Хотя бы 200 слов, но зато знать их надо идеально.

                                                                        P.S. Извиняюсь за длинный офтоп, просто все темы, которыми интересуешься, сильно связаны между собой.
                                                                          0

                                                                          Честно даже не знаю, что ответить.


                                                                          Разбирать хардсабы наверное не совсем рационально из-за низкого выхода данных.


                                                                          Если речь про распознавание речи сразу на N языках, то в рамках проекта silero-vad мы держим классификатор фраз на языки, но там пока нет французского.


                                                                          Он появится, но когда — не знаю.


                                                                          Ну то есть пайплайн такой


                                                                          • Режем аудио на части по паузам
                                                                          • Классифицируем каждый кусочек
                                                                          • Распознаем каждый кусочек отдельно

                                                                          Но что делать когда говорят одновременно на 2 языках — я не знаю.

                                                                            0
                                                                            Да отвечать, особо, ничего не нужно. Просто каждый ведет разговор о том, что близко лично ему. Вы о своем, я о своем.

                                                                            Конечно, вы проделали огромный объем работы, но я как-то далек от того, чтобы каким-то образом воспользоваться вашими наработками. Я всегда ищу независимые ни от кого решения и обычно нахожу их.

                                                                            Мне не кажется, что тема «text to speech» (TTS) сейчас актуальна. Еще несколько лет назад я этим интересовался, ради целей обучения иностранному языку. Но сейчас ситуация изменилась и более интересной стала обратная тема «speech to text». Хотя в тех же онлайн словарях стали халтурить и заменять живую озвучку TTS'ом. Но делают это, правда, неплохо, поэтому для изучения слов пойдет.

                                                                            Поэтому, лично мне ничего особо не надо, сверх того, что уже есть. Поэтому общение здесь из разряда: «а поговорить» :).
                                                                      0
                                                                      Я вот только что добавил на Видео.майл.ру файл: «Adèle – Автоматическое распознавание речи во французском ролике.mp4» ( my.mail.ru/mail/emmerald/video/_myvideo/6.html ). Был сделан захват программно гененерируемых субтитров на Ютубе. Как видим, отдельные слова не распознаны либо распознаны неточно. Это заметно даже абсолютному новичку.
                                                                    +1
                                                                    Очень круто. На голоса Ксении и Натальи у меня почему-то возникла ассоциация с журналисткой новостей на федеральных каналах.
                                                                      +1

                                                                      Насчет Натальи мне тяжело комментировать, тут к авторам датасета скорее.
                                                                      Насчет Ксении — это просто девушка-диктор, с хорошо поставленным голосом, которая записала для нас аудио в студии с помощью ее коллег из студии DASOUND.NET. Пропиарим студию, раз спросили =)
                                                                      Интересно, если коллеги из студии или сама Ксения отпишутся)

                                                                      +2
                                                                      Замечательная разработка!

                                                                      Попробовал пару моделей — в принципе работает. Но заметил, что для адекватной работы требует хорошей разметки по ударениям.

                                                                      А! Увидел в тексте: «В будущем мы планируем перевести все модели на более простой и унифицированный формат, не требующий ударений». Ну тогда вообще отлично!

                                                                      За torch — отдельное спасибо. ;)
                                                                        +2
                                                                        Кстати, такой вопрос — а разве нет стандартной базы по ударениям в словах? Чтобы сразу загружать с ними и без проблем.

                                                                        Если что — я просто из другой области деятельности, слабо знаком с проблематикой. Поэтому интересно.
                                                                          +3
                                                                          Задача не тривиальная, как показывает беглое гугление… Начиная от омонимов с разным ударением (атлас, как набор карт и атлас, как ткань), заканчивая большим числом словоформ… В принципе задача относительно решаемая. Если чутка еще погуглить думаю и библиотека для python найдется. Но в рамках той же языковой модели, которая озвучивает сейчас (с возможностью скорректировать при необходимости) было бы предпочтительнее конечно.
                                                                            +1

                                                                            Тут основная проблема даже не в отсутствии баз с ударением, их то мы найдем.
                                                                            А в том, что надо знать разбор предложения, чтобы однозначно поставить ударение.
                                                                            А баз где есть и фонемы, и ударения и части речи конечно нету)


                                                                            Я уверен что мы найдем какое-то решение в итоге посерединке, например можно разобрать текста на части речи, проставить ударения по словарю, поправить руками ошибки.


                                                                            Но пока хотелось потратить минимум усилий по принципу 80-20.
                                                                            Не хотелось бы также тащить внешние зависимости (те же pymorphy, pymystem, spacy). Скорее всего поэтому просто сделаем ударения (пусть и криво в омонимах, но такова жизнь), а потом будем думать, стоит ли дальше возиться или пусть люди все-таки сами правят ударения.

                                                                              +3
                                                                              мне просто интересно: можно же скорее всего обучить другую, небольшую сеточку, которая будет расставлять ударения? Было бы достаточно размеченных данных!
                                                                                0

                                                                                Да, скорее всего она будет частью следующих релизов.
                                                                                Пока еще играемся с фонемами, но пока консенсус, что ударение сильно важнее.
                                                                                На омонимы наверное проще забить для следующей версии.

                                                                            +2
                                                                            «зАмок» и «замОк». Без контекста не определить что нужно использовать. Тут проблема не в отсутствии базы ударений для слов где с ним все однозначно.
                                                                              +1
                                                                              Тут как везде: для достижения 80% качества требуется 20% усилий. Для оставшихся 20% качества — требуется ещё 80% усилий.
                                                                                0

                                                                                Ну да. Обратите внимание, что мы сразу ставим цель делать на много языков.
                                                                                Поэтому двигаемся итерационно.

                                                                                0

                                                                                В английском есть такое тоже — первое что нашлось — https://www.engvid.com/english-resource/35-words-stress-changes-meaning/

                                                                                  +1
                                                                                  Таких слов очень мало, и тут можно решать как раз ручной правкой (корректурой). Полностью автоматизированной корректуры нет нигде и ни у кого, несмотря на то, что эти технологии начали развиваться задолго до распространения интернета.
                                                                                    0
                                                                                    полностью автоматизированной корректуры

                                                                                    мы уже смогли покрыть имеющиеся слова, которые покрывают 99%+ используемых слов (а если взвесить по использованию, может и больше) с точностью 98-99% — будет в следующем релизе


                                                                                    но что делать с именами, фамилиями, именами собственными, населенными пунктами — в общем случае только корректура

                                                                                  0

                                                                                  Базы конечно есть и можно просто по ним искать на русском, если стоит задача слепить условный коммерческий продукт как можно быстрее. Но мы ставим себе цель, все засунуть в одну сетку на все языки сразу, чтобы было красиво.

                                                                                  +1

                                                                                  Да, все верно, нужно пока ставить ударения. Мы пока не допилили это. Для всех языков сразу это нетривиально.

                                                                                    +1

                                                                                    Смотрел, как сделаны ударения в коде rhvoice — и там как-то совсем просто было, я даже поразился. Типа небольшой словарик плюс немного логики для слов не в словаре. И этого вполне достаточно, rhvoice ошибается с ударением в очень-очень редких случаях, в основном по типу "замок" — "замок". Может попробуете подсмотреть решение там?

                                                                                      0

                                                                                      Тут сначала надо собрать эти словари для всех языков. Но мы скорее просто включим это в нашу сетку в следующих релизах. Вообще до сегодняшнего дня мы хотели не просто ударение, а еще и фонемы добавить. Но посмотрим, к чему приведет рисеч.

                                                                                  +1
                                                                                  Ребята, отличная работа!
                                                                                    +2
                                                                                    Голоса звучат вполне на уровне, для свободной библиотеки это очень крутое достижение. Ударения и прочее — это дело наживное, лечится. По самому синтезу есть небольшое «дрожание» голоса на стыках звуков, а так было бы вообще неотличимо от живого человека.
                                                                                      +1

                                                                                      Мне показалось, что довольно много "р"-кают — наверное как раз это самое дрожание

                                                                                        +1

                                                                                        Еще примерно в 30-40% фраз проскакивает металл.

                                                                                      +1
                                                                                      Крутая песочница для чайников! У меня правда модели после запятой теряют слово два.
                                                                                        0

                                                                                        Может дело в ударении?
                                                                                        Редко у моделей грустит атеншен и они глотают слова, такое бывает.

                                                                                          +1
                                                                                          Спорить не буду, но просто в разных «голосах» всегда после запятой выпадало, при том, что ударения были везде.
                                                                                            0

                                                                                            Это бывает, но должно быть редко.
                                                                                            Может что-то не так с текстом.
                                                                                            Если реплицируется постоянный баг — то открывайте тикет в репозитории.

                                                                                        +1

                                                                                        В вики написано, что можно добавить и другие языки. Можете написать
                                                                                        а) в каком формате вам надо подготовить данные
                                                                                        б) какие предложения дают лучшее качество
                                                                                        в) какой объем нужен
                                                                                        г) может какие еще есть рекомендации и ограничения

                                                                                          +1

                                                                                          Да как буду у клавиатуры напишу.
                                                                                          Вообще пинганите меня у телеграме если потеряюсь.

                                                                                            +1

                                                                                            Отписался напрямую.

                                                                                          +2

                                                                                          Ну и раз вы в этой теме, можете ответить на вопрос: на сколько сложно имея голос на английском только, воспроизвести текст этим же голосом на русском? У пародистов же это как то получается.

                                                                                            +1

                                                                                            Можно делать войс трансфер но если честно даже с языка на сам этот же язык оно работает не очень. Может мы что-то не так делаем, хз.


                                                                                            Да и у языков интонации сильно разные.


                                                                                            Но честно трансфер с точки зрения этики кажется уже ближе к дип фейкам и распознаванию лиц.


                                                                                            С точки зрения снижения количества данных это хорошо, но чего-то реально лучше 15.ai я не видел, а они не раскрывают.


                                                                                            Опять же — мы пробовали трансфер и мульти войс, пока не поняли зачем оно нам)

                                                                                              +1

                                                                                              Наверное речь о тембре голоса, насколько он отделим и заменяем? Но, скорее всего, вы этим (ещё) не надумали заморачиваться… Но тема богатая, тренировать произношение отдельно от тембра.


                                                                                              Правда, кроме тембра и языка, в произношении есть ещё и акценты — оканье, специфика интонации, шепелявость, картавость и прочее такое, их тоже прикольно было бы выделить в отдельные слагаемые к итоговой речи и комбинировать произвольно. Уверен, что подход с тренингом моделей на это способен, если заморочиться.

                                                                                                +1

                                                                                                Натренировать тембр на одном языке и произносить этим голосом на всех — это ж очень ценно, в разы сокращает организацию библиотеки голосов на всех языках. Тем более, что многоязычные тесты довольно часто нужно озвучивать

                                                                                                  0

                                                                                                  Если коротко — нейросети запоминают комбинации звуков и интонации в связке с разметкой.


                                                                                                  В разных языках сильно разные фонемы.


                                                                                                  Если в рамках одного языка ударение, интонация ещё как-то выделяются и явно описаны разметкой, то в разных все сильно разное, так что хз.

                                                                                                    +1

                                                                                                    Ну вот если тренировать с прицелом на подмену тембра и акцента, может что-то получиться...


                                                                                                    Задумался, например, можно тренировать так: на входе текст, голос, и другой голос, на выходе тот же текст другим голосом… Хотя, тут выйдет лишь дипфейк… Может, и текст тут только помешает, но кажется должен помогать. Впрочем, если ваша модель первым шагом переведёт текст в один конкретный голос, и вторым шагом этот дипфейк переведёт этот один голос в любой другой голос — задача решена))


                                                                                                    С обучением под разные тембры проблема в том, что нужно ж образцы давать на выход для сравнения, а где их столько взять, чтоб модель от тембра смогла бы абстрагироваться?.. Это для каждой фразы нужно много образцов с разным тембром и акцентом, и чтоб модель ровно в каждый из них училась попасть. Но для этого на вход нужно что-то про тембр дать. Номер, а лучше прям образец. Чтоб из образца сеть имела возможность взять тембр, образец должен быть сравним с эталоном — значит, либо записан по фиксированной фразе, либо должен сопровождаться фразой эталонным голосом, либо сопровождаться текстом, по которому эталонное звучание сможет себе понять сама сеть...


                                                                                                    А ещё тут система распознавания текста из речи в тему, она исходно учится тембры и акценты отсекать от того, что содержит сам текст, возможно это в данной задаче можно как-то применить...

                                                                                                      0

                                                                                                      Вообще всякие Ганы типа cycle gan смогут это выучить… но тут кажется что исследований тут на год — два, а профит уже сильно менее понятен


                                                                                                      Кажется очень прикольным но весьма эзотерическим

                                                                                                        +1

                                                                                                        я придумал как сделать =)
                                                                                                        one-shot и few-shot конечно не выйдет
                                                                                                        но я думаю если все получится, нас ждет много интересного

                                                                                              +1
                                                                                              Эффект «зловещей долины» вошел в чат с первой же картинки, но статья все-таки довольно интересная
                                                                                                +2

                                                                                                Ну насчёт долины вы немного преувеличиваете, металл проскакивает, но в 60% случаев долины нет. Но это конечно не предел.

                                                                                                +2

                                                                                                Однако, хорошо звучит! Байя — "Смогу ли я добиться этого?" — удивительно реалистично.

                                                                                                  0

                                                                                                  Какие странно ассессорам она меньше понравилась.
                                                                                                  Но она самая человеческая.

                                                                                                  0
                                                                                                  это здорово! Удачи!
                                                                                                    0

                                                                                                    За всеми зайцами погонишься — ни одного не поймаешь. Для английского качество отличное. А вот с русским беда, для отдельных слов интонации нормальные, но цельные предложения звучат неестественно.
                                                                                                    Я так понимаю, фичи натренированы воспроизводить именно слова, контекст предложения совсем не учитывается. И фичи по n-граммам не работают — иногда при опечатках начинает сильно глючить и выдавать странные звуки.
                                                                                                    Старые системы для аудиокниг, на основе склеек, работают гораздо качественней и производительней.


                                                                                                    Недавно тоже захотелось разработать TTS модель, архитектура получилась похожая на FastSpeech, пока пытаюсь организовать эффективный расход памяти, потом надо будет навесить кучу эвристической предобработки.
                                                                                                    Цель у меня вполне конкретная — добиться "живого" голоса для одного языка, чтобы не стыдно было видео озвучивать или книги. Не знаю закончу ли когда-нибудь, но думаю, что-нибудь качественней голых клонов такотрона в опенсорс еще не скоро выйдет.

                                                                                                      0
                                                                                                      • Интересно, нам наоборот казалось, что на английском качество не очень. Всем, кому показывали, так же казалось.
                                                                                                      • Может просто вы пробовали без ударений и знаков препинания?
                                                                                                      • Насчет остального я даже хз что ответить, ну разве что каждому свое?
                                                                                                      • Причем тут нграммы я тоже не понял.
                                                                                                      +1
                                                                                                      А как сохранить ваш звук в аудио файл?
                                                                                                      Обычно:
                                                                                                      torchaudio.save('some.wav', audio[0], rate)

                                                                                                      но:
                                                                                                      ValueError: Expected 2D Tensor, got 1D.

                                                                                                      Хорошо, конвертируем:
                                                                                                      torchaudio.save('some.wav', audio[0].view(audio[0].size()[0], 1), rate)

                                                                                                      но все равно ошибка:
                                                                                                      RuntimeError: Error opening 'some.wav': Format not recognised.

                                                                                                        0

                                                                                                        Чекнул. Возвращается лист 1D тензоров.
                                                                                                        Вот минималистичный пример для колаба


                                                                                                        import torchaudio
                                                                                                        
                                                                                                        for i, _audio in enumerate(audio):
                                                                                                          torchaudio.save(f'test_{str(i).zfill(2)}.wav',
                                                                                                                          audio[0].unsqueeze(0),
                                                                                                                          sample_rate=16000,
                                                                                                                          bits_per_sample=16)
                                                                                                        
                                                                                                        from google.colab import files
                                                                                                        files.download('test_00.wav')

                                                                                                        Проверил файл, все вроде ок.
                                                                                                        Вообще вот документация — https://pytorch.org/audio/stable/torchaudio.html#i-o-functionalities — тут вроде все просто

                                                                                                      +5

                                                                                                      Вы молодцы, но Не Надо Так Писать Заголовки, Пожалуйста, Русский Язык — Не Английский. Очень Раздражает, Как Будто В Секту Маркетологов Попал. Спасибо.

                                                                                                        0
                                                                                                        Не увидел в статье, на какой связке решили остановиться?
                                                                                                        Судя по производительности, Tacotron2 + LPCNet либо с заменой Tacotron2?
                                                                                                          +1
                                                                                                          Очень круто.
                                                                                                          Как свой голос синтезировать? (Допустим, я готов записать 10 часов своего голоса)
                                                                                                            +1

                                                                                                            Ответил в личку.

                                                                                                              +1

                                                                                                              Можно тоже?

                                                                                                                0

                                                                                                                Попробовал найти вас в телеге.
                                                                                                                Пинганите напрямую, если я ошибся адресом.

                                                                                                            +1

                                                                                                            Благодарствую за статью, сильно сэкономили время на разбор текущего состояния offline stt & tts.

                                                                                                              0
                                                                                                              Алгоритм ведь способен ухватывать общий контекст читаемого текста заблаговременно до чтения, как и данного абзаца, предложения, каждой отдельной грамматической основы сложного предложения (можно даже иерархию этих грамматических основ вычленить)? Следовательно, в контексте могут остаться слова с правильным ударением: если речь об архитектуре зданий, то применимо будет слово зАмок, а не замОк.
                                                                                                              Второе: некое шипение и прочие паразитные эффекты, вероятно, можно гасить простыми акустическими фильтрами наподобие как в Sound Forge — на выходе будет чистое звучание. Так же можно готовыми и открытыми фильтрами без потерь качества менять тон и скорость.
                                                                                                                +2
                                                                                                                можно гасить простыми акустическими фильтрами наподобие как в Sound Forge — на выходе будет чистое звучание.
                                                                                                                Так же можно готовыми и открытыми фильтрами без потерь качества менять тон и скорость.

                                                                                                                А вас не затруднит выложить какой-то минималистичный код применения такого фильтра, допустим с использованием scipy?

                                                                                                                  0
                                                                                                                  С этим сложно, к сожалению. Надо выбрать время. Для начала я попробую прогнать ваши сэмплы через фильтры в саундфордж или даже в онайн-сервисах, так имею некоторый опыт работы со звуком, точнее восстановления некачественных аудиозаписей. Фильтры шумоподавлений и настройки корректировки обычно все есть в опенсорс, в том числе для php, но чтобы разбираться с этим нужны как минимум выходные — с этим проблема.
                                                                                                                    +1
                                                                                                                    Буквально двадцать минут поигрался с настройками фильтра Noise Reduction — результат вполне ощутим, и можно добиться бОльшего.
                                                                                                                    А пока вот, на базе оригинала «Baya 16k Tongue Twister» — специально взял сэмпл с более высоким качеством чтобы доказать возможность дальнейшего улучшения:
                                                                                                                    drive.google.com/file/d/1bnCnSWDCreEj3APeYt6pwdlj03rGmPZt/view?usp=sharing
                                                                                                                    и ваш оригинал для удобства сравнения:
                                                                                                                    drive.google.com/file/d/1pfPAT7wP5nrmFMR-5KYkgkDzROyTXx8g/view?usp=sharing
                                                                                                                      0

                                                                                                                      Звучит и правда получше.
                                                                                                                      Денойзинг нейросетевой мы ещё какое-то время будем делать, а как-то песок убрать наверное можно и попроще.


                                                                                                                      А что это за фильтр, где, есть ли у него описание, математическая формула и / или какие-то стандалонные имплементации?

                                                                                                                        +1
                                                                                                                        В sound forge скорее всего вариация pypi.org/project/logmmse
                                                                                                                          0

                                                                                                                          Спасибо, затестим и если будет помогать
                                                                                                                          Постараемся переписать на торч и засунуть внутрь модели

                                                                                                                          0
                                                                                                                          Я использовал первый попавшийся онлйн-фильтр подавления шумов так как без разницы в саундфордже это будет или где угодно — принципиально это одно и тоже, как и настройки. В выходные могу поставить Сундфордж и потыкаться посерьёзнее. Скрин настроек выслал.
                                                                                                                            0

                                                                                                                            спасибо

                                                                                                                            0
                                                                                                                            У меня дичайшее подозрение по поводу возникновения шумов в вашем генераторе — почему нет сразу чистой речи? Неужели всё дело в каких-то ограничениях дискретизации при генерации звука чтобы меньше грузить процессор? Или, может быть, ваша нейронка изначально сделана на базе произносимых слов с плохим качеством записи с неочищенными шумами? Вот и переняла шумы как мусорные гены в ДНК (дурную наследственность).
                                                                                                                              0

                                                                                                                              дискретизация там конечно есть для упрощения предсказаний
                                                                                                                              причем как в такотроне так и в вокодере
                                                                                                                              но сами аудио довольно чистые

                                                                                                                      +1
                                                                                                                      Процессоры AMD показали себя сильно хуже
                                                                                                                      Интел нерфит производительность своих библиотек (как минимум MKL) на чужих процессорах www.reddit.com/r/MachineLearning/comments/f2pbvz/discussion_workaround_for_mkl_on_amd
                                                                                                                        0

                                                                                                                        Думаю конечно, что реальная причина в том, что AMD просто не инвестирует в алгоритмы / софт / драйвера.
                                                                                                                        AMD на порядок меньше, чем Intel или Nvidia.
                                                                                                                        В драйверах для ML вроде вот-вот догонят, но нет.
                                                                                                                        В играх вроде догнали.

                                                                                                                          +1
                                                                                                                          По моей ссылке там бенчмарки показывают 25-90% прирост при патчинге. У вас сопоставимо было или еще хуже?
                                                                                                                          А так конечно Intel вкладывается в MKL чтобы покупали их процессоры, тут вопросов нет.

                                                                                                                            0
                                                                                                                            У вас сопоставимо было или еще хуже?

                                                                                                                            А я просто прочитал статью, сделал закономерный вывод, что патч будет иметь явно временный срок годности и забил.
                                                                                                                            Билдов торча нацеленных AMD без MKL особо нету, а при сборке на мобилу / ARM / тостеры все равно кастом и возня.


                                                                                                                            Хочешь ультра скорости — используй GPU. В обратном случае — на AMD оно хотя бы быстрее реалтайма.


                                                                                                                            PS


                                                                                                                            И да, жду пока хейтеры из комментов напишут, что надо инструкции на все версии процессоров AMD на 10 лет назад написать xD

                                                                                                                              +1
                                                                                                                              А я просто прочитал статью, сделал закономерный вывод, что патч будет иметь явно временный срок годности и забил.
                                                                                                                              Я не про патч, а про бенчмарки. Фраза в статье — «Процессоры AMD показали себя сильно хуже», насколько хуже не сохранилась информация? На 30% или в 2 раза.
                                                                                                                              Сам я ничего не патчил, но, может, и пропатчу, когда для аугментации в параллель с GPU не будет хватать 20%. Пока обхожусь (о ужас) оптимизацией своего кода.
                                                                                                                              И да, жду пока хейтеры из комментов напишут, что надо инструкции на все версии процессоров AMD на 10 лет назад написать xD
                                                                                                                              Некоторые комментарии тут странные и видимо не понимают объем расшаренной с сообществом информации, докапываясь до какой-то херни.
                                                                                                                        +1

                                                                                                                        Один из самых лучших синтезаторов и самый лучший по качеству голоса.
                                                                                                                        Есть конечно проблема с ударениями и невозможностью чтения цифр, но думаю это легко исправляется (хотя бы второе).
                                                                                                                        Но большая просьба написать гайд по установке этого чуда, в статье толком непонятно.

                                                                                                                          0
                                                                                                                          Есть конечно проблема с ударениями

                                                                                                                          Это будет в следующих релизах.


                                                                                                                          и невозможностью чтения цифр

                                                                                                                          Имхо, голос не должен уметь делать этого.
                                                                                                                          Нормализация и нарезка на предложения это отдельный алгоритм, который будет к тому же отличаться от домена применения.

                                                                                                                            +1

                                                                                                                            Но ведь другие синтезаторы умеют это делать (PHVoise к примеру или тот же гугл)

                                                                                                                              +1

                                                                                                                              ну добавьте на своей стороне предобработку текста и будет работать.

                                                                                                                                +1

                                                                                                                                Я бы добавил, но я так и не разобрался как сие чудо установить))

                                                                                                                                  +1

                                                                                                                                  Выше писал как потыкать в колабе.


                                                                                                                                  Поскольку конкретное окружение не описано, то предполагаю, что нужно установить на десктоп, обычный комп:


                                                                                                                                  • Вероятно у вас уже стоит третий питон и пакетный менеджер conda. Загуглите как поставить конду и питон в обратном случае. Я предпочитаю миниконду, но на вкус и цвет;


                                                                                                                                  • Поставить PyTorch нужный вам билд(CPU / GPU) с нужными вам зависимостями (обычно ограничивается ОС + версия питона + версия CUDA / CUDNN). Торч тоже ставится через конду обычно. Если не хочется морочиться с карточками, то CPU версия нормально работает. Вообще конечно рекомендуется брать торч из официальных билдов на докер-хабе и запускать в контейнере, но на вкус и цвет;


                                                                                                                                  • Поставить через пакетный менеджер omegaconf и torchaudio. Для запуска эти либы не нужны, просто первая читает конфиг, а вторая нужна для STT, который лежит в том же репозитории (у меня и без нее запускается в колабе). Если разбираетесь в питоне, можно просто влезть в утилиты и вообще не ставить это все;


                                                                                                                                  • После этого заведется базовый скрипт:



                                                                                                                                  import torch
                                                                                                                                  
                                                                                                                                  language = 'ru'
                                                                                                                                  speaker = 'kseniya_16khz'
                                                                                                                                  device = torch.device('cpu')
                                                                                                                                  model, symbols, sample_rate, example_text, apply_tts = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                                                                                                                                                                                        model='silero_tts',
                                                                                                                                                                                                        language=language,
                                                                                                                                                                                                        speaker=speaker)
                                                                                                                                  model = model.to(device)  # gpu or cpu
                                                                                                                                  audio = apply_tts(texts=[example_text],
                                                                                                                                                    model=model,
                                                                                                                                                    sample_rate=sample_rate,
                                                                                                                                                    symbols=symbols,
                                                                                                                                                    device=device)

                                                                                                                                  • Меня спрашивали в паре мест, что возвращается в объекте audio, вот очевидная копипаста:

                                                                                                                                  import torchaudio
                                                                                                                                  
                                                                                                                                  for i, _audio in enumerate(audio):
                                                                                                                                    torchaudio.save(f'test_{str(i).zfill(2)}.wav',
                                                                                                                                                    audio[0].unsqueeze(0),
                                                                                                                                                    sample_rate=16000,
                                                                                                                                                    bits_per_sample=16)

                                                                                                                                  from scipy.io.wavfile import write
                                                                                                                                  
                                                                                                                                  def float_to_int(wav):
                                                                                                                                    wav *= 32767
                                                                                                                                    wav = wav.astype('int16')
                                                                                                                                    return wav
                                                                                                                                  
                                                                                                                                  for i, _audio in enumerate(audio):
                                                                                                                                    write(f'test_{str(i).zfill(2)}.wav',
                                                                                                                                          rate=16000,
                                                                                                                                          data=float_to_int(_audio.numpy()))

                                                                                                                                  • Как вывести аудио на динамики из питона — я просто не знаю, т.к. мне не нужно. Я слушаю или в ноутбучке или просто встроенным аудио-плейером с диска;

                                                                                                                                  Так понятнее?

                                                                                                                                    0

                                                                                                                                    Спасибо. Попробую данный способ

                                                                                                                                0

                                                                                                                                Не слышал про PHVoise, но если речь про RHVoise, то вероятно там в одном пакете собраны и голоса и специфическое middleware, которое работает с ОС. Тут слово его авторам.


                                                                                                                                гугл

                                                                                                                                Это платный коммерческий продукт.


                                                                                                                                Если вы закажете у нас коммерческий продукт на базе синтеза, то естественно там под конкретный домен будет и нужная нормализация, и пре-процессинг и какие-то свои фишки, нужные для этого домена, которые придется 100% допиливать напильником.


                                                                                                                                В общем некоммерческом релизе, решающем одну конкретную задачу — синтез голоса — не должно быть middleware. В этом отличие идеологии "правильных точечных инструментов" от "привлечь много денег, написать много кода на все случаи жизни, деньги кончились, смерть", если утрировать конечно.


                                                                                                                                Также тут есть отдельный момент того, что если допустим зачем-то вложить x10 ресурсов и из коробки покрыть все юз-кейсы (все прлатформы, билды, драйвера, middlware на каждый итд итп) скажем так налетят "бизнес-халявщики", которым насрать на лицензию, и завтра мы не только увидим свое решение на "горбушке", но и на нас еще превентивно подадут в суд за нарушение авторских прав (без шуток).


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


                                                                                                                                Если продукт не продукт, а вы — продукт, то это плохой продукт =)

                                                                                                                                  +1

                                                                                                                                  Я полностью с вами согласен, но гугл я привел как пример того что умеет читать цифры.

                                                                                                                                    +1

                                                                                                                                    Никаких идей коммерческого использования у меня нет. Я хотел его б использовать чисто в личных целях (умный дом к примеру или подобное)

                                                                                                                                      0

                                                                                                                                      Ну тут несложно придумать нормализацию цифр на коленке через тот же num2word за 5 минут. Оно покроет ваши простые кейсы и норм

                                                                                                                            +3
                                                                                                                            Буду рад, если кому нибудь пригодятся мои наработки по фонемному синтезу речи на C#/.NET: https://github.com/PavelKulbida/Govorun, фонемная база в комплекте моя, никаких ограничений по использованию (MIT)
                                                                                                                              0
                                                                                                                              А как быстро сравнить генерации качество? Есть сервис, или откомпилированное, или что-то похожее колаб?
                                                                                                                                0
                                                                                                                                тестовое приложение лежит в репозитории: