You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
data(aroma): seven new heads from unique chemistry, and a count sweep (#262) (#274)
Chasing `blackberry` had produced nothing across three rebuilds, so this asks the better question
instead: which descriptors DESERVE a head that do not have one? Ten sat below the ten-positive
floor. Seven had genuinely distinctive character chemistry and were given it.
aroma heads 166 -> 172 total heads 189 -> 195
angelica AUROC 0.956 precision 0.67 CONFIDENT — macrocyclic lactones
quince AUROC 0.955 precision 0.02 indicative — marmelo lactone / oxathiane
galbanum AUROC 0.922 precision 0.14 indicative — galbanum pyrazine, undecatriene
wormwood AUROC 0.862 precision 0.23 indicative — thujones, artemisia ketone
lychee AUROC 0.831 precision 0.09 indicative — rose oxide
immortelle AUROC 0.781 precision 0.14 indicative — italidiones
Deliberately NOT attempted: cucumber, watermelon and boronia. Their chemistry is the same C9
nonadienal/nonadienol set `melon` already owns and the ionones `violet` owns — entangled classes,
which is the trap that cost blackberry 0.10 AUROC. Adding them would likely damage heads that work.
`quince` is worth staring at: AUROC 0.955 with 0.02 precision. Near-perfect ranking, right one time
in fifty when it fires. It is now the sharpest single example in ACCURACY.md of why AUROC alone is
not a quality measure, and it replaces a caveat there that had gone stale.
THE COUNT SWEEP. While verifying the README I found we had been publishing 190 heads when the app
served 189 — the figure predated blackberry dropping and had propagated into the README badge, the
CHANGELOG, ACCURACY.md, the v0.2.0 release notes and code comments. That is now 195 everywhere and
checked against the manifests rather than carried forward. The ACCURACY.md tables were stale too:
the precision distribution read 25/9/60/58 against a live 19/15/74/58, and the named
"never wrong" heads were the wrong sixteen. Both regenerated.
ON THE ROSTER NUMBER, now documented in ACCURACY.md. A cluster of heads sits at AUROC 0.69-0.71 on
11-15 positives, where 5-fold CV cannot resolve better than about +/-0.02. `blackberry` measured
0.696, 0.707, 0.687 and 0.720 across four consecutive rebuilds WITH ITS POSITIVE COUNT UNCHANGED
AT 13 — the folds moved, not the head. A head crossing the bar only means something if n_pos moved
with it, which is exactly what separates that from `chamomile`: 11 -> 15 positives, 0.691 -> 0.741,
and it now makes confident calls at 1.00 precision.
MIN_AUROC stays at 0.70. Lowering it to 0.69 would hand back the marginal heads instantly and make
the roster whatever we wanted it to be.
Rebuilt: master_enrichment 8,869 (all named), profile_index 8,850 x 183, flavor_map.
Signed-off-by: Austin L. <86896075+rvnminers-A-and-N@users.noreply.github.com>
@@ -17,9 +33,9 @@ running entirely on hardware you own.
17
33
<palign="center">
18
34
<imgsrc="docs/assets/flavor-map.png"alt="Flavor-space map in 3D on MW × logP × TPSA axes, colored by taste and aroma"width="900">
19
35
</p>
20
-
<palign="center"><sub>The interactive flavor-space map in 3D on real <b>MW × logP × TPSA</b> axes, colored by <b>taste & aroma</b> — every one of the 167 aroma + 6 taste classes labelled. <b>190 trained heads</b> in all: 6 taste + 167 aroma + 5 mouthfeel + 12 safety.</sub></p>
36
+
<palign="center"><sub>The interactive flavor-space map in 3D on real <b>MW × logP × TPSA</b> axes, colored by <b>taste & aroma</b> — every one of the 172 aroma + 6 taste classes labelled. <b>195 trained heads</b> in all: 6 taste + 172 aroma + 5 mouthfeel + 12 safety.</sub></p>
21
37
22
-
> **8,847 unique molecules** across the open datasets · **taste + aroma + mouthfeel** prediction from
38
+
> **8,869 unique molecules** across the open datasets · **taste + aroma + mouthfeel** prediction from
23
39
> structure · a **flavor library** (start from a flavor → its character-impact molecule) and
24
40
> **flavor designer** (pick your notes → best food-safe molecules + drop-in swaps) · an
25
41
> interactive 2D/3D **flavor-space map** · **2D & 3D** structure views. All on
@@ -28,10 +44,10 @@ running entirely on hardware you own.
28
44
> Per set (unique molecules): taste training **3,845** · aroma training **2,394** · odor
29
45
> corpus **2,255** · documented taste **676** · mouthfeel training **2,534** · Tox21 (safety)
| Data | commercial-clean open data only | adds research odor datasets with **NonCommercial** terms |
165
-
| Aroma |**167 presence/absence descriptor heads ship** (public-domain HSDB); scored **intensity** is trained on your data or a licensed set (PMP 2001) | full open model incl. **intensity** (research odor data) |
181
+
| Aroma |**172 presence/absence descriptor heads ship** (public-domain HSDB); scored **intensity** is trained on your data or a licensed set (PMP 2001) | full open model incl. **intensity** (research odor data) |
166
182
| Use | free to use, sell, run on-prem | research, teaching, advancing the method |
167
183
168
184
The split is deliberate. The richest aroma data is licensed for research only, so
@@ -208,10 +224,30 @@ tests/ pytest suite for the prediction core
208
224
209
225
## Getting started
210
226
211
-
See [training/SETUP.md](training/SETUP.md) for the clean-machine setup. Datasets and
212
-
trained models are **not** committed — the training scripts pull their sources and
227
+
**With Docker** — the app plus a pgvector-backed Postgres, one command:
228
+
229
+
```bash
230
+
cp .env.example .env # every value has a working default
231
+
docker compose up -d
232
+
curl localhost:8000/healthz
233
+
```
234
+
235
+
Trained models are **not** in the image (they are ~1 GB and change on every retrain) — point
236
+
`MODELS_DIR` at them and they mount read-only at run time. Set `FLAVORMANCER_HOME` if you run
237
+
without Compose.
238
+
239
+
**From source** — [`training/SETUP.md`](training/SETUP.md) covers the install;
240
+
[`docs/DATA-PIPELINE.md`](docs/DATA-PIPELINE.md) is the clean-machine walkthrough with every
241
+
build step in dependency order, timings, and an end-to-end check that verifies a *prediction*
242
+
rather than just that the server started.
243
+
244
+
Datasets and trained models are **not** committed — the training scripts pull their sources and
213
245
`.gitignore` keeps artifacts out of the repo.
214
246
247
+
> The Docker path has not yet been run end to end on a machine with Docker installed — the
248
+
> Compose file parses and the path handling is tested, but treat the first `docker compose up`
249
+
> as the test rather than a guarantee.
250
+
215
251
## Team
216
252
217
253
Built by **[Echelon Technology Solutions](https://echelonts.net)** — a small team where
0 commit comments