Hebrish
Experimental Early days, and every version gets better. Roadmap
Docs

Docs · Build

Pipelines

How the Hebrish components fit together with other open models. The main one goes from text to speech: an AI writes English with Hebrew words in it, and a voice reads it with the Hebrew words said as Hebrew. The second goes the other way, from speech to text.

Text to speech for code-switched English

English text-to-speech reads makolet as "MACK-oh-let". Romanized Hebrew is written in the same Latin letters as the English around it, so nothing in the text tells the voice that the language changed. The stack below makes every switch explicit before the voice sees the text: find the Hebrew words, write them in Hebrew letters with vowel points, and voice each piece in its own language.

  1. Step 1 Generate An AI writes English with Hebrew words in Latin letters. Any LLM third-party
  2. Step 2 Detect Find each span of romanized Hebrew, with its character offsets. Hebrew-Latin Token Classifier Hebrish
  3. Step 3 Hebrew script Write each span in Hebrew letters. Lexicon, then TaatikNet third-party
  4. Step 4 Niqqud Add the vowel points, so the voice does not guess the pronunciation. DICTA nakdan third-party
  5. Step 5 Speak Split at every language boundary; voice each piece in its language, one voice throughout. Chatterbox Multilingual or Azure third-party not run yet
The five steps. Step 2 is the Hebrish component; the others use existing models and plain code. Steps 2 to 4, and the split in step 5, run end to end in the pipeline repository; the TTS call in step 5 is written but has not been run.

One sentence through every step

The sentence is the pipeline repository's worked example, and the outputs below are its real outputs (run on 2026-10-20, CPU), except the audio, which has not been produced yet.

  1. 1 · Generate third-party

    An AI writes the text

    The pipeline was built for My Weird Prompts, an AI-generated podcast produced in Jerusalem: a script-writing agent writes each episode in English, and when an episode is about life in Israel, Hebrew terms arrive in Latin letters. Any LLM output, or any human writing, works the same way: nothing is asked of the writer. Hebrish has no component here. Its own training sentences are written by an LLM using the canonical romanizations in the lexicon (terms.csv), and that spelling list is a useful thing to give a writing model.

    I need to go to Bituach Leumi before the makolet closes.

  2. 2 · Detect Hebrish

    The classifier identifies the romanized Hebrew

    The Hebrew-Latin Token Classifier (Hugging Face, MIT) marks each span of Hebrew in Latin letters, with character offsets and a confidence score; multi-word terms come out as one span. Span F1 is 0.941 on terms it never saw in training. It flags by pronunciation, not etymology: Shabbat and kosher are left alone, because English already says them. It is the one step that had no existing model, and the reason the rest of the chain can work.

    I need to go to Bituach Leumi before the makolet closes.
    Bituach Leumi 16–29, score 0.998 · makolet 41–48, score 0.999

  3. 3 · Hebrew script third-party

    Convert to Hebrew characters

    A curated lexicon of expected terms first, then TaatikNet (malper/taatiknet, a ByT5 transliteration model) one word at a time for anything not in it. TaatikNet guesses each word without context, and in the same run it got two of four wrong: savta came out סַוְטָה (should be סַבְתָּא) and iriya started with the wrong letter. That is why the lexicon comes first.

    Not built yet: the lexicon in the repository is a four-entry demo. The Hebrish term list has the canonical romanization of 1,166 terms but a Hebrew spelling for almost none of them, so a production lexicon is still to be made.

    Bituach Leumi → ביטוח לאומי · makolet → מכולת (both from the lexicon)

  4. 4 · Niqqud third-party

    Add the vowel points

    Hebrew is normally written without vowels, so the same letters can be read more than one way. DICTA's nakdan (dicta-il/dictabert-large-char-menaked, CC-BY-4.0) adds niqqud (nikud) to the lexicon forms. TaatikNet's output is already pointed and passes through. It needs transformers<5: under 5.x it silently returns the text without points.

    בִּטּוּחַ לְאֻמִּי · מַכֹּלֶת

  5. 5 · Speak third-party not run yet

    TTS with the language boundaries marked

    First plain code, not a model: split the sentence at every switch, one language per piece. That part runs, and its output is below. Then each piece goes to the voice with its language. Chatterbox Multilingual (MIT) takes a language_id per call and has no inline switch, so each piece is voiced separately with the same voice prompt and the clips are joined. Among hosted engines, Azure's multilingual voices accept an inline <lang xml:lang="he-IL"> tag in SSML; Google documents Hebrew in that tag as unsupported, and Amazon Polly has no Hebrew. The Chatterbox script and the Azure SSML generator are written but have not been run, so no audio is published yet.

    ("I need to go to ", en) (בִּטּוּחַ לְאֻמִּי, he) (" before the ", en) (מַכֹּלֶת, he) (" closes.", en)

  6. Out

    One voice, with the Hebrew words said as Hebrew

