ProjectRecipeSense: ML-Based Recipe Recommender
Recommendation engine built around a hybrid-weighted similarity that fuses TF-IDF ingredient vectors with structured recipe metadata. It needs no ratings, so it works from the very first query: the cold-start case where collaborative filtering has nothing to go on. Indexes 7,000+ recipes.
Overview
RecipeSense suggests recipes from the ingredients you have and the cuisine and course you want. Rather than depending on other users' ratings, it ranks recipes with a hybrid-weighted score: TF-IDF cosine similarity between your ingredients and each recipe's, blended with fixed weights for a matching cuisine and course. With no ratings involved it works from the first query, which is exactly the cold-start case where collaborative filtering has nothing to go on.
The engine indexes 7,000+ recipes, cleaned from a scraped dataset, behind a Flask API, with a React and Tailwind front end for searching by ingredient, filtering to vegetarian dishes and browsing results with prep and cooking times. 3D t-SNE and UMAP projections of the vector space were used to check that a query's best matches sit closest to it.
Key Features
- Hybrid-weighted similarity: TF-IDF ingredient vectors + cuisine and course metadata
- No ratings needed, so it works from the first query (no cold start)
- Ingredient-based search with a vegetarian filter
- Prep and cooking times, with a difficulty level derived from them
- 3D t-SNE and UMAP views of the vector space across 7,000+ recipes
Stack
Challenges & Solutions
- Cold start: rating-based collaborative filtering has nothing to go on for new users or new recipes, and the dataset had no ratings at all.Scored content instead: TF-IDF cosine similarity between the user's ingredients and each recipe's, blended with fixed weights for a matching cuisine and course.
- Knowing whether the similarity space actually means anything.Projected the TF-IDF vectors to 3D with t-SNE and UMAP and plotted a sample query's best and worst matches, checking that the best landed closest to the query.
- Cleaning a scraped dataset of 7,500 recipes whose ingredient names mixed Hindi and English.Translated Hindi ingredient names to English with a 727-entry lookup table, cutting the rows with Hindi ingredients from 1,143 to 47, then vectorised the comma-split ingredient lists with TF-IDF.