| --- |
| 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") |
| ``` |
|
|