PersianPunc

A large-scale dataset and BERT-based approach for Persian punctuation restoration

17M samples · 91.33% macro F1 SilkRoadNLP @ EACL 2026
Paper
PersianPunc: A Large-Scale Dataset and BERT-Based Approach for Persian Punctuation Restoration
Mohammad Javad Ranjbar Kalahroodi, Heshaam Faili, Azadeh Shakery
University of Tehran & Institute for Research in Fundamental Sciences (IPM), Tehran

One comma, opposite meaning

Why does punctuation matter enough for a paper? Because in Persian, a single comma can reverse a sentence from a death sentence to a pardon:

Same words, one comma

بخشش لازم نیست اعدامش کنید

✗ No punctuation — "No mercy needed, execute him."

↓ add one comma ↓

بخشش، لازم نیست اعدامش کنید

✓ Comma after "mercy" — "Forgiveness — no need to execute him."

This is why punctuation restoration is essential for ASR post-processing and any downstream NLP pipeline — not a cosmetic finishing step.

The dataset

PersianPunc combines six source corpora — formal text (Bijankhan, medical QA, Wikipedia) and informal text (Telegram, stories, blogs) — through systematic normalization, multi-stage structural and linguistic filtering, and SHA-256 hash-based deduplication.

17M
Total samples
6
Source corpora
42M
Punctuation marks
2.51
Avg. marks / sentence

Approach

Token-level sequence labeling with five classes, on a fine-tuned ParsBERT encoder with a linear classification head:

Results

A lightweight BERT model outperforms general-purpose LLMs on this task — and unlike an LLM, it never silently rewrites the source text:

ModelMacro F1Full-sentence matchOver-correction
GPT-4o-mini79.54%38.01%~5% of samples
GPT-4o85.96%50.10%~5% of samples
Our model (ParsBERT)91.33%61.80%None

LLMs "over-correct" — quietly rewriting words, formalizing informal text, or fixing perceived errors. For ASR post-processing, that's disqualifying: the source text must be preserved verbatim, with only punctuation added.

Per-class F1: Period 98.71% (most reliable) · Colon 90.45% · Question 88.89% · Comma 80.03% (most challenging — Persian commas are semantically overloaded, as the example above shows).