🍽️ Qwen2.5-1.5B Culinary SFT
A domain-specialized instruction-tuned language model for culinary education, professional kitchen practices, and food & beverage theory.
🔍 Model Overview
Qwen2.5-1.5B Culinary SFT is a fine-tuned version of Qwen2.5-1.5B-Instruct, adapted specifically for:
- Culinary students and hospitality learners
- Professional chefs and kitchen staff
- Food safety, hygiene, and kitchen operations education
- Structured recipe generation and culinary theory explanation
The model is designed to consistently produce structured, practical, and industry-aligned outputs, following professional culinary standards.
🧠 Base Model
- Base model:
Qwen/Qwen2.5-1.5B-Instruct
- Architecture: Transformer (RoPE, SwiGLU, RMSNorm, GQA)
- Context length: up to 32,768 tokens
- Parameters: ~1.54B
- License: Apache 2.0 (inherits base model license)
🧪 Fine-Tuning Methodology
- Technique: Supervised Fine-Tuning (SFT)
- Approach: Parameter-Efficient Fine-Tuning (LoRA / QLoRA)
- Quantization: 4-bit NF4 during training
- Optimizer: Paged AdamW (8-bit)
- Training framework: Hugging Face Transformers
- Experiment tracking: Weights & Biases (wandb)
The final model was merged into a standalone full model for inference and deployment.
📚 Dataset Description
The fine-tuning dataset consists of culinary-domain instructional data, including:
Content Types
- Culinary theory and fundamentals
- Kitchen hygiene and food safety protocols
- Cooking techniques and terminology
- Professional kitchen workflows
- Structured recipe knowledge
- Common mistakes and best practices
Data Sources
- Public-domain culinary textbooks
- Openly available educational PDFs
- Web-based culinary education resources
- Public instructional material for chefs and culinary students
⚠️ No proprietary, private, or copyrighted content was intentionally included.
All data was sourced from public-domain or openly accessible educational materials.
🎯 Model Behavior & Output Style
The model is trained to behave as a culinary tutor and follows these principles:
When the input is a recipe request
The model outputs a standardized recipe card with:
- Title
- Servings / Yield
- Mise en place (first)
- Ingredients (prefer grams)
- Step-by-step method
- Timing
- Allergen information
- Chef notes
When the input is theory or concepts
The model produces structured study notes including:
- Clear definitions
- Key concepts and scope
- Practical kitchen examples
- Safety and hygiene notes
- Common mistakes to avoid
🧪 Evaluation Summary
- Training loss: 1.07
- Validation loss: 1.10
- Perplexity: 2.62
- Qualitative evaluation: Manual testing confirms improved domain alignment, structured responses, and reduced hallucinations for culinary topics.
This model is optimized for educational clarity and professional correctness, not creative writing.
Citation for base model used-
@misc{qwen2.5,
title = {Qwen2.5: A Party of Foundation Models},
url = {
https://qwenlm.github.io/blog/qwen2.5/},
author = {Qwen Team},
month = {September},
year = {2024}
}
@article{qwen2,
title={Qwen2 Technical Report},
author={An Yang et al.},
journal={arXiv preprint arXiv:2407.10671},
year={2024}
}
Citation for base model-
@misc{qwen25_culinary_sft,
title = {Qwen2.5-1.5B Culinary SFT},
author = {Amey Tillu},
year = {2026},
note = {Domain-specific supervised fine-tuning on culinary education and professional kitchen practices},
howpublished = {\url{
https://huggingface.co/Amey9766/qwen2.5-1.5b-culinary-sft}}
}
👤 Author
Amey Tillu
Hospitality & Tourism Data Analytics | AI & ML Hobbyist
🚀 Inference Example
1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4model_id = "Amey9766/qwen2.5-1.5b-culinary-sft"
5
6tokenizer = AutoTokenizer.from_pretrained(model_id)
7model = AutoModelForCausalLM.from_pretrained(
8 model_id,
9 torch_dtype=torch.float16,
10 device_map="auto"
11)
12
13prompt = "Explain what culinary arts is and describe key hygiene practices in a professional kitchen."
14
15messages = [
16 {"role": "system", "content": "You are a culinary tutor for chefs and culinary students."},
17 {"role": "user", "content": prompt}
18]
19
20input_ids = tokenizer.apply_chat_template(
21 messages,
22 tokenize=True,
23 add_generation_prompt=True,
24 return_tensors="pt"
25).to(model.device)
26
27attention_mask = torch.ones_like(input_ids)
28
29with torch.no_grad():
30 output = model.generate(
31 input_ids=input_ids,
32 attention_mask=attention_mask,
33 max_new_tokens=500,
34 temperature=0.7,
35 top_p=0.9
36 )
37
38response = tokenizer.decode(
39 output[0][input_ids.shape[-1]:],
40 skip_special_tokens=True
41)
42
43print(response)
44
45
46
47