QuantClarity
← Journal

LOST IN TRANSCRIPTION 09 / PERSIAN

Persian speech recognition loses points on a space nobody pronounces

Persian has a lot of open speech data by low-resource standards, and good systems now reach about 20% WER on real Iranian audio. But much of what a Persian score measures is spelling: an invisible half-space between word parts, Arabic letters that look like Persian ones, and the gap between spoken and written Persian. This post collects what published research says about those, about regional accents, Dari and Tajik, and English words in Persian speech.

Persian written as فارسی beside a table of four transcription errors: a half-space replaced with a space, a spoken verb rewritten in its written form, a Persian kaf replaced with an Arabic kaf, and two word parts run together.
One sentence, four ways to get it wrong. Constructed example

Take a sentence a patient might say to a doctor in Tehran:

دکتر، از دیروز سرم درد می‌کنه. قرص‌هام رو خوردم ولی فایده نداشت.

Doctor, I’ve had a headache since yesterday. I took my pills but they didn’t help.

We made this example up. It is spoken, colloquial Persian, the way people talk rather than the way they write.

A speech recognition system can hear every sound in it correctly and still score badly. می‌کنه (“it does”, here “it hurts”) is one word written with an invisible character, the zero-width non-joiner, between its two parts. A model that writes می کنه with a plain space has produced two words where the reference has one. A model that writes it as formal written Persian, می‌کند, has changed a word the speaker didn’t say. قرص‌هام (“my pills”) can come out as قرصهام, joined into one shape. And دکتر (“doctor”) can come out with the Arabic letter ك instead of the Persian ک. On screen the two look much the same. To a scorer they are different words.

Each of these is documented for Persian.[1, 6] None of them is a hearing error. Before you trust a Persian WER, you need to know how the reference was written and how the text was cleaned before scoring.

Where the models stand

The broadest test of Persian ASR is PSRB, a 2025 arXiv preprint from Part AI in Tehran.[1] Its 10.4 hours come from 756 speakers on TV, film, podcasts, lectures and news.[1] Most of it is hard: 58.6% is spontaneous speech, 71.3% is informal, and 52.67% is noisy, phone or reverberant audio.[1] It also covers 12 regional accents and four age groups.[1]

Ten systems on real-world Iranian Persian (PSRB)

10% WER, a common production target for domains such as healthcare

Vosk
44.6%
SeamlessM4T v2
38.9%
Whisper-large-v3
41.5%
Faster-Whisper
33.9%
SLPL wav2vec 2.0
46.7%
FastConformer Fa
44.9%
Azure
33.9%
Google Chirp v2
19.9%
Aipa
24.6%
Avanegar
19.3% best
Lower is better. PSRB is 10.4 hours of broadcast, film, podcast and lecture audio, mostly informal and spontaneous. Switch between WER and CER: every system gets more than twice as many words wrong as characters, because many word errors are near misses. SW-WER is the authors’ metric that charges a substituted word only for its wrong characters. Source: Sedghiyeh et al., arXiv 2025, Table 4.
Data table
SystemWERCERSW-WER
Vosk44.6223.9639.41
SeamlessM4T v238.8522.3034.76
Whisper-large-v341.4918.9236.97
Faster-Whisper33.9313.7226.77
SLPL wav2vec 2.046.7419.0639.16
FastConformer Fa44.8519.4237.58
Azure33.9415.7828.06
Google Chirp v219.929.0515.99
Aipa24.6410.4319.83
Avanegar19.308.7515.68

Two Persian commercial APIs and Google’s Chirp led.[1] Whisper-large-v3 and SeamlessM4T, both strong on English, scored about 39 to 41% WER.[1] Faster-Whisper, a reimplementation of the same Whisper-large-v3 model, scored 33.93%.[1] The paper does not explain the gap between them beyond noting that Faster-Whisper hallucinated less.[1]

The gap between WER and CER is large. Whisper-large-v3 got about 19% of characters wrong but 41% of words.[1] A large share of Persian word errors are words that are mostly right, which is where spacing and spelling come in.

On read speech the same models do much better. The Whisper paper reports Persian FLEURS WER falling from 101.8% for the tiny model to 32.9% for large-v2, and Common Voice 9 WER from 120.3% to 39.4%.[2] A 2026 arXiv preprint introducing the Neyshekar corpus measured Whisper-large-v3 zero-shot at 19.89% WER on its read test set and 31.06% on Common Voice.[3] On the PSRB public sample, the same model scored 37.39%.[3] These numbers come from different papers and text normalisation, so don’t rank them against the chart above.

