Presentazione di Tiny BPE Trainer

La maggior parte dei modelli NLP moderni, da GPT a RoBERTa, si basa sulla tokenizzazione delle sottoparole tramite Byte Pair Encoding (BPE). Ma cosa succede se si desidera addestrare il proprio vocabolario in puro C++?

Vi presentiamo Tiny BPE Trainer: un trainer BPE velocissimo, basato solo su header, scritto in C++17/20 moderno, con zero dipendenze, supporto completo per UTF-8 e output compatibile con HuggingFace (vocab.txt, merges.txt).

Perché un altro trainer BPE?

Poiché le opzioni esistenti sono spesso:

  • Solo Python, con forti dipendenze di runtime (Rust, Protobuf, ecc.)
  • Non facilmente integrabile in applicazioni C++
  • Non focalizzato su velocità, semplicità o utilizzo multipiattaforma

Tiny BPE Trainer è:

  • Solo header
  • Multipiattaforma (Linux, Windows, macOS)
  • Compatibile con HuggingFace
  • E si abbina perfettamente al mio altro progetto: Modern Text Tokenizer

Funzionalità principali

  • Addestramento BPE completo da testo semplice o dataset JSONL
  • Supporto per API CLI e C++ – ideale per strumenti o incorporamento
  • Output compatibile con HuggingFace (vocab.txt, merges.txt)
  • UTF-8 Safe – gestisce emoji, script multilingue, caratteri speciali
  • Configurabile – minuscole, suddivisione della punteggiatura, frequenza minima, ecc.
  • Modalità Demo – testa tutto con un comando a riga singola

Demo

1./Tiny-BPE-Trainer --demo

Genera un corpus sintetico, addestra un vocabolario, visualizza statistiche ed esegue la tokenizzazione, il tutto in pochi secondi. Ottimo per CI e smoke test.

Come addestrare un tokenizzatore BPE

Crealo

1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp

Addestra su un corpus

1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer

Oppure da JSONL:

1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000

Tokenizza il testo

1./Tiny-BPE-Trainer --test "Ciao, Mondo! Questo è un test."

Funziona perfettamente con Modern Text Tokenizer

Una volta addestrato, puoi usare il tuo vocabolario personalizzato direttamente nel mio Modern Text Tokenizer :

1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");

Questo fornisce una pipeline di tokenizzazione completamente in C++, senza dipendenze di runtime.

Utilizza set di dati reali

Puoi generare facilmente corpora utilizzando i set di dati di HuggingFace:

1from datasets import load_dataset
2
3dataset = load_dataset("imdb", split="train")
4with open("corpus.txt", "w", encoding="utf-8") as f:
5    for x in dataset:
6        f.write(x["text"].strip().replace("\n", " ") + "\n")

Poi treno:

1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer

Benchmark

1Elaborati: 33 milioni di caratteri
2Parole univoche: 106 KB
3Dimensione vocabolario: 32000
4Tempo di addestramento: ~30 minuti (Ryzen 9, -O3)

Anche su file corpus di grandi dimensioni (IMDB, WikiText), Tiny BPE Trainer funziona in modo efficiente e prevedibile, generando vocabolari compatibili con HuggingFace, SentencePiece e i tuoi tokenizzatori C++.

Casi d’uso

  • Addestramento di tokenizzatori personalizzati per LLM e transformer
  • NLP su dispositivo dove Python non è disponibile
  • Creazione di preprocessori ad alte prestazioni
  • Addestramento di vocabolari specifici per dominio (legale, medico, codice)

Provalo ora

1git clone https://github.com/Mecanik/Tiny-BPE-Trainer
2cd Tiny-BPE-Trainer
3g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
4./Tiny-BPE-Trainer --demo

Consulta il README completo su GitHub per opzioni avanzate, flag CLI e suggerimenti per l’integrazione:

Tiny BPE Trainer su GitHub

Realizzato con ❤️ per la community NLP e C++.

Se ti piace, metti una stella su GitHub , usalo nei tuoi progetti o contribuisci!