CoolFace
Datasetpublic

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.

sourceHugging Facemitupdated 2mo agoView on Hugging Face
0likes58downloads
Dataset Card

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

ColumnDescription
outfit_idstable row id
styleone of 16 fashion styles (casual, formal, streetwear, ...)
seasonspring / summer / fall / winter
occasionone of 14 occasions (date night, job interview, ...)
paletteone of 12 color palettes
description2-3 sentence outfit description (mean 62 words)

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:

[image]

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:

[image]

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):

[image]

(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):

Modeldimstyle@5season@5occasion@5avg@5encode time
all-mpnet-base-v2 ๐Ÿ†7680.3830.7700.8640.67260.5s
BAAI/bge-small-en-v1.53840.2990.6790.6960.55820.5s
all-MiniLM-L6-v23840.3650.5340.6080.50316.0s

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

python
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.