smiles2odor — POM GNN baseline (Release 1)
Predict olfactory descriptors from SMILES strings. A GINE-based graph neural network trained on the Leffingwell PMP dataset, reproducing the Principal Odor Map (POM) approach.
Model details
- Architecture: 4×
GINEConvlayers (256 hidden) → sum pool → 2-layer MLP head - Inputs: SMILES string → RDKit molecular graph
- Outputs: Multi-label probabilities over the Leffingwell descriptor vocabulary
- Training data: Leffingwell PMP via Pyrfume
- Loss: Binary cross-entropy per descriptor
- Splits: Bemis–Murcko scaffold split (80 / 10 / 10)
Intended uses
- Researchers studying structure–odor relationships
- Cheminformatics pipelines that need a quick olfactory prior over a candidate set
- Educational material illustrating graph neural networks on real-world chemistry
Limitations
- Coverage is limited to the descriptor vocabulary present in Leffingwell PMP.
- Trained on roughly 3.5k molecules; novel chemistry may lie far out-of-distribution.
- Multi-label probabilities are not calibrated — use them as relative rankings rather than absolute likelihoods.
- Descriptors reflect English perfumery vocabulary and inherit the cultural assumptions baked into the source data.
Evaluation
Metrics on the held-out scaffold-split test set:
| Metric | Score |
|---|---|
| Macro AUROC | 0.7829 |
| Macro AUPRC | 0.2213 |
| Micro AUROC | 0.8576 |
| Micro AUPRC | 0.2444 |
| # descriptors | 106 |
How to use
from smiles2odor.inference import OdorPredictor
predictor = OdorPredictor("pytorch_model.pt", device="cpu")
[result] = predictor.predict(["O=Cc1ccc(O)c(OC)c1"]) # vanillin
print(result.top_k)
Training reproduction
git clone https://github.com/TODO/smiles2odor
cd smiles2odor
uv sync
uv run python releases/01_pom_gnn/train.py --config releases/01_pom_gnn/config.yaml
Citation
If you use this model, please cite the project repository (formal citation TBD with the first stable release).
License
Apache-2.0
- Downloads last month
- 4
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support