ffbpe 0.1.10

Unicode-aware, streaming BPE training and tiktoken-compatible encoding
Documentation
# Multilingual corpora

Unicode-heavy corpora can produce nearly unique pretokenized words. FFBPE offers
two separate tools for this problem:

1. Unicode-bigram inventory shaping changes pretokenizer boundaries using
   measured corpus frequencies.
2. Unicode byte fallback spends part of the learned vocabulary on UTF-8 byte
   merges inside rare scalars.

Benchmark both choices on representative text; neither is a universal default.

## Select Unicode bigrams

Selection is a two-pass workflow, so the corpus must be replayable.

```python
from ffbpe import BpeTrainer, PreTokenizer


class Corpus:
  def scan(self):
    yield "你好世界"
    yield "你好,tokenizer"


corpus = Corpus()
pretokenizer = PreTokenizer([])

bigram_counter = pretokenizer.bigram_counter()
bigram_counter.add_source(corpus.scan())
selection = bigram_counter.select(top_k=100_000, min_freq=2)

word_counter = (
  pretokenizer
  .with_unicode_bigrams(selection.bigrams)
  .word_counter()
)
word_counter.add_source(corpus.scan())
```

Selection includes every tie at `cutoff_freq`. Carry that boundary into the
trainer so automatic training stops before learning a pair below the measured
selection boundary:

```python
trainer = BpeTrainer(
  [],
  unit="unicode",
  bigram_cutoff_freq=selection.cutoff_freq,
)
trainer.add_word_counter(word_counter)
trainer.train(vocab_size=10_000)
model = trainer.validate_model()
```

Pass the same bigrams when creating or saving the encoder:

```python
model.save_pretrained(
  "my-unicode-tokenizer",
  unicode_bigrams=selection.bigrams,
)
```

## Add byte fallback for rare scalars

```python
trainer = BpeTrainer([], unit="unicode")
trainer.add_word_counter(word_counter)
trainer.train_with_bbpe_fallback(
  vocab_size=10_000,
  primary_vocab_ratio=0.9,
)
model = trainer.validate_model()
```

The ratio applies to learned slots after special tokens and the mandatory
256-byte alphabet. The fallback phase learns only within omitted Unicode
scalars and never across scalar boundaries.

!!! warning

    Byte fallback is a finalizing operation and must start before ordinary
    vocabulary growth. Create a new trainer if you need to train further.