22Danielle/stylematch-outfits
StyleMatch โ Synthetic Fashion Outfit Descriptions 10,751 English outfit descriptions, fully synthetic, generated with Qwen/Qwen2.5-1.5B-Instruct for the StyleMatch outfit-recommendation app (Intro to Data Science final project). ๐ Try the live app: StyleMatch on HF Spaces Schema Column Description outfit_id stable row id style one of 16 fashion styles (casual, formal, streetwear, ...) season spring / summer / fall / winter occasion one of 14โฆ See the full description on the dataset page: https://huggingface.co/datasets/22Danielle/stylematch-outfits.
StyleMatch โ Synthetic Fashion Outfit Descriptions
10,751 English outfit descriptions, fully synthetic, generated with Qwen/Qwen2.5-1.5B-Instruct for the StyleMatch outfit-recommendation app (Intro to Data Science final project).
๐ Try the live app: StyleMatch on HF Spaces
Schema
Generation method
Every row corresponds to a unique combination from a designed attribute space (16 styles x 4 seasons x 14 occasions x 12 palettes = 10,752 combos). Each combination was injected into a fixed prompt template (stylist persona system prompt) and generated in parallel GPU batches (temperature 0.8, top_p 0.95, seed 42). Quality gates: length validation, sentence-boundary trimming, exact-duplicate removal, English-only enforcement.
EDA โ Research Questions & Findings
The EDA was organized around three research questions:
RQ1 โ Did the model follow our prompt instructions?
Length: yes. Mean 62 words, median 63 โ tightly controlled by the "2-3 sentences" instruction:
English-only: almost. 4 rows (0.04%) code-switched into Chinese mid-sentence; they were detected in EDA, regenerated in English, and re-validated.
Color palette: partially. Average adherence (share of requested colors mentioned) is 64%. Two-color palettes are obeyed best; "coral, peach & sand" drops to ~33% โ the model substitutes near-synonyms:
RQ2 โ Is the dataset fit for embedding-based recommendation?
Yes: near-perfect categorical balance (max count spread = 1), all 10,751 descriptions unique, and each style has distinct signature vocabulary (bohemian: flowy/maxi/tunic; streetwear: bomber/cargo/hoodie) โ real semantic signal for embeddings.
RQ3 โ Does the generator show systematic behavior?
Two patterns: (1) description length varies slightly but systematically with style โ "minimalist" gets the shortest texts (~59 words):
(2) A stylistic tic: 47% of descriptions use an "X yet Y" construction โ repetitive phrasing typical of small LLMs.
Recommendation engine (Part 3)
Three HF embedding models were compared by embedding all descriptions and measuring precision@5 with the attribute labels as ground truth (the models never see the labels - they only read the text):
Random baselines: style 6.3% / season 25% / occasion 7.1%. MPNet won decisively; its 4x slower encoding is a one-time offline cost (the dataset is embedded once), so performance dominated the trade-off. Recommendations = cosine similarity on L2-normalized vectors (a single matrix-vector product over 10,751 outfits).
Generation system (Part 4)
The app's "+1 outfit" is created by the same Qwen2.5 model with a stylist persona, using the top-3 retrieved outfits as inspiration (a lightweight RAG pattern). Every generated outfit passes a novelty guard: it is embedded and compared against all catalog vectors; if max similarity > 0.95 (a near-paraphrase - a failure mode we actually caught during development), the system regenerates with higher temperature and without the inspiration examples. Novelty scores are shown to the user.
The application (Part 5)
A Gradio app on HF Spaces (ZeroGPU) runs the full pipeline behind one button: query โ 3 nearest catalog outfits (with match scores and attribute chips) + 1 novelty-verified generated outfit. It loads this dataset directly via load_dataset, the embedding model from the HF hub, and the precomputed embeddings from the Space repo. Includes 3 one-click Quick Starters.
Usage
from datasets import load_dataset
ds = load_dataset("22Danielle/stylematch-outfits")Notebooks
The full project notebook โ stylematch_full_project.ipynb in this repo โ contains both required notebooks as sections: Part 1: Synthetic Data Generation (attribute space, prompting, batched generation, quality gates) and Part 2: Dataset & EDA (research questions, findings, and the iterative regeneration fix).
Companion artifacts
- Embedding model:
sentence-transformers/all-mpnet-base-v2โ winner of a 3-model comparison (avg precision@5 = 0.672 vs 0.558/0.503), evaluated with a label-based retrieval test on this dataset. - App: Gradio Space with retrieval + novelty-verified generation.
