Instructions to use KateMajzel/tokenizer-pl-32k with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use KateMajzel/tokenizer-pl-32k with Transformers:
# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("KateMajzel/tokenizer-pl-32k", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Upload folder using huggingface_hub
Browse files- README.md +130 -0
- tokenizer.json +0 -0
- tokenizer_config.json +9 -0
README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language:
|
| 3 |
+
- pl
|
| 4 |
+
license: mit
|
| 5 |
+
library_name: tokenizers
|
| 6 |
+
tags:
|
| 7 |
+
- polish
|
| 8 |
+
- tokenizer
|
| 9 |
+
- bpe
|
| 10 |
+
- byte-level
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
# tokenizer-pl-32k
|
| 14 |
+
|
| 15 |
+
Byte-level BPE dla języka polskiego. **32 568 pozycji słownika + 200 tokenów
|
| 16 |
+
specjalnych = 32 768** (2¹⁵, wygodne dla kerneli GPU i tensor-parallel).
|
| 17 |
+
|
| 18 |
+
Tokenizer wytrenowany na polskim korpusie i zwalidowany eksperymentalnie w projekcie
|
| 19 |
+
[gollem-pl](https://github.com/KateMajzel/gollem-pl) — kontrolowanej ablacji
|
| 20 |
+
porównującej go z tokenizerem GPT-2 przy identycznym budżecie treningowym.
|
| 21 |
+
|
| 22 |
+
Model wytrenowany z tym tokenizerem:
|
| 23 |
+
[KateMajzel/GoLLeM-45M-PL](https://huggingface.co/KateMajzel/GoLLeM-45M-PL).
|
| 24 |
+
|
| 25 |
+
## Gęstość
|
| 26 |
+
|
| 27 |
+
| | ten tokenizer | GPT-2 |
|
| 28 |
+
|---|---|---|
|
| 29 |
+
| bajty/token — korpus mieszany PL (2,96 GB) | **4,050** | 2,066 |
|
| 30 |
+
| bajty/token — held-out (2,77 MB) | **4,103** | 2,134 |
|
| 31 |
+
| tokenów z 2,96 GB tekstu | 731 mln | 1 434 mln |
|
| 32 |
+
| **gęstość względna** | **1,96×** | 1,00× |
|
| 33 |
+
|
| 34 |
+
Fertility na polskiej prozie: ~1,35 tokena na słowo (5,80 znaku/token). **Uwaga:**
|
| 35 |
+
na realnym korpusie — z URL-ami, liczbami, resztkami formatowania — wychodzi 4,05
|
| 36 |
+
bajtu/token, czyli wyraźnie gorzej. Fertility należy podawać z korpusu, nie
|
| 37 |
+
z wyselekcjonowanych zdań.
|
| 38 |
+
|
| 39 |
+
Przykład różnicy w praktyce — słowo `niejednoznaczny` to **3 tokeny** tutaj i **9**
|
| 40 |
+
u GPT-2.
|
| 41 |
+
|
| 42 |
+
## Właściwości
|
| 43 |
+
|
| 44 |
+
| | |
|
| 45 |
+
|---|---|
|
| 46 |
+
| typ | byte-level BPE (`tokenizers`, format `tokenizer.json`) |
|
| 47 |
+
| normalizacja | brak — round-trip bezstratny |
|
| 48 |
+
| pre-tokenizer | w stylu GPT-4: `Isolated` + `ByteLevel(use_regex=false, add_prefix_space=false)` |
|
| 49 |
+
| cyfry | cięte po maks. 3 (`\p{N}{1,3}`) |
|
| 50 |
+
| `byte_fallback` | nie jest potrzebny (byte-level nie może wyprodukować UNK) |
|
| 51 |
+
| tokeny z diakrytykami | 27,9% słownika |
|
| 52 |
+
| tokeny nieosiągalne przez merge | 0 (256 bajtów + 32 312 merge'ów = 32 568) |
|
| 53 |
+
| tokeny „same białe znaki" dłuższe niż 2 zn. | 18 |
|
| 54 |
+
| tokeny czysto liczbowe | 409 |
|
| 55 |
+
|
| 56 |
+
Round-trip zweryfikowany m.in. na `Zażółć gęślą jaźń — «cytat» … 😀\ttab`
|
| 57 |
+
i wielokrotnych spacjach oraz znakach nowej linii.
|
| 58 |
+
|
| 59 |
+
## Tokeny specjalne
|
| 60 |
+
|
| 61 |
+
`<|endoftext|>` (32568), `<|begin_of_text|>`, `<|pad|>`, `<|unk|>`, tokeny czatowe,
|
| 62 |
+
FIM i tool-call oraz 186 pozycji `<|reserved_N|>` — zapas na przyszłe rozszerzenia
|
| 63 |
+
bez zmiany kształtu tablicy embeddingów.
|
| 64 |
+
|
| 65 |
+
**Ważne przy trenowaniu od zera:** jeśli korzystasz tylko z `<|endoftext|>` jako
|
| 66 |
+
separatora dokumentów, pozostałe tokeny specjalne nigdy nie dostaną gradientu.
|
| 67 |
+
Warto je wtedy zablokować przy generowaniu (`bad_words_ids`) i ustawić
|
| 68 |
+
`bos_token_id = eos_token_id = 32568`.
|
| 69 |
+
|
| 70 |
+
## Użycie
|
| 71 |
+
|
| 72 |
+
```python
|
| 73 |
+
from tokenizers import Tokenizer
|
| 74 |
+
|
| 75 |
+
tok = Tokenizer.from_pretrained("KateMajzel/tokenizer-pl-32k")
|
| 76 |
+
ids = tok.encode("Zażółć gęślą jaźń").ids
|
| 77 |
+
print(len(ids), tok.decode(ids))
|
| 78 |
+
```
|
| 79 |
+
|
| 80 |
+
```python
|
| 81 |
+
from transformers import AutoTokenizer
|
| 82 |
+
|
| 83 |
+
tok = AutoTokenizer.from_pretrained("KateMajzel/tokenizer-pl-32k")
|
| 84 |
+
```
|
| 85 |
+
|
| 86 |
+
## Co pokazał eksperyment
|
| 87 |
+
|
| 88 |
+
Ablacja na modelach 42–51 M parametrów (3 GB korpusu, 3 ziarna losowe) wykazała:
|
| 89 |
+
|
| 90 |
+
- **Przy równym budżecie tekstu tokenizer nie różnicuje jakości modelu.** Cztery
|
| 91 |
+
niezależne pomiary (BPB, PolEmo2, 8Tags, prywatny held-out) nie wykazały istotnej
|
| 92 |
+
różnicy wobec tokenizera GPT-2, a ich kierunki były niespójne. Różnica BPB między
|
| 93 |
+
dwoma ziarnami tego samego modelu (0,0186) przewyższała różnicę między tokenizerami
|
| 94 |
+
(0,0124).
|
| 95 |
+
- **Przy równym budżecie obliczeniowym przewaga jest jednoznaczna** — 5,30% BPB
|
| 96 |
+
(6,4 odchylenia) na korzyść gęstszego tokenizera.
|
| 97 |
+
- **Zysk leży w koszcie:** ten sam poziom BPB osiągnięty w 2,5× krótszym czasie,
|
| 98 |
+
przy 21% mniejszej liczbie parametrów.
|
| 99 |
+
|
| 100 |
+
Ten sam wniosek uzyskał niezależnie zespół Bielika v3 PL na skali 11B
|
| 101 |
+
([arXiv 2604.10799](https://arxiv.org/abs/2604.10799)): wymiana tokenizera na
|
| 102 |
+
dedykowany zachowała jakość i niemal podwoiła gęstość reprezentacji.
|
| 103 |
+
|
| 104 |
+
## Ograniczenia
|
| 105 |
+
|
| 106 |
+
- **Angielski i kod tokenizują się gorzej niż w GPT-2** — 3,0 i 2,4 znaku/token wobec
|
| 107 |
+
~4,0. To zamierzony kompromis, ale wyklucza użycie do zbiorów wielojęzycznych.
|
| 108 |
+
- **Korpus treningowy przechylony w stronę tekstów administracyjno-prasowych** —
|
| 109 |
+
widać to w najdłuższych tokenach (`Ġniepełnosprawności`, `Ġzagospodarowania`).
|
| 110 |
+
Przy modelu, który ma brzmieć potocznie, warto to uwzględnić w miksie danych.
|
| 111 |
+
- **Reguła apostrofów w pre-tokenizerze jest angielska** (`'(?i:[sdmt]|ll|ve|re)`) —
|
| 112 |
+
na polskim martwa, ale nieszkodliwa.
|
| 113 |
+
- **Brak `post_processor`** — BOS/EOS nie są dodawane automatycznie, offsety nie są
|
| 114 |
+
trymowane. Bez znaczenia dla modelowania języka, istotne przy NER/QA.
|
| 115 |
+
- **Koszt embeddingu.** Przy `d_model = 512` tablica embeddingów to 16,8 M parametrów.
|
| 116 |
+
W modelu 42,5 M stanowi to 40% — warto to policzyć, zanim dobierze się rozmiar
|
| 117 |
+
słownika do małego modelu.
|
| 118 |
+
|
| 119 |
+
## Licencja i cytowanie
|
| 120 |
+
|
| 121 |
+
MIT. Metodologia i kod: https://github.com/KateMajzel/gollem-pl
|
| 122 |
+
|
| 123 |
+
```bibtex
|
| 124 |
+
@misc{tokenizerpl32k,
|
| 125 |
+
title = {tokenizer-pl-32k: polski tokenizer BPE i jego ablacja},
|
| 126 |
+
author = {Majzel-Pośpiech, Katarzyna},
|
| 127 |
+
year = {2026},
|
| 128 |
+
url = {https://huggingface.co/KateMajzel/tokenizer-pl-32k}
|
| 129 |
+
}
|
| 130 |
+
```
|
tokenizer.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"tokenizer_class": "PreTrainedTokenizerFast",
|
| 3 |
+
"model_max_length": 1024,
|
| 4 |
+
"bos_token": "<|endoftext|>",
|
| 5 |
+
"eos_token": "<|endoftext|>",
|
| 6 |
+
"pad_token": "<|pad|>",
|
| 7 |
+
"unk_token": null,
|
| 8 |
+
"clean_up_tokenization_spaces": false
|
| 9 |
+
}
|