The half-space

Persian writes many words in parts. The present-tense prefix می, plural endings like ها and some compounds sit next to the word they belong to without joining to it. The character that keeps them apart is the zero-width non-joiner (ZWNJ, U+200C), which Persian writers call the half-space. It has no width and no sound.

Speech recognisers misplace it, and WER punishes that hard. PSRB gives the plural درخت‌ها (“trees”) as an example: a model can split it into two words with a full space, or run it together into one.[1] Some splits change the meaning. یکجا خرید کردم means “I bought everything at once”; یک جا خرید کردم reads as “I bought at one place”.[1] The PSRB authors write that these word-boundary errors “significantly inflate” WER compared with CER.[1] They did not measure by how much.

The effect of cleaning up is large. A 2025 arXiv preprint from Sharif University ran Whisper-large-v3 on Persian Common Voice and normalised both sides with the Hazm toolkit, which fixes spacing and half-spacing, unifies Unicode forms and converts digits.[4] WER fell from 45.31 to 25.67% on the development set and from 86.93 to 39.09% on the test set.[4] That is one step doing several things, so it doesn’t isolate the half-space. But it shows that more than half of a raw Persian WER can be text formatting.

Researchers fix this in different ways, which makes their numbers hard to compare. The Neyshekar paper converts every ZWNJ to a full space before scoring.[3] PSRB proposes its own metric, SW-WER, which charges a substituted word only for the share of its characters that are wrong.[1] Both are reasonable choices, so a 20% from one paper and a 20% from another measure different things.

Same word, different string

می‌کنه · “it does”

Reference · half-spaceمی‌کنهU+0645U+06CCU+200CU+06A9U+0646U+0647
Model output · spaceمی کنهU+0645U+06CCU+0020U+06A9U+0646U+0647

1 substitution and 1 insertion: one reference word against two.

دکتر · “doctor”

Reference · Persian kafدکترU+062FU+06A9U+062AU+0631
Model output · Arabic kafدكترU+062FU+0643U+062AU+0631

1 substitution, for a word that sounds the same.

“Persian rules” turns every half-space into a space, as the Neyshekar paper does before scoring, and maps Arabic ك to Persian ک. PSRB describes half-space errors as a source of inflated WER (Sedghiyeh et al. 2025). The words, codepoints and NFKC results are our own check, not a published result.

We checked what Whisper’s own default text normaliser for non-English languages does with these words. It leaves the ZWNJ in place. So if a model writes می کنه and the reference has می‌کنه, they still count as different words, and the one reference word now faces two in the output. This is our own check, not a published result.

Arabic letters in Persian words

Persian uses the Arabic script with its own versions of some letters. Two cause trouble: Persian ک (keheh, U+06A9) and Arabic ك (kaf, U+0643), and Persian ی (U+06CC) and Arabic ي (U+064A). In many fonts they look alike, or nearly so, in the middle of a word.

Text on the web mixes them, and so does text used to train language models. The ParsiNorm authors, building a normalisation toolkit for Persian speech at the University of Tehran, list words written several ways and symbols from Arabic among the main problems with Persian text.[6] They note that Hazm, a widely used Persian toolkit, converts only two letters from their Arabic to their Persian form.[6]

Unicode normalisation does not help. We checked: NFC and NFKC leave دکتر and دكتر as different strings, and the same for ی and ي. A scorer that doesn’t map them counts a correct word as wrong. This is our own check, not a published result. We could not find a study that measures how often Persian ASR models output the Arabic forms.

People speak one Persian and write another

Spoken Persian differs from written Persian in regular ways. PSRB’s example is “I want to go”: میخوام برم in speech, میخواهم بروم in writing.[1] Our constructed sentence has the same pattern: می‌کنه is spoken, می‌کند is written.

Which one is right depends on the reference. PSRB transcribes what people say.[1] A model trained mostly on written text may convert to the formal form, and lose a word each time. PSRB found error rates were lower when speakers spoke formally, and its speech is 71.3% informal.[1] It also reports a related error: a model writing a different phrase with the same meaning. Its example is SeamlessM4T writing حال میده where the speaker said خوش میگذره, both roughly “it’s fun”.[1]

Small sounds also go missing between words. In Persian a short “e” sound links a noun to what follows it, as in “ketab-e u” (“his book”), and is usually not written. PSRB gives کتاب او transcribed as کتابه او, with the linking sound written as a letter.[1]

