SSyntha
Working notes

How Arabic data you can rely on gets built.

Notes from the inspection line: what the gate catches, what it misses, and what a near-duplicate costs your results.

Featureddataset-design·Sept 2026·3 min read

What belongs in a data card for an Arabic dataset

Row count tells a buyer almost nothing. The fields that decide whether a dataset is usable are register distribution, duplicate rate, drop rate, split method and the schema — and most cards omit all five.

Read the note →
Row count tells a buyer almost nothing. The fields that decide whether a dataset is usable are register distribution, duplicate rate, drop rate, split method and the schema — and most cards omit all five.
compliance·Sept 2026·3 min readHow synthetic training data changes the personal-data question under Saudi PDPLSaudi Arabia's PDPL governs personal data relating to an identifiable person. Fully synthetic text has no data subject, which removes the question rather than answering it — but only if it is genuinely synthetic all the way down.Read the note →formats·Sept 2026·3 min readJSONL, CSV or Parquet for Arabic training data?JSONL for anything with nested turns, Parquet when you need columnar reads at scale, CSV only when something downstream demands it — and one typing trap that makes Parquet shards refuse to concatenate.Read the note →synthetic-data·Sept 2026·3 min readHow long does it take to generate 50,000 synthetic conversations?About 68 seconds of serial model work per row, so the answer is entirely decided by your concurrency: roughly seven days at eight parallel workers, under two days at thirty-two.Read the note →llm-costs·Sept 2026·2 min readWhy GLM-5.3-flash returns empty content, and the one parameter that fixes itThe endpoint has mandatory reasoning. With default settings it spends the entire max_tokens budget on reasoning and returns an empty message — and both obvious ways to disable it return a 400.Read the note →arabic-nlp·Sept 2026·3 min readThe four Saudi registers that matter for NLPNajdi, Hejazi, Sharqiyah and a general "white" Saudi register differ in future marking, negation, question words and agent courtesy formulas — enough that a classifier trained on one degrades on another.Read the note →arabic-nlp·Sept 2026·3 min readMSA or dialect — which should your Arabic training data be?If your users type the way they speak, MSA-only training data will fail on them. The practical answer is a deliberate mix with the ratio stated, not a choice between the two.Read the note →arabic-nlp·Sept 2026·3 min readHamza normalization: what you gain and what you loseFolding every hamza-carrying alef into a bare alef makes tokenization tidy and destroys a real orthographic distinction. Normalize for indexing, ship the original text.Read the note →labeling·Sept 2026·3 min readContext-dependent turns are what single-turn intent models missA turn like "and the second one?" carries no intent vocabulary at all. Its meaning lives entirely in the previous turns — which is exactly the phenomenon a context-aware model is supposed to capture, and the one most datasets never label.Read the note →evaluation·Sept 2026·3 min readHow to report Arabic model results so a reviewer believes themMacro-F1 has no closed-form confidence interval, two-arm comparisons are paired so overlapping intervals prove nothing, and a pass rate measured on twenty samples tells you almost nothing.Read the note →evaluation·Sept 2026·3 min readSplit leakage: why your evaluation number is too highExact duplicates are easy to catch. The problem is two rows differing by one word with one in train and one in validation — and it inflates accuracy by a few points with no other symptom.Read the note →quality·Sept 2026·3 min readWhat 22 automated checks on an Arabic support conversation actually catchFive structural checks, six on dialect integrity, seven on entities and ordering, two on sector vocabulary and two frequency caps — and what each one exists to stop.Read the note →quality·Sept 2026·3 min readWhy we delete failing rows instead of fixing themEditing a row so it passes injects a pattern of editor intervention into the corpus, and a model learns that pattern faster than you expect. Dropping is cheaper and cleaner.Read the note →labeling·Sept 2026·3 min readShould intent labels be model output, or generation input?If the model emits the label, your repair loop will teach it to change the label instead of the text — and the corpus quietly becomes a function of your own validator's regexes while pass rates look excellent.Read the note →llm-costs·Sept 2026·2 min readHow to price an LLM labelling pass without paying twenty times too muchLabelling 44,000 turns one API call per turn costs about $360. The same work batched one call per conversation, on a cheap model with a cached menu, costs about $11.Read the note →dataset-size·Sept 2026·3 min readWhy a bigger synthetic dataset is often a worse onePast roughly 25,000 conversations, near-duplicate filtering removes the varied rows and keeps the homogeneous ones, so the corpus gets narrower as it gets larger.Read the note →arabic-nlp·Sept 2026·4 min readHow we validate Saudi dialect authenticity in synthetic conversationsMost Arabic synthetic data fails on dialect. Here are the specific checks we run on every generated conversation, and why a language model alone will not catch these.Read the note →dataset-size·Sept 2026·3 min readHow many rows do you need to fine-tune an Arabic intent model?About 11,000 conversations — 44,000 labelled turns — is the point where the smallest class still has ~300 test instances. Below that your confidence intervals swallow the result; above it you are buying noise.Read the note →synthetic-data·Aug 2026·3 min readMeasuring near-duplication in a synthetic datasetA practical method for checking whether your synthetic corpus is as varied as you think, using MinHash over word shingles — including why character shingles give you the wrong answer for Arabic.Read the note →synthetic-data·Aug 2026·3 min readWhat generating 50,000 Arabic conversations actually costsMeasured token counts, pass rates and per-row costs across three models, plus the retry loop that turns out to dominate the bill.Read the note →