Skip to content

Improve Punjabi pronunciation through diacritic-aware Latin transliteration or G2P #1321

Open

Description

@selsie

Self Checks

  • I have thoroughly reviewed the project documentation (installation, training, inference) but couldn't find any relevant information that meets my needs. English 中文 日本語 Portuguese (Brazil)
  • I have searched for existing issues search for existing issues, including closed ones.
  • I confirm that I am using English to submit this report (我已阅读并同意 Language Policy).
  • [FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)
  • Please do not modify this template :) and fill in all the required fields.

1. Is this request related to a challenge you're experiencing? Tell us your story.

I am testing Fish Speech for Punjabi TTS using a native Punjabi speaker reference recording.

During testing, I found a substantial difference in pronunciation depending on how the same Punjabi sentence is represented.

I compared:

  1. Punjabi in Gurmukhi
  2. Plain Latin transliteration
  3. Latin transliteration with explicit diacritics and consonant gemination

The plain Latin transliteration loses several pronunciation distinctions because spellings such as a, aa, d, dh, etc. can be ambiguous without additional information.

Interestingly, a diacritic-aware Latin representation produces substantially more natural Punjabi pronunciation in my listening tests.

For example, I tested the following sentence:

Ajj mausam bahut vadhīā hai, tē tuhāḍē nāl gall karke merā dil khuś hō giā.

Compared with:

Ajj mausam bahut waddiya hai, te tuhade naal gal karke mera dil khush ho gya.

the diacritic-aware version consistently sounded much closer to natural Punjabi pronunciation.

I generated the diacritic-based version approximately ten times, and the pronunciation was consistently noticeably better.

This is particularly relevant for Punjabi because Latin transliteration can easily lose information represented in Gurmukhi, including vowel distinctions, retroflex consonants, consonant gemination and nasalization.

For example:

ਗੱਲ

is represented more explicitly as:

gall

rather than:

gal

Similarly, a form such as:

tuhāḍē

contains substantially more pronunciation information than:

tuhade

The current situation makes it difficult to obtain consistently natural Punjabi pronunciation when users cannot or do not want to provide phonologically explicit input.

2. What is your suggested solution?

I would suggest adding better Punjabi-specific text normalization / grapheme-to-phoneme support.

Ideally, Fish Speech could support Punjabi Gurmukhi directly while preserving the phonological information represented by the script.

A second useful option would be documented support for a standardized, diacritic-aware Latin transliteration for Punjabi.

Possible improvements could include:

  • Punjabi-specific G2P processing for Gurmukhi
  • Punjabi-aware text normalization before tokenization
  • Correct handling of vowel length and vowel distinctions
  • Correct handling of retroflex consonants
  • Correct handling of consonant gemination represented by addak (ੱ)
  • Appropriate handling of Punjabi nasalization markers
  • Optional support for a documented diacritic-based Latin transliteration

The goal would be that equivalent Punjabi text produces broadly comparable pronunciation regardless of whether it is supplied in Gurmukhi or an unambiguous phonological transliteration.

A language-specific preprocessing/G2P layer would also make Fish Speech considerably easier to use for Punjabi speakers who need high-quality pronunciation.

3. Additional context or comments

Test environment

  • Fish Speech: current development/test version
  • GPU: NVIDIA GeForce RTX 5090 Laptop GPU
  • PyTorch: 2.8.0+cu128
  • CUDA: 12.8
  • Python: 3.12
  • OS: Windows 11 25H2, Build 26200.8875
  • Backend: Fish Speech API server with --compile
  • Deployment: Self Hosted (Source)

Test sentence

Gurmukhi:

ਅੱਜ ਮੌਸਮ ਬਹੁਤ ਵਧੀਆ ਹੈ, ਤੇ ਤੁਹਾਡੇ ਨਾਲ ਗੱਲ ਕਰਕੇ ਮੇਰਾ ਦਿਲ ਖੁਸ਼ ਹੋ ਗਿਆ।

Plain Latin transliteration:

Ajj mausam bahut waddiya hai, te tuhade naal gal karke mera dil khush ho gya.

