Spaces:
Running
Running
Report the scheme-only floor beneath the sentence results
Browse filesSphragis merges seven treebanks that do not overlap in authors, so the
annotation scheme partly predicts the author. A collapsed note under the
sentence table gives what classifiers score when they see annotation markup
and no Greek at all: 34.02 macro-F1 on one sentence and 65.98 on ten, against
a 1.50 majority baseline. A model that does not clearly beat those has
demonstrated source identification rather than authorship attribution.
Figures come from scripts/audit_leakage.py in the dataset repository and are
regenerated with the data.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- src/app.css +14 -0
- src/lib/components/LeaderboardTable.svelte +16 -1
- src/lib/data.ts +26 -0
src/app.css
CHANGED
|
@@ -119,6 +119,20 @@ tbody tr.selected td.classifier-column { overflow: visible; white-space: normal;
|
|
| 119 |
.tooltip { position: fixed; z-index: 50; top: var(--tip-y); left: var(--tip-x); display: grid; gap: 5px; width: 250px; padding: 11px 12px; border: 1px solid var(--border-strong); border-radius: 6px; background: var(--text); color: var(--page); box-shadow: 0 12px 30px rgb(0 0 0 / 18%); font-size: 11px; font-weight: 400; line-height: 1.45; white-space: normal; transform: translateX(-50%); }
|
| 120 |
.tooltip strong { font-size: 11px; }
|
| 121 |
.table-caption { display: flex; align-items: center; gap: 6px; margin: 11px 2px 0; color: var(--text-subtle); font-size: 11px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
.accuracy-chart { margin-top: 28px; padding: 22px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); box-shadow: var(--shadow-sm); }
|
| 123 |
.chart-heading { display: flex; align-items: end; justify-content: space-between; gap: 24px; margin-bottom: 10px; }
|
| 124 |
.chart-heading h3 { margin: 0 0 5px; font-size: 20px; font-weight: 600; letter-spacing: -0.025em; }
|
|
|
|
| 119 |
.tooltip { position: fixed; z-index: 50; top: var(--tip-y); left: var(--tip-x); display: grid; gap: 5px; width: 250px; padding: 11px 12px; border: 1px solid var(--border-strong); border-radius: 6px; background: var(--text); color: var(--page); box-shadow: 0 12px 30px rgb(0 0 0 / 18%); font-size: 11px; font-weight: 400; line-height: 1.45; white-space: normal; transform: translateX(-50%); }
|
| 120 |
.tooltip strong { font-size: 11px; }
|
| 121 |
.table-caption { display: flex; align-items: center; gap: 6px; margin: 11px 2px 0; color: var(--text-subtle); font-size: 11px; }
|
| 122 |
+
.scheme-note { margin: 7px 2px 0; color: var(--text-subtle); font-size: 11px; }
|
| 123 |
+
.scheme-note > summary { display: flex; align-items: center; gap: 6px; cursor: pointer; list-style: none; }
|
| 124 |
+
.scheme-note > summary::-webkit-details-marker { display: none; }
|
| 125 |
+
.scheme-note > summary::after { content: '\203A'; margin-left: 2px; transition: transform 0.12s; }
|
| 126 |
+
.scheme-note[open] > summary::after { transform: rotate(90deg); }
|
| 127 |
+
.scheme-note > summary:hover { color: var(--text-muted); }
|
| 128 |
+
.scheme-note > summary:focus-visible { outline: 2px solid var(--text); outline-offset: 2px; border-radius: 3px; }
|
| 129 |
+
.scheme-note > p { margin: 8px 0 0; max-width: 78ch; line-height: 1.55; }
|
| 130 |
+
.scheme-note .scheme-source { color: var(--text-subtle); }
|
| 131 |
+
.scheme-note code { font-size: 10px; }
|
| 132 |
+
.scheme-table { margin: 8px 0 0; border-collapse: collapse; font-variant-numeric: tabular-nums; }
|
| 133 |
+
.scheme-table th, .scheme-table td { padding: 3px 12px 3px 0; text-align: right; font-weight: 400; }
|
| 134 |
+
.scheme-table thead th { color: var(--text-subtle); font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em; }
|
| 135 |
+
.scheme-table tbody th { text-align: left; color: var(--text-muted); }
|
| 136 |
.accuracy-chart { margin-top: 28px; padding: 22px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); box-shadow: var(--shadow-sm); }
|
| 137 |
.chart-heading { display: flex; align-items: end; justify-content: space-between; gap: 24px; margin-bottom: 10px; }
|
| 138 |
.chart-heading h3 { margin: 0 0 5px; font-size: 20px; font-weight: 600; letter-spacing: -0.025em; }
|
src/lib/components/LeaderboardTable.svelte
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import { displayScore, metreTaskColumns, sentenceTaskColumns, type ResultRow, type TaskKey } from '$lib/data';
|
| 3 |
import AuthorAccuracyChart from './AuthorAccuracyChart.svelte';
|
| 4 |
import ConfusionMatrices from './ConfusionMatrices.svelte';
|
| 5 |
import InfoTip from './InfoTip.svelte';
|
|
@@ -81,6 +81,21 @@
|
|
| 81 |
</table>
|
| 82 |
</div>
|
| 83 |
<p class="table-caption"><InfoTip title="Scores" text="Values are held-out test macro-F1 percentages. Select a model row to inspect accuracy for each author." /> Scores are test macro-F1 (%). Select a row for per-author accuracy.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
{#if selectedRow}
|
| 85 |
<AuthorAccuracyChart row={selectedRow} {columns} onselectauthor={(author) => selectedAuthor = author} />
|
| 86 |
<ConfusionMatrices row={selectedRow} {columns} {selectedAuthor} />
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import { displayScore, metreTaskColumns, schemeBaselineNote, schemeOnlyBaselines, sentenceTaskColumns, type ResultRow, type TaskKey } from '$lib/data';
|
| 3 |
import AuthorAccuracyChart from './AuthorAccuracyChart.svelte';
|
| 4 |
import ConfusionMatrices from './ConfusionMatrices.svelte';
|
| 5 |
import InfoTip from './InfoTip.svelte';
|
|
|
|
| 81 |
</table>
|
| 82 |
</div>
|
| 83 |
<p class="table-caption"><InfoTip title="Scores" text="Values are held-out test macro-F1 percentages. Select a model row to inspect accuracy for each author." /> Scores are test macro-F1 (%). Select a row for per-author accuracy.</p>
|
| 84 |
+
{#if unit === 'sentence' && schemeOnlyBaselines.length}
|
| 85 |
+
<details class="scheme-note">
|
| 86 |
+
<summary><InfoTip title="Scheme-only floor" text={schemeBaselineNote} /> Scheme-only floor: {schemeOnlyBaselines.map((baseline) => `${displayScore(baseline.scores.sentence1)} / ${displayScore(baseline.scores.sentence10)}`).join(', ')} on 1 / 10 sentences</summary>
|
| 87 |
+
<p>{schemeBaselineNote} These classifiers see annotation markup and no Greek at all, so a model that does not clearly beat them has demonstrated source identification rather than authorship attribution.</p>
|
| 88 |
+
<table class="scheme-table">
|
| 89 |
+
<thead><tr><th>Probe</th>{#each columns as column}<th>{column.shortLabel}</th>{/each}</tr></thead>
|
| 90 |
+
<tbody>
|
| 91 |
+
{#each schemeOnlyBaselines as baseline}
|
| 92 |
+
<tr><th scope="row">{baseline.probe}</th>{#each columns as column}<td>{displayScore(baseline.scores[column.key])}</td>{/each}</tr>
|
| 93 |
+
{/each}
|
| 94 |
+
</tbody>
|
| 95 |
+
</table>
|
| 96 |
+
<p class="scheme-source">Regenerate with <code>scripts/audit_leakage.py</code>; full report in <code>metadata/leakage_report.json</code>. The <code>source_held_out_*</code> configurations evaluate each author on a treebank absent from its training data.</p>
|
| 97 |
+
</details>
|
| 98 |
+
{/if}
|
| 99 |
{#if selectedRow}
|
| 100 |
<AuthorAccuracyChart row={selectedRow} {columns} onselectauthor={(author) => selectedAuthor = author} />
|
| 101 |
<ConfusionMatrices row={selectedRow} {columns} {selectedAuthor} />
|
src/lib/data.ts
CHANGED
|
@@ -802,6 +802,32 @@ export const metreResults: ResultRow[] = [
|
|
| 802 |
}
|
| 803 |
];
|
| 804 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 805 |
export function displayScore(score: number | undefined): string {
|
| 806 |
return score === undefined ? '—' : score.toFixed(2);
|
| 807 |
}
|
|
|
|
| 802 |
}
|
| 803 |
];
|
| 804 |
|
| 805 |
+
/**
|
| 806 |
+
* Scheme-only baselines from `scripts/audit_leakage.py`.
|
| 807 |
+
*
|
| 808 |
+
* Sphragis merges seven annotation projects that do not overlap in authors, so
|
| 809 |
+
* the annotation scheme is itself a partial answer key. These classifiers see
|
| 810 |
+
* annotation markup and no Greek at all: `inventory` is binary presence of each
|
| 811 |
+
* tag, feature and relation; `markup` adds non-lexical rates. A model that does
|
| 812 |
+
* not clearly beat them has demonstrated source identification rather than
|
| 813 |
+
* authorship attribution.
|
| 814 |
+
*
|
| 815 |
+
* Regenerate with:
|
| 816 |
+
* python scripts/audit_leakage.py --data data --metadata metadata
|
| 817 |
+
*/
|
| 818 |
+
export interface SchemeBaseline {
|
| 819 |
+
probe: string;
|
| 820 |
+
scores: Partial<Record<TaskKey, number>>;
|
| 821 |
+
}
|
| 822 |
+
|
| 823 |
+
export const schemeOnlyBaselines: SchemeBaseline[] = [
|
| 824 |
+
{ probe: 'Tag inventory only', scores: { sentence1: 17.95, sentence10: 16.65, sentence50: 28.92, sentence100: 27.27 } },
|
| 825 |
+
{ probe: 'Non-lexical markup', scores: { sentence1: 34.02, sentence10: 65.98, sentence50: 48.91, sentence100: 41.67 } }
|
| 826 |
+
];
|
| 827 |
+
|
| 828 |
+
export const schemeBaselineNote =
|
| 829 |
+
'Sphragis merges seven treebanks that do not overlap in authors, so the annotation scheme partly predicts the author.';
|
| 830 |
+
|
| 831 |
export function displayScore(score: number | undefined): string {
|
| 832 |
return score === undefined ? '—' : score.toFixed(2);
|
| 833 |
}
|