--- language: fr tags: - cgi - fiscal - transformer - from-scratch license: other --- # CGI Transformer Modèle transformer entraîné from scratch sur le Code Général des Impôts (CGI) 2026 français. Architecture custom (RoPE, RMSNorm, SwiGLU, attention causale) — voir `config.json` pour les hyperparamètres et le dépôt source pour le code du modèle (`CGITransformer`). ## Architecture | paramètre | valeur | |---|---| | vocab_size | 10413 | | d_model | 256 | | num_heads | 8 | | num_layers | 6 | | hidden_dim | 1024 | | max_seq_len | 512 | | dropout | 0.1 | ## Entraînement | info | valeur | |---|---| | best_epoch | 14 | | epochs_trained | 18 | | learning_rate | 0.0002 | | batch_size | 8 | | weight_decay | 0.1 | | dropout | 0.1 | | label_smoothing | 0.1 | ## Métriques (meilleur checkpoint) | métrique | valeur | |---|---| | val_loss | 2.7281 | | val_perplexity | 15.3035 | | val_accuracy | 0.5590 | | test_loss | 2.4548 | | test_perplexity | 11.6441 | | test_accuracy | 0.5934 | ## Utilisation Ce modèle utilise une architecture custom, non enregistrée dans `transformers`. Chargement avec le code source du dépôt d'origine : ```python from safetensors.torch import load_file from src.model import CGITransformer, CGITransformerConfig with open("config.json") as f: import json cfg = json.load(f) config = CGITransformerConfig( vocab_size=cfg["vocab_size"], d_model=cfg["d_model"], num_heads=cfg["num_heads"], num_layers=cfg["num_layers"], hidden_dim=cfg["hidden_dim"], max_seq_len=cfg["max_seq_len"], dropout=0.0, ) model = CGITransformer(config) # lm_head.weight est tied avec l'embedding et n'est pas dupliqué dans le fichier safetensors # (déjà tied à la construction du modèle) -> strict=False pour ignorer cette clé absente model.load_state_dict(load_file("model.safetensors"), strict=False) model.eval() ``` Le tokenizer est un `tokenizers.Tokenizer` (fichier `tokenizer.json`) : ```python from tokenizers import Tokenizer tokenizer = Tokenizer.from_file("tokenizer.json") ```