Speech synthesis / Language engineeringIndustry work

A voice that starts with the language.

A custom Nepali grapheme-to-phoneme frontend for schwa deletion and its exceptions, paired with a VITS2 speech model using a RingFormer vocoder.

Built during my time as an AI Engineer at Innovate Nepal Group.

PythonG2PVITS2RingFormerSpeech synthesis
Written → spokenPronunciation explorer
देशWritten Nepali
FINAL Omit the inherent vowel.

The final consonant is spoken without its inherent vowel.

  1. 01Nepali G2PPronunciation
  2. 02VITS2Speech & timing
  3. 03RingFormerWaveform decoder

Linguistic examples and a schematic waveform. No generated audio.

Speech begins before the waveform.

I developed a Nepali text-to-speech system, building a custom grapheme-to-phoneme (G2P) frontend and training a VITS2 model with a RingFormer vocoder. G2P converts written characters into the sound sequence a speech model uses. For Nepali, getting that sequence right means dealing with pronunciation that the spelling alone does not fully resolve.

The schwa deletion problem.

A Devanagari consonant can carry an inherent vowel. That vowel is sometimes spoken and sometimes dropped—a process called schwa deletion. Dropping every final inherent vowel would mispronounce words that retain it; retaining every vowel would introduce unwanted syllables. My G2P work addressed deletion and exceptions at the pronunciation stage, before synthesis.

Why a blanket rule breaks down.

Nepali pronunciation depends on the surrounding letters, consonant clusters, and grammatical form. For example, देश drops the final inherent vowel, while समय retains it. Even a cluster-based rule needs exceptions: मञ्च is an example where the final vowel is omitted. These linguistic examples explain the problem the frontend needs to resolve; they are not outputs from a live model.

  • Distinguish an explicitly written vowel from an inherent vowel that may be deleted.
  • Account for the word’s pronunciation context when deciding whether to retain the vowel.
  • Treat exceptions as part of pronunciation handling before passing phonemes to the speech model.

Where VITS2 and RingFormer fit.

The synthesis architecture pairs VITS2 with RingFormer in the waveform-decoding stage. At a high level, VITS2 connects the input sequence to timing and a learned speech representation; the vocoder turns that representation into audio. The custom Nepali G2P frontend sits ahead of that model, giving pronunciation handling a distinct place in the system.

Local detail, wider context.

RingFormer, introduced by Seongho Hong and Yong-Hoon Choi, combines ring attention with convolution-augmented transformers. The architecture brings local signal detail and broader sequence context into waveform generation. I used that published architecture in my Nepali TTS work; the original research and implementation are linked below.

Two different engineering problems.

Pronunciation and audio generation have different responsibilities. A waveform decoder can produce convincing sound while speaking the wrong phoneme sequence. This project brought language-specific processing and neural speech synthesis together, with the G2P frontend responsible for the pronunciation representation and the model responsible for generating speech from it.

Public references

Discuss this project
Keep exploringMultimodal book generation

Let’s build
something that works.

Have an AI problem, a backend challenge, or a team I should meet? I’d like to hear about it.

Based in Kathmandu. Open to a good conversation.