eglantinefonrose commited on
Commit
87f0304
·
verified ·
1 Parent(s): bbb7783

Upload folder using huggingface_hub

Browse files
README.md CHANGED
@@ -1,36 +1,28 @@
1
- # Documentation du Modèle de Détection de Chroniques
2
 
3
- Ce dossier contient le modèle entraîné permettant d'identifier les segments de chroniques dans les transcriptions radio de France Inter.
4
 
5
- ## Architecture du Modèle
6
 
7
- Le modèle utilise une approche **hybride (Texte + Structure)** basée sur un algorithme de **Random Forest** (Forêt d'arbres décisionnels). Contrairement à un modèle de langue pur qui ne lirait que le texte, ce modèle prend ses décisions en croisant trois types de signaux :
8
 
9
- ### 1. Analyse Textuelle (NLP)
10
- Nous utilisons une vectorisation **TF-IDF** sur des séquences de 1 à 3 mots (trigrammes).
11
- - **Contexte élargi** : Le modèle ne regarde pas seulement le segment actuel, mais fusionne le texte des 2 segments précédents et des 2 segments suivants (fenêtre de 5 segments).
12
- - **Signaux détectés** : Vocabulaire spécifique aux lancements ("Bonjour", "notre invité", "7h50") et thématiques récurrentes.
 
 
 
13
 
14
- ### 2. Caractéristiques Structurelles (Feature Engineering)
15
- Le modèle reçoit des indicateurs numériques stratégiques extraits par `src/utils.py` :
16
- - **Position Relative (`rel_pos`)** : La progression dans l'émission (0.0 à 1.0). Les chroniques ont des horaires théoriques fixes.
17
- - **Détection de Jingle (`has_jingle_now/prev`)** : Présence du tag `[JINGLE]`. C'est le prédicteur le plus fort pour marquer le début ou la fin d'une séquence.
18
- - **Rythmique (`duration`, `is_very_short`)** : La durée du segment. Les lancements sont souvent courts et denses, les chroniques sont des blocs de texte longs et continus.
19
- - **Mots-clés discriminants** : Présence de termes comme "METEO", "JOURNAL", "REDACTION" qui servent de balises structurelles.
20
 
21
- ### 3. Stratégie d'Apprentissage
22
- - **Équilibrage (`class_weight='balanced'`)** : Comme les chroniques ne représentent qu'environ 15% du temps total d'une matinale, le modèle est forcé mathématiquement à accorder plus d'importance aux exemples de chroniques pour ne pas les ignorer au profit du "silence/bruit".
23
- - **Lissage Temporel (Post-processing)** : Le script de prédiction applique un filtre après le passage du modèle pour combler les trous de détection de moins de 10s et supprimer les détections "fantômes" trop courtes pour être de vraies chroniques.
24
 
25
- ## Fichiers de sortie
26
- - `pro_chronicle_model.joblib` : Le fichier binaire contenant la pipeline complète (Vectoriseur + Forêt d'arbres).
27
 
28
- ## Limites connues
29
- Le modèle dépend de la qualité des tags `[JINGLE]` dans la transcription Whisper. Si Whisper manque un jingle, le modèle devra se reposer uniquement sur le texte et l'heure, ce qui peut légèrement décaler le début ou la fin de la chronique de quelques secondes.
30
 
31
- ## Publier le modèle
32
- Le modèle est publié sur HuggingFace via
33
- ```
34
- hf upload eglantinefonrose/rlac-audiotranscript-segmenter-chroniques-bert ./models .
35
- ```
36
- Il est disponible à
 
1
+ # Documentation des Modèles de Détection de Chroniques
2
 
3
+ Ce dossier contient les modèles entraînés pour identifier les segments de chroniques dans les transcriptions radio.
4
 
5
+ ## Modèle Transformer (DistilCamemBERT)
6
 
7
+ C'est le modèle principal généré par `train.py`. Nous avons opté pour une version distillée afin d'accélérer les cycles d'expérimentation tout en conservant d'excellentes performances.
8
 
9
+ - **Type de modèle** : Transformer (Architecture BERT), utilisant `cmarkea/distilcamembert-base`.
10
+ - **Nombre de paramètres** : **~68 millions** (au lieu de 110M pour la version base).
11
+ - **Méthode d'apprentissage** : **Fine-tuning** sur des segments de transcriptions.
12
+ - **Optimisations** :
13
+ - **Modèle Distillé** : Utilise une version compressée de CamemBERT qui conserve environ 95% des performances tout en étant beaucoup plus légère.
14
+ - **Fenêtre Contextuelle** : `max_length` de 128 tokens pour un équilibre optimal entre contexte et temps de calcul.
15
+ - **Efficacité** : Le modèle est suffisamment léger pour être ultra-rapide en Python standard, sans nécessiter de formats de quantification complexes comme GGUF.
16
 
17
+ ### Pourquoi DistilCamemBERT ?
18
+ C'est le compromis idéal : il comprend parfaitement les nuances du français mais s'entraîne et s'exécute beaucoup plus vite que le modèle standard.
 
 
 
 
19
 
20
+ ## Utilisation
 
 
21
 
22
+ Le script `train.py` entraîne ce modèle. Pour utiliser ce modèle en prédiction, le script `predict.py` doit pointer vers le dossier `models/camembert_chronicle`.
 
23
 
24
+ ## Fichiers de sortie
25
+ - `camembert_chronicle/` : Dossier contenant les poids du modèle, la configuration et le tokenizer au format Hugging Face.
26
 
27
+ ## Méthode d'entraînement
28
+ L'entraînement est effectué sur l'intégralité des données disponibles (transcriptions Whisper couplées à des timecodes de référence) pour maximiser la capacité de détection sémantique des segments de chroniques.
 
 
 
 
camembert_chronicle/config.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_cross_attention": false,
3
+ "architectures": [
4
+ "CamembertForSequenceClassification"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "bos_token_id": 5,
8
+ "classifier_dropout": null,
9
+ "dtype": "float32",
10
+ "eos_token_id": 6,
11
+ "hidden_act": "gelu",
12
+ "hidden_dropout_prob": 0.1,
13
+ "hidden_size": 768,
14
+ "initializer_range": 0.02,
15
+ "intermediate_size": 3072,
16
+ "is_decoder": false,
17
+ "layer_norm_eps": 1e-05,
18
+ "max_position_embeddings": 514,
19
+ "model_type": "camembert",
20
+ "num_attention_heads": 12,
21
+ "num_hidden_layers": 12,
22
+ "output_past": true,
23
+ "pad_token_id": 1,
24
+ "problem_type": "single_label_classification",
25
+ "tie_word_embeddings": true,
26
+ "transformers_version": "5.5.4",
27
+ "type_vocab_size": 1,
28
+ "use_cache": false,
29
+ "vocab_size": 32005
30
+ }
camembert_chronicle/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b78a4b8b81b005fbd4708d3abd54d58a6964f28cc9e25aac1f3c6b7af8d19586
3
+ size 442518080
camembert_chronicle/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
camembert_chronicle/tokenizer_config.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": true,
3
+ "backend": "tokenizers",
4
+ "bos_token": "<s>",
5
+ "cls_token": "<s>",
6
+ "eos_token": "</s>",
7
+ "extra_special_tokens": [
8
+ "<s>NOTUSED",
9
+ "</s>NOTUSED",
10
+ "<unk>NOTUSED"
11
+ ],
12
+ "is_local": false,
13
+ "mask_token": "<mask>",
14
+ "model_max_length": 512,
15
+ "pad_token": "<pad>",
16
+ "sep_token": "</s>",
17
+ "tokenizer_class": "CamembertTokenizer",
18
+ "unk_token": "<unk>"
19
+ }
pro_chronicle_model.joblib CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:8672997ae77bb90ed04b4310ee7843fc6a423fb8a2c95ad22a97ac5eca278d30
3
- size 112941730
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f10df7f096bf8d01377b70577ad6e6002029240d74fb3710ad14d9e96f19b562
3
+ size 65502658
rf_metrics.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_params": {
3
+ "clf__max_depth": null,
4
+ "clf__n_estimators": 100,
5
+ "preprocessor__txt__max_features": 5000
6
+ },
7
+ "cv_f1_mean": 0.9771736061326074,
8
+ "test_report": {
9
+ "0": {
10
+ "precision": 0.9441176470588235,
11
+ "recall": 0.7109634551495017,
12
+ "f1-score": 0.8111181301326595,
13
+ "support": 903.0
14
+ },
15
+ "1": {
16
+ "precision": 0.9855257320319432,
17
+ "recall": 0.9978662474029985,
18
+ "f1-score": 0.9916575988393181,
19
+ "support": 17809.0
20
+ },
21
+ "accuracy": 0.9840209491235571,
22
+ "macro avg": {
23
+ "precision": 0.9648216895453834,
24
+ "recall": 0.85441485127625,
25
+ "f1-score": 0.9013878644859888,
26
+ "support": 18712.0
27
+ },
28
+ "weighted avg": {
29
+ "precision": 0.983527468846248,
30
+ "recall": 0.9840209491235571,
31
+ "f1-score": 0.9829451608186835,
32
+ "support": 18712.0
33
+ }
34
+ },
35
+ "confusion_matrix": [
36
+ [
37
+ 642,
38
+ 261
39
+ ],
40
+ [
41
+ 38,
42
+ 17771
43
+ ]
44
+ ]
45
+ }