Hebrew grapheme to phoneme (INTERSPEECH 2026)
See the codeConvert Hebrew text into IPA for TTS and language learning
For further improved G2P, see Renikud
pip install phonikud phonikud-onnx
Download phonikud-1.0.int8.onnx
Use with
from phonikud_onnx import Phonikud
from phonikud import phonemize
model = Phonikud("./phonikud-1.0.int8.onnx")
text = "שלום עולם"
vocalized = model.add_diacritics(text)
phonemes = phonemize(vocalized)
print(phonemes) # ʃalˈom olˈam
See examples
Come chat about Hebrew TTS!
phonikud.normalize('שָׁלוֹם') when training models\u05b0 to \u05ea (Letters and diacritics)'" (Gershaim),\u05ab (Hat'ama eg. טח֫ינה != טחינ֫ה tahini != grinding)\u05bd (Vocal Shva eg. תְֽפרְסם notice Meteg in ת)| (Prefix letters eg. ב|ירושלים)\u05ab and \u05bd are not standard - we invented them to mark Hat'ama and Vocal Shva clearly.
See Hebrew UTF-8
Stress marks (1)
ˈ - stress, visually looks like single quote, but it's \u02c8Vowels (5)
a - Shamare - Shemeri - Shimero - Shomeru - ShumarConsonants (24)
b - Betv - Vet, Vavd - Daledh - Heyz - Zainχ - Het, Haft - Taf, Tetj - Yudk - Kuf, Kafl - Lamedm - Memn - Nuns - Sin, Samekhf - Feyp - Peyts - Tsadiktʃ - Tsadik with Geresh (צִ'יפְּס)w - Example: וָואלָהʔ - Alef/Ayin, visually looks like ?, but it's \u0294ɡ - Gimel, visually looks like g, but it's actually \u0261ʁ - Resh \u0281ʃ - Shin \u0283ʒ - Zain with Geresh (בֵּז׳) \u0292dʒ - Gimel with Geresh (גִּ׳ירָפָה)Character set:
abdefhijklmnopstuvwzɡʁʃʒʔˈχ
You can mix the phonemization of English by providing a fallback function that accepts an English string and returns phonemes.
Note: if you use this with TTS, it is recommended to train the model on phonemized English. Otherwise, the model may not recognize the phonemes correctly.
Cool fact: modern Hebrew phonemes mostly exist in English except ʔ (Alef/Ayin), Resh ʁ and χ (Het).
To train TTS models, it’s essential to represent speech accurately. Plain Hebrew text is ambiguous without diacritics, and even with them, Vocal Shva and Hat'ama can cause confusion. For example, "אני אוהב אורז" (I like rice) and "אני אורז מזוודה" (I pack a suitcase) share the same diacritics for "אורז" but have different Hat'ama.
The workflow is as follows:
Add diacritics using a standard Nakdan.
Enhance the diacritics with an enhanced Nakdan that adds invented diacritics for Hat'ama and Vocal Shva. See phonikud
Convert the text with diacritics to phonemes (alphabet characters that represent sounds) using this library, based on coding rules.
Train the TTS model on phonemes, and at runtime, feed the model phonemes to generate speech.
This ensures accurate and clear speech synthesis. Since the output phonemes are similar to English, we can fine tune an English model with as little as one hour of Hebrew data.
💡 You can always pass your own phonemes using markdown-like syntax:
[...title](/ʔentsiklopˈedja/)
Multilingual LLM Expander
Expand numbers, emojis, dates, times, and more using a lightweight multilingual LLM or transformer.
The idea is to train a small model on pairs of raw text → expanded text, making it easier to generate speech-friendly inputs.
Punctuation model
Train model to restore missing punctuation for better intonations
Transformer/LLM G2P
Skip coding rules - make a dataset with current G2P, then train a end-to-end model on text to phonemes.
Phonikud G2P (the code in this repository) is licensed under CC BY 4.0 (open use). Note: The datasets included or referenced in this repository have their own separate licenses. Please make sure to read both the Phonikud license (see LICENSE) and the individual dataset licenses carefully before use.
modern. you can use plain schema for simplicify (eg. x instead of χ). use phonemize(..., schema='plain')Milel and Milra)ʔ/h phonemes trimmed from the suffixMilra, sometimes on one before - Milel and rarely one before Milelשווא נשמע. See Shva#Pronunciation_in_Modern_HebrewRight ALT (Windows), Left Option (macOS), or Long Press on the corresponding letter (Google Keyboard) based on the diacritic's name. eg. for Katmaz use Alt + ק. for Hatama use Alt + ^. for Vocal Shva use Alt + &Run uv run pytest
If you find this code or our data helpful in your research or work, please cite the following paper.
@inproceedings{kolani2026phonikud,
title={Phonikud: Overcoming Phonetic Underspecification for Hebrew Text-To-Speech},
author={Yakov Kolani and Maxim Melichov and Cobi Calev and Morris Alper},
booktitle={Proc. Interspeech 2026},
year={2026},
url={https://arxiv.org/abs/2506.12311},
}
Special thanks ❤️ to dicta-il for their amazing Hebrew diacritics model ✨ and the dataset that made this possible!
Huge thanks to Oron Kam for helping with training the best Hebrew Whisper IPA so far! 🙌
44 followers · starred May 2026
73 followers · starred Jun 2025
482 followers · starred Jun 2026
Python
100.0%
Hebrew grapheme to phoneme (INTERSPEECH 2026)
See the codeConvert Hebrew text into IPA for TTS and language learning
For further improved G2P, see Renikud
pip install phonikud phonikud-onnx
Download phonikud-1.0.int8.onnx
Use with
from phonikud_onnx import Phonikud
from phonikud import phonemize
model = Phonikud("./phonikud-1.0.int8.onnx")
text = "שלום עולם"
vocalized = model.add_diacritics(text)
phonemes = phonemize(vocalized)
print(phonemes) # ʃalˈom olˈam
See examples
Come chat about Hebrew TTS!
phonikud.normalize('שָׁלוֹם') when training models\u05b0 to \u05ea (Letters and diacritics)'" (Gershaim),\u05ab (Hat'ama eg. טח֫ינה != טחינ֫ה tahini != grinding)\u05bd (Vocal Shva eg. תְֽפרְסם notice Meteg in ת)| (Prefix letters eg. ב|ירושלים)\u05ab and \u05bd are not standard - we invented them to mark Hat'ama and Vocal Shva clearly.
See Hebrew UTF-8
Stress marks (1)
ˈ - stress, visually looks like single quote, but it's \u02c8Vowels (5)
a - Shamare - Shemeri - Shimero - Shomeru - ShumarConsonants (24)
b - Betv - Vet, Vavd - Daledh - Heyz - Zainχ - Het, Haft - Taf, Tetj - Yudk - Kuf, Kafl - Lamedm - Memn - Nuns - Sin, Samekhf - Feyp - Peyts - Tsadiktʃ - Tsadik with Geresh (צִ'יפְּס)w - Example: וָואלָהʔ - Alef/Ayin, visually looks like ?, but it's \u0294ɡ - Gimel, visually looks like g, but it's actually \u0261ʁ - Resh \u0281ʃ - Shin \u0283ʒ - Zain with Geresh (בֵּז׳) \u0292dʒ - Gimel with Geresh (גִּ׳ירָפָה)Character set:
abdefhijklmnopstuvwzɡʁʃʒʔˈχ
You can mix the phonemization of English by providing a fallback function that accepts an English string and returns phonemes.
Note: if you use this with TTS, it is recommended to train the model on phonemized English. Otherwise, the model may not recognize the phonemes correctly.
Cool fact: modern Hebrew phonemes mostly exist in English except ʔ (Alef/Ayin), Resh ʁ and χ (Het).
To train TTS models, it’s essential to represent speech accurately. Plain Hebrew text is ambiguous without diacritics, and even with them, Vocal Shva and Hat'ama can cause confusion. For example, "אני אוהב אורז" (I like rice) and "אני אורז מזוודה" (I pack a suitcase) share the same diacritics for "אורז" but have different Hat'ama.
The workflow is as follows:
Add diacritics using a standard Nakdan.
Enhance the diacritics with an enhanced Nakdan that adds invented diacritics for Hat'ama and Vocal Shva. See phonikud
Convert the text with diacritics to phonemes (alphabet characters that represent sounds) using this library, based on coding rules.
Train the TTS model on phonemes, and at runtime, feed the model phonemes to generate speech.
This ensures accurate and clear speech synthesis. Since the output phonemes are similar to English, we can fine tune an English model with as little as one hour of Hebrew data.
💡 You can always pass your own phonemes using markdown-like syntax:
[...title](/ʔentsiklopˈedja/)
Multilingual LLM Expander
Expand numbers, emojis, dates, times, and more using a lightweight multilingual LLM or transformer.
The idea is to train a small model on pairs of raw text → expanded text, making it easier to generate speech-friendly inputs.
Punctuation model
Train model to restore missing punctuation for better intonations
Transformer/LLM G2P
Skip coding rules - make a dataset with current G2P, then train a end-to-end model on text to phonemes.
Phonikud G2P (the code in this repository) is licensed under CC BY 4.0 (open use). Note: The datasets included or referenced in this repository have their own separate licenses. Please make sure to read both the Phonikud license (see LICENSE) and the individual dataset licenses carefully before use.
modern. you can use plain schema for simplicify (eg. x instead of χ). use phonemize(..., schema='plain')Milel and Milra)ʔ/h phonemes trimmed from the suffixMilra, sometimes on one before - Milel and rarely one before Milelשווא נשמע. See Shva#Pronunciation_in_Modern_HebrewRight ALT (Windows), Left Option (macOS), or Long Press on the corresponding letter (Google Keyboard) based on the diacritic's name. eg. for Katmaz use Alt + ק. for Hatama use Alt + ^. for Vocal Shva use Alt + &Run uv run pytest
If you find this code or our data helpful in your research or work, please cite the following paper.
@inproceedings{kolani2026phonikud,
title={Phonikud: Overcoming Phonetic Underspecification for Hebrew Text-To-Speech},
author={Yakov Kolani and Maxim Melichov and Cobi Calev and Morris Alper},
booktitle={Proc. Interspeech 2026},
year={2026},
url={https://arxiv.org/abs/2506.12311},
}
Special thanks ❤️ to dicta-il for their amazing Hebrew diacritics model ✨ and the dataset that made this possible!
Huge thanks to Oron Kam for helping with training the best Hebrew Whisper IPA so far! 🙌
44 followers · starred May 2026
73 followers · starred Jun 2025
482 followers · starred Jun 2026
Python
100.0%