This is why read-speech scores flatter Persian ASR. FLEURS and Common Voice are sentences read aloud from written text. The same Whisper-large-v3 that scored 19.89% on Neyshekar’s read speech scored 37.39% on PSRB’s sample of real broadcast audio.[3] Conversation with several speakers was harder still: on PSRB clips with more than one speaker, every system’s WER rose, Whisper-large-v3’s from 38.4 to 59.1%.[1]

Accents, children, Dari and Tajik

PSRB is the only Persian test we found that breaks results down by accent.[1] Averaged over its 10 systems, SW-WER was 20.0% on standard Persian.[1] It was 53.3% for speakers with a Mashhadi accent and 48.1% with a Yazdi accent, the two worst.[1] Baluchi, Shirazi, Shomali (northern) and Jonubi (southern) speakers were all above 40%.[1] The worst single result was Whisper on Baluchi-accented speech, at 78.7%.[1] The paper gives no speaker counts per accent and says that uneven numbers of speakers per accent may affect the results.[1]

Error rate by accent, averaged over ten systems

Standard
20.0% best
Dari
25.4%
Turkish
26.9%
Kermani
32.0%
Kurdish
36.7%
Isfahani
37.6%
Lori
39.3%
Jonubi (southern)
41.0%
Shomali (northern)
41.8%
Shirazi
43.8%
Baluchi
44.2%
Yazdi
48.1%
Mashhadi
53.3%
Mean SW-WER, lower is better. Mashhadi and Yazdi speakers saw more than twice the error rate of standard Persian. The paper gives no speaker counts per accent, so small groups may be noisy. Dari here is one accent group inside an Iranian benchmark. Source: Sedghiyeh et al., arXiv 2025, Table 8.

Children were recognised worst of all age groups, for every model, in both standard and accented speech.[1] Adults were recognised best.[1] The paper reports this in a chart, without exact numbers.

Dari speakers from Afghanistan were among the easier groups in PSRB, at 25.4% average SW-WER.[1] That is one accent group inside an Iranian benchmark, not a test of Dari as Afghans write it. We could not find a published Dari speech recognition benchmark on continuous speech. Common Voice has no Dari dataset.[7]

Tajik is the same language family written in Cyrillic, and models handle it far worse. On FLEURS, Whisper’s Tajik WER was between 74.0 and 109.3% across model sizes; large-v2 scored 85.8%.[2] Common Voice 27 holds 0.81 validated hours of Tajik from 10 contributors.[7] We found no peer-reviewed Tajik ASR study.

English words in Persian speech

Iranian speakers, especially in technical work, mix English words into Persian. We found one study that tests this: a 2026 arXiv preprint from Perle AI, a company that sells speech data.[5] It built 300 Persian-English utterances from real conversational transcripts, spoken by native speakers of Tehran Persian.[5] It tested five commercial systems.[5]

Their main finding concerns scoring. An English word like “feature” can be written in Latin letters or in Persian script as فیچر, and a Persian reference may use either.[5] WER counts a different choice as a full error, the same as a wrong word.[5] The authors found that Persian-English had the largest mismatch between WER and a meaning-based score, BERTScore, of the language pairs they tested.[5] For the Arabic and Persian pairs, they estimate that WER makes the gaps between systems look about three times bigger than they are.[5]

The best system across all pairs was ElevenLabs Scribe v2, at 13.2% WER averaged over four language pairs.[5] The paper reports Persian-only numbers in charts, not tables. It comes from a vendor and is not peer reviewed, so treat it as one data point.

Lots of read speech, few women

By low-resource standards, Persian has a lot of open speech. Common Voice 27 holds 431.44 hours of Persian, of which 373.15 hours are validated, from 4,668 contributors.[7] Neyshekar adds 99.02 hours of read speech from 190 contributors under a CC0 licence.[3]

Both are read speech. Most of PSRB, the benchmark of real audio, is not public: only a 1-hour sample is.[1, 3]

The open data is also skewed. Common Voice labels 69.9% of its Persian data as male and 6.4% as female; the rest has no label.[7] It lists no accents.[7] A model tested on Common Voice Persian has been tested mostly on men, with no way to tell where they are from. PSRB found only a slight gender difference in its own results.[1]

Numbers are another gap in the evidence. ParsiNorm points out that a number like 1234 can be read aloud in several ways, which matters for any system that must turn speech into digits.[6] Neyshekar unifies digit scripts before scoring but doesn’t turn digits into words.[3] We could not find a study that measures how Persian ASR handles numbers, dates or names.

