dcramer / peated

https://peated.com
Apache License 2.0
59 stars 12 forks source link

Rethink flavor profiles #157

Closed dcramer closed 3 months ago

dcramer commented 3 months ago

SMWS' are pretty good but not perfect. Here's ChatGPTs approach with a bit of refinement.

And with tasting profiles:

Woody & Vanilla:

Woody Flavors: oak, cedar, sandalwood, pine Vanilla: vanilla bean, vanilla extract, vanilla custard, vanilla pod, vanilla essence Spice: cinnamon, nutmeg, clove, ginger, allspice Tannin: tea leaves, leather, tobacco, dryness, bitterness Toasted: toasted oak, toasted coconut, toasted bread, roasted nuts

Fruity & Winey:

Citrus: oranges, lemons, limes, grapefruits, tangerines Orchard Fruits: apples, pears, quinces, peaches, apricots Berries: strawberries, raspberries, blueberries, blackberries, cranberries Stone Fruits: cherries, plums, nectarines, peaches, apricots Wine Influence: sherry, port, wine, grape, tannic

Spicy & Herbal:

Spices: cinnamon, nutmeg, cloves, ginger, black pepper Herbs: mint, thyme, rosemary, basil, cilantro Anise: licorice, fennel, star anise, absinthe, sambuca Earthy: moss, damp soil, mushrooms, wet leaves, forest floor Floral: lavender, chamomile, rose, jasmine, elderflower

Sweet & Nutty:

Sweetness: caramel, toffee, honey, syrup, brown sugar Nutty: almonds, hazelnuts, walnuts, pecans, macadamia nuts Chocolate: milk chocolate, dark chocolate, cocoa powder, chocolate fudge, chocolate-covered nuts Fudge: creamy, buttery, sugary, condensed milk, evaporated milk Marzipan: almond paste, sweet almond, almond extract, almond liqueur

Smoky & Peaty:

Smoke: campfire, barbecue, ash, charred wood, smoked meat Peat: earthy, mossy, medicinal, iodine, seaweed Tar: asphalt, rubber, road tar, creosote, diesel Medicinal: antiseptic, bandages, iodine, cough syrup, TCP Coastal: sea salt, seaweed, brine, ocean breeze, maritime

Grainy & Malty:

Malt: malted barley, malt extract, malt sugar, malted milk, malted grains Cereal: oats, wheat, barley, rice, corn Bread: fresh bread, dough, yeast, baking flour, sourdough Grains: barley, wheat, rye, corn, oats Porridge: oatmeal, warm cereal, hot grain, breakfast oats

dcramer commented 3 months ago

This fits and if we go this direction we could honestly get rid of general tasting tags and use these instead..

dcramer commented 3 months ago

Tons of prior art around this, but if we go this direction I'm going to create some dedicated flavor pages.

https://www.whiskeymasters.org/whisky-tasting-wheel

Also thinking of something similar for regions, casks, etc. Basically piece together some nice overviews for folks to understand things better.

dcramer commented 3 months ago

Open question on if we deprecate tags entirely if we go this direction. Particularly if we take the approach of whisky wheels where something can fit across multiple.

dcramer commented 3 months ago

More prior art

image
dcramer commented 3 months ago

This one feels a bit more natural (though maybe slightly refined)

image
dcramer commented 3 months ago

image

Generally speaking, this is the most common view of it. I'm too dumb to know what Feinty is, but maybe its fine (or we can find another synonym).

Alternatively we could restrict it to those subsets of flavors on the outer ring, as we know how to categorize them so its still win/win.

dcramer commented 3 months ago

Here's a better thought:

take tags, rejigger them and map them to top level flavors (probably the 8).

show the flavors with each tag, consolidate/expand them as needed, likely closer to the whisky aroma wheel

those flavors we'll actually showcase vs tags in most situations, and use it to find similar bottles/etc

dcramer commented 3 months ago

Based on https://www.whiskeymasters.org/whisky-tasting-wheel:

Here's the prompt I used, which I then followed up having it refine the list to remove duplicates, and re-add common items found it its corpus.

I am building a whisky review website. When you submit a review, you can select several tags to describe how the whisky tastes and smells. Upon displaying those tags to the user, i want to give them a flavor profile association to help them more easily associate things.

A tag is a one or two word description that is used to describe the flavor or aroma of the whisky when it is being reviewed. Fill the lists with the most common tags from reviews. Try to have 10 to 20 descriptions per category. 

There are 8 categories, listed below. I've included a brief description as well as some example notes.

**Category 1: Cereal Flavors**
These flavors are related to malted barley or other grain types. 

Flavors are like: oatmeal, grains, malts, cooked vegetables

**Category 2: Fruity Flavors**
Appealing aspects from the production process, sweet & fragrant.

Flavors are like: citrus, fresh fruit, dried fruit, cooked fruit, solvent

**Category 3: Floral Flavors**
Scents associated to fresh grass and hay, or leaves.

Flavors are like: fragrant, greenery, leaves, hay 

**Category 4: Peaty Flavors**
In Scotch, peat flavors join the malt during the kilning process.

Flavors are like: Medicinal, Smoke, Fish, Moss

**Category 5: Feinty Flavors**
Feints enter the picture in the middle the spirits run, and they become milder during wood maturation.

Flavors are like: Honey, Leather, Tobacco

**Category 6: Sulphury Flavors**
Mostly developing during distillation, these problematic flavors are moderated through the fluid interaction with copper.

Flavors are like: Rubber, Sand, Burnt Matches

**Category 7: Woody Flavors**
Partially directly from the oak, partially related to aging, wood maturation increases complexity and balance, and adds color.

Flavors are like: Vanilla, Wood, Toasted, Pepper

**Category 8: Winey Flavors**
If casks were filled with a type of wine before using them for whisky, some of the wine flavors can become part of the whisky profile.

Flavors are like: Sherry, Nutty, Chocolate, Oily

I want you to output JSON representing choices a user can select for these descriptions.

{
  "cereal": ["flavor"],
  "fruity": ["flavor"],
  "floral": ["flavor"],
  "peaty": ["flavor"],
  "feinty": ["flavor"],
  "sulphury": ["flavor"],
  "woody": ["flavor"],
  "winey": ["flavor"],
]

An example is "cereal", which might have the following descriptions in JSON:

{
  "cereal": [
    "biscuits",
    "oatmeal",
    "grain",
    "malted milk",
    "malty"
  ],
}I am building a whisky review website. When you submit a review, you can select several tags to describe how the whisky tastes and smells. Upon displaying those tags to the user, i want to give them a flavor profile association to help them more easily associate things.

A tag is a one or two word description that is used to describe the flavor or aroma of the whisky when it is being reviewed. Fill the lists with the most common tags from reviews. Try to have 10 to 20 descriptions per category. 

There are 8 categories, listed below. I've included a brief description as well as some example notes.

**Category 1: Cereal Flavors**
These flavors are related to malted barley or other grain types. 

Flavors are like: oatmeal, grains, malts, cooked vegetables

**Category 2: Fruity Flavors**
Appealing aspects from the production process, sweet & fragrant.

Flavors are like: citrus, fresh fruit, dried fruit, cooked fruit, solvent

**Category 3: Floral Flavors**
Scents associated to fresh grass and hay, or leaves.

Flavors are like: fragrant, greenery, leaves, hay 

**Category 4: Peaty Flavors**
In Scotch, peat flavors join the malt during the kilning process.

Flavors are like: Medicinal, Smoke, Fish, Moss

**Category 5: Feinty Flavors**
Feints enter the picture in the middle the spirits run, and they become milder during wood maturation.

Flavors are like: Honey, Leather, Tobacco

**Category 6: Sulphury Flavors**
Mostly developing during distillation, these problematic flavors are moderated through the fluid interaction with copper.

Flavors are like: Rubber, Sand, Burnt Matches

**Category 7: Woody Flavors**
Partially directly from the oak, partially related to aging, wood maturation increases complexity and balance, and adds color.

Flavors are like: Vanilla, Wood, Toasted, Pepper

**Category 8: Winey Flavors**
If casks were filled with a type of wine before using them for whisky, some of the wine flavors can become part of the whisky profile.

Flavors are like: Sherry, Nutty, Chocolate, Oily

I want you to output JSON representing choices a user can select for these descriptions.

{
  "cereal": ["flavor"],
  "fruity": ["flavor"],
  "floral": ["flavor"],
  "peaty": ["flavor"],
  "feinty": ["flavor"],
  "sulphury": ["flavor"],
  "woody": ["flavor"],
  "winey": ["flavor"],
]

An example is "cereal", which might have the following descriptions in JSON:

{
  "cereal": [
    "biscuits",
    "oatmeal",
    "grain",
    "malted milk",
    "malty"
  ],
}
dcramer commented 3 months ago

Here's where my head is at now after spending the morning with GPT4.

  1. We'll keep SWMS' categories. They've done an excellent job on defining something that is approachable, and generally speaking can uniquely fit whisky classification.
  2. These categories (which I might rename as "bottle profile"), will be one per bottle.
  3. We'll additionally pull in 8 core attributes from a tasting wheel (using the one above).
  4. We'll refine the list of tags we have today, and every tag will map to both the tasting wheel (uniquely, only one assignment), as well as the bottle profile (it can be duplicated).

