CoolFace
Datasetpublic

summykai/chemistry-sft-ultra

Chemistry SFT Ultra Modern chemistry fine-tuning data built from multiple curated upstream datasets, merged into a single English corpus with reproducible processing and analysis. Dataset Summary This repository merges several instruction/QA-style sources into a single, cleaned, deduplicated, English-only training corpus in chat format. The final corpus contains 1,370,322 rows. Each row is: messages: a list of {role, content} message dicts (chat/SFT format)… See the full description on the dataset page: https://huggingface.co/datasets/summykai/chemistry-sft-ultra.

sourceHugging Faceotherupdated 9mo agoView on Hugging Face
4likes348downloads
Dataset Card

Chemistry SFT Ultra

Modern chemistry fine-tuning data built from multiple curated upstream datasets, merged into a single English corpus with reproducible processing and analysis.

Dataset Summary

This repository merges several instruction/QA-style sources into a single, cleaned, deduplicated, English-only training corpus in chat format.

The final corpus contains 1,370,322 rows. Each row is:

  • —messages: a list of {role, content} message dicts (chat/SFT format)
  • —metadata: a structured dict containing provenance + task fields (and, when available, chemistry fields like SMILES)

Source Datasets

This dataset is assembled from multiple upstream sources (see metadata.source / metadata.original_source per row). The high-level intended sources include:

  • —SMolInstruct
  • —OmniChem
  • —MoleculeQA
  • —ChemRxiv-Train
  • —Tulu-3 SFT Mixture
  • —NuminaMath-CoT
  • —TextbookReasoning
Note: Because the dataset is merged, the most reliable “source of truth” for provenance is the per-row metadata fields.

Dataset Structure

Top-level columns (verified)

Your structure analyzer notebook confirms the dataset has exactly two top-level columns:

  • —messages
  • —metadata

messages schema (verified)

messages is a list of dicts with:

  • —role (string): one of system, user, assistant, tool (most rows are user + assistant)
  • —content (string): the message text

In the sampled rows from the notebook run, conversations are typically 2 turns (p50=2, p90=2).

metadata schema (verified)

metadata is a struct with the following fields:

  • —source (string)
  • —split (string)
  • —task (string)
  • —language (string)
  • —licence (string)
  • —chemistry (bool)
  • —cid (string)
  • —question_id (string)
  • —answer_letter (string)
  • —category (string)
  • —seq_type (string)
  • —smiles (string)
  • —original_source (string)
  • —id (string)
  • —problem (string)
  • —subject (string)
  • —reference_answer (string)
Some fields may be empty depending on which upstream source produced the row.

Example record

python
{
  "messages": [
    {"role": "user", "content": "What is the SMILES for aspirin?"},
    {"role": "assistant", "content": "CC(=O)OC1=CC=CC=C1C(=O)O"}
  ],
  "metadata": {
    "source": "SMolInstruct",
    "split": "train",
    "task": "smiles_conversion",
    "language": "en",
    "licence": "MIT",
    "chemistry": True,
    "cid": "",
    "question_id": "",
    "answer_letter": "",
    "category": "conversion",
    "seq_type": "qa",
    "smiles": "CC(=O)OC1=CC=CC=C1C(=O)O",
    "original_source": "smolininstruct",
    "id": "",
    "problem": "",
    "subject": "",
    "reference_answer": ""
  }
}

Dataset Analysis (from your notebook runs)

From your sanity-check and schema analyzer outputs:

  • —Schema normalization: messages were normalizable in sampled rows (no schema errors observed)
  • —Assistant supervision present: sampled rows include assistant responses
  • —Sequence length profile (audit sample): median in the hundreds of tokens with a small tail beyond 2048, indicating some long examples
  • —LoRA smoke test: successful 4-bit load + LoRA injection + a few training steps using sampled real rows

Usage

python
from datasets import load_dataset

ds = load_dataset("summykai/chemistry-sft-ultra", split="train")
ex = ds[0]

messages = ex["messages"]
meta = ex["metadata"]

# Example: filter for rows that provide a SMILES in metadata
smiles_rows = ds.filter(lambda x: (x["metadata"]["smiles"] is not None) and (x["metadata"]["smiles"] != ""))

# Example: filter by task
retrosynth = ds.filter(lambda x: x["metadata"]["task"] == "retrosynthesis")

Considerations for Use

  • —This is a merged dataset; licensing is per-source. Use metadata.licence and metadata.original_source to audit before redistribution.
  • —Most examples are short 2-turn chat pairs, but there is a long-context tail.
  • —The dataset is English-focused (language: en), but you should still validate per-row language if you require strict guarantees.

License

Because this dataset aggregates multiple upstream datasets, it does not have a single uniform license. See:

  • —metadata.licence for the row-level license string (when provided)
  • —metadata.original_source / metadata.source for provenance

If you need a stricter story (e.g., “MIT-only”), you should filter the dataset by licence/source and publish a derived subset.

Citation

If you use this dataset in your research, cite the dataset repo:

bibtex
@dataset{chemistry_sft_ultra,
  title        = {Chemistry SFT Ultra: A Curated Chemistry Instruction Tuning Dataset},
  author       = {summykai},
  year         = {2025},
  publisher    = {Hugging Face},
  howpublished = {Hugging Face Datasets},
}