English by default with PL switch
Browse files- README.md +4 -3
- index.html +121 -3
README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
emoji: 📈
|
| 4 |
colorFrom: green
|
| 5 |
colorTo: blue
|
|
@@ -9,8 +9,9 @@ license: apache-2.0
|
|
| 9 |
short_description: Polish 1B LM trained from scratch, version by version
|
| 10 |
---
|
| 11 |
|
| 12 |
-
# Misja – Slayer 1B
|
| 13 |
|
| 14 |
Arkadiusz Słota – Fabryka AI (SlayerLab). Polish ~1B-parameter base language model trained from scratch and continued
|
| 15 |
-
version by version; versions, checkpoints, evaluation history and links.
|
|
|
|
| 16 |
and `scores-history.csv` (measured values only).
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Mission – Slayer 1B
|
| 3 |
emoji: 📈
|
| 4 |
colorFrom: green
|
| 5 |
colorTo: blue
|
|
|
|
| 9 |
short_description: Polish 1B LM trained from scratch, version by version
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Mission – Slayer 1B (Misja – Slayer 1B)
|
| 13 |
|
| 14 |
Arkadiusz Słota – Fabryka AI (SlayerLab). Polish ~1B-parameter base language model trained from scratch and continued
|
| 15 |
+
version by version; versions, checkpoints, evaluation history and links. English by default, Polish via the PL switch
|
| 16 |
+
(or `?lang=pl`). Numbers on the page come from the model cards
|
| 17 |
and `scores-history.csv` (measured values only).
|
index.html
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
-
<html lang="
|
| 3 |
<head>
|
| 4 |
<meta charset="utf-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
-
<title>
|
| 7 |
<style>
|
| 8 |
:root { --bg:#0f1115; --card:#171a21; --line:#2a2f3a; --fg:#e8eaee; --muted:#9aa3b2; --acc:#4fb477; --acc2:#e0565b; --acc3:#4c8bd6; }
|
| 9 |
* { box-sizing:border-box; }
|
|
@@ -38,10 +38,111 @@
|
|
| 38 |
.wrap { overflow-x:auto; }
|
| 39 |
footer { margin-top:56px; color:var(--muted); font-size:.9rem; border-top:1px solid var(--line); padding-top:16px; }
|
| 40 |
a { color:var(--acc3); }
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
</style>
|
| 42 |
</head>
|
| 43 |
-
<body>
|
|
|
|
| 44 |
<main>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
<header>
|
| 46 |
<h1>Misja – Slayer 1B</h1>
|
| 47 |
<p class="by">Arkadiusz Słota – Fabryka AI (SlayerLab)</p>
|
|
@@ -135,6 +236,23 @@
|
|
| 135 |
</section>
|
| 136 |
|
| 137 |
<footer>Arkadiusz Słota – Fabryka AI (SlayerLab) · modele: <a href="https://huggingface.co/SlayerLab">huggingface.co/SlayerLab</a></footer>
|
|
|
|
| 138 |
</main>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
</body>
|
| 140 |
</html>
|
|
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
<head>
|
| 4 |
<meta charset="utf-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
+
<title>Mission – Slayer 1B</title>
|
| 7 |
<style>
|
| 8 |
:root { --bg:#0f1115; --card:#171a21; --line:#2a2f3a; --fg:#e8eaee; --muted:#9aa3b2; --acc:#4fb477; --acc2:#e0565b; --acc3:#4c8bd6; }
|
| 9 |
* { box-sizing:border-box; }
|
|
|
|
| 38 |
.wrap { overflow-x:auto; }
|
| 39 |
footer { margin-top:56px; color:var(--muted); font-size:.9rem; border-top:1px solid var(--line); padding-top:16px; }
|
| 40 |
a { color:var(--acc3); }
|
| 41 |
+
.lang { position:fixed; top:14px; right:16px; display:flex; gap:4px; background:var(--card); border:1px solid var(--line); border-radius:999px; padding:3px; z-index:10; }
|
| 42 |
+
.lang button { background:none; border:0; color:var(--muted); font:600 .85rem system-ui,sans-serif; padding:4px 10px; border-radius:999px; cursor:pointer; }
|
| 43 |
+
.lang button[aria-pressed="true"] { background:var(--line); color:var(--fg); }
|
| 44 |
+
body[data-lang="en"] .l-pl, body[data-lang="pl"] .l-en { display:none; }
|
| 45 |
</style>
|
| 46 |
</head>
|
| 47 |
+
<body data-lang="en">
|
| 48 |
+
<nav class="lang" aria-label="Language"><button type="button" data-set="en" aria-pressed="true">EN</button><button type="button" data-set="pl" aria-pressed="false">PL</button></nav>
|
| 49 |
<main>
|
| 50 |
+
<div class="l-en" lang="en">
|
| 51 |
+
<header>
|
| 52 |
+
<h1>Mission – Slayer 1B</h1>
|
| 53 |
+
<p class="by">Arkadiusz Słota – Fabryka AI (SlayerLab)</p>
|
| 54 |
+
<p class="lead">We are building a Polish language model of ~1 billion parameters from scratch and improving it version by
|
| 55 |
+
version — each version continues training from a checkpoint of the previous one taken before its final learning-rate
|
| 56 |
+
decay, on new data. All versions, checkpoints and results are public.</p>
|
| 57 |
+
<div class="pills">
|
| 58 |
+
<span class="pill"><b>1,073,912,851</b> parameters</span>
|
| 59 |
+
<span class="pill">tokenizer <b>32,768</b>, Polish</span>
|
| 60 |
+
<span class="pill">context <b>4096</b> tokens</span>
|
| 61 |
+
<span class="pill">data: ~82% Polish, ~18% English</span>
|
| 62 |
+
<span class="pill">weights license <b>Apache-2.0</b></span>
|
| 63 |
+
</div>
|
| 64 |
+
</header>
|
| 65 |
+
|
| 66 |
+
<section>
|
| 67 |
+
<h2>Versions</h2>
|
| 68 |
+
<div class="cards">
|
| 69 |
+
<div class="card">
|
| 70 |
+
<h3>Slayer1B 1.00 <span class="tag dec">decayed</span></h3>
|
| 71 |
+
<div class="meta">1.5 B training tokens</div>
|
| 72 |
+
<a href="https://huggingface.co/SlayerLab/Slayer1B-1.00">model</a> ·
|
| 73 |
+
<a href="https://huggingface.co/SlayerLab/Slayer1B-1.00-checkpoints">checkpoints</a> ·
|
| 74 |
+
<a href="https://track.fabryka.ai/run/48744ed2-3155-4294-b899-a6fda1f851da">run</a>
|
| 75 |
+
</div>
|
| 76 |
+
<div class="card">
|
| 77 |
+
<h3>Slayer1B 1.01 <span class="tag dec">decayed</span></h3>
|
| 78 |
+
<div class="meta">3.0 B tokens · continued from 1.00</div>
|
| 79 |
+
<a href="https://huggingface.co/SlayerLab/Slayer1B-1.01">model</a> ·
|
| 80 |
+
<a href="https://huggingface.co/SlayerLab/Slayer1B-1.01-checkpoints">checkpoints</a> ·
|
| 81 |
+
<a href="https://track.fabryka.ai/run/4934429a-d393-42e0-8aac-03eae6b71ff7">run</a>
|
| 82 |
+
</div>
|
| 83 |
+
<div class="card">
|
| 84 |
+
<h3>Slayer1B 1.02 <span class="tag const">constant LR</span></h3>
|
| 85 |
+
<div class="meta">6.0 B tokens · continued from 1.01</div>
|
| 86 |
+
<a href="https://huggingface.co/SlayerLab/Slayer1B-1.02">model</a> ·
|
| 87 |
+
<a href="https://huggingface.co/SlayerLab/Slayer1B-1.02-checkpoints">checkpoints</a> ·
|
| 88 |
+
<a href="https://track.fabryka.ai/run/21ae1234-82c2-42b7-887b-cbcc69901ae1">run</a>
|
| 89 |
+
</div>
|
| 90 |
+
</div>
|
| 91 |
+
</section>
|
| 92 |
+
|
| 93 |
+
<section>
|
| 94 |
+
<h2>Results</h2>
|
| 95 |
+
<div class="wrap">
|
| 96 |
+
<table>
|
| 97 |
+
<tr><th>test</th><th>1.00</th><th>1.01</th><th>1.02</th></tr>
|
| 98 |
+
<tr><td>training tokens</td><td>1.5 B</td><td>3.0 B</td><td>6.0 B</td></tr>
|
| 99 |
+
<tr><td>ARC-Easy (EN), %</td><td>42.89</td><td>47.98</td><td class="best">48.99</td></tr>
|
| 100 |
+
<tr><td>BLiMP (EN, grammar), %</td><td>71.51</td><td>73.63</td><td class="best">74.71</td></tr>
|
| 101 |
+
<tr><td>WikiText-2, byte perplexity ↓</td><td>2.5857</td><td>2.4230</td><td class="best">2.3735</td></tr>
|
| 102 |
+
<tr><td>MultiBLiMP (PL, grammar), %</td><td>97.89</td><td>98.29</td><td class="best">98.38</td></tr>
|
| 103 |
+
<tr><td>ARC-Easy-PL, %</td><td>36.91</td><td>40.36</td><td class="best">41.84</td></tr>
|
| 104 |
+
</table>
|
| 105 |
+
</div>
|
| 106 |
+
<p class="note">One instrument for all versions (leaderboard protocol of
|
| 107 |
+
<a href="https://track.fabryka.ai/models">track.fabryka.ai/models</a>, zero-shot). Item-by-item comparison 1.01 → 1.02:
|
| 108 |
+
BLiMP +1.08 pp (95% interval [+0.78; +1.37]); on the other tests the direction is positive but the difference is
|
| 109 |
+
unresolved. 1.00 and 1.01 ended with a learning-rate decay, 1.02 did not — so 1.02 vs 1.01 is not a clean comparison.</p>
|
| 110 |
+
</section>
|
| 111 |
+
|
| 112 |
+
<section>
|
| 113 |
+
<h2>How the scores grow during training</h2>
|
| 114 |
+
<figure><img src="scores-history.png" alt="Evaluation history of Slayer1B 1.00, 1.01 and 1.02 versus training tokens"></figure>
|
| 115 |
+
<p class="note">Measured values only, no fits: one checkpoint every 150 steps. Data: <a href="scores-history.csv">scores-history.csv</a>.</p>
|
| 116 |
+
</section>
|
| 117 |
+
|
| 118 |
+
<section>
|
| 119 |
+
<h2>How we do it</h2>
|
| 120 |
+
<ol class="steps">
|
| 121 |
+
<li><b>From scratch.</b> A transformer (20 layers, width 2048), our own Polish tokenizer, Polish data with an English
|
| 122 |
+
minority (<a href="https://huggingface.co/datasets/SlayerLab/slayer-pl-8x3b">slayer-pl-8x3b</a>).</li>
|
| 123 |
+
<li><b>Continued training instead of a new run.</b> Each version starts from a checkpoint of the previous one —
|
| 124 |
+
taken before its final learning-rate decay — and gets a new portion of data the model has not seen yet.</li>
|
| 125 |
+
<li><b>From 1.02 on, no decay along the way.</b> We keep training on the whole prepared corpus (~24 B tokens) and
|
| 126 |
+
apply the final decay once, at the end.</li>
|
| 127 |
+
<li><b>We verify everything.</b> Every checkpoint has a SHA-256 sum recorded off the training machine; files are
|
| 128 |
+
downloaded back and compared with it. From version 1.01 on, a loss forecast is written down before each run and
|
| 129 |
+
evaluated afterwards.</li>
|
| 130 |
+
</ol>
|
| 131 |
+
<p class="note">Technical report:
|
| 132 |
+
<a href="https://github.com/slayerlabs/Fabryka-AI-Notes/tree/main/papers/slayerlabs/2026-10-23_slayer1b-continuation">Slayer1B: Continuing a Polish-Dominant Base Model</a>.</p>
|
| 133 |
+
</section>
|
| 134 |
+
|
| 135 |
+
<section>
|
| 136 |
+
<h2>What's next</h2>
|
| 137 |
+
<p><b>Slayer1B 1.03</b> — another 1.5 B tokens (7.5 B in total), continued from 1.02 on our own 4×RTX 4090 cards.
|
| 138 |
+
Live progress on <a href="https://track.fabryka.ai/models">track.fabryka.ai</a>.</p>
|
| 139 |
+
<p class="note">These are base models: they predict the continuation of a text, they were not tuned for chat or for
|
| 140 |
+
following instructions, and they can be wrong.</p>
|
| 141 |
+
</section>
|
| 142 |
+
|
| 143 |
+
<footer>Arkadiusz Słota – Fabryka AI (SlayerLab) · models: <a href="https://huggingface.co/SlayerLab">huggingface.co/SlayerLab</a></footer>
|
| 144 |
+
</div>
|
| 145 |
+
<div class="l-pl" lang="pl">
|
| 146 |
<header>
|
| 147 |
<h1>Misja – Slayer 1B</h1>
|
| 148 |
<p class="by">Arkadiusz Słota – Fabryka AI (SlayerLab)</p>
|
|
|
|
| 236 |
</section>
|
| 237 |
|
| 238 |
<footer>Arkadiusz Słota – Fabryka AI (SlayerLab) · modele: <a href="https://huggingface.co/SlayerLab">huggingface.co/SlayerLab</a></footer>
|
| 239 |
+
</div>
|
| 240 |
</main>
|
| 241 |
+
<script>
|
| 242 |
+
(function () {
|
| 243 |
+
var q = new URLSearchParams(location.search).get("lang");
|
| 244 |
+
var saved = null; try { saved = localStorage.getItem("slayer-lang"); } catch (e) {}
|
| 245 |
+
function set(l) {
|
| 246 |
+
if (l !== "pl") l = "en";
|
| 247 |
+
document.body.setAttribute("data-lang", l);
|
| 248 |
+
document.documentElement.lang = l;
|
| 249 |
+
document.title = l === "pl" ? "Misja – Slayer 1B" : "Mission – Slayer 1B";
|
| 250 |
+
document.querySelectorAll(".lang button").forEach(function (b) { b.setAttribute("aria-pressed", String(b.dataset.set === l)); });
|
| 251 |
+
try { localStorage.setItem("slayer-lang", l); } catch (e) {}
|
| 252 |
+
}
|
| 253 |
+
document.querySelectorAll(".lang button").forEach(function (b) { b.addEventListener("click", function () { set(b.dataset.set); }); });
|
| 254 |
+
set(q || saved || "en");
|
| 255 |
+
})();
|
| 256 |
+
</script>
|
| 257 |
</body>
|
| 258 |
</html>
|