AlysiumTinyLLM / tokenizer.py
DeepImagix's picture
Alysium TinyLM v1.0 final checkpoint + source (from GitHub)
e644e74 verified
Raw History Blame Contribute Delete
1.36 kB
import json
import re
class CharTokenizer:
"""
Simple character-level tokenizer.
Builds vocabulary from the training text.
"""
def __init__(self):
self.char_to_id = {}
self.id_to_char = {}
self.vocab_size = 0
def build_vocab(self, text: str):
chars = sorted(set(text))
self.char_to_id = {ch: i for i, ch in enumerate(chars)}
self.id_to_char = {i: ch for i, ch in enumerate(chars)}
self.vocab_size = len(chars)
return self
def encode(self, text: str):
return [self.char_to_id.get(ch, 0) for ch in text]
def decode(self, ids):
return "".join(self.id_to_char.get(i, "?") for i in ids)
def save(self, path="tokenizer.json"):
data = {
"char_to_id": self.char_to_id,
"id_to_char": {str(k): v for k, v in self.id_to_char.items()},
"vocab_size": self.vocab_size,
}
with open(path, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
def load(self, path="tokenizer.json"):
with open(path, "r", encoding="utf-8") as f:
data = json.load(f)
self.char_to_id = data["char_to_id"]
self.id_to_char = {int(k): v for k, v in data["id_to_char"].items()}
self.vocab_size = data["vocab_size"]
return self