Wir stellen vor: Tiny BPE Trainer
Die meisten modernen NLP-Modelle, von GPT bis RoBERTa, basieren heute auf der Tokenisierung von Teilwörtern mittels Byte Pair Encoding (BPE). Doch was, wenn Sie Ihren eigenen Wortschatz in reinem C++ trainieren möchten?
Lernen Sie den Tiny BPE Trainer kennen – einen blitzschnellen, Header-only-BPE-Trainer, geschrieben in modernem C++17/20, mit null Abhängigkeiten, voller UTF-8-Unterstützung und HuggingFace-kompatibler Ausgabe (vocab.txt
, merges.txt
).
Warum noch ein BPE-Trainer?
Bestehende Optionen sind oft:
- Nur Python, mit starken Laufzeitabhängigkeiten (Rust, Protobuf usw.)
- Nicht einfach in C++-Anwendungen integrierbar
- Nicht auf Geschwindigkeit, Einfachheit oder plattformübergreifende Nutzung ausgerichtet
Tiny BPE Trainer ist:
- Nur Header
- Plattformübergreifend (Linux, Windows, macOS)
- HuggingFace-kompatibel
- Und es passt perfekt zu meinem anderen Projekt: Modern Text Tokenizer
Kernfunktionen
- Umfassendes BPE-Training aus reinem Text oder JSONL-Datensätzen
- CLI- und C++-API-Unterstützung – ideal für Tools oder Einbettungen
- HuggingFace-kompatible Ausgabe (
vocab.txt
,merges.txt
) - UTF-8-sicher – Verarbeitet Emojis, mehrsprachige Skripte und Sonderzeichen.
- Konfigurierbar – Kleinschreibung, Zeichensetzungstrennung, Mindestfrequenz usw.
- Demo-Modus – Testen Sie alles mit einem einzeiligen Befehl.
Demo
1./Tiny-BPE-Trainer --demo
Generiert einen synthetischen Korpus, trainiert ein Vokabular, gibt Statistiken aus und führt die Tokenisierung durch – alles in Sekundenschnelle. Ideal für CI- und Smoke-Tests.
So trainieren Sie einen BPE-Tokenizer
Erstellen Sie ihn
1g++ -std=c++17 -O3 -o Tiny-BPE-Trainer Tiny-BPE-Trainer.cpp
Trainieren Sie mit einem Korpus
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o my_tokenizer
Oder aus JSONL:
1./Tiny-BPE-Trainer -i dataset.jsonl --jsonl -v 32000
Text tokenisieren
1./Tiny-BPE-Trainer --test "Hallo Welt! Dies ist ein Test."
Funktioniert nahtlos mit dem Modern Text Tokenizer
Nach dem Training können Sie Ihr benutzerdefiniertes Vokabular direkt in meinem Modern Text Tokenizer verwenden:
1TextTokenizer tokenizer;
2tokenizer.load_vocab("my_tokenizer_vocab.txt");
3auto ids = tokenizer.encode("Hello world!");
Dies ermöglicht Ihnen eine vollständige C++-Tokenizer-Pipeline ohne Laufzeitabhängigkeiten.
Echte Datensätze verwenden
Mit HuggingFace-Datensätzen können Sie ganz einfach Korpora generieren:
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")
Dann trainiere:
1./Tiny-BPE-Trainer -i corpus.txt -v 16000 -o imdb_tokenizer
Benchmark
1Verarbeitet: 33 Mio. Zeichen
2Eindeutige Wörter: 106.000
3Vokabulargröße: 32.000
4Trainingszeit: ca. 30 Min. (Ryzen 9, -O3)
Selbst bei großen Korpusdateien (IMDB, WikiText) arbeitet der Tiny BPE Trainer effizient und zuverlässig – und generiert Vokabulare, die mit HuggingFace, SentencePiece und Ihren eigenen C++-Tokenizern kompatibel sind.
Anwendungsfälle
– Training benutzerdefinierter Tokenizer für LLMs und Transformatoren – Gerätebasiertes NLP, wenn Python nicht verfügbar ist – Entwicklung leistungsstarker Präprozessoren – Training fachspezifischer Vokabulare (Recht, Medizin, Code)
Jetzt testen
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
Die vollständige README-Datei auf GitHub enthält erweiterte Optionen, CLI-Flags und Integrationstipps:
Mit ❤️ für die NLP- und C++-Community entwickelt.
Wenn es Ihnen gefällt, markieren Sie es auf GitHub , verwenden Sie es in Ihren Projekten oder tragen Sie dazu bei!
Kommentare