- Create useful instruction examples for SFT.
- Split train, validation, and test without contaminating results.
- Remove sensitive data, duplicates, and mediocre responses.
Simple format
{"instruction":"Classify the email","input":"Hi, I'd like to change my invoice...","output":"categoria: facturacion\nprioridad: media\naccion: pedir numero de factura"}
{"instruction":"Draft a brief reply","input":"Customer asks for delivery timeframe","output":"Hi, thanks for reaching out. The estimated timeframe is..."}
{"instruction":"Extract fields","input":"Quote for 3 annual licenses","output":"{"producto":"licencia anual","cantidad":3}"}Cleaning checklist
Controlled synthetic data
Generating examples with another model can speed things up, but treat it as a draft. Each synthetic batch needs a goal, desired distribution, review, and a way to detect duplicates or overly similar phrasing.
synthetic_batch:
goal: "billing support emails"
count: 200
variation:
- angry_tone
- incomplete_data
- corrective_invoice
- out_of_scope_request
controls:
real_pii: false
review_sample: 50
deduplicate_by_similarity: true
include_refusals: trueThe best synthetic data usually starts from a real taxonomy: categories, frequent errors, tones, constraints, and examples the model must refuse. Without taxonomy, you only produce pretty text.
- No emails, phone numbers, national IDs, keys, or real names unless you have a legal basis.
- No duplicate examples between train and test.
- No contradictory responses for the same instruction.
- Include real-world errors from the domain, not only perfect cases.
- Include examples where the model should reject or ask for clarification.
dataset/ train.jsonl validation.jsonl test.jsonl README.md data_card.md redactions.log