Arabic <-> Latin transliteration of Maghrebi names - Algerian-first, retrieval-first, measured. Ships a 1,941-key benchmark from real Algerian civil-status data.
# DziriNames
**Arabic ↔ Latin transliteration of Maghrebi names — Algerian-first, retrieval-first, measured.**
One name goes in (Arabic or Latin script); a scored list of plausible spellings comes out in the other script. Built for identity matching and compliance screening on Maghrebi — especially Algerian — names, where generic Arabic transliterators quietly fail.
**▶ Try it live:
huggingface.co
```
زين الدين → Zineddine (rank 1)
عبد القادر → Abdelkader — not "Abdul Al-Qadir"
ياسين بن أقموم → Yacine Benakmoume
```
## Why this exists
Sanctions-screening and KYC tools transliterate Arabic names using Mashreq (Middle-Eastern) conventions: `عبد القادر` becomes `Abdul Al-Qadir`. But Algerian civil status — shaped by a century of French administrative orthography — writes `Abdelkader`. `شريف` is `Cherif`, not `Sharif`. `زين الدين` is `Zineddine`, not `Zayn Al-Din`. Screening systems trained on Mashreq data mismatch millions of Maghrebi identities.
No public benchmark existed for this problem. This project ships one — **1,941 Arabic keys with civil-status Latin references from real Algerian data** — plus a small model and a production-grade service that solve it measurably.
## How it works
**Retrieval first, generation as fallback.** The service queries an index of 369,230 attested Arabic keys (440,644 Latin spellings) built from openly licensed Algerian and world name corpora. Only names absent from the index fall through to a 5.5M-parameter seq2seq transformer.
This design is the project's central measured finding: on this task, **looking up attested spellings beats generating them** — the index path is ×1.9 better in quality and serves a known name in **0.03 ms** versus **322 ms** (median, p95 528 ms) for the model path, on CPU. On the 1,941-key benchmark, the index covers **98.7 %** of keys.
The model itself is deliberately small: **5.55M parameters, 22 MB, fp32, CPU-only** (d_model 256, 3 layers, …