Skip to content

Build up the food side of sweet/ethereal/pungent rather than cutting the industrial odorants outΒ #257

Description

@rvnminers-A-and-N

While broadening the memorizing heads for #256 I read the raw positives for pine and found two chlorinated pesticides sitting in there. Audited the whole aroma corpus: 121 of 2,403 training molecules (5%) carry three or more Cl/Br/I atoms, and they are training food-flavor descriptors.

They split cleanly into two groups, which is why this needs a decision rather than a DELETE:

16 are legitimate flavor chemistry β€” keep. The haloanisoles and halophenols (2,4,6-trichloroanisole, 2,4,6-tribromoanisole, pentachloroanisole) are the cork-taint molecules. They are exactly what the corky head should be trained on, they are food-relevant, and removing them would gut a real head.

105 are industrial chemicals β€” almost certainly should go. Organochlorine pesticides (chlordane, endosulfan, dicofol, methoxychlor, DDT analogues), chlorinated solvents (carbon tetrachloride, bromoform), organophosphates (naled), and iodinated X-ray contrast agents. Their HSDB entries carry real odor text, so the weak labeller picked them up honestly β€” but they are not food molecules and they are teaching flavor heads.

Heads they contaminate:

head contaminated positives
pungent 40
odorless 37
ethereal 17
corky 9
musty 8
phenolic 8
sweet 8
camphor 8
fruity 4
pine 2

Concrete damage: sweet learns from carbon tetrachloride and chloral hydrate, fruity from a DDT analogue, camphor from chlordane, pine from hexachlorobutadiene.

Why it matters beyond tidiness. This is a flavor app. Palette-match and substitute search rank by profile similarity, so a contaminated head can surface an organochlorine pesticide as an aroma neighbour for a food molecule. The per-molecule food-use flag already reads False for all 257 such molecules in the served corpus, so nothing is mislabelled as food-safe β€” but "correctly flagged" is not the same as "should have been a training positive for sweet."

Proposed fix

  • Filter polyhalogenated molecules out of the aroma training corpus at the build_aroma_dataset stage, with an explicit carve-out for the halo-aromatic taint chemistry (SMARTS on the haloanisole/halophenol core).
  • Keep odorless as a judgement call β€” 37 of its positives are industrial, and breadth arguably helps a head whose whole job is recognising "no smell". Worth measuring both ways with training/audit_generalization.py rather than assuming.
  • Re-run the generalization audit after, so we can see whether the affected heads get better or just smaller.

This is the same class of problem as the non-food odorants already excluded from the curated supplement (isovanillin, habanolide) β€” the policy exists, it just was never applied to the weak-labelled HSDB corpus.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:aromaOpenPOM aroma model + sidecararea:dataDatasets, sources, column mappingarea:trainingPython dataset build + model trainingbugSomething isn't working

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions