Implémentation from-scratch d'un tokenizer BPE avec support des tokens spéciaux, inspiré de GPT-2.
pip install regex streamlitUne interface Streamlit interactive pour explorer le BPE en temps réel :
streamlit run src/visualizer.pyFonctionnalités :
- Training interactif avec datasets intégrés
- Visualisation colorée des tokens
- Mode document et conversation
- Métriques (compression ratio, temps d'encoding)
- Historique complet des merges
from bpe import BytePairEncoder
# Training
tokenizer = BytePairEncoder()
tokenizer.train(text="Votre corpus d'entraînement", vocab_size=512)
tokenizer.save("merges.pkl")
# Encoding
ids = tokenizer.encode("Hello world", mode="document")
text = tokenizer.decode(ids)%pip install git+https://github.com/ad-tr/byte-pair-encoding-tokenizerfrom tokenizer import BytePairEncoder
# Créer et entraîner un tokenizer
tokenizer = BytePairEncoder()
tokenizer.train(text="Votre corpus d'entraînement", vocab_size=512)
tokenizer.save("/{path}/merges.pkl")
# Charger un tokenizer existant
tokenizer = BytePairEncoder.load("/{path}/merges.pkl")
# Encoder et décoder
ids = tokenizer.encode("Hello world", mode="document")
text = tokenizer.decode(ids)
print(f"Vocab size: {tokenizer.vocab_size}")- Algorithme BPE classique
- Support tokens spéciaux (
<begin_of_text>,<im_start>, etc.) - Modes document/conversation
- Regex splitting pattern GPT-2
- Sauvegarde/chargement des merges
Document : Ajoute automatiquement <begin_of_text> et <end_of_text>
Conversation : Structure les dialogues avec <im_start>, <im_sep>, <im_end>
messages = [
{"role": "System", "message": "Tu es un assistant"},
{"role": "user", "message": "Bonjour"},
{"role": "assistant", "message": "Bonjour"}
]
ids = tokenizer.encode(messages, mode="conversation")Ajoutez vos fichiers texte (.txt) dans le dossier /data. Vous pourrez ensuite les sélectionner dans le visualiseur pour entraîner le tokenizer.
- Nécessite un corpus suffisamment large (erreur si vocab_size > paires disponibles)
Pour plus de détails sur le projet :
- Architecture : Structure du code et design decisions
- Vue d'ensemble : Contexte et objectifs du projet
- Visualiseur : Guide détaillé de l'interface Streamlit