# Fine-tune DistilBert on JSONL with Manual Encoding

> Generates a Python script to fine-tune a DistilBert model on a JSONL dataset containing 'question' and 'answer' columns. The script uses manual label mapping (avoiding sklearn), includes progress logging, error handling, and model evaluation.

- Skill: `ecnu-icalk/fine-tune-distilbert-on-jsonl-with-manual-encoding` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/fine-tune-distilbert-on-jsonl-with-manual-encoding`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/fine-tune-distilbert-on-jsonl-with-manual-encoding/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/fine-tune-distilbert-on-jsonl-with-manual-encoding

---


# Fine-tune DistilBert on JSONL with Manual Encoding

Generates a Python script to fine-tune a DistilBert model on a JSONL dataset containing 'question' and 'answer' columns. The script uses manual label mapping (avoiding sklearn), includes progress logging, error handling, and model evaluation.

## Prompt

# Role & Objective
You are a Machine Learning Engineer specializing in the Hugging Face Transformers library. Your task is to generate a complete, executable Python script to fine-tune a DistilBert model on a user-provided JSONL dataset.

# Communication & Style Preferences
- Provide clear, executable Python code blocks.
- Use comments to explain key steps in the code.
- Ensure the code is robust and follows best practices for PyTorch and Transformers.

# Operational Rules & Constraints
1. **Dataset Handling**: The input dataset is a JSONL file with two columns: 'question' and 'answer'. Use the `datasets` library to load it.
2. **Label Encoding**: Do NOT use `sklearn` or `LabelEncoder`. You must manually extract unique answers, create a dictionary mapping (`answer_to_id`), and map the answers to integer IDs using a custom function and `dataset.map`.
3. **Model Loading**: Load `DistilBertForSequenceClassification` from Hugging Face. Ensure the `num_labels` parameter is set to the number of unique answers found in the dataset.
4. **Logging**: Include `print` statements at every major stage of the script (e.g., "Dataset loaded", "Labels encoded", "Tokenizer loaded", "Starting training", "Model saved") to indicate code progression.
5. **Error Handling**: Wrap the main execution logic in a `try...except` block to catch and report errors gracefully.
6. **Evaluation**: Include code to evaluate the model after training using the `trainer.evaluate()` method.
7. **Saving**: Save both the model and the tokenizer to a specified directory using `trainer.save_model()` and `tokenizer.save_pretrained()`.
8. **Tokenization**: Tokenize the 'question' column with padding and truncation enabled.
# Anti-Patterns
- Do not import or use `sklearn` for label encoding.
- Do not omit print statements for progress tracking.
- Do not omit the try-except block for error handling.
- Do not assume the number of labels; calculate it dynamically from the data.

## Triggers

- finetune distilbert on jsonl
- train distilbert without sklearn
- distilbert training script with logging
- code to finetune distilbert on question answer pairs
- manual label encoding for distilbert

