Aggregator: paired-t hardcoded a baseline/masha_ab/masha_abc #24

Open
opened 2026-05-14 02:13:45 -03:00 by navigator · 0 comments
Owner

TL;DR

O aggregator do run_ablation_word.py gera report.md automático com seção "Paired analysis" que só sabe comparar 3 kinds: baseline, masha_ab e masha_abc. Quando o sweep usa kinds novos (masha_v3, baseline_deepseek, baseline_llama, baseline_bpe, ...), o paired-t deles não aparece no relatório auto. Toda análise estatística sai sendo computada à mão em scripts ad-hoc.

O problema concreto

Reports recentes (experiments/v3_mixed_n6extra/report.md, experiments/delta_n6/report.md, experiments/epsilon_n6/report.md) mostram:

## Final-checkpoint held-out PPL

| seed | baseline | masha_ab | masha_abc | Δ(ab-base) | Δ(abc-base) | Δ(abc-ab) |
|---|---:|---:|---:|---:|---:|---:|
| 41 | 1399.6 | nan | nan | +nan | +nan | +nan |

nan porque o sweep usou --kinds baseline_bpe baseline_deepseek_bpe baseline_llama_bpe (sem masha_ab/abc). O aggregator continua procurando as colunas hardcoded.

A tabela "Extended evaluation (Tier-1 rig)" funciona — ela é dinâmica (itera sobre kinds presentes no by_kind). Mas a seção "Paired analysis" tem código separado que assume os 3 nomes fixos.

Onde mexer

scripts/run_ablation_word.py aggregator (procurar por strings tipo masha_ab, masha_abc em contexto não-template):

  • Aggregator emite "Δ ab − baseline", "Δ abc − baseline", "Δ abc − ab" assumindo as 3 colunas.
  • Solução: para cada PAR (kind_X, kind_Y) onde ambos têm dados em by_kind, emitir Δ X − Y. Skip pares sem dados.
  • Pelo menos garantir que Δ <every_kind> − baseline aparece quando baseline está presente.

Como contornamos por enquanto

Cada sweep gera seu doc humano em docs/<PHASE>_RESULTS.md com paired-t computado via script Python ad-hoc (lendo experiments/<sweep>/extended.parquet). Funciona mas é trabalho manual repetido.

Critério de aceite

  • Aggregator pega selected_kinds (do args.kinds ou default) e emite paired-t pra cada par (kind, baseline) que tem dados.
  • Para sweeps sem baseline na seleção, escolher um kind de referência ou skip a seção paired (mensagem clara).
  • Reports auto-gerados de Phase DELTA e EPSILON passam a ter tabelas paired-t úteis sem trabalho manual.

Não-bloqueante

A claim publicável atual NÃO depende do aggregator — os números vêm do extended.parquet direto. Mas pra qualidade de DX (e pros leitores externos lendo os reports), valeria limpar.

Referências

  • scripts/run_ablation_word.py — função main() pós-evals, geração de report.md
  • docs/V3_MIXED_N6_RESULTS.md — exemplo de paired-t feito manualmente porque o aggregator não pega masha_v3
  • docs/PHASE_DELTA_RESULTS.md — idem pros DeepSeek/Llama
## TL;DR O aggregator do `run_ablation_word.py` gera `report.md` automático com seção "Paired analysis" que **só sabe** comparar 3 kinds: baseline, masha_ab e masha_abc. Quando o sweep usa kinds novos (masha_v3, baseline_deepseek, baseline_llama, baseline_bpe, ...), o paired-t deles **não aparece no relatório auto**. Toda análise estatística sai sendo computada à mão em scripts ad-hoc. ## O problema concreto Reports recentes (`experiments/v3_mixed_n6extra/report.md`, `experiments/delta_n6/report.md`, `experiments/epsilon_n6/report.md`) mostram: ``` ## Final-checkpoint held-out PPL | seed | baseline | masha_ab | masha_abc | Δ(ab-base) | Δ(abc-base) | Δ(abc-ab) | |---|---:|---:|---:|---:|---:|---:| | 41 | 1399.6 | nan | nan | +nan | +nan | +nan | ``` `nan` porque o sweep usou `--kinds baseline_bpe baseline_deepseek_bpe baseline_llama_bpe` (sem masha_ab/abc). O aggregator continua procurando as colunas hardcoded. A tabela "Extended evaluation (Tier-1 rig)" funciona — ela é dinâmica (itera sobre kinds presentes no by_kind). Mas a seção "Paired analysis" tem código separado que assume os 3 nomes fixos. ## Onde mexer `scripts/run_ablation_word.py` aggregator (procurar por strings tipo `masha_ab`, `masha_abc` em contexto não-template): - Aggregator emite "Δ ab − baseline", "Δ abc − baseline", "Δ abc − ab" assumindo as 3 colunas. - Solução: para cada PAR (kind_X, kind_Y) onde ambos têm dados em `by_kind`, emitir Δ X − Y. Skip pares sem dados. - Pelo menos garantir que `Δ <every_kind> − baseline` aparece quando baseline está presente. ## Como contornamos por enquanto Cada sweep gera seu doc humano em `docs/<PHASE>_RESULTS.md` com paired-t computado via script Python ad-hoc (lendo `experiments/<sweep>/extended.parquet`). Funciona mas é trabalho manual repetido. ## Critério de aceite - Aggregator pega `selected_kinds` (do args.kinds ou default) e emite paired-t pra cada par (kind, baseline) que tem dados. - Para sweeps sem `baseline` na seleção, escolher um kind de referência ou skip a seção paired (mensagem clara). - Reports auto-gerados de Phase DELTA e EPSILON passam a ter tabelas paired-t úteis sem trabalho manual. ## Não-bloqueante A claim publicável atual NÃO depende do aggregator — os números vêm do extended.parquet direto. Mas pra qualidade de DX (e pros leitores externos lendo os reports), valeria limpar. ## Referências - `scripts/run_ablation_word.py` — função main() pós-evals, geração de report.md - `docs/V3_MIXED_N6_RESULTS.md` — exemplo de paired-t feito manualmente porque o aggregator não pega masha_v3 - `docs/PHASE_DELTA_RESULTS.md` — idem pros DeepSeek/Llama
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pop/MASHA#24
No description provided.