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:GINEConv layers (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