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.
While broadening the memorizing heads for #256 I read the raw positives for
pineand 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
corkyhead 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:
Concrete damage:
sweetlearns from carbon tetrachloride and chloral hydrate,fruityfrom a DDT analogue,camphorfrom chlordane,pinefrom 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
Falsefor 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 forsweet."Proposed fix
build_aroma_datasetstage, with an explicit carve-out for the halo-aromatic taint chemistry (SMARTS on the haloanisole/halophenol core).odorlessas 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 withtraining/audit_generalization.pyrather than assuming.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.