Let's take an example:

Laphroaig 10 year Bottle Profile: Heavily Peated (Profile) Tags (per tasting): Peat (Peaty)

Peat itself exists as a tag in "Peaty", and within the bottle profiles its in all three Peated categories (Lightly Peated, Peated, Heavily Peated).

This gives us a lot of opportunity to both make it simple to find similar bottles, which LIKELY we will rely on a GPT classifier to identify, as well as aggregate more specific characteristics to generate flavor graphs.

On the technical side I'm going to move tags into the database, rather than a list of constants. I will also likely add synonyms for tags so we dont end up in massive duplication. This is probably common for something like maramlade vs jam. There may be some existing tags that cannot cleanly migrate ("balanced" and many similar ones), so I need to figure that out. Personally I dont think they're that meaningful so it might be best to just axe these generic descriptors.

dcramer commented 3 months ago

SMWS profiles mapped to some reasonable tags:

{
  "Young & Spritely": [
    "green apple", "lemon zest", "fresh berries", "citrus", "grass", "lime", "light floral", "sparkling"
  ],
  "Sweet, Fruity & Mellow": [
    "ripe peach", "juicy pear", "mellow apricot", "soft cherry", "barley sugar", "marmalade", "ripe melon", "banana"
  ],
  "Spicy & Sweet": [
    "cinnamon", "sweet ginger", "vanilla", "caramel", "honey", "rich nutmeg", "warm clove", "spiced cake"
  ],
  "Spicy & Dry": [
    "dry pepper", "herbal notes", "crisp ginger", "subtle oak", "cardamom", "sandalwood", "black tea", "tobacco leaf"
  ],
  "Deep, Rich & Dried Fruits": [
    "dried figs", "raisins", "rich prunes", "luxurious sherry", "dark chocolate", "walnut", "coffee beans", "date"
  ],
  "Old & Dignified": [
    "antique leather", "old oak", "tobacco", "polished wood", "earthiness", "soft musk", "aged sherry", "library books"
  ],
  "Light & Delicate": [
    "soft floral", "lavender", "green leaves", "light honey", "almond", "heather", "fresh hay", "delicate herbs"
  ],
  "Juicy, Oak & Vanilla": [
    "vanilla bean", "creamy oak", "maple syrup", "butterscotch", "ripe apples", "toasted almonds", "oak spices", "juicy pears"
  ],
  "Oily & Coastal": [
    "seaweed", "oily texture", "salt spray", "maritime air", "briny notes", "clam", "oyster", "fishing net"
  ],
  "Lightly Peated": [
    "light smoke", "gentle peat", "fresh mineral", "smoked herbs", "bonfire embers", "peat moss", "autumn leaves", "grilled citrus"
  ],
  "Peated": [
    "earthy peat", "smoked wood", "balanced smoke", "leather", "campfire", "black pepper", "wet stones", "forest floor"
  ],
  "Heavily Peated": [
    "intense smoke", "heavy iodine", "tar", "burnt rubber", "creosote", "smoked meat", "charred oak", "deep peat"
  ]
}

Those same tags mapped to generic profiles:

{
  "cereal": [
    "barley sugar", "biscuity", "oatmeal", "grains", "malted barley", "rye", "wheat", "corn", "fresh hay"
  ],
  "fruity": [
    "green apple", "lemon zest", "fresh berries", "citrus", "lime", "ripe peach", "juicy pear", "mellow apricot", "soft cherry", "ripe melon", "banana", "apple pie", "stewed fruits"
  ],
  "floral": [
    "light floral", "soft floral", "lavender", "fresh flowers", "green leaves", "heather", "delicate herbs"
  ],
  "peaty": [
    "light smoke", "gentle peat", "smoked herbs", "peat moss", "earthy peat", "smoked wood", "balanced smoke", "intense smoke", "heavy iodine", "tar", "burnt rubber", "creosote", "smoked meat", "charred oak", "deep peat"
  ],
  "feinty": [
    "old books", "antique leather", "tobacco", "earthiness", "soft musk", "aged sherry", "library books", "tobacco leaf"
  ],
  "sulphury": [
    "burnt matches", "gunpowder"
  ],
  "woody": [
    "old oak", "polished wood", "vanilla bean", "creamy oak", "maple syrup", "butterscotch", "ripe apples", "toasted almonds", "oak spices", "juicy pears", "antique wood", "oak", "sherry"
  ],
  "winey": [
    "luxurious sherry", "dark chocolate", "walnut", "coffee beans", "date", "currants", "rich prunes", "dried figs", "raisins", "fruit cake"
  ]
}
dcramer commented 3 months ago

Shipped this. Still work to do but its easy to expand from here.