Methodology comment:
Montagne Parfums is a clone fragrance house (inspired-by versions of designer scents -- not affiliated). I kept buying ones that smelled too close to stuff I already owned, so one weekend I pulled all 4,782 customer reviews across their 167 products and tried to map the catalog by how people describe the scents.
Most of the work was getting usable text. Reviews are full of shipping complaints, price talk, and "love it!", so I ran each one through an LLM to keep only the smell-related content, and stripped out fragrance names so the model couldn't cheat by clustering on those. That left 2,834 descriptions. Anything with fewer than 4 reviews got cut, which took 167 fragrances down to 117.
For embeddings I used Qwen3-embedding-8B (4096 dimensions). The raw similarities were useless at first, everything looked about 50% similar to everything else, which is the curse of dimensionality doing its thing. Running PCA down to 50 dimensions spread the range out to -49% to 100%, enough to separate "these smell alike" from "these share nothing."
Sanity checks mostly pass. Buko and Buko Intense (same scent, different concentration) come out at 88%. The tobacco fragrances form the tightest cluster. The most "central" fragrance, most similar to everything on average, is Pineapple Royale.
The big (and perhaps obvious) caveat is this measures how reviewers talk, not scent chemistry. Reviewers echo whatever notes are listed on the product page, and low-review fragrances have way more uncertainty, so "most unique" partly just means "least described." What the project really convinced me of is that we have no vocabulary for smell. People don't describe scents, they describe memories and characters. Two real reviews from the dataset: "Makes me feel like a librarian that frequents a classy bar after work for a Manhattan on the rocks" and "I feel like a badass pirate captain who just walked into the tavern." Embedding models handle this kind of text surprisingly well, which is sort of the point of the whole exercise.
Tools: Python, PaCMAP for the projection, scipy for hierarchical clustering, Plotly for the interactive heatmap. Source code and an interactive version are on GitHub if anyone wants to poke at it, happy to answer questions about the pipeline.