<< back to Guides

AI Core Concepts (Part 15): Fine-Tuning Models

Fine-tuning is the process of taking a pre-trained model and continuing its training on a smaller, task-specific dataset. This lets you adapt powerful general-purpose models (like BERT or GPT) to specialized domains (e.g., legal, medical, financial).


1. Why Fine-Tune?


2. Fine-Tuning vs Prompting

Feature Prompting Fine-Tuning
Customization Level Shallow control Deep behavior adaptation
Speed Instant Takes time/resources
Use Case General tasks Domain-specific or sensitive tasks
Cost Low Medium to High

3. Fine-Tuning Example: BERT for Sentiment Analysis

from transformers import BertForSequenceClassification, Trainer, TrainingArguments
from transformers import BertTokenizerFast
from datasets import load_dataset

# Load dataset and tokenizer
dataset = load_dataset("imdb")
tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased")

# Tokenize
def preprocess(example):
    return tokenizer(example["text"], truncation=True, padding="max_length")

encoded = dataset.map(preprocess, batched=True)

# Load model
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")

# Training setup
args = TrainingArguments(
    output_dir="./bert-finetuned",
    evaluation_strategy="epoch",
    per_device_train_batch_size=8,
    num_train_epochs=3,
    save_strategy="epoch",
)

trainer = Trainer(
    model=model,
    args=args,
    train_dataset=encoded["train"].shuffle(seed=42).select(range(2000)),
    eval_dataset=encoded["test"].select(range(500)),
)

trainer.train()

4. Fine-Tuning LLMs (GPT-2 / GPT-3.5)

LLMs can be fine-tuned with:

# Example JSONL format (OpenAI fine-tuning)
{"prompt": "Translate to French: Hello", "completion": "Bonjour"}
{"prompt": "Translate to French: Good night", "completion": "Bonne nuit"}

5. Techniques for Fine-Tuning

# Hugging Face example (LoRA with PEFT)
from peft import get_peft_model, LoraConfig, TaskType
from transformers import AutoModelForCausalLM

base_model = AutoModelForCausalLM.from_pretrained("gpt2")
config = LoraConfig(task_type=TaskType.CAUSAL_LM, r=8, lora_alpha=32, lora_dropout=0.1)
model = get_peft_model(base_model, config)

6. When Not to Fine-Tune

❌ Don’t fine-tune if:

✅ Do fine-tune if:


7. Tools & Platforms


📚 Further Resources


<< back to Guides