What Fine-Tuning Can and Cannot Teach a Model
Fine-tuning reliably teaches a model how to respond: format, tone, task framing and narrow skills. It is much less reliable at teaching what is true, especially large amounts of new or changing facts. Knowing this boundary saves you from the most common disappointments.
Things fine-tuning does well
Output format
If every training answer is valid JSON with the same keys, the model quickly learns to produce that shape. A few hundred consistent examples are often enough for a format. This is the easiest win.
Tone and style
Voice is a distribution over word choices, sentence length and structure. Training examples written in one voice shift that distribution. Many teams use this for support replies and brand copy.
Narrow task skill
Classifying tickets into your own twelve categories, extracting fields from your invoice layout, or rewriting text to your style guide are all tasks where a small tuned model can match or beat a large prompted one, because the task is narrow and the data distribution is stable.
Following your conventions
Naming rules, citation formats, refusal wording and when to ask a clarifying question are behaviours you can demonstrate by example.
Things fine-tuning does poorly
Reliable new facts
When you train on statements the model did not know, it may learn to repeat some of them, but it also tends to produce confident wrong variants. Research on this topic has suggested that training on facts the model does not already know can encourage fabrication, so treat fact injection as unreliable and verify on a held-out question set. Use retrieval for knowledge.
Fresh information
Any fact with a date on it will go stale after training. A tuned model has a frozen snapshot.
Broad new capabilities
A short run on a small dataset will not give a small model deep multi-step reasoning it did not have. Capabilities largely come from pretraining and from large-scale post-training. You can sharpen or elicit an existing skill, but you rarely create a strong new one with a few thousand examples.
Hard constraints
Training pushes probabilities, it does not enforce rules. Use validation for must-hold constraints.
A way to test it yourself
Before investing, run a small probe. Take twenty facts you want the model to know, write a question for each, and check the base model's answers. Then train briefly and check again, including on paraphrased questions. The script below shows a simple scoring helper you can adapt to any generation function.
def score(generate, qa_pairs):
"""generate: function(str) -> str. qa_pairs: list of (question, expected_substring)."""
hits = 0
for question, expected in qa_pairs:
answer = generate(question).lower()
if expected.lower() in answer:
hits += 1
return hits / len(qa_pairs)
qa = [
("What is our return window?", "30 days"),
("Which plan includes SSO?", "enterprise"),
]
# before = score(base_generate, qa)
# after = score(tuned_generate, qa)
# print(before, after)
Run it on questions that were in the training data and on rephrased ones. A big gap between the two means the model memorized phrasing rather than learned the fact.
Forgetting is the other side
Training changes weights, and changes can erase existing abilities. This is called catastrophic forgetting. A model tuned heavily on one format may get worse at general chat or at other languages. Parameter-efficient methods, low learning rates and mixing in general data reduce the effect. Post 74 shows how to detect it.
Summary table
| Goal | Fine-tuning fit |
|---|---|
| Consistent JSON or report format | Strong |
| Brand voice | Strong |
| Narrow classification or extraction | Strong |
| Cheaper model for one task | Strong |
| Memorizing a knowledge base | Weak, use RAG |
| Up-to-date facts | Weak, use RAG |
| Brand new broad reasoning ability | Weak |
Plan your project around the strong rows and use other tools for the weak ones.
Comments
No comments yet. Have a question or a tip? Be the first to share it.