Чтобы построить stt - llm - tts пайплайн/агента, стоит рассмотреть некоторые метрики.
Обычная скорость моделей распознавания, генерации токенов и синтеза речи нам особо ничего не дает, больше всего нас интересует latency (задержка, сколько юзер ждет ответа), именно она влияет на опыт больше всего.
Ждем ответа
Рассмотрим что должно происходить в пайплайне для получения ответа в самом простом виде:
- Речь
- Транскрибирование
- Запрос в LLM
- Синтез речи
- Воспроизведение
Если мы построим такой пайплайн, то юзер будет ждать ответа по 5-10 секунд (и больше) после того как закончил говорить, что нам абсолютно не подходит.
Тут есть места, которые мы можем улучшить.
STT/ASR
Во-первых, чтобы понять когда юзер закончил говорить мы используем VAD (Voice Activity Detection), и если пауза достаточно большая (0.5-1s к примеру) - значит речь закончилась и надо приступать к генерации ответа.
Но, нам не обязательно просто ждать пока человек договорит, мы в это время можем транскрибировать часть аудио.
Можно взять модель t-one:
https://github.com/voicekit-team/T-one
Это стриминг STT/ASR модель, принимает аудио чанками по 300ms, возвращает текст. Так к моменту окончания речи, большая часть аудио уже будет транскрибирована и останутся только последние чанки.
LLM
Тут мы ничего не можем сделать на входе, так как для генерации ответа нам нужен весь контекст (весь текст из STT/ACR). Но, чтобы не ждать полного ответа можно вызывать llm в режиме stream, llm будет возвращать часть токенов/текста по мере генерации. Это поможет нам на следующем этапе.
TTS
Тут похожая ситуация, нам нельзя ждать генерации полной аудио дорожки, так как это долго, значит нам нужна модель которая умеет отдавать синтезированное аудио чанками и со скоростью выше, чем аудио воспроизводится.
Ранее упомянутая XTTSv2 вполне с этим справляется.
Плюс, раз мы не ждем полного ответа llm, мы можем начать генерацию речи раньше, нам надо только определить минимальное кол-во текста для генерации, это зависит от модели и качества модели синтеза.
Работает это примерно так:
Мы собираем стрим из LLM, как только накопили 1 предложение, отправляем на синтез. Разбивать текст можно по предложениям или по кол-ву символов. Лучший результат я получал комбинируя эти 2 подхода, разбивал текст по предложениям, но в районе 150-160 символов (xtts имеет ограничение, максимум 180 символов для синтеза).
Итоговый пайплайн должен выглядеть примерно так:
- Начало речи
- Начало транскрибирования
- Конец речи - тут юзер начинает ждать
- Конец транскрибирования (минимальная задержка после конца речи)
- Начало запроса в LLM
- Начало синтеза речи
- Начало воспроизведения - тут получает первый ответ
- Конец запроса в LLM
- Конец синтеза речи
- Конец воспроизведения
Таким образом при получении минимального кол-ва аудио для воспроизведения, мы сразу даем ответ, а пока юзер слушает, мы генерируем оставшуюся часть.
Обычная скорость моделей распознавания, генерации токенов и синтеза речи нам особо ничего не дает, больше всего нас интересует latency (задержка, сколько юзер ждет ответа), именно она влияет на опыт больше всего.
Ждем ответа
Рассмотрим что должно происходить в пайплайне для получения ответа в самом простом виде:
- Речь
- Транскрибирование
- Запрос в LLM
- Синтез речи
- Воспроизведение
Если мы построим такой пайплайн, то юзер будет ждать ответа по 5-10 секунд (и больше) после того как закончил говорить, что нам абсолютно не подходит.
Тут есть места, которые мы можем улучшить.
STT/ASR
Во-первых, чтобы понять когда юзер закончил говорить мы используем VAD (Voice Activity Detection), и если пауза достаточно большая (0.5-1s к примеру) - значит речь закончилась и надо приступать к генерации ответа.
Но, нам не обязательно просто ждать пока человек договорит, мы в это время можем транскрибировать часть аудио.
Можно взять модель t-one:
https://github.com/voicekit-team/T-one
Это стриминг STT/ASR модель, принимает аудио чанками по 300ms, возвращает текст. Так к моменту окончания речи, большая часть аудио уже будет транскрибирована и останутся только последние чанки.
LLM
Тут мы ничего не можем сделать на входе, так как для генерации ответа нам нужен весь контекст (весь текст из STT/ACR). Но, чтобы не ждать полного ответа можно вызывать llm в режиме stream, llm будет возвращать часть токенов/текста по мере генерации. Это поможет нам на следующем этапе.
TTS
Тут похожая ситуация, нам нельзя ждать генерации полной аудио дорожки, так как это долго, значит нам нужна модель которая умеет отдавать синтезированное аудио чанками и со скоростью выше, чем аудио воспроизводится.
Ранее упомянутая XTTSv2 вполне с этим справляется.
Плюс, раз мы не ждем полного ответа llm, мы можем начать генерацию речи раньше, нам надо только определить минимальное кол-во текста для генерации, это зависит от модели и качества модели синтеза.
Работает это примерно так:
Мы собираем стрим из LLM, как только накопили 1 предложение, отправляем на синтез. Разбивать текст можно по предложениям или по кол-ву символов. Лучший результат я получал комбинируя эти 2 подхода, разбивал текст по предложениям, но в районе 150-160 символов (xtts имеет ограничение, максимум 180 символов для синтеза).
Итоговый пайплайн должен выглядеть примерно так:
- Начало речи
- Начало транскрибирования
- Конец речи - тут юзер начинает ждать
- Конец транскрибирования (минимальная задержка после конца речи)
- Начало запроса в LLM
- Начало синтеза речи
- Начало воспроизведения - тут получает первый ответ
- Конец запроса в LLM
- Конец синтеза речи
- Конец воспроизведения
Таким образом при получении минимального кол-ва аудио для воспроизведения, мы сразу даем ответ, а пока юзер слушает, мы генерируем оставшуюся часть.
👍2🔥2
Виды TTS моделей
Разберем text-to-speech модели, чтобы хоть немного представлять, как они устроены и их отличие.
И так, можно грубо разделить модели на:
- Авторегрессивные - предсказывают каждый следующий аудио фрагмент (спектрограмму или аудио-токен) на основе предыдущих, например: XTTS
- Неавторегрессивные - генерируют всю последовательность сразу или крупными батчами, без связи с предыдущим токеном/шагом, что существенно ускоряет инференс, например: F5, VITS
- Гибридные/Особые дизайны - встречаются архитектуры, использующие одновременно элементы авторегрессии и неавторегрессии (DualAR), например: Fish-Speech
Сама модель состоит из разных модулей, обычно их можно запустить и использовать отдельно.
Рассмотрим на примере той же XTTS (схема архитектуры в комментарии).
Основные модули:
- VQ-VAE - эта штука кодирует мел-спектрограмму в аудио токены.
- Perciever conditioner - делает нечто похожее, но отдает фиксированное кол-во ембеддингов, содержащих особенности референсного голоса, добавлен для улучшения клонирования голоса.
- BPE tokenizer - токенайзер, превращает текст в ембеддинги.
- GPT-2 - главный гость программы, получает все прошлое на вход и последовательно предсказывает аудио токены. Эта часть и есть трансформер, принцип работы такой же как у ChatGPT и прочих штук, которые вы вероятно использовали, только вместо текста работает с аудио-токенами.
- HiFi-GAN - так называемый вокодер, берет результаты от GPT-2 и ембеддинги спикера и превращает это в аудио.
Итоговый путь такой: аудио + референс + нужный текст -> мел-спектрограммы -> аудио токены -> предсказываем продолжение в аудио токенах -> декодируем аудио токены в звук.
Модели часто выходят с paper, в котором описаны подходы и решения, по классике, вот XTTS paper:
https://arxiv.org/abs/2406.04904
https://quickarxiv.org/abs/2406.04904 - если добавить quick перед доменом, то попадете в интерфейс с LLM, где можно задавать вопросы по тексту.
Схема примерно общая, но с разными деталями внутри. Некоторые модели не используют мел-спектрограммы, а используют нейро кодеки для кодирования сырого аудио и декодирования после предсказания.
Разберем text-to-speech модели, чтобы хоть немного представлять, как они устроены и их отличие.
И так, можно грубо разделить модели на:
- Авторегрессивные - предсказывают каждый следующий аудио фрагмент (спектрограмму или аудио-токен) на основе предыдущих, например: XTTS
- Неавторегрессивные - генерируют всю последовательность сразу или крупными батчами, без связи с предыдущим токеном/шагом, что существенно ускоряет инференс, например: F5, VITS
- Гибридные/Особые дизайны - встречаются архитектуры, использующие одновременно элементы авторегрессии и неавторегрессии (DualAR), например: Fish-Speech
Сама модель состоит из разных модулей, обычно их можно запустить и использовать отдельно.
Рассмотрим на примере той же XTTS (схема архитектуры в комментарии).
Основные модули:
- VQ-VAE - эта штука кодирует мел-спектрограмму в аудио токены.
- Perciever conditioner - делает нечто похожее, но отдает фиксированное кол-во ембеддингов, содержащих особенности референсного голоса, добавлен для улучшения клонирования голоса.
- BPE tokenizer - токенайзер, превращает текст в ембеддинги.
- GPT-2 - главный гость программы, получает все прошлое на вход и последовательно предсказывает аудио токены. Эта часть и есть трансформер, принцип работы такой же как у ChatGPT и прочих штук, которые вы вероятно использовали, только вместо текста работает с аудио-токенами.
- HiFi-GAN - так называемый вокодер, берет результаты от GPT-2 и ембеддинги спикера и превращает это в аудио.
Итоговый путь такой: аудио + референс + нужный текст -> мел-спектрограммы -> аудио токены -> предсказываем продолжение в аудио токенах -> декодируем аудио токены в звук.
Модели часто выходят с paper, в котором описаны подходы и решения, по классике, вот XTTS paper:
https://arxiv.org/abs/2406.04904
https://quickarxiv.org/abs/2406.04904 - если добавить quick перед доменом, то попадете в интерфейс с LLM, где можно задавать вопросы по тексту.
Схема примерно общая, но с разными деталями внутри. Некоторые модели не используют мел-спектрограммы, а используют нейро кодеки для кодирования сырого аудио и декодирования после предсказания.
🔥2
Forwarded from Silero TTS (озвучка, текст в голос).
Мы опубликовали стабильный, быстрый, качественный и доступный синтез для 20 языков России и СНГ
0️⃣ Популярные языки из 🇷🇺🇺🇦🇺🇿🇰🇿🇦🇿🇹🇯🇧🇾🇬🇪🇰🇬🇦🇲;
1️⃣ Всего 20 языков России и стран СНГ, всего 95 голосов;
2️⃣ Модели компактные и быстрые, как наши прошлые релизы;
3️⃣ Поддержка SSML, генерация аудио с SR 8000, 24000, 48000;
4️⃣ Два типа моделей - base под лицензией MIT на наших данных и ext на данных сообщества;
5️⃣ Остались непокрытыми языки Дагестана и ЧР, если хотите помочь с добавлением этих языков пишите сюда.
⭐️ Репозиторий
⬆️ Статья на Хабре
0️⃣ Популярные языки из 🇷🇺🇺🇦🇺🇿🇰🇿🇦🇿🇹🇯🇧🇾🇬🇪🇰🇬🇦🇲;
1️⃣ Всего 20 языков России и стран СНГ, всего 95 голосов;
2️⃣ Модели компактные и быстрые, как наши прошлые релизы;
3️⃣ Поддержка SSML, генерация аудио с SR 8000, 24000, 48000;
4️⃣ Два типа моделей - base под лицензией MIT на наших данных и ext на данных сообщества;
5️⃣ Остались непокрытыми языки Дагестана и ЧР, если хотите помочь с добавлением этих языков пишите сюда.
⭐️ Репозиторий
⬆️ Статья на Хабре
🔥1
После блокировки huggingface появилась проблема - скачивание моделей.
И вроде все знают как ее решать, надо просто включить vietnamese pho noodles и все заработает, но если ты работаешь из под wsl, то начинаются проблемы.
Мой сетап:
- win 10
- wsl2 ubuntu
- amnezia
Что я попробовал:
- купить прокси
- прокинуть wsl через амнезию виндовую
- добавлял хосты huggingface (cdn в том числе) в запрет
- пытался мобильный с vpn раздавать
- подрубал зеркало (hf_mirror) (сработало для 1 модели из 4)
- пошел качать с modelscope (китайская алтернатива), но код сильно завязан на HF
Все это у меня не получилось нормально завести.
Помогло поставить ameziawg-go в wsl:
https://github.com/amnezia-vpn/amnezia-client/issues/850
Из коробки тоже не завелось, решением было добавить в wg0.conf
postUp и preDown
YOUR_VPN_ENDPOINT_IP - IP адрес вашего VPN сервера (например, 203.0.113.1)
YOUR_ETH0_GATEWAY_IP - IP адрес шлюза вашей локальной сети (например, 192.168.1.1). Узнать можно командой:
И на следующий день это все развалилось и перестало работать)
В итоге сработал способ прокинуть трафик из wsl через amezia на win. Но с небольшой особенностью:
https://github.com/deanmcniven/wsl2-vpn-support
При включении VPN и WSL надо стартовать powershell скрипт, который добавит роуты.
А так же добавить dns вашего vpn в
После этого у вас останется 1 проблема, это не сработает для докера, но решить ее можно указав:
С одной стороны неудобно, но пока такой костыльный вариант меня вполне устраивает, и так потерял тонну времени чтобы это завелось.
И вроде все знают как ее решать, надо просто включить vietnamese pho noodles и все заработает, но если ты работаешь из под wsl, то начинаются проблемы.
Мой сетап:
- win 10
- wsl2 ubuntu
- amnezia
Что я попробовал:
- купить прокси
- прокинуть wsl через амнезию виндовую
- добавлял хосты huggingface (cdn в том числе) в запрет
- пытался мобильный с vpn раздавать
- подрубал зеркало (hf_mirror) (сработало для 1 модели из 4)
- пошел качать с modelscope (китайская алтернатива), но код сильно завязан на HF
Все это у меня не получилось нормально завести.
Помогло поставить ameziawg-go в wsl:
https://github.com/amnezia-vpn/amnezia-client/issues/850
Из коробки тоже не завелось, решением было добавить в wg0.conf
[Interface]
Table = off
postUp и preDown
PostUp = ip route add YOUR_VPN_ENDPOINT_IP/32 via YOUR_ETH0_GATEWAY_IP dev eth0; ip route del default via YOUR_ETH0_GATEWAY_IP dev eth0; ip route add default dev wg0
PreDown = ip route del default dev wg0; ip route add default via YOUR_ETH0_GATEWAY_IP dev eth0; ip route del YOUR_VPN_ENDPOINT_IP/32 via YOUR_ETH0_GATEWAY_IP dev eth0
YOUR_VPN_ENDPOINT_IP - IP адрес вашего VPN сервера (например, 203.0.113.1)
YOUR_ETH0_GATEWAY_IP - IP адрес шлюза вашей локальной сети (например, 192.168.1.1). Узнать можно командой:
ip route | grep defaultИ на следующий день это все развалилось и перестало работать)
В итоге сработал способ прокинуть трафик из wsl через amezia на win. Но с небольшой особенностью:
https://github.com/deanmcniven/wsl2-vpn-support
При включении VPN и WSL надо стартовать powershell скрипт, который добавит роуты.
А так же добавить dns вашего vpn в
/etc/resolv.conf:
nameserver 1.1.1.1
nameserver 1.0.0.1
После этого у вас останется 1 проблема, это не сработает для докера, но решить ее можно указав:
--network=hostС одной стороны неудобно, но пока такой костыльный вариант меня вполне устраивает, и так потерял тонну времени чтобы это завелось.
👍1🔥1
Nari Labs выпустили Dia2 - первую open-source TTS-модель со стриминговой генерацией в реальном времени. Не нужен полный текст, начинает синтезировать с первых слов.
Две версии: 1B и 2B параметров, полностью открыты для коммерческого использования.
Умеет только в английский язык, но интересен сам факт публикации такой модели.
Пост:
https://www.communeify.com/en/blog/dia2-opensource-low-latency-natural-english-dialogue-ai/
Github:
https://github.com/nari-labs/dia2
Две версии: 1B и 2B параметров, полностью открыты для коммерческого использования.
Умеет только в английский язык, но интересен сам факт публикации такой модели.
Пост:
https://www.communeify.com/en/blog/dia2-opensource-low-latency-natural-english-dialogue-ai/
Github:
https://github.com/nari-labs/dia2
🔥1
VibeVoice-Realtime-0.5B
Не много прошло времени от первого open-source релиза Dia2-2B с поддержкой чанков текста на входе и вот.
Microsoft представила VibeVoice-Realtime-0.5B — новую модель для потокового синтеза речи.
Она поддерживает только английский язык и обеспечивает задержку примерно 0.3 секунды при старте генерации.
0.5 млрд параметров, что делает её значительно легче предыдущих версий (1.5B и 7B).
Клонировать голос не может, есть несколько голосов на выбор, видео демки:
линк
Веса тут:
https://huggingface.co/microsoft/VibeVoice-Realtime-0.5B
Код тут:
https://github.com/microsoft/VibeVoice
Не много прошло времени от первого open-source релиза Dia2-2B с поддержкой чанков текста на входе и вот.
Microsoft представила VibeVoice-Realtime-0.5B — новую модель для потокового синтеза речи.
Она поддерживает только английский язык и обеспечивает задержку примерно 0.3 секунды при старте генерации.
0.5 млрд параметров, что делает её значительно легче предыдущих версий (1.5B и 7B).
Клонировать голос не может, есть несколько голосов на выбор, видео демки:
линк
Веса тут:
https://huggingface.co/microsoft/VibeVoice-Realtime-0.5B
Код тут:
https://github.com/microsoft/VibeVoice
🔥1
Полный список всех актуальных open-source TTS, которые умеют в синтез на русском языке.
XTTS v2
https://github.com/idiap/coqui-ai-TTS
Клонирование голоса:✅
Реалтайм:✅
RTF (Realtime factor): 0.3-0.6 на rtx 3090
Модель может в ru изначально, но есть и файнтюны:
https://huggingface.co/tensorbanana/xttsv2_banana
https://huggingface.co/NeuroDonu/RU-XTTS-DonuModel
F5
https://github.com/SWivid/F5-TTS
Клонирование голоса:✅
Реалтайм:✅
RTF: 0.14 на rtx 3090, 0.08 на rtx 5090 при nfe=16
TTFB / Latency: > 1 сек
RU файнтюн:
https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN
Демо:
https://misha24-10.github.io/Misha24-10/
ESpeech (та же F5)
https://huggingface.co/ESpeech
Относительно новый файнтюн F5, представлено несколько весов.
Мне больше всего зашли RL 1 и SFT 95k.
Релиз пост автора (внутри демо):
https://t.me/den4ikresearch/117
Доклад от автора про датасет и модели:
https://www.youtube.com/watch?v=B6kO5qVhMnw
Chatterbox
https://github.com/resemble-ai/chatterbox
Клонирование голоса:✅
Реалтайм:✅
RTF: не тестил
Демо:
https://resemble-ai.github.io/chatterbox_demopage/
HF space:
https://huggingface.co/spaces/ResembleAI/Chatterbox-Multilingual-TTS
Streaming реализация без поддержки мультиязычности:
https://github.com/davidbrowne17/chatterbox-streaming
VibeVoice
https://github.com/microsoft/VibeVoice
Клонирование голоса:✅
Реалтайм:❌
RTF: >1 для 7B модели
Большая модель, умеет клонировать голос, но о реалтайме с большой 7B моделью в базовом виде можно забыть.
HF:
https://huggingface.co/vibevoice/VibeVoice-7B
https://huggingface.co/vibevoice/VibeVoice-1.5B
Реалтайм реализация и подробности от Tensor Banana:
https://t.me/tensorbanana/1236
FishSpeech
https://github.com/fishaudio/fish-speech
Клонирование голоса:✅
Реалтайм:✅
RTF: 0.14 на rtx 4090 (по заявлению от авторов), не тестил
Из коробки очень медленный, стриминг навайбкодить не вышло.
HF:
https://huggingface.co/fishaudio
https://huggingface.co/fishaudio/fish-speech-1.5
Silero
https://github.com/snakers4/silero-models
Клонирование голоса:❌
Реалтайм:✅
RTF: не тестил
Поддерживает много СНГ языков и акценты. Умеет в SSML.
Piper TTS
https://github.com/OHF-Voice/piper1-gpl
Клонирование голоса:❌
Реалтайм:✅
RTF: не записал
Очень маленькая и шустрая модель, умеет в русский, но не умеет клонировать голос. Пробовал завести с RVC, но достичь реалтайма не получилось (из-за RVC).
Демо:
https://rhasspy.github.io/piper-samples/demo.html
XTTS v2
https://github.com/idiap/coqui-ai-TTS
Клонирование голоса:
Реалтайм:
RTF (Realtime factor): 0.3-0.6 на rtx 3090
Модель может в ru изначально, но есть и файнтюны:
https://huggingface.co/tensorbanana/xttsv2_banana
https://huggingface.co/NeuroDonu/RU-XTTS-DonuModel
F5
https://github.com/SWivid/F5-TTS
Клонирование голоса:
Реалтайм:
RTF: 0.14 на rtx 3090, 0.08 на rtx 5090 при nfe=16
TTFB / Latency: > 1 сек
RU файнтюн:
https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN
Демо:
https://misha24-10.github.io/Misha24-10/
ESpeech (та же F5)
https://huggingface.co/ESpeech
Относительно новый файнтюн F5, представлено несколько весов.
Мне больше всего зашли RL 1 и SFT 95k.
Релиз пост автора (внутри демо):
https://t.me/den4ikresearch/117
Доклад от автора про датасет и модели:
https://www.youtube.com/watch?v=B6kO5qVhMnw
Chatterbox
https://github.com/resemble-ai/chatterbox
Клонирование голоса:
Реалтайм:
RTF: не тестил
Демо:
https://resemble-ai.github.io/chatterbox_demopage/
HF space:
https://huggingface.co/spaces/ResembleAI/Chatterbox-Multilingual-TTS
Streaming реализация без поддержки мультиязычности:
https://github.com/davidbrowne17/chatterbox-streaming
VibeVoice
https://github.com/microsoft/VibeVoice
Клонирование голоса:
Реалтайм:
RTF: >1 для 7B модели
Большая модель, умеет клонировать голос, но о реалтайме с большой 7B моделью в базовом виде можно забыть.
HF:
https://huggingface.co/vibevoice/VibeVoice-7B
https://huggingface.co/vibevoice/VibeVoice-1.5B
Реалтайм реализация и подробности от Tensor Banana:
https://t.me/tensorbanana/1236
FishSpeech
https://github.com/fishaudio/fish-speech
Клонирование голоса:
Реалтайм:
RTF: 0.14 на rtx 4090 (по заявлению от авторов), не тестил
Из коробки очень медленный, стриминг навайбкодить не вышло.
HF:
https://huggingface.co/fishaudio
https://huggingface.co/fishaudio/fish-speech-1.5
Silero
https://github.com/snakers4/silero-models
Клонирование голоса:
Реалтайм:
RTF: не тестил
Поддерживает много СНГ языков и акценты. Умеет в SSML.
Piper TTS
https://github.com/OHF-Voice/piper1-gpl
Клонирование голоса:
Реалтайм:
RTF: не записал
Очень маленькая и шустрая модель, умеет в русский, но не умеет клонировать голос. Пробовал завести с RVC, но достичь реалтайма не получилось (из-за RVC).
Демо:
https://rhasspy.github.io/piper-samples/demo.html
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5🔥1
Дополнение к прошлому посту, модели, которые теоретически скоро появятся:
Orpheus-TTS
https://github.com/canopyai/Orpheus-TTS
Клонирование голоса:✅
Реалтайм:✅
RTF: не тестил
Пишут что хороший реалтайм, русский не поддерживает.
Готовится файнтюн:
https://huggingface.co/papacliff/orpheus-3b-0.1-ft-ru
Есть готовый сетап под low latency streaming
https://github.com/taresh18/orpheus-streaming
CosyVoice 3
https://github.com/FunAudioLLM/CosyVoice
Демо:
https://funaudiollm.github.io/cosyvoice3/
Но веса не публиковали, доступна только CosyVoice 2, без поддержки русского.
Orpheus-TTS
https://github.com/canopyai/Orpheus-TTS
Клонирование голоса:
Реалтайм:
RTF: не тестил
Пишут что хороший реалтайм, русский не поддерживает.
Готовится файнтюн:
https://huggingface.co/papacliff/orpheus-3b-0.1-ft-ru
Есть готовый сетап под low latency streaming
https://github.com/taresh18/orpheus-streaming
CosyVoice 3
https://github.com/FunAudioLLM/CosyVoice
Демо:
https://funaudiollm.github.io/cosyvoice3/
Но веса не публиковали, доступна только CosyVoice 2, без поддержки русского.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Перейдем к практике, вчера сел и финально пощупал основные TTS модельки, все гонял на rtx 3090, ниже результаты.
Fish Speech
А именно openaudio-s1-mini:
https://huggingface.co/fishaudio/openaudio-s1-mini
Накурсорить стриминг инференс не получилось, все вышло далеко от реалтайма, да и качество полученного аудио сомнительное.
Chatterbox
Подход тот же, берем основной репозиторий, отправляем курсор писать стриминг реализацию (opus-4.5).
В данном случае есть форк со стримингом, но он для англ модели, а нам нужна мультиязычная.
Стриминг завелся, но очень медленный, предполагаю какая-то часть осталась на cpu, хотя перепроверял несколько раз.
Немного цифр:
Time to first chunk: 10837.61 ms
Total generation time: 20.753s
Total audio duration: 5.943s
RTF (Real-Time Factor): 3.492
Качество на выходе странное, с акцентом.
XTTS v2
Чекпоинт брал от бананы:
https://huggingface.co/tensorbanana/xttsv2_banana
Тут все отлично завелось и работает, инференс под стриминг апи писал давно и сюрпризов не было.
TTFB: 300-350ms
RTF: 0.3
Проблема одна, качество, достаточно шумное аудио на выходе.
F5 / ESpeech
Есть несколько файнтюнов на русский язык, я взял веса от ESpeech SFT 95K:
https://huggingface.co/ESpeech/ESpeech-TTS-1_SFT-95K
Для быстрой генерации выставляем nfe_steps=16
Получаем:
RTF: 0.14
TTFB: 1.8s
А все потому что диффузионная моделька генерит сразу полное аудио, предыдущие могут отдавать чанки по мере генерации.
Как вариант можно ограничить текст по длине для первого шага, чтобы быстрее получить ответ, и пока воспроизводится первый кусок, успеть сгенерировать последующие. Но скорее всего минимальное время ожидания будет около 1 секунды.
Но есть и плюсы, лучшее качество среди всех вариантов.
А также поддержка ruaccent для расстановки ударений.
Fish Speech
А именно openaudio-s1-mini:
https://huggingface.co/fishaudio/openaudio-s1-mini
Накурсорить стриминг инференс не получилось, все вышло далеко от реалтайма, да и качество полученного аудио сомнительное.
Chatterbox
Подход тот же, берем основной репозиторий, отправляем курсор писать стриминг реализацию (opus-4.5).
В данном случае есть форк со стримингом, но он для англ модели, а нам нужна мультиязычная.
Стриминг завелся, но очень медленный, предполагаю какая-то часть осталась на cpu, хотя перепроверял несколько раз.
Немного цифр:
Time to first chunk: 10837.61 ms
Total generation time: 20.753s
Total audio duration: 5.943s
RTF (Real-Time Factor): 3.492
Качество на выходе странное, с акцентом.
XTTS v2
Чекпоинт брал от бананы:
https://huggingface.co/tensorbanana/xttsv2_banana
Тут все отлично завелось и работает, инференс под стриминг апи писал давно и сюрпризов не было.
TTFB: 300-350ms
RTF: 0.3
Проблема одна, качество, достаточно шумное аудио на выходе.
F5 / ESpeech
Есть несколько файнтюнов на русский язык, я взял веса от ESpeech SFT 95K:
https://huggingface.co/ESpeech/ESpeech-TTS-1_SFT-95K
Для быстрой генерации выставляем nfe_steps=16
Получаем:
RTF: 0.14
TTFB: 1.8s
А все потому что диффузионная моделька генерит сразу полное аудио, предыдущие могут отдавать чанки по мере генерации.
Как вариант можно ограничить текст по длине для первого шага, чтобы быстрее получить ответ, и пока воспроизводится первый кусок, успеть сгенерировать последующие. Но скорее всего минимальное время ожидания будет около 1 секунды.
Но есть и плюсы, лучшее качество среди всех вариантов.
А также поддержка ruaccent для расстановки ударений.
1🔥3👍1
CosyVoice 3
Выше я писал что возможно скоро дропнут CosyVoice 3 и вот этот день настал
https://t.me/xVibeNot/29
Что получаем:
- 9 языков, русский из коробки
- Нормализация текста, умеет в цифры и символы (надо смотреть подробнее как это будет работать)
- Bi-Streaming - можно подавать текст на вход частями/чанками, на выходе получаем аудио по мере генерации. Это дает минимальную задержку до первого чанка
- Поддержка инструкций - скорость, громкость, эмоции, диалекты
- Вроде еще код обучения дропнули
Github:
https://github.com/FunAudioLLM/CosyVoice
HF:
https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
Демки (русских не много):
https://funaudiollm.github.io/cosyvoice3/
Выше я писал что возможно скоро дропнут CosyVoice 3 и вот этот день настал
https://t.me/xVibeNot/29
Что получаем:
- 9 языков, русский из коробки
- Нормализация текста, умеет в цифры и символы (надо смотреть подробнее как это будет работать)
- Bi-Streaming - можно подавать текст на вход частями/чанками, на выходе получаем аудио по мере генерации. Это дает минимальную задержку до первого чанка
- Поддержка инструкций - скорость, громкость, эмоции, диалекты
- Вроде еще код обучения дропнули
Github:
https://github.com/FunAudioLLM/CosyVoice
HF:
https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512
Демки (русских не много):
https://funaudiollm.github.io/cosyvoice3/
🔥1
Особенности CosyVoice3
Главные преимущества модели в качестве, это управление синтезом через промпт и специальные токены для кашля, смеха, вздохов и тд.
Вместе с текстом для синтеза в модель надо подавать промпт, в формате:
где instruction и есть этот промпт для управления стилем
В токенайзер добавлены специальные токены:
Bi-stream из анонса пока не работает с 3 версией, только с 2, но вероятно допилят.
Что касается скорости и реалтайма - будет отдельный пост.
Главные преимущества модели в качестве, это управление синтезом через промпт и специальные токены для кашля, смеха, вздохов и тд.
Вместе с текстом для синтеза в модель надо подавать промпт, в формате:
{instruction}<|endofprompt|>{audio_transcription}где instruction и есть этот промпт для управления стилем
You are a helpful assistant. Please say a sentence as loudly as possible.В токенайзер добавлены специальные токены:
[breath]
[noise]
[cough] - кашель в примере output_02.wav
[laughter] - смех в примере output_03.wav
[clucking]
[accent]
[quick_breath]
[hissing]
[sigh]
[vocalized-noise]
[lipsmack]
[mn]
<strong> </strong>
<laughter> </laughter>
Bi-stream из анонса пока не работает с 3 версией, только с 2, но вероятно допилят.
streaming input text is only implemented for CosyVoice2 and do not support vllm!
Что касается скорости и реалтайма - будет отдельный пост.
🔥3