ProsaTTS: TTS pt-BR com emoções (16,7M, derivado do Kokoro)

Modelo derivado do Kokoro-82M (Apache 2.0): mesma arquitetura e mesmos fonemas, com o BERT do Kokoro, gerador iSTFT e 16,7M parâmetros. A voz é sintética.

O que tem de novo

  • Controle de emoção: triste, animado, suave, raiva, surpresa, além do neutro.
  • Cada emoção é um vetor aprendido (f3_istft.labels.pt) somado ao estilo de cada frase, mais um banco de estilos por emoção (f3_istft.bank.pt).
  • O ganho da emoção (EMO_GAIN) aumenta ou diminui a intensidade.

Arquivos

arquivo o que é
f3_istft.pth pesos do modelo (state_dict do treino)
f3_istft.kmodel.pt os mesmos pesos no formato do KModel do Kokoro
config_v3_istft.json configuração do modelo
f3_istft.labels.pt {emo_<emoção>: vetor de 256}
f3_istft.bank.pt estilos de referência por emoção e por tipo de frase
packs/*.pt estilos base: neutro (pm_alex), pergunta (q), animado, suave
pipeline/ todo o código: geração do áudio professor, filtro, alinhamento, treino e avaliação
logs/ saída completa do teste curto e do fine-tuning
samples/ uma frase escrita para cada emoção

Como usar

O estilo de uma frase é pack[len(fonemas) - 1] + labels["emo_<emoção>"] * EMO_GAIN, passado ao KModel.forward_with_tokens.

Etapas do fine-tuning

etapa o que acontece resultado
1. Vozes de referência Trechos da gravação Rasalgethi escolhidos por emoção: 6 emoções × 8 trechos (pipeline/voxgen/prompts.tar) 48 referências
2. Áudio professor O VoxCPM2 clona a voz de cada referência e fala frases novas com aquela emoção, 4 processos por GPU H100 (vox_gen.py, voxgen.sbatch) 12.000 frases em 1h28
3. Filtro O Whisper large-v3-turbo transcreve cada frase e só fica a que diz o texto pedido (pocket_filter.py) 11.531 mantidas
4. Alinhamento Um alinhador CTC marca quanto tempo dura cada fonema (align_ctc.py); frases longas demais saem (gate16.py) 11.515 alinhadas
5. Conjunto de treino As frases novas, com o rótulo da emoção, se juntam às frases do treino anterior: neutro, pergunta, animado, suave (emo_index.py) 34.890 frases, 100 separadas para teste
6. Teste curto 20 passos para ver se tudo roda (vox.sh smoke) ok
7. Fine-tuning 60.000 passos a partir do modelo iSTFT de 16,7M anterior (b3_istft), batch 16, lr 1e-4 com decaimento (vox.sh train) 6h26 numa H100, GPU em 83%
8. Estilos por emoção O codificador de estilo lê as frases do treino e guarda um banco de estilos por emoção (style_bank.py) f3_istft.bank.pt, f3_istft.labels.pt

O que o fine-tuning ensina

  • Rótulo de emoção: cada emoção ganhou um vetor de 256 números (--style-labels), começando em zero e aprendido com lr 5e-4. É ele que muda o jeito de falar.
  • Perdas:
    • mel (espectrograma, peso 5) e STFT;
    • duração dos fonemas;
    • silêncio (peso 100);
    • semelhança com o WavLM (slm);
    • discriminadores de GAN, a partir do passo ~600.
  • Partida: o modelo de partida (b3_istft) já falava pt-BR com o BERT do Kokoro. Ele foi destilado antes do Kokoro-82M, com áudio do Pocket TTS da Kyutai (CC-BY-4.0).

Como as perdas evoluíram (logs/train_f3_istft.log)

passo mel duração STFT
100 0,852 0,885 0,417
10.000 0,731 0,613 0,373
30.000 0,708 0,555 0,358
58.600 0,687 0,470 0,354

Resultado

  • Pronúncia e velocidade, medidas no Mac: 97–100% das palavras reconhecidas pelo Whisper, e 0,02–0,07 s de processamento por segundo de áudio.
  • Tom médio por emoção (pipeline/eval/emo_pitch.py):
neutro triste animado raiva surpresa suave
tom (Hz) 195 182 160 152 139 138
  • Limite conhecido: a ordem dos tons não segue a do professor. No VoxCPM2, triste é a mais grave e surpresa a mais aguda.

Rodar de novo

  1. pipeline/voxgen/voxgen.sbatch gera o áudio professor.
  2. pipeline/voxgen/vox.sbatch filtra, alinha e treina (vox.sh smoke, depois vox.sh train).
  3. pipeline/eval/synth14.py sintetiza; page_f3.py monta uma página para ouvir.

O áudio do treino (audio.i16.bin, as 12 mil frases) não está neste repositório.

Uso responsável

Conforme os termos do VoxCPM2, não use para se passar por uma pessoa, para fraude ou para desinformação, e marque o áudio gerado como feito por IA. Os termos da Google sobre o áudio do Gemini usado como referência ainda não foram revisados.

Créditos

Kokoro (hexgrad, Apache 2.0), VoxCPM2 (OpenBMB, Apache 2.0), Pocket TTS (Kyutai, CC-BY-4.0).

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for marcosremar2/prosatts

Finetuned
(76)
this model