InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection

Datadory delivers inchikey deduplicated classyfire chemont label collection data covering 73,356,229 structurally unique compounds drawn from PubChem, ZINC20 and Enamine REAL, each labelled on a five-tier kingdom-through-direct-parent path against the ChemOnt 2.1 ontology — 85.4% of all classes observed — and pre-split into 80/10/10 Parquet train, validation and test frames. Delivered by API, files, or your warehouse, daily, weekly, or hourly.

What is the InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection?

The largest labelled map of chemical space this vertical has. InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection attaches ClassyFire functional classifications, expressed against the ChemOnt 2.1 ontology, to 73,356,229 structurally unique compounds — version v4, published June 2, 2026. Three upstream libraries feed it: PubChem contributes 68,693,295 rows carrying a CID, ZINC20 contributes 30,187,323 rows carrying a ZINC ID, and Enamine REAL adds 250,948 screening-compound rows, with 25,775,344 compounds overlapping the two major sources. Because deduplication runs on the InChIKey hash rather than on database entries, the collection holds one row per unique molecule — the same structure cannot inflate a training set three times over.

Every compound carries the full five-tier classification path — kingdom, superclass, class, subclass and direct parent — plus four label columns reaching beyond the strict path. Coverage spans 4,120 of ChemOnt's 4,824 classes, or 85.4%. Get a sample of this dataset scoped to the classes you actually model.

What do sample rows look like?

No payload tour needed — the schema is the story. Every row in the Parquet frames presents the same twelve-column silhouette, and the label columns arrive natively as uint16 arrays rather than delimited strings, so reading the identity columns never touches hundreds of millions of label entries:

CLASSYFIRE/CHEMONT LABEL COLLECTION v4 — ROW SHAPE AS TYPED IN THE PARQUET FRAMES
cid       : int64            (present on PubChem-derived rows)
zinc_id   : uint32           (present on ZINC-derived rows)
smiles    : string           (structure string)
inchikey  : string           (deduplication key, one row per unique compound)

kingdom_ids              : list<uint16>  -- decodes via vocabulary.json
superclass_ids           : list<uint16>
class_ids                : list<uint16>
subclass_ids             : list<uint16>
direct_parent_ids        : list<uint16>
intermediate_nodes_ids   : list<uint16>
alternative_parents_ids  : list<uint16>
substituents_ids         : list<uint16>
mapped_features_ids      : list<uint16>

PARTITION PLAN (80/10/10, STRATIFIED BY DEEPEST RESOLVED CHEMONT SLOT)
train.parquet       58.7 M rows
validation.parquet   7.3 M rows
test.parquet         7.3 M rows

What the rows establish: identity travels on the InChIKey hash — the same key the Kaggle LogP compilation ships — so enrichment joins never depend on spelled-out names. Each label column decodes through vocabulary.json into ChemOnt terms, and the ChemOnt dictionary resolves numeric ids to ids, names and parents; a decoded path climbs from kingdom through superclass, class, subclass and direct parent, with alternative placements and structural features riding alongside. Request a sample cut to named classes and the same columns arrive filtered, hierarchy intact.

What fields does the dataset include?

Thirteen fields define every row, all marked verified against the release documentation during the August 2026 research pass. Four carry identity: cid (int64) on PubChem-derived rows, zinc_id (uint32) on ZINC-derived rows, the SMILES structure string and the InChIKey hash doing the deduplication. Nine carry labels, packed as list<uint16> index arrays: the five tiers of the strict classification path — kingdom, superclass, class, subclass, direct parent — then intermediate nodes along the route, alternative parents where a structure legitimately belongs to more than one branch, and substituent and mapped-feature vocabularies that work as auxiliary multi-label targets.

The reference files that make those indices readable travel alongside the frames and fold under additional fields on request: vocabulary.json mapping indices to ChemOnt terms, the dictionary resolving numeric ids to names and parents, the ChemOnt 2.1 ontology for full ancestor closure, and the non-hierarchical label column. Their handling is confirmed with you before anything ships.

What geography, time range, and granularity does the collection cover?

  • Geography: none, deliberately. This is chemical space, not economic space — a compound carries a structure, not a country. Geography enters downstream, when class labels feed regional portfolios, sourcing screens or jurisdiction-specific compliance work layered on records such as ECHA CHEM.
  • Temporal: a pinned snapshot. Version v4 was published June 2, 2026 — a fixed edition rather than a moving feed, which is exactly what reproducible modelling wants: pin the version string and every result stays traceable to the exact labelled bytes you trained on.
  • Granularity: one row per unique InChIKey compound — 73,356,229 of them — pre-partitioned into an 80/10/10 train/validation/test split stratified by the deepest resolved ChemOnt slot (58.7M / 7.3M / 7.3M rows), so compounds cannot leak across partitions the way they do when teams informally re-split a shared corpus. One subtlety belongs in your data card: deduplication skips tautomer normalization, so tautomers may surface as separate entries — collapse them before splitting if tautomer state affects your task.

