Repository navigation
Improve Punjabi pronunciation through diacritic-aware Latin transliteration or G2P #1321
Description
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:
- Punjabi in Gurmukhi
- Plain Latin transliteration
- 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
github-actions commentedon Sep 10, 2026
This issue is stale because it has been open for 30 days with no activity.
zish-s commentedon Sep 23, 2026
@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:
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?
selsie commentedon Sep 23, 2026
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. :)
zish-s commentedon Sep 23, 2026
@selsie oh okayyy, thankyou :))
zish-s commentedon Sep 23, 2026
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? :)
Whale-Dolphin commentedon Sep 24, 2026
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:
zish-s commentedon Sep 28, 2026
@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