cortex.6.sol / tokenizer /README.md
openhands
openhands
feat(cortex): add CORTEX training pipeline and model audit
6fbe100
|
Raw History Blame Contribute Delete
1.87 kB

CORTEX — tokenizer

Le tokenizer CORTEX est réutilisé tel quel depuis le dépôt distribué (Frankenstein-Labs/Cortex-ai), sous licence MIT. Il n'est ni reconstruit, ni modifié.

Fichier Rôle
../tokenizer.json tokenizer distribué, à la racine du dépôt (BPE, 129 280 identifiants)
cortex_tokenizer.py chargement et validation

Chiffres mesurés

Propriété Valeur
Classe PreTrainedTokenizerFast
Modèle BPE
Vocabulaire de base 128 000
Fusions 127 741
Tokens ajoutés 1 283
Identifiants uniques 129 280
Identifiants en doublon 3 (ids 0, 1, 2)

Le piège du décompte

128 000 + 1 283 = 129 283, mais config.json déclare vocab_size: 129280 et les embeddings ont 129 280 lignes.

Ce n'est pas une incohérence : les identifiants 0, 1 et 2 (bos, eos, pad) apparaissent à la fois comme tokens spéciaux ajoutés et comme entrées du vocabulaire BPE. Le nombre d'identifiants uniques est bien 129 280.

C'est pourquoi assert_vocab_matches_config() compare les identifiants uniques et jamais les compteurs bruts. Toute réutilisation de ce tokenizer doit faire de même.

Exemple

from tokenizer.cortex_tokenizer import load_tokenizer, assert_vocab_matches_config

tokenizer = load_tokenizer()
assert_vocab_matches_config(tokenizer, 129280)
print(tokenizer.decode(tokenizer.encode("def add(a, b):\n    return a + b\n").ids))

Si le fichier est absent

tokenizer.json est versionné à la racine du dépôt, et le pipeline le charge depuis là : une seule copie existe, donc aucune divergence n'est possible entre le tokenizer du pipeline et celui du checkpoint distribué. S'il manque, le récupérer depuis la source :

hf download Frankenstein-Labs/Cortex-ai tokenizer.json --local-dir .