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:
Realizzato con ❤️ per la community NLP e C++.
Se ti piace, metti una stella su GitHub , usalo nei tuoi progetti o contribuisci!
Commenti