Palate

The Instrument Room

Nationality tells you little about how food tastes. Ingredients tell you almost everything.

Every recipe site on earth — including our own /cuisines page — organizes food by nationality first. We measured what those words are actually worth on our own corpus, and the answer is: for most of them, very little. The words that carry real flavor information name an ingredient or a preparation.

Method in one breath: 2,345 dishes, each with an 18-dimension flavor vector computed from its ingredients and their masses (no model was asked an opinion for any number on this page). For each word appearing in at least six titles (236 words), we scored how similar its dishes are — mean pairwise cosine after z-scoring every dimension against the corpus. Near 1: the word names one flavor experience. Near 0: it tells you nothing. Random groups score 0.00 on average.

2026-07-26T11:41:21.540233 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 harissa broccoli shrimp parmesan chickpea eggplant salsa vietnamese cake feta stir honey teriyaki lemon tacos blackened thai korean shawarma mushroom n=26 n=20 n=95 n=20 n=30 n=18 n=16 n=25 n=17 n=20 n=30 n=20 n=18 n=42 n=32 n=20 n=49 n=19 n=22 n=17 The 20 title words the corpus most agrees about ingredient & dish words nationality words chance at that n (p95) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 flavor coherence — 0 means the word tells you nothing sauce rice cheese green soup white potatoes turkey sour pepper fried beans crispy chicken spinach tomato sweet bowl cauliflower chops n=57 n=132 n=32 n=27 n=132 n=23 n=24 n=32 n=16 n=21 n=61 n=33 n=64 n=304 n=26 n=33 n=36 n=25 n=15 n=23 …and the 20 that tell you least What a recipe-title word tells you about flavor 236 title words shared by ≥6 of 2,345 dishes; shown: every word appearing in ≥15 titles. Groups scored by mean pairwise cosine of their dishes' z-scored 18-dimension flavor vectors. Palate corpus, 2,345 dishes (~40% project-authored) · piece1_label_coherence.py · 18 analysis dims, never the display hexagon
Every title word appearing in ≥15 of 2,345 dish titles, scored by how similar its dishes taste. The gray band behind each dot is what a random group of that size scores 95% of the time.

The two ends of the table

The most coherent words are ingredients and preparations; the least coherent are formats, staples, and most nationalities. Groups this small carry wide chance bands — n is stated on every row, and the chart above draws chance next to each value.

Left: the eight most coherent title words. Right: the eight least coherent (of words with n ≥ 6).
wordcoherencenwordcoherencen
bulgogi0.7556french-0.0256
lemongrass0.7448eggs-0.0089
fajita0.7316three0.0007
catfish0.7108sauce0.01557
pesto0.7058milk0.02110
souvlaki0.6929rice0.026132
chipotle0.67110greens0.0278
gochujang0.6579polish0.0366

“French” deserves a sentence. Its six dishes score −0.025 — below zero: dishes labeled French are, if anything, slightly less alike than six dishes drawn at random. Partly that is the crudeness of grouping by words (the group catches French onion soup alongside French toast — a fair miniature of the problem with the label itself), and partly the honest truth that “French” spans beef bourguignon and crème brûlée.

The honest complication: some nationality words do work

We expected all the nationality words at the bottom. They aren’t, and reporting only the convenient half would be cherry-picking:

nationality wordcoherencenchance p95 at that n
korean0.506190.048
thai0.504490.022
vietnamese0.361250.032
cajun0.267290.036
greek0.262520.019
mediterranean0.241130.061
italian0.21680.117
moroccan0.153200.044
spanish0.13660.130
german0.10870.109
southern0.098100.078
filipino0.06770.109
hungarian0.05470.109
ethiopian0.04880.117
turkish0.04890.091
chinese0.04480.117
cuban0.04080.117
polish0.03660.130
french-0.02560.130

“Korean” and “Thai” beat chance by an order of magnitude. Look at what tops the whole table: bulgogi, gochujang, lemongrass. A cuisine word predicts flavor exactly to the degree that the cuisine has a pantry — and fails to the degree that it is a technique. “French” is a claim about method; “Korean,” in practice, is a claim about ingredients. Only one of those is visible in how food tastes. The right headline is not “nationality means nothing” — it is that an ingredient word is worth five to ten nationality words, and the nationality words that work are the ones that smuggle a pantry in.

What people actually mean by “chili”

For contested words, each panel below plots that word’s dishes against the whole corpus on its two strongest flavor axes. “Chili” (n=33) spans Texas beef chili, chili crisp and sweet chili sauce. “Curry” (n=65) spreads across two continents of meaning. “Stew” and “soup” are barely groupings at all — they name a format, not a flavor.

2026-07-26T11:41:22.021482 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ PC2 — bright / sour–citrus “chili” · n=33 · coherence 0.16 “curry” · n=65 · coherence 0.22 PC1 — savory–salty ↔ sweet PC2 — bright / sour–citrus “stew” · n=55 · coherence 0.13 PC1 — savory–salty ↔ sweet “soup” · n=132 · coherence 0.05 What do people mean by “chili”? Each panel: all 2,345 dishes (pale) on the corpus's two strongest flavor axes (PC1 19%, PC2 14% of variance); dishes whose title contains the word, in red. A word with one meaning would cluster. These spread. Palate corpus (2,345 dishes; ~40% project-authored) · script: piece1_label_coherence.py · PCA on z-scored 18-dim flavor vectors
Four contested words. Pale dots: all 2,345 dishes on the corpus's two strongest flavor axes. Red dots: dishes whose title contains the word. A word with one meaning would cluster.

Honest limitations

  • ~40% of this corpus is project-authored. 934 of the 2,345 dishes were written for Palate against a fixed schema; the rest come from published recipe collections. Authored recipes may be more internally consistent than recipes in the wild, which could flatter coherence scores generally.
  • This measures label informativeness within this corpus, not a universal truth about cuisines. A corpus with 500 French dishes might resolve real structure inside “French.”
  • Word-grouping is lexical and crude. “French” catches “French toast”; “sweet” catches “sweet potato.” We kept the method dumb on purpose — a smarter grouper would smuggle in exactly the human judgment we are trying to measure.
  • The flavor vectors are a composition model — computed from ingredients, masses, and curated per-ingredient flavor labels. No human palate has ever validated one of these vectors against tasting the actual dish.
  • Small groups are noisy. Every statistic states its n, and the chart draws the 95th percentile of chance at each group’s size next to its value.

Reproduce this

Deterministic, offline, no model calls. Every number on this page is read from the script’s results file — the page cannot state a number the script didn’t produce.

python analysis/instrument_room/scripts/piece1_label_coherence.py
python analysis/instrument_room/scripts/piece1_figures.py

Input: prototype/web/src/data/sample_corpus_v17.json (read-only). Every number on this page is in analysis/instrument_room/results/piece1_label_coherence.json.