What helps

  • Test on real audio. Read-speech benchmarks such as FLEURS and Common Voice give much lower WER than broadcast or conversational Persian.[1, 3]
  • Normalise before you score, and write down how. Map Arabic ك and ي to Persian ک and ی, unify digits, and choose one rule for the half-space. One normalisation step cut Whisper’s test WER from 86.93 to 39.09%.[4]
  • Report CER next to WER. On PSRB, Whisper-large-v3’s WER was more than twice its CER.[1]
  • Decide whether you want spoken or written Persian in the transcript, and make the reference match.
  • Compare several systems on your own audio. On PSRB, Persian commercial APIs and Google Chirp v2 scored about 20% WER, and Whisper-large-v3 about 41%.[1]
  • If you must use Whisper, try Faster-Whisper or fine-tune. Faster-Whisper scored 33.93% against 41.49% for the same Whisper model on PSRB,[1] and 32 hours of in-domain read speech brought a fine-tuned Whisper-small below zero-shot Whisper-large-v3 on read speech.[3]
  • Include speakers from the regions your users come from, and children if they use your product. Mashhadi and Yazdi accents and child speakers were the hardest groups in PSRB.[1]
  • For English words, decide whether you want them in Latin letters or Persian script, and normalise both sides to that choice.[5]
  • Confirm critical fields. For a dosage, an account number or an address, ask the speaker to confirm instead of trusting the transcript.

Open gaps

  • A measurement of how much the half-space alone adds to Persian WER. The studies we found fix it together with other problems.[1, 4]
  • How often models write Arabic ك and ي in Persian output.
  • A public benchmark of spontaneous Persian. PSRB’s full set is not public.[1]
  • WER by accent with known speaker counts, and exact results for children.[1]
  • A Dari speech benchmark, and any peer-reviewed Tajik ASR study.
  • Persian-English code-switching in natural speech, from an independent source.
  • Numbers, dates and named entities in Persian ASR.
  • A Persian clinical speech test set with consent, de-identification and clinician-checked references. We could not find one. The closest evidence is from other languages: on accented clinical English, models with low overall WER still made more errors on drug names and conditions.[9]

We plan to cover several of these in QuantClarity’s own Persian evaluations.

References

  1. N. Sedghiyeh, S. Sadeghi, R. Khodadadi, F. Kashani, O. Aghdaei, S. Rahimi, M. S. Safari. PSRB: A Comprehensive Benchmark for Evaluating Persian ASR Systems. arXiv preprint, 2025.
  2. A. Radford, J. W. Kim, T. Xu, G. Brockman, C. McLeavey, I. Sutskever. Robust Speech Recognition via Large-Scale Weak Supervision. ICML 2023.
  3. A. Amirivojdan, F. Nadiri, A. Alizadeh, S. Yaraghi. Neyshekar: An Open Persian Read-Speech Corpus for Automatic Speech Recognition. arXiv preprint, 2026.
  4. A. Robatian, M. Hajipour, M. R. Peyghan, F. Rajabi, S. Amini, S. Ghaemmaghami, I. Gholampour. GEC-RAG: Improving Generative Error Correction via Retrieval-Augmented Generation for Automatic Speech Recognition Systems. arXiv preprint, 2025.
  5. S. Abdoli, G. Al-Sumaidaee, C. W. Taylor, A. ElShiekh, A. Rashad. Benchmarking Commercial ASR Systems on Code-Switching Speech: Arabic, Persian, and German. arXiv preprint, 2026.
  6. R. Oji, S. F. Razavi, S. Abdi Dehsorkh, A. Hariri, H. Asheri, R. Hosseini. ParsiNorm: A Persian Toolkit for Speech Processing Normalization. arXiv preprint, 2021.
  7. Mozilla Common Voice. Dataset release statistics, Common Voice 27.0 (September 2026). GitHub, common-voice/cv-dataset.
  8. A. Conneau, M. Ma, S. Khanuja, Y. Zhang, V. Axelrod, S. Dalmia, J. Riesa, C. Rivera, A. Bapna. FLEURS: Few-shot Learning Evaluation of Universal Representations of Speech. IEEE SLT 2023.
  9. T. Afonja, T. Olatunji, S. Ogun, N. A. Etori, A. Owodunni, M. Yekini. Performant ASR Models for Medical Entities in Accented Speech. Interspeech 2024.

Shipping speech recognition in Persian?
See how QuantClarity picks the model for your audio