Présentation de Tiny BPE Trainer
La plupart des modèles de TAL modernes, de GPT à RoBERTa, s’appuient sur la tokenisation des sous-mots grâce au Byte Pair Encoding (BPE). Mais comment faire pour entraîner votre propre vocabulaire en C++ pur?
Découvrez Tiny BPE Trainer: un entraîneur BPE ultra-rapide, basé uniquement sur les en-têtes, écrit en C++ 17/20 moderne, sans aucune dépendance, avec une prise en charge complète de l’UTF-8 et une sortie compatible HuggingFace (vocab.txt, merges.txt).
Pourquoi un autre entraîneur BPE?
Parce que les options existantes sont souvent:
- Uniquement Python, avec de fortes dépendances d’exécution (Rust, Protobuf, etc.)
- Difficilement intégrables dans des applications C++
- Pas axé sur la vitesse, la simplicité ou l’utilisation multiplateforme
Tiny BPE Trainer est:
- Uniquement pour les en-têtes
- Multiplateforme (Linux, Windows, macOS)
- Compatible HuggingFace
- Et il s’intègre parfaitement à mon autre projet: Modern Text Tokenizer
Fonctionnalités principales
- Formation BPE complète à partir de données texte brut ou JSONL
- Prise en charge de l’interface de ligne de commande et de l’API C++ – idéal pour l’outillage ou l’intégration
- Sortie compatible HuggingFace (
vocab.txt
,merges.txt
) - UTF-8 Sûr – gère les émojis, les scripts multilingues et les caractères spéciaux
- Configurable – minuscules, séparation de la ponctuation, fréquence minimale, etc.
- Mode démo – testez tout avec une seule ligne de commande
Démo
1./Tiny-BPE-Trainer --demo
Génère un corpus synthétique, entraîne un vocabulaire, affiche des statistiques et exécute la tokenisation, le tout en quelques secondes. Idéal pour les tests d’intégration continue et de détection de fumée.
Comment entraîner un tokenizer BPE
Créer
1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
Entraîner sur un corpus
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer
Ou depuis JSONL:
1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000
Texte tokenisé
1./Tiny-BPE-Trainer --test "Bonjour tout le monde! Ceci est un test."
Fonctionne parfaitement avec Modern Text Tokenizer
Une fois entraîné, vous pouvez utiliser votre vocabulaire personnalisé directement dans mon Modern Text Tokenizer :
1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");
Vous obtenez ainsi un pipeline de tokenisation entièrement en C++, sans aucune dépendance d’exécution.
Utiliser des jeux de données réels
Vous pouvez facilement générer des corpus à l’aide des jeux de données 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")
Ensuite, entraînez-vous:
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer
Benchmark
1Traité: 33millions de caractères
2Mots uniques: 106Ko
3Taille du vocabulaire: 32000
4Durée d’apprentissage: environ 30minutes (Ryzen9, -O3)
Même sur des fichiers de corpus volumineux (IMDB, WikiText), Tiny BPE Trainer fonctionne efficacement et de manière prévisible, et génère des vocabulaires compatibles avec HuggingFace, SentencePiece et vos propres tokenizers C++.
Cas d’utilisation
- Entraînement de tokenizers personnalisés pour les LLM et les transformateurs
- NLP sur appareil lorsque Python n’est pas disponible
- Création de préprocesseurs hautes performances
- Entraînement de vocabulaires spécifiques à un domaine (juridique, médical, code)
Essayer maintenant
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
Consultez le fichier README complet sur GitHub pour découvrir les options avancées, les options CLI et des conseils d’intégration:
Conçu avec ❤️ pour la communauté NLP et C++.
Si vous l’appréciez, marquez-le sur GitHub , utilisez-le dans vos projets ou contribuez!
Commentaires