Diacritic-aware Latin transliteration:

Ajj mausam bahut vadhīā hai, tē tuhāḍē nāl gall karke merā dil khuś hō giā.

The three versions produce noticeably different pronunciations.

The diacritic-aware version produced the best result in repeated listening tests.

I would be happy to provide additional Punjabi test sentences or help create a small pronunciation test set if this feature is of interest.

4. Can you help us with this feature?

  • I am interested in contributing to this feature.

Activity

  1. github-actions commented on Sep 10, 2026

    @github-actions
    Contributor

    This issue is stale because it has been open for 30 days with no activity.

  2. zish-s commented on Sep 23, 2026

    @zish-s

    @selsie Hi, I went over this and would like to work on it if it's still open.

    I'd propose starting off with the smaller iterations you suggested:

    • Optional support for a documented diacritic-based Latin transliteration
    • Punjabi-aware text normalization before tokenization (Making the code read correctly before generating speech)
    • Correct handling of vowel length and vowel distinctions
    • Correct handling of retroflex consonants
    • Appropriate handling of Punjabi nasalization markers
    • Document a diacritic-aware Latin transliteration scheme for Punjabi (building on the example in this issue), covering vowel length, retroflex consonants, gemination (addak), and nasalization.
    • Add a Punjabi aware text normalization step so the code reads this spelling correctly before tokenization/generating the speech

    We could work on native Gurmukhi G2P later, which would be a bigger follow up if this works well.
    If the issue's still available, could you assign it to me?

  3. selsie commented on Sep 23, 2026

    @selsie
    Author

    @selsie Hi, I went over this and would like to work on it if it's still open.

    I'd propose starting off with the smaller iterations you suggested:

    • Optional support for a documented diacritic-based Latin transliteration
    • Punjabi-aware text normalization before tokenization (Making the code read correctly before generating speech)
    • Correct handling of vowel length and vowel distinctions
    • Correct handling of retroflex consonants
    • Appropriate handling of Punjabi nasalization markers
    * Document a diacritic-aware Latin transliteration scheme for Punjabi (building on the example in this issue), covering vowel length, retroflex consonants, gemination (addak), and nasalization.
    
    * Add a Punjabi aware text normalization step so the code reads this spelling correctly before tokenization/generating the speech
    

    We could work on native Gurmukhi G2P later, which would be a bigger follow up if this works well. If the issue's still available, could you assign it to me?

    Absolutely! You’ll need to ask a maintainer to assign the issue to you, as I don’t have permission to manage assignees here.

    And I’m not a programmer, just a very curious user with some good AI guidance. :)

  4. zish-s commented on Sep 23, 2026

    @zish-s

    @selsie oh okayyy, thankyou :))

  5. zish-s commented on Sep 23, 2026

    @zish-s

    Hii @leng-yue , @Stardust-minus , @Whale-Dolphin
    I've been looking into this issue and I'm willing to take it on. Could you please assign it to me? :)

  6. Whale-Dolphin commented on Sep 24, 2026

    @Whale-Dolphin
    Member

    Consolidating #1320 into this issue.

    To summarize: Gurmukhi input reaches the model unchanged, but the model pronounces a diacritic-aware Latin transliteration noticeably better. So the direction is an optional Punjabi normalization front end that transliterates Gurmukhi (gemination via addak, nasalization, vowel length, retroflexes) before generation.

    None of the maintainers speak Punjabi, so we'd very much welcome a community PR and will review it. @zish-s, assigning this to you — thanks for volunteering! For the PR, we'd ask for:

    1. Opt-in, off by default: user text shouldn't be rewritten unless requested.
    2. A documented mapping table for the transliteration scheme, plus unit tests covering addak, bindi/tippi, and inherent-vowel (schwa) deletion.
    3. Listening validation: fixed-seed before/after audio samples, ideally checked by a native speaker (@selsie kindly offered to help with test sentences).
  7. zish-s commented on Sep 28, 2026

    @zish-s

    @Whale-Dolphin hii, I have generated a PR, and also had some doubts with regards to listening validation point. Could you help me out in it pls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions