--- language: - kab - ber license: apache-2.0 tags: - tokenizer - bpe - kabyle - taqbaylit - tamazight - nlp library_name: tokenizers pipeline_tag: text-generation --- # Kabyle BPE Tokenizer v2 A clean, production-ready BPE tokenizer for the Kabyle language (Taqbaylit), built from scratch with proper Unicode handling and a CLDR-grounded alphabet. ## Overview | Property | Value | |---|---| | Language | Kabyle / Taqbaylit (`kab`) | | Script | Latin (Mammeri orthography) | | Algorithm | Byte-Pair Encoding (BPE) | | Vocab size | 48,000 | | Normalizer | NFC + Lowercase | | Pre-tokenizer | Metaspace + Punctuation split | | Model max length | 512 | ## Usage ```python from transformers import AutoTokenizer tok = AutoTokenizer.from_pretrained("boffire/Kabyle-BPE-Tokenizer-v2") text = "Taqbaylit d tutlayt tameẓẓyant yellan deg tmurt n Leqbayel." ids = tok.encode(text) tokens = tok.convert_ids_to_tokens(ids) print(tokens) # ['▁taqbaylit', '▁d', '▁tutlayt', '▁tameẓẓyant', '▁yellan', # '▁deg', '▁tmurt', '▁n', '▁leqbayel', '.'] ``` ## Design Decisions ### 1. NFC Unicode Normalization Kabyle special characters (ẓ, ɣ, ɛ, ḥ…) can be encoded in two ways in UTF-8: as a single precomposed codepoint, or as a base character + combining diacritic. Without normalization, the same word can produce different token sequences depending on how the source file was saved. NFC normalization is applied before tokenization to guarantee consistency. ### 2. Metaspace Pre-tokenizer Instead of ByteLevel BPE (used by GPT-2-based tokenizers), this tokenizer uses a Metaspace pre-tokenizer. Word-initial spaces are marked as `▁`, and all Unicode characters — including Kabyle-specific extended Latin letters — remain as single atomic units. This eliminates the byte-level garbling (`áºĵ` for `ẓ`, `ÉĽ` for `ɛ`) seen in byte-level tokenizers. ### 3. Hyphen Preserved as Morphological Marker In Kabyle, the hyphen (`-`) is a morphological connector, not punctuation. It marks clitic attachment (verbal object clitics: `yewwi-t-id`), directional clitics (`yeffeɣ-d`), and possessive suffixes (`tamurt-nneɣ`). The punctuation splitter explicitly excludes `-` so these forms are pre-tokenized as single units and BPE can learn them correctly. ### 4. CLDR-Grounded Alphabet The `initial_alphabet` is derived exclusively from the [Unicode CLDR `kab.xml`](https://github.com/unicode-org/cldr/blob/main/common/main/kab.xml) exemplar character set: **Core:** `a b c č d ḍ e ɛ f g ǧ ɣ h ḥ i j k l m n p q r ṛ s ṣ t ṭ u w x y z ẓ` **Auxiliary:** `o v` Every character in this set is guaranteed to exist as an atomic token in the vocabulary, regardless of its frequency in the training corpus. ### 5. Distinct Special Tokens Each special token has exactly one role: | Token | Role | |---|---| | `` | Beginning of sequence | | `` | End of sequence | | `` | Unknown token | | `` | Padding | | `` | Masked token (for MLM) | ## Benchmark Comparison against 3 other publicly available Kabyle tokenizers on 10 morphologically complex Kabyle sentences (verbal clitics, negation, construct state, pronominal suffixes, dense special characters, aspectual contrast): | Tokenizer | Vocab | Avg fertility ↓ | Design | |---|---|---|---| | `boffire/kabyle-gpt2-tokenizer` | 50,257 | 2.058 | ByteLevel BPE, broken Kabyle chars | | `Hillal-titouh/kabyle-bpe-tokenizer` | 50,257 | 1.887 | No NFC, no mask token | | **`boffire/kabyle-bpe-tokenizer-v2`** | **48,000** | **1.736** | ✅ NFC, CLDR alphabet, clean punctuation | | `boffire/bpe-tokenizer-for-kabyle` | 48,000 | 1.476 | Absorbs punctuation into words | > **Note on BPE (boffire) fertility:** Its lower fertility is structural — it absorbs punctuation marks into word tokens (e.g. `berra.` as a single token), which reduces the token count but makes punctuation boundaries invisible to the model. This tokenizer separates punctuation cleanly, which costs ~10 tokens across the benchmark but produces linguistically correct segmentation. ### Sample tokenization ``` Yewwi-t-id ukan i gma-s. → ▁yewwi- | t- | id | ▁ukan | ▁i | ▁gma- | s | . Ur iẓri ara acu i d-yuɣen ɣer taddart-nneɣ. → ▁ur | ▁iẓri | ▁ara | ▁acu | ▁i | ▁d | - | yu | ɣen | ▁ɣer | ▁taddart- | n | neɣ | . Yessekcem-it deg taddart imi yeffeɣ-d ɣer berra. → ▁yessekcem- | it | ▁deg | ▁taddart | ▁imi | ▁yeffeɣ- | d | ▁ɣer | ▁berra | . ``` ## Training Data Trained on a curated Kabyle text corpus (~20 MB, ~212,000 word-level units after pre-tokenization). The corpus covers written Kabyle in the standard Mammeri Latin orthography. ## Limitations - **Lowercase only.** The normalizer lowercases all input. Kabyle capitalization is positional (sentence-initial) and carries no morphological information, so this is lossless for NLP tasks. Casing cannot be recovered from token IDs. - **Corpus size.** At 20 MB, some low-frequency morpheme combinations (e.g. the possessive suffix `-nneɣ` after varied stems) may not have been merged and will be split across 2–3 tokens. A larger corpus will improve this. - **No Tifinagh or Arabic script support.** This tokenizer covers the Latin orthography only. ## Citation If you use this tokenizer in your work, please cite it as: ```bibtex @misc{boffire2026kabyle, author = {boffire}, title = {Kabyle BPE Tokenizer v2}, year = {2026}, publisher = {HuggingFace}, url = {https://huggingface.co/boffire/Kabyle-BPE-Tokenizer-v2} } ``` ## License [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)