How is this dataset delivered?

API, files, or your warehouse. Daily, weekly, or hourly.

You pick the channel and the cadence; the thirteen-field dictionary above travels unchanged across all three. Teams training models tend toward the Parquet frames loaded once beside their feature store; product surfaces embedding class lookups take a scoped feed; SQL-first shops take warehouse load with the label indices resolved into readable ChemOnt terms. Name the classes, tiers or upstream libraries when you request the sample — the sample ships first either way, and changing cadence afterward is a settings conversation, not a re-integration project.

Who uses this data, and for what?

A labelled corpus at this scale answers one question millions of times over — what chemical class is this structure? — and that single answer composes into unrelated workflows:

  • Property and activity modelling — class labels serve as categorical features or multi-label auxiliary targets beside property endpoints; joined to Kaggle's 426k PubChem compilation on the shared InChIKey spine, they turn a lipophilicity regression into a chemistry-aware one.
  • Leakage-resistant benchmarking — the stratified 80/10/10 partition arrives pre-built, so train/test contamination stops being the finding reviewers catch.
  • Portfolio and supplier screening — classify a procurement catalog or a competitor's substance list into ChemOnt classes and see which branches of chemistry the company actually lives in, not which ones its marketing claims.
  • Impact-factor proxies — life-cycle assessment figures grouped by the same ClassyFire/ChemOnt taxonomy join on class labels directly, composing hazard, property and impact layers into one feature store.
  • Regulatory cross-referencing — attach ontology-backed classes to substance inventories such as ECHA CHEM, adding a structural dimension to compliance lists that stop at substance identity.
  • Search and similarity products — the substituent and mapped-feature vocabularies give structured facets for browsing and filtering chemical catalogs.

The modelling workflows live in the ML model training use case and the citation-grade research use case.

Which personas get the most value?

Data scientists and ML engineers get the rarest artifact in applied chemistry ML: a corpus whose split, labels and identity key were designed together, so no derivation leaks silently into the pipeline. Developers and data-product builders get class lookups at catalogue scale without operating a classifier themselves. Competitive-intel and product teams get portfolio maps that place any substance list onto ChemOnt's branch structure. Journalists, academics and students get coverage statistics — 73.4 million compounds, 85.4% of classes observed — attributed to a citable versioned release. All delivered daily, weekly, or hourly.

Provenance note — the collection compiles PubChem, ZINC20 and Enamine REAL structures classified by ClassyFire against the ChemOnt 2.1 ontology, distributed as the versioned Zenodo release v4 (June 2, 2026). It is the only Parquet-native distribution among the twelve primary specialty-chemicals datasets Datadory catalogs.

Label-trust note — the compiler states plainly that a complete re-check of every label against the live classification service is impractical at this scale. Audit a random sample, document the caveat, and report benchmarks as trained on the v4 snapshot rather than on freshly regenerated labels.

Completeness note — 4,120 of 4,824 ChemOnt classes carry examples; 704 hold none, concentrated in exotic inorganic, lanthanide and actinide chemistry the upstream libraries barely sample. Treat classes outside the observed set as out-of-scope for training and reporting rather than as defects to fix.

Where to go next — for property targets on the same identity key, Kaggle — 426k PubChem Molecules for LogP Prediction; for impact factors grouped by this taxonomy, Dryad - LCA Impact Data for Chemicals (proxy classification); for the regulatory mirror, ECHA CHEM - EU Chemicals Regulatory Database (REACH & C&L); and for evaluated physical constants behind the structures, NIST Chemistry WebBook. Background reading: SMILES notation, PubChem-derived dataset, the ClassyFire/ChemOnt labels deep dive, the specialty chemicals data guide and the ranked shortlist of the best specialty chemicals datasets.

Field dictionary

Every field below is documented against real records. The full dictionary ships with the sample.

