Harness ewaluacyjny projektu Slayer (otwarty polski LLM, baza Qwen3.5-27B). Jedno miejsce prawdy o tym, czym i jak mierzymy model: skrypty, karty benchmarków i zasady czystości. Karty służą do debugowania wyników i podejmowania decyzji treningowych (SFT / CPT / GRPO / nic).
Wyniki (JSON-y) żyją w głównym repo Slayera w results/; tu trzymamy kod i dokumentację.
| Benchmark | Karta | Skrypt | Metryka decyzyjna | Train policy |
|---|---|---|---|---|
| LLMzSzŁ | cards/llmzszl.md | bench_llmzszl_likelihood.py, bench_llmzszl_generate.py, bench_mcq.py | accuracy | eval_only |
| PES | cards/pes.md | bench_mcq.py pes | accuracy | eval_only |
| Belebele PL/EN | cards/belebele.md | bench_mcq.py belebele / belebele_en | accuracy | eval_only |
| PoQuAD | cards/poquad.md | bench_poquad.py | judged accuracy (+ SQuAD-F1) | eval_only |
| FLORES-200 PL↔EN | cards/flores.md | bench_flores.py | chrF | eval_only |
| KLEJ (10 zadań) | cards/klej.md | klej_eval.py | macro accuracy (per-task!) | train split: tak, test: eval_only |
| PolKnowledge | cards/polknowledge.md | polknowledge.py | accuracy per domena | eval_only (własny held-out) |
| Styl PL | cards/style.md | eval_style.py + pl_quality.py + rejudge_style_openjudge.py | win-rate vs base, naturalność 1-5 | eval_only (held-out prompts) |
| Regresja EN (MMLU, ARC, GSM8K) | cards/en-regression.md | bench_mcq.py, bench_gsm8k.py | accuracy (czytamy Δ vs base) | eval_only |
| HumanEval | cards/humaneval.md | humaneval_hf.py | pass@1 (tylko Δ, nie absolut) | eval_only |
Pełna mapa kompetencja → benchmark → metoda (gate'y v2): docs/GATES.md. Taksonomia i plan zadań ewaluacyjnych: docs/TASKS_BENCHMARKS.md.
--decon-files) w pipeline danych."Zwycięstwo" v2 na KLEJ okazało się artefaktem trenowania na train splitach tych samych zadań (belebele +0 pp tam, gdzie nie było train splitu, vs psc +26.5 tam, gdzie był). Wniosek wpisany w karty: chwalimy się wyłącznie wynikami held-out (linia v3, claim 5-shot), a każdy wynik na zadaniu, którego train split był w miksie, oznaczamy jako trenowany.
Większość skryptów: python3 scripts/<skrypt> --help albo docstring na górze pliku.
Dwa backendy:
bench_mcq.py, bench_poquad.py, bench_flores.py, bench_gsm8k.py--adapter LoRA): bench_llmzszl_likelihood.py,
bench_llmzszl_generate.py, klej_eval.py, humaneval_hf.py, eval_hf_mcq.py, eval_style.pyPrzykład pełnego gate'u po treningu:
# LLMzSzŁ likelihood, apples-to-apples z baseline n=400 seed=42
python3 scripts/bench_llmzszl_likelihood.py --model Qwen/Qwen3.5-27B --adapter <ckpt> --n 400 --seed 42
# KLEJ 10 zadań, test split, greedy
python3 scripts/klej_eval.py --adapter <ckpt> --n 300 --seed 42
# regresja EN + kod
python3 scripts/bench_gsm8k.py 600 42
python3 scripts/humaneval_hf.py --model Qwen/Qwen3.5-27B --adapter <ckpt>
Żaden dataset nie jest uzasadniony przez "więcej polskich danych" samo w sobie; każdy musi linkować do konkretnego failure mode z benchmarku.
5 commits
Python
100.0%
Harness ewaluacyjny projektu Slayer (otwarty polski LLM, baza Qwen3.5-27B). Jedno miejsce prawdy o tym, czym i jak mierzymy model: skrypty, karty benchmarków i zasady czystości. Karty służą do debugowania wyników i podejmowania decyzji treningowych (SFT / CPT / GRPO / nic).
Wyniki (JSON-y) żyją w głównym repo Slayera w results/; tu trzymamy kod i dokumentację.
| Benchmark | Karta | Skrypt | Metryka decyzyjna | Train policy |
|---|---|---|---|---|
| LLMzSzŁ | cards/llmzszl.md | bench_llmzszl_likelihood.py, bench_llmzszl_generate.py, bench_mcq.py | accuracy | eval_only |
| PES | cards/pes.md | bench_mcq.py pes | accuracy | eval_only |
| Belebele PL/EN | cards/belebele.md | bench_mcq.py belebele / belebele_en | accuracy | eval_only |
| PoQuAD | cards/poquad.md | bench_poquad.py | judged accuracy (+ SQuAD-F1) | eval_only |
| FLORES-200 PL↔EN | cards/flores.md | bench_flores.py | chrF | eval_only |
| KLEJ (10 zadań) | cards/klej.md | klej_eval.py | macro accuracy (per-task!) | train split: tak, test: eval_only |
| PolKnowledge | cards/polknowledge.md | polknowledge.py | accuracy per domena | eval_only (własny held-out) |
| Styl PL | cards/style.md | eval_style.py + pl_quality.py + rejudge_style_openjudge.py | win-rate vs base, naturalność 1-5 | eval_only (held-out prompts) |
| Regresja EN (MMLU, ARC, GSM8K) | cards/en-regression.md | bench_mcq.py, bench_gsm8k.py | accuracy (czytamy Δ vs base) | eval_only |
| HumanEval | cards/humaneval.md | humaneval_hf.py | pass@1 (tylko Δ, nie absolut) | eval_only |
Pełna mapa kompetencja → benchmark → metoda (gate'y v2): docs/GATES.md. Taksonomia i plan zadań ewaluacyjnych: docs/TASKS_BENCHMARKS.md.
--decon-files) w pipeline danych."Zwycięstwo" v2 na KLEJ okazało się artefaktem trenowania na train splitach tych samych zadań (belebele +0 pp tam, gdzie nie było train splitu, vs psc +26.5 tam, gdzie był). Wniosek wpisany w karty: chwalimy się wyłącznie wynikami held-out (linia v3, claim 5-shot), a każdy wynik na zadaniu, którego train split był w miksie, oznaczamy jako trenowany.
Większość skryptów: python3 scripts/<skrypt> --help albo docstring na górze pliku.
Dwa backendy:
bench_mcq.py, bench_poquad.py, bench_flores.py, bench_gsm8k.py--adapter LoRA): bench_llmzszl_likelihood.py,
bench_llmzszl_generate.py, klej_eval.py, humaneval_hf.py, eval_hf_mcq.py, eval_style.pyPrzykład pełnego gate'u po treningu:
# LLMzSzŁ likelihood, apples-to-apples z baseline n=400 seed=42
python3 scripts/bench_llmzszl_likelihood.py --model Qwen/Qwen3.5-27B --adapter <ckpt> --n 400 --seed 42
# KLEJ 10 zadań, test split, greedy
python3 scripts/klej_eval.py --adapter <ckpt> --n 300 --seed 42
# regresja EN + kod
python3 scripts/bench_gsm8k.py 600 42
python3 scripts/humaneval_hf.py --model Qwen/Qwen3.5-27B --adapter <ckpt>
Żaden dataset nie jest uzasadniony przez "więcej polskich danych" samo w sobie; każdy musi linkować do konkretnego failure mode z benchmarku.
5 commits
Python
100.0%