Every step reads and extends one JSON object (the text, the spans with their Hebrew and pointed forms, then the segments), so any step can be swapped for another tool. The full JSON for this and two other sentences is in the repository's examples/.

What is built, and what is not

StepComponentWhoseStatus
1 · GenerateAny LLMThird-partyInput; nothing required of it
2 · DetectHebrish/Hebrew-Latin-Token-ClassifierHebrishPublished (v1, 2026-10-15); demo Space and Replicate API
3 · Hebrew scriptCurated lexicon, then malper/taatiknetThird-party model; lexicon to be builtRuns; the lexicon is a four-entry demo
4 · Niqquddicta-il/dictabert-large-char-menakedThird-party (DICTA)Runs
5 · SpeakSegmenting code; Chatterbox Multilingual or Azure SSMLPlain code; third-party TTSSegmenting runs; the TTS call is written, not run

It is a documented pipeline, not a packaged service. The repository has the code for steps 2 to 5, the real outputs and the traps found along the way, and there is a white paper (PDF, 5 pages). Anyone is welcome to wrap it in a container, put it on Replicate or a Space, and share it.

# Steps 2 to 4 and the split (CPU is fine; the first run downloads about 3.5 GB of models)
uv run --with torch --with "transformers<5" --with sentencepiece \
  python pipeline/text_stages.py "I need to go to Bituach Leumi before the makolet closes."

Why the switches are decided in code. Every switch is visible before the voice sees the text, so what was detected can be read, tested and fixed one word at a time. A single multilingual voice trusted to switch on its own gets no signal from romanized Hebrew, and gives no handle on its decisions. Each detected span costs a split, an extra TTS call and an audio seam, so the classifier is tuned for precision: a missed word only gives today's English reading.

The other route: one model. Meorav is the Hebrish text-to-speech model: a full fine-tune of Qwen3-TTS that reads code-switched English with romanized Hebrew directly, with none of steps 2 to 4, and learned the Hebrew words from recordings. It speaks in one voice, Daniel's. It is experimental and not evaluated yet. The pipeline above works with any voice its TTS engine offers; Meorav needs no Hebrew script at all.

The other direction: dictation

The Hebrish speech recognition models go from speech to the same kind of text: English with the Hebrew words romanized.

  1. 1 · Speak

    Dictate into the Hebrish app

    The Hebrish apps (Android keyboard, desktop) run the model on the device; the audio does not leave it.

  2. 2 · Transcribe Hebrish

    Sabich or Jachnun

    Sabich, the recommended model (code-switching and tech vocabulary), or Jachnun (code-switching only): fine-tunes of NVIDIA Parakeet TDT 0.6B v2 that write the Hebrew words in Latin letters instead of guessing English ones. This is Jachnun v1.0's verbatim output on a recording it was not trained on (public benchmark, 2026-10-19):

    Yes, you can pay with a kartis ashrai, but if you pay mezuman there's a small discount.

  3. 3 · Optional Hebrish

    Find the Hebrew in the transcript

    The transcript is code-switched text, so the token classifier can mark its Hebrew spans, for highlighting, for a glossary, or to hand the text on to steps 3 to 5 of the pipeline above.

Sources: the pipeline repository (README and docs/pipeline.md, checked 2026-10-20), the classifier page and the Meorav page. See also Integrate and Stack.