Build your own dataset
Tonight is the data. / You leave with a file you wrote and a way to check it. Friday we train on it.
5,000,000
slips of paper
To build the Oxford English Dictionary, volunteers mailed in example sentences. One sentence per slip. The dictionary was built out of that pile.
Fig. 01/Oxford English Dictionary/Public call for readers, 1879. First section published 1884. Finished 1928.
Each slip held three things. So does each row of your dataset.
On a slip
- The word being defined
- One sentence using it correctly
- Where that sentence came from
In a row
- instruction — what someone asks
- response — the answer you want back
- context — extra material, optional
Fig. 02/Slip and row/You are collecting examples of the behaviour you want. That is all a dataset is.
Tonight is the dataset. No GPU, no training.
Session 2 is Friday 22 August, same time and place. That is the one with the GPUs. Bring the file you build tonight.
Anyone can download the same model. Your data is the part that is yours.
Same weights, same code, same GPU · the dataset is the only thing that differs
Fine-tuning changes how a model answers, not what it knows.
Use it for
- Format: always answer in a particular structure
- Tone: sound like your team instead of a generic assistant
- Habits: the steps an expert takes without being told
- Edge cases: what to do with a bad or hostile input
Do not use it for
- Teaching facts the model has never seen. Use retrieval for that
- Fixing a prompt you have not tried improving yet
- Tasks you can simply describe in the system prompt
- Making a small model as capable as a large one
Fig. 03/Scope/If a better prompt already fixes the problem, you do not need a dataset.
One row is one line of JSON.
Fig. 04/Two example rows/File extension is .jsonl. instruction and response are required, context is not.
The most common mistake
Seen in almost every first runTraining loss goes down, so it looks like it is working. The model has learned nothing.
- The trainer does not see your fields. It sees one block of text per row.
- You have to build that text using the model's chat template.
- If you skip that step, you train the model on the words "instruction" and "response".
Print the first row and read it before you train.
Most of your dataset already exists in things you have written.
Collect examples that already exist before you write anything new.
Write one row now, by hand.
Fig. 05/Blank slip/Four minutes. Paper, notes app, anywhere.
Measure how much of it you actually wrote.
A real check run on this laptop this afternoon. The git history looked like the best writing sample available, so we counted before using it.
Train on that and you get a model that writes like your tools while everyone believes it captured you. In 2026 a personal archive is contaminated by default, so this is a counting job you do first, not a worry you have later.
1,000 rows
is what the test run used. For changing tone and format, 50 to 200 is usually enough. Start small and add more once you can measure the difference.
Fig. 06/Test run setup/First 1,000 lines of Dolly-15k. Gemma 4 E4B, 3 epochs, rank 8, 14 minutes of training.
Include every kind of answer you want, not fifty copies of the easy one.
The dictionary project had the same problem: volunteers sent thousands of examples for common words and none for the hard ones. The fix was asking for specific missing words, not asking for more volunteers.
List the types of answer you want, and set a target for each.
Example
- Short factual answer · 20 rows
- Longer explanation for a beginner · 15 rows
- Rewrite this text in our tone · 25 rows
- Decline politely, with a reason · 10 rows
- Input is unclear, ask a question back · 8 rows
Why bother
- The model copies the balance of your data, not just the content
- If 90 percent of rows are one type, most answers will look like that type
- Counting takes ten minutes and prevents a wasted training run
- The same list becomes the categories in your test set
Fig. 07/Coverage list/Write it before the file, not after.
Let it write the questions. Do not let it write the answers.
Works well
- Rewording instructions for answers you already have
- Filling in a category where you only have two examples
- Inventing awkward inputs you would not think of
- Anything where the response is still written by you
Causes problems
- Generating responses too. You end up copying the big model, not yourself
- Everything starts to sound the same
- Made-up facts get into the data and you train on them
- Rows nobody read. If you have not read it, you do not know what is in it
Read every generated row before it goes in the file.
Add a source field to every row.
It costs nothing while you are writing and is impossible to reconstruct later. Three months from now, when a row looks wrong, this is the only way to find out where it came from.
Fig. 08/Source field/One of the dictionary's most prolific contributors sent thousands of entries from a psychiatric hospital. Good work, and the editors still needed to know where it came from.
Check the file before it goes anywhere.
The last one matters most. If a row you trained on is also one of your test questions, the model has seen the answer and your comparison means nothing.
5,046 messages in. 513 rows out.
Fig. 09/Yield/Ten percent of the export survived, and that is a normal, healthy number. You are filtering for examples worth learning from.
Write your test questions tonight. On Friday it is already too late.
Questions that are not in your training file · kept in a separate file · the only way to judge Friday
The test set from the example run.
Fig. 10/Test questions/Write five of your own, covering the types you listed on slide 14.
Five steps. Everyone finishes with a file.
Fifty rows plus five test questions is a complete dataset. Everything after tonight is more of the same.
What your file goes through next session.
Fig. 11/Measured times/Nebius H100, 1 May 2026. All five answers changed. The trained adapter file was 30 MB. Sixteen minutes total, which is why tonight is the longer half.
Four things that go wrong on Friday. Three of them start here.
You cannot fix any of the three by changing a setting on Friday. They are fixed in the file, tonight.
What you are leaving with.
Yours to keep
- A .jsonl dataset you wrote, with sources recorded
- A separate test set, written before any training
- A list of the answer types you covered, and the counts
- A file that is ready to train on without changes
For Friday
- Put the dataset in git tonight, while it is fresh
- Bring both files and the laptop you wrote them on
- Session 2 is Friday 22 August, 6 PM, same room and link
Fig. 12/Next session/Friday is the GPU night. Everything you built tonight is the input to it.