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:

Tiny BPE Trainer sur GitHub

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!