Mulah's picture
README: Prediction column now covers all five methods
e74e6d7 verified
|
Raw History Blame Contribute Delete
13.6 kB
# Supplementary Data β€” ProtTale
Source data for the figures and tables in the main text and Extended Data:
six CSV files (UTF-8, comma-separated, first row is the header), one Excel
workbook and one JSON metadata file.
The reliability score is written `p_JAY` throughout, the predicted probability
of a Judge-Assigned *Yes*, as in the paper.
Protein identifiers appear in two forms throughout: `UniProt_ID` is the
Swiss-Prot entry name (e.g. `ENG1_RHIMI`) and `UniProt_accession` is the
Swiss-Prot accession (e.g. `A0A023I7E1`). Entry names are unique across
Swiss-Prot, so the two map one to one.
| File | Rows | Covers |
|---|---|---|
| `Supplementary_Data_1_expert_curation.csv` | 232 | Blinded expert curation of ProtTale predictions |
| `Supplementary_Data_2_unseen_per_method.csv` | 6,186 | Unseen evaluation set, per protein, per method, per judge/extraction run |
| `Supplementary_Data_3_stage1_test_pairs.csv` | 534 | Stage 1 test pairs used to validate the LLM-as-judge |
| `Supplementary_Data_4_shuffled_baseline.csv` | 1,031 | Reliability scores for real versus residue-shuffled sequences |
| `Supplementary_Data_5_mips_validation.xlsx` | 1,000 | Sequence, structure and EC agreement within MIPS clusters |
| `Supplementary_Data_6_training_curves.csv` | 8,904 | Training and validation curves for both stages and the reliability head |
| `Supplementary_Data_7_ablation_no_stage1.csv` | 1,031 | ProtTale retrained without Stage 1, scored on the unseen set |
---
## Supplementary Data 1 β€” expert curation
One row per curated prediction, 232 in total, in the order the predictions were
shown to the curator. Sampling, blinding and the rating scale are described in
Methods, "Expert Curation".
| Column | Meaning |
|---|---|
| `Entry` | Identifier shown to the curator, 1–232 |
| `UniProt_ID` | Swiss-Prot entry name |
| `Length_aa` | Sequence length in residues |
| `p_JAY` | Reliability score from ProtTale's head |
| `Retained` | Whether the prediction passes the discrete filter `p_JAY > 0.537` |
| `Judge_label` | LLM-as-judge verdict, `Yes` or `not-Yes`, majority over five runs |
| `Curator_score` | Expert rating, 1 (unrelated or contradictory) to 5 (equivalent) |
| `Specificity` | Prediction more / equally / less specific than the Swiss-Prot description |
| `Information` | Prediction more / equally / less informative than the Swiss-Prot description |
| `Truncated` | Whether generation reached the 128-token cap without emitting an end-of-sequence token (82 of the 232 curated predictions; 233 of the 1,031 unseen predictions, 22.6%) |
| `SwissProt_description` | Reference text shown to the curator |
| `ProtTale_prediction` | Generated text shown to the curator |
| `Curator_notes` | Free-text justification, present for 175 of the 232 items |
Neither `p_JAY` nor `Judge_label` was visible to the curator at scoring time.
Both are included so that human and automated ratings can be compared directly.
Regenerates the expert-curation results in the main text and the Extended Data
judge-versus-curator agreement table.
---
## Supplementary Data 2 β€” unseen evaluation set, per method
One row per (protein, method), 1,031 proteins x 6 methods = 6,186 rows. The
sixth "method" is `Reference`, the curated Swiss-Prot description put through
the same GO-extraction pipeline; it is the curated-text reference line in the
GO-extraction figure and carries no judge labels.
| Column | Meaning |
|---|---|
| `UniProt_ID`, `UniProt_accession` | Protein identifiers |
| `Method` | `ESM2Text`, `Prot2Text`, `ProtT3`, `ProtTale`, `Protein2Text`, or `Reference` |
| `Kingdom` | Taxonomic group, `Eukaryota` / `Bacteria` / `Archaea` / `Viruses` |
| `Length_aa` | Sequence length. The short subset is `<= 1024` (n = 852), the long subset `> 1024` (n = 179) |
| `SwissProt_description` | The protein's curated Swiss-Prot `FUNCTION` description, the reference the judge compares against. Identical on all six rows of a protein |
| `Prediction` | The description this method generated for the protein, i.e. the text the judge scored; the curated description itself on `Reference` rows. Together with the judge prompt (Supplementary Note 2), this allows every judge label to be re-scored |
| `judge_run1` … `judge_run5` | LLM-as-judge label from each of the five independent runs: `Yes`, `No`, `Maybe`, or `Vague`. Blank for `Reference` |
| `judge_majority` | `Yes` when at least three of the five runs said `Yes`, otherwise `not-Yes`. This is the label used for every statistical comparison in the paper |
| `reference_GO` | The protein's curated, experimentally validated Molecular Function GO terms, semicolon separated. The target every extraction is scored against. Identical on all six rows of a protein |
| `extracted_GO_run1` … `extracted_GO_run5` | GO terms the extraction model returned from this method's text in each run, semicolon separated. **A blank cell is an empty extraction** |
| `wang_run1` … `wang_run5` | Wang semantic similarity between `extracted_GO_run*` and `reference_GO`, without ancestor expansion, as plotted in the main text. Blank where the extraction was empty |
| `n_nonempty_runs` | How many of the five runs returned at least one GO term, 0–5 |
| `wang_mean_nonempty` | Mean of the non-blank `wang_run*` values for this protein and method. Blank when all five runs were empty |
| `p_JAY` | ProtTale's reliability score for this protein. A property of the protein, so the same value repeats on all six rows of that protein |
| `Retained` | Whether `p_JAY > 0.537` |
Because the extracted terms themselves are included, the metrics reported in
Extended Data can be recomputed from this file as well: Wang similarity with
ancestor expansion, Jaccard similarity, and information accretion all take the
same two term sets as input.
### Two aggregation conventions
The paper aggregates Wang similarity in two different ways, both derivable from
the per-run columns above. They are not interchangeable and the difference
matters when reproducing specific numbers.
- **Figures.** Within each run, average over the non-empty rows only, then
average those five per-run means. Empty extractions are excluded from the
average and reported separately as the empty rate printed above each bar.
- **Wilcoxon tests.** Empty extractions are scored zero and kept, so that all
1,031 proteins remain paired across methods. Dropping rows per method would
break the pairing the test requires.
Reproduced under the figure convention, the per-method Wang means are
Reference 0.669, ESM2Text 0.569, Prot2Text 0.556, ProtT3 0.605, ProtTale 0.561,
Protein2Text 0.443, with empty rates of 4.79%, 31.81%, 22.00%, 10.03%, 14.28%
and 28.07% respectively.
Regenerates the GO-extraction figure, the method-comparison figure, the
reliability-filter figure, the per-taxonomic-group figure, the five-way Venn,
and the judge run-agreement panel.
---
## Supplementary Data 3 β€” Stage 1 test pairs
One row per pair, 534 in total. These pairs validate the LLM-as-judge against
an independent ground truth: the MIPS cluster label comes from embedding
clustering, the judge label from reading the two curated descriptions. Neither
is derived from the other, which is what makes their agreement informative.
| Column | Meaning |
|---|---|
| `Pair_index` | Row index, 0–533 |
| `UniProt_ID_1`, `UniProt_accession_1` | First protein of the pair |
| `UniProt_ID_2`, `UniProt_accession_2` | Second protein of the pair |
| `MIPS_pair` | `within` if both proteins fall in the same MIPS cluster, `across` otherwise. 267 of each |
| `Judge_label` | LLM-as-judge label for the two descriptions: `Yes`, `No`, `Maybe`, or `Vague` |
| `Description_1`, `Description_2` | The two curated Swiss-Prot function descriptions given to the judge. No model prediction is involved |
Identifiers for these pairs were recovered by exact sequence match against
Swiss-Prot, since the stored pairs carry sequences rather than accessions. 15
of the 1,068 proteins have a sequence that is shared by more than one
Swiss-Prot entry; for those the identifier given here is one of several entries
with that exact sequence. The descriptions, labels and analysis are unaffected.
**The judge was run once on these pairs**, not five times. This analysis tests
the judge's accuracy against the cluster ground truth, not its run-to-run
reproducibility; the five-run reproducibility analysis was carried out on the
1,031 unseen predictions and lives in Supplementary Data 2.
Regenerates the within-versus-across cluster panel of the Extended Data judge
figure and the accompanying Fisher exact test.
---
## Supplementary Data 4 β€” shuffled-sequence baseline
One row per unseen protein, 1,031 in total. The discrete reliability threshold
used throughout the paper is derived from this file.
| Column | Meaning |
|---|---|
| `UniProt_ID`, `UniProt_accession` | Protein identifiers |
| `Length_aa` | Sequence length |
| `p_JAY_real` | Reliability score for the real sequence |
| `p_JAY_shuffled` | Reliability score for the same sequence with its residues randomly permuted |
A Fisher exact sweep over thresholds on `p_JAY`, contrasting the real and
shuffled distributions, peaks at `tau* = 0.537`. That value is adopted as the
discrete reliability filter everywhere in the paper, so this file is what makes
the threshold checkable.
Regenerates both panels of the Extended Data shuffled-baseline figure.
---
## Supplementary Data 5 β€” MIPS cluster validation
Excel workbook, three sheets. Backs the opening result that embedding proximity
is a usable proxy for shared function.
- **README** β€” sampling, metric definitions, and how each confidence interval was computed.
- **Per-pair data** β€” 1,000 rows, one per protein pair: `cluster_id`, the two
UniProt accessions, `seq_identity_pct`, `tm_score`, `tm_score_ge_0.7`, the two
EC numbers, `ec_match_level` (0–4) and `ec_match_level4`.
- **Summary statistics** β€” the three reported figures with their intervals. The
TM-score and EC proportions recompute live from the per-pair sheet.
Pairs are same-cluster pairs drawn from reviewed UniProtKB entries that carry an
EC number and an AlphaFold structure, capped at five pairs per cluster, covering
244 of the 2,204 eligible clusters.
**Note on the sequence-identity figure.** 37.5% is the **mean** pairwise
sequence identity over the 1,000 pairs, with a bootstrap confidence interval on
that mean. It is not a proportion, and no "sequence similar" threshold is used
or implied. The other two figures, 58.8% and 63.1%, are proportions with Wilson
intervals.
---
## Supplementary Data 6 β€” training curves
`Supplementary_Data_6_training_curves.csv`, 8,904 rows, long format: `panel`,
`series`, `step`, `epoch`, `x_epoch`, `value`.
`Supplementary_Data_6_training_curves_meta.json` records, for each panel, the
source metrics file, which logged columns were used, the number of epochs,
steps per epoch, and the best validation value with its epoch.
| Panel | Stage | Training series | Validation series | Epochs |
|---|---|---|---|---|
| A | Stage 1 alignment | `train_loss_step`, `train_loss_epoch` | `val_auc`, best 0.866 at epoch 4 | 10 |
| B | Stage 2 generation | `train_loss_step` | `val_bleu2`, best 17.51 at epoch 39 | 50 |
| C | Reliability head | `train_loss_step` | `val_pos_f1`, best 0.547 at epoch 12 | 20 |
Panel C's random baselines, 0.384 at q = 0.5 and 0.476 at q = 1.0, follow from a
positive prevalence of 312 in 1,000 on the head's validation split.
Regenerates the Extended Data training-dynamics figure.
---
## Supplementary Data 7 β€” ProtTale without Stage 1
One row per unseen protein, 1,031 in total, in the same order and with the same
identifiers as the `ProtTale` rows of Supplementary Data 2, so the two files can
be joined row by row or on `UniProt_ID`.
ProtTale w/o Stage 1 was trained with Stage 2 only: its frozen encoder was
initialized from the original ESM-C weights rather than from the Stage 1
student, and every other setting was unchanged.
| Column | Meaning |
|---|---|
| `UniProt_ID`, `UniProt_accession` | Protein identifiers |
| `Method` | `ProtTale w/o Stage 1` on every row |
| `Kingdom` | Taxonomic group, as in Supplementary Data 2 |
| `Length_aa` | Sequence length. The short subset is `<= 1024`, the long subset `> 1024` |
| `judge_run1` … `judge_run5` | LLM-as-judge label from each of five runs: `Yes`, `No`, `Maybe`, or `Vague`. A blank cell means the judge returned no label in that run, which happened for 21 runs across 5 proteins |
| `judge_majority` | `Yes` when at least three of the five runs said `Yes`, otherwise `not-Yes`. Blank runs count as not-`Yes` |
| `p_JAY` | ProtTale's reliability score for the protein, identical to Supplementary Data 2. The ablated model has no reliability head of its own, so the filter applied to it uses ProtTale's |
| `Retained` | Whether `p_JAY > 0.537` |
| `SwissProt_description` | Curated reference text given to the judge |
| `Prediction` | Description generated by ProtTale w/o Stage 1 |
By five-run majority, the *Yes* rate is 15.8% over all 1,031 proteins, 12.7% on
the short subset and 30.7% on the long subset, against 25.7%, 25.2% and 27.9% for
ProtTale.
Regenerates the Extended Data figure comparing ProtTale with ProtTale w/o
Stage 1, and the McNemar tests reported with it in the main text.
---
## Not covered here
Two display items have no tabular source data: the model architecture figure is
a schematic, and the two prompt figures reproduce the prompts themselves.
Training data, dataset splits and clustering files are in the sibling
`Data_availability` folder.