Replies: 1 comment
-
|
If they're using gruut, I wonder if its diphthongs that are causing the problem. These are clusters of vowels, like the "ow" in "cow". Piper uses espeak-ng, which ends up splitting the vowels into two different phonemes whereas gruut outputs them as one. I'm doing some experiments with vowel clusters in Piper training now. Hopefully this helps, but it would also mean needing to retrain many of the voices 🙃 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I've seen various issues regarding this same problem, both in official VITS repo and here. It is said that a dataset needs short and long utterances for the model to learn to mitigate those cases. Sometimes the issue is present in in some voices more than others, even if they're trained for a long time.
However, there's something called MeloTTS, which is VITS-based. It borrows some concepts from VITS2, incorporates BERT and the phonemization system is different. They use G2P for some languages, for the Spanish and French they use Gruut with eSpeak. I'm not sure that "semi-VITS2" is the magic here nor the BERT (though maybe it's part of it), but I've experimented with it a bit.
MeloTTS doesn't have this short of issue whatsoever. Its trainer is finicky and people had problems with it, but last year, I managed to fine-tune a multi-speaker voice with the Spanish base checkpoint (English checkpoint produced noises). The checkpoint's config.json file has
disable_bert: true, so I'm not sure if it uses the BERT component. Once finetuned, it didn't had problems with pronunciation of short words and letters, except when you use acronyms (i.e. "TTS"), it reads it without the vowels, you have to type them like "T T S" to make it read correctly. Meanwhile, I've used the same dataset on Piper and the quirk persisted.I even tried to do a crazy experiment: Port MeloTTS' VITS"2" parts to the Piper trainer, except BERT, and modified my commands on the CLI to train at a sample rate of 44.1 kHz like the MeloTTS checkpoint, and did make sure to not modify the ONNX infer signature. I did transfer learning with the same dataset to see if it was something related to the base checkpoint being trained with the same language, and... surprise! Issue persisted with the same skipping of phonemes in some words. Obviously the text encoder weights weren't transfered but all other params including the decoder did successfully.
So, I wonder what is MeloTTS doing to not have this issue. Is it the text front-end that's doing it? Text cleaners? Symbols for the supported languages? Or... it's BERT. I didn't test with other languages like English, so I can't comment about that.
Beta Was this translation helpful? Give feedback.
All reactions