Field dictionary — thirteen fields on every row; label columns decode through vocabulary.json into ChemOnt terms
FieldTypeDefinitionExample
cidintegerPubChem Compound ID (int64), carried on PubChem-derived rows.68,693,295 rows carry one
zinc_idintegerZINC20 compound identifier (uint32), carried on ZINC-derived rows.30,187,323 rows carry one
smilesstringSMILES structure string for the compound.structure string
inchikeystringInChIKey hashed identifier used as the deduplication key — one row per unique compound.deduplication key
kingdom_idslist<uint16>Integer indices into vocabulary.json for the ChemOnt kingdom tier, the broadest level of the classification path.array of uint16
superclass_idslist<uint16>Indices for the ChemOnt superclass tier — broad structural families such as benzenoid frameworks.array of uint16
class_idslist<uint16>Indices for the ChemOnt class tier beneath the superclass.array of uint16
subclass_idslist<uint16>Indices for the ChemOnt subclass tier.array of uint16
direct_parent_idslist<uint16>Indices for the direct-parent tier, the most specific slot on the strict classification path.array of uint16
intermediate_nodes_idslist<uint16>Indices for additional nodes lying along the classification route between named tiers.array of uint16
alternative_parents_idslist<uint16>Indices for secondary parent classes, covering structures that legitimately belong to more than one branch.array of uint16
substituents_idslist<uint16>Indices for substituent labels usable as auxiliary multi-label targets.array of uint16
mapped_features_idslist<uint16>Indices for mapped structural features usable as auxiliary multi-label targets.array of uint16
Additional fields-Folded under 'additional fields on request': the reference layer that makes the indices readable — vocabulary.json mapping integer indices to ChemOnt terms, the ChemOnt dictionary resolving numeric ids to names and parents, and the ChemOnt 2.1 ontology itself — plus the non-hierarchical label column. Handling is confirmed with you before anything ships.on request

Coverage — geography, temporal range, granularity

DimensionCoverage
GeographyNone — global chemical space; compounds carry structures, not countries
TemporalStatic snapshot, version v4 published June 2, 2026
GranularityOne row per unique InChIKey compound (73,356,229 rows), pre-split 80/10/10 into train/validation/test Parquet frames stratified by deepest resolved ChemOnt slot

Questions buyers ask

What is the InChIKey-Deduplicated ClassyFire/ChemOnt Label Collection?

A versioned collection attaching ClassyFire classifications, expressed against the ChemOnt 2.1 ontology, to 73,356,229 structurally unique compounds drawn from PubChem, ZINC20 and Enamine REAL. Each compound carries a five-tier kingdom-through-direct-parent path plus multi-label structural features, delivered in ready-made 80/10/10 Parquet partitions.

How many compounds come from each upstream library?

PubChem contributes 68,693,295 rows carrying a CID, ZINC20 contributes 30,187,323 rows carrying a ZINC ID, and Enamine REAL adds 250,948 screening compounds. Because 25,775,344 compounds overlap the two major libraries, deduplication collapses them to a single row keyed on the InChIKey hash.

What do the five classification tiers mean?

Kingdom, superclass, class, subclass and direct parent — ChemOnt's hierarchy from broadest chemistry down to the most specific structural parent. Flat prediction works at any tier, the full path supports hierarchical heads, and intermediate nodes, alternative parents and feature vocabularies ride along as separate label columns.

Why do some ChemOnt classes have no examples?

Coverage spans 4,120 of 4,824 classes — 85.4%. The remaining 704 hold zero compounds, concentrated in exotic inorganic, lanthanide and actinide chemistry that PubChem, ZINC20 and Enamine REAL barely sample. Treat any class outside the observed set as out-of-scope for training and reporting rather than as a defect.

Does the train/validation/test split prevent leakage?

The three Parquet frames form an 80/10/10 split — roughly 58.7 million, 7.3 million and 7.3 million rows — stratified by the deepest resolved ChemOnt slot, so compounds cannot leak across partitions. Deduplication precedes splitting; collapse tautomers yourself if tautomer state matters to your task.

Can the class labels be independently re-verified?

Not exhaustively. The compiler notes that re-checking every label against the live classification service would take decades at realistic request rates. Working practice is to audit a random sample, document the caveat, and report results as trained on the v4 snapshot rather than on regenerated labels.

How current is the collection?

Version v4, published June 2, 2026, is a fixed snapshot rather than a subscription feed. The static cadence is a feature for reproducibility: pin the version string in your training config and any benchmark stays traceable to the exact labelled bytes you trained against.

Can a sample be scoped to particular classes or tiers?

Yes. Name the ChemOnt classes, the tiers, or the upstream libraries you care about and the extract returns rows cut to them with the thirteen-field dictionary intact — delivered by API, files, or your warehouse, on whatever cadence you choose.

See the rows before you pay anything.

Name this dataset and we send real records from it — scoped to the fields you asked for.

See pricing