anonymousapple/Assay-aware-BindingDB
Assay-aware BindingDB Assay-aware BindingDB is a collection of protein–ligand binding records organized by experimental assay type. Each row represents a BindingDB reactant set and includes its measured affinity, source publication, original experimental context, and an assay-specific structured description. The complete dataset remains available as the full split. Four assay configurations provide direct access to ITC, SPR, FPA, or RBA records, and 40 training-compatible… See the full description on the dataset page: https://huggingface.co/datasets/anonymousapple/Assay-aware-BindingDB.
Assay-aware BindingDB
Assay-aware BindingDB is a collection of protein–ligand binding records organized by experimental assay type. Each row represents a BindingDB reactant set and includes its measured affinity, source publication, original experimental context, and an assay-specific structured description.
The complete dataset remains available as the full split. Four assay configurations provide direct access to ITC, SPR, FPA, or RBA records, and 40 training-compatible configurations provide predefined training, validation, and test partitions for seeds 0 through 9.
Configurations and splits
The default configuration contains all four assays in one full split. The itc, spr, rba, and fpa configurations each expose one complete assay as full without applying training eligibility filters.
Configurations named <assay>_seed_<seed> reproduce the data used in the downstream binding affinity prediction experiments for seeds 0–9 and expose train, validation, and test splits.
Eligible records require:
- A precomputed Boltz-2 affinity representation.
- A Qwen3 assay-context embedding.
- Exactly one positive numeric Kd, Ki, or IC50 value.
- No
<or>qualifier.
Unique PMIDs are shuffled with NumPy RandomState(seed). Using integer truncation, 20% are assigned to test, 10% to validation, and the remainder to train, preventing PMID leakage.
Data schema
original_paragraph and structured_description are JSON-encoded strings rather than nested Arrow objects because their internal structures vary among publications and assay types. They can be decoded into Python objects when nested data is needed. Both fields are nullable.
Examples
Install the Hugging Face Datasets library before running the examples:
pip install datasetsLoad the full dataset
from datasets import load_dataset
dataset = load_dataset(
"anonymousapple/Assay-aware-BindingDB",
split="full",
)
print(dataset)
print(f"Number of records: {len(dataset):,}")Load one complete assay
Pass the assay configuration name as the second argument:
from datasets import load_dataset
dataset = load_dataset(
"anonymousapple/Assay-aware-BindingDB",
"itc",
split="full",
)
print(f"ITC records: {len(dataset)}")Read an individual record
record = dataset[0]
print("Reactant set:", record["reactant_set_id"])
print("PMID:", record["pmid"])
print("Assay:", record["assay_type"])
print("Protein:", record["protein"])
print("Ligand SMILES:", record["ligand"]["smiles"])
affinity = record["affinity_data"]
print(
"Affinity:",
affinity["type"],
affinity["relation"],
affinity["value"],
affinity["unit"],
)Read multiple records
for record in dataset.select(range(5)):
print(
record["reactant_set_id"],
record["protein"],
record["assay_type"],
)Read structured descriptions
Use json.loads() to decode the JSON string and json.dumps() with indentation to display it in a readable structure:
import json
record = dataset[0]
value = record["structured_description"]
if value is not None:
structured_description = json.loads(value)
print(
json.dumps(
structured_description,
indent=2,
ensure_ascii=False,
)
)After decoding, nested values can be accessed normally:
if record["structured_description"] is not None:
structured_description = json.loads(
record["structured_description"]
)
print(json.dumps(structured_description, indent=2, ensure_ascii=False))
The same approach works for original_paragraph:
value = record["original_paragraph"]
if value is not None:
original_paragraph = json.loads(value)
print(json.dumps(original_paragraph, indent=2, ensure_ascii=False))Load a training-compatible seeded split
Combine the assay and split seed in the configuration name, then select a normal Hugging Face split:
from datasets import load_dataset
itc_train_seed_1 = load_dataset(
"anonymousapple/Assay-aware-BindingDB",
"itc_seed_1",
split="train",
)
itc_validation_seed_1 = load_dataset(
"anonymousapple/Assay-aware-BindingDB",
"itc_seed_1",
split="validation",
)
itc_test_seed_1 = load_dataset(
"anonymousapple/Assay-aware-BindingDB",
"itc_seed_1",
split="test",
)