macwiatrak/bacbench-ppi-stringdb-protein-sequences-small
Dataset for protein-protein interaction prediction across bacteria (Protein sequences) A dataset of 261 bacterial genomes across 215 genera with protein-protein interaction (PPI) scores for each genome. The genome protein sequences and PPI scores have been extracted from STRING DB. Each row contains a set of protein sequences from a genome, ordered by their location on the chromosome and plasmids and a set of associated PPI scores. The PPI scores have been extracted using the… See the full description on the dataset page: https://huggingface.co/datasets/macwiatrak/bacbench-ppi-stringdb-protein-sequences-small.
Dataset for protein-protein interaction prediction across bacteria (Protein sequences)
A dataset of 261 bacterial genomes across 215 genera with protein-protein interaction (PPI) scores for each genome.
The genome protein sequences and PPI scores have been extracted from STRING DB. Each row contains a set of protein sequences from a genome, ordered by their location on the chromosome and plasmids and a set of associated PPI scores. The PPI scores have been extracted using the combined score from STRING DB.
The interaction between two proteins is represented by a triple: [prot1_index, prot2_index, score]. Where to get a probability score, you must divide the score by 1000 (i.e. if the score is 721 then to get a true score do 721/1000=0.721). The index of a protein refers to the index of the protein in the protein_sequences column of the row. See example below in Usage
Usage
We recommend loading the dataset in a streaming mode to prevent memory errors.
from datasets import load_dataset
ds = load_dataset("macwiatrak/bacbench-ppi-stringdb-protein-sequences-small", split="validation", streaming=True)
item = next(iter(ds))
# select a contig_idx
contig_idx = 0
# fetch protein sequences from a genome (list of strings) for the contig_idx
prot_seqs = item["protein_sequence"][contig_idx]
# fetch PPI triples labels (i.e. [prot1_index, prot2_index, score])
ppi_triples = item["labels"][contig_idx]
# get protein seqs and label for one pair of proteins
prot1 = prot_seqs[ppi_triples[0][0]]
prot2 = prot_seqs[ppi_triples[0][1]]
score = ppi_triples[0][2] / 1000
# we recommend binarizing the labels based on the threshold of 0.6
binary_ppi_triples = [
(prot1_index, prot2_index, int((score / 1000) >= 0.6)) for prot1_index, prot2_index, score in ppi_triples
]Split
We provide a phylogeny-aware train, validation and test split by genus with proportions of 60 / 10 / 20 (%) respectively as part of the dataset. This means that the the genera in train, validation and test do not overlap.
See github repository for details on how to embed the dataset with DNA and protein language models as well as code to predict protein-protein interactions.
Relevant resources:
- Equivalent dataset with DNA rather than protein sequences - https://huggingface.co/datasets/macwiatrak/bacbench-ppi-stringdb-dna-small
- Full dataset of bacterial organisms with associated PPI from STRING DB (10,533 genomes) - https://huggingface.co/datasets/macwiatrak/bacbench-ppi-stringdb-protein-sequences
