A large-scale dataset and BERT-based approach for Persian punctuation restoration
@inproceedings{ranjbar2026persianpunc,
title={PersianPunc: A Large-Scale Dataset and BERT-Based Approach for Persian Punctuation Restoration},
author={Ranjbar Kalahroodi, Mohammad Javad and Faili, Heshaam and Shakery, Azadeh},
booktitle={Proceedings of the First Workshop on NLP and LLMs for the Iranian Language Family (SilkRoadNLP)},
year={2026}
}
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:
بخشش لازم نیست اعدامش کنید
✗ No punctuation — "No mercy needed, execute him."
بخشش، لازم نیست اعدامش کنید
✓ 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.
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.
Token-level sequence labeling with five classes, on a fine-tuned ParsBERT encoder with a linear classification head:
A lightweight BERT model outperforms general-purpose LLMs on this task — and unlike an LLM, it never silently rewrites the source text:
| Model | Macro F1 | Full-sentence match | Over-correction |
|---|---|---|---|
| GPT-4o-mini | 79.54% | 38.01% | ~5% of samples |
| GPT-4o | 85.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).