Skip to content

fix(tooling): elargir la classe d'unites de check_factual_mislabel.py au-dela du domaine App-5 #20035

Open

Description

@jsboige

Part of #18354.

Le constat

Le vocabulaire d'unites de scripts/check_factual_mislabel.py est ferme et mono-domaine :

UNITS = salles?|cours|cre?neaux?|enseignants?|professeurs?|etudiants?|agents?
        |variables?|contraintes?|jours?|rooms?|courses?|slots?|teachers?

Ce vocabulaire est celui du domaine d'ou l'organe est ne (l'emploi du temps d'App-5). Les deux motifs qui forment une paire — MD_COUNT_RE (\b(\d{1,5})\s*(UNITS)\b) et STREAM_COUNT_RE (\b(UNITS)\s*[:=]\s*(\d{1,5})\b) — ne peuvent donc pas se former sur une unite absente de la liste. Aucune paire, aucune comparaison, donc aucun signal : l'organe est vert par construction sur cette classe, pas par absence de defaut.

Instance mesuree

PR #19918, Lean-37-Capstone-Serre100.ipynb. La cellule 6 imprime 15 carnets dans Serre100/ et sa table ; la prose qui commente cette sortie disait « les huit carnets » (titre et corps de la cellule 2, cellule 5, conclusion 15) et « Sept carnets sur huit » (cellule 7). La table de la section 2 s'arretait a 08.

Les trois organes freres rendaient anomaly_count: 0 sur la tete d'alors, et le commentaire CI markdown-claims-output-advisory affichait « No prose/output mismatch detected in the notebooks this PR changed. »

Le dossier de domaine qui a trouve la derive (myia-po-2027:CoursIA-2) a etabli le mecanisme a la source et a teste une hypothese concurrente — la prose en lettres plutot qu'en chiffres — en rejouant le carnet avec la prose reecrite en chiffres : les trois organes restent a 0. Le mecanisme retenu est donc bien le vocabulaire, pas la forme du nombre. Portee honnete : le mecanisme est etabli pour check_factual_mislabel.py ; la cecite des deux autres organes est constatee, pas expliquee.

Ce qui est demande

  1. Reproduire le cas sur la tete d'avant correction de fix(lean,#19730): re-executer Lean-37 Capstone Serre100 post-#19628 #19918 (6986f3f43b) : le carnet y est committe avec la prose perimee, les organes rendent 0.
  2. Trancher le remede — les deux options ne sont pas equivalentes :
    • etendre UNITS a une unite de plus est le geste le plus court, mais il ne traite qu'une instance : la prochaine prose portera un autre substantif, et la liste restera mono-domaine ;
    • une classe d'unites de comptage (un nom commun au pluriel precede d'un entier, dans une cellule d'interpretation adjacente a une cellule code) attrape la classe entiere, au prix d'un taux de faux positifs a mesurer.
  3. Mesurer le taux de faux positifs avant/apres sur le corpus, et consigner la mesure dans le body de la PR — la liste fermee existe pour tenir le bruit bas, l'elargir sans mesure la viderait de son sens.

Note de perimetre

Le remede n'est pas requis par #19918 : la prose y est corrigee independamment. Cette issue porte l'organe, pour que la classe cesse d'etre invisible au gate. Toute personne qui ouvre la classe doit relire scripts/check_factual_mislabel.py et sa campagne parente avant de toucher au vocabulaire.

Activity

  1. jsboige commented on Oct 13, 2026

    @jsboige
    OwnerAuthor

    Mesure avant correctif, depuis la session cloud du mainteneur (hors flotte, exemption #17713). Aucune PR : l'élargissement proposé échoue au critère de faux positifs.

    1. Le vocabulaire seul ne rattrape pas l'instance #19918. Sur la tête pré-correction 6986f3f43b de Lean-37-Capstone-Serre100.ipynb, trois leviers sont nécessaires ensemble :

    • carnets absent de UNITS ;
    • le stream imprime 15 carnets dans Serre100/ (forme « N unité »), alors que l'organe ne lit que la forme « Unité : M » ;
    • la prose compte en lettres (« huit carnets »), alors que MD_COUNT_RE n'accepte que des chiffres.
    Leviers activés Findings sur l'instance
    vocabulaire seul 0
    vocabulaire + forme « N unité » 0
    les trois 3 : 1 vrai (cellule 5, « huit carnets » contre 15) et 2 faux positifs de sous-ensemble (cellules 3 et 7)

    2. Coût sur le corpus (1 551 carnets de MyIA.AI.Notebooks, origin/main) :

    Variante Findings Nouveaux Vrais défauts parmi les nouveaux
    V0 actuel 15 - -
    V1 vocabulaire élargi 151 +136 0 sur 136, lus un par un
    V2 = V1 + forme « N unité » 600 +597 non classé en entier
    V3 = V2 + nombres en lettres 813 +810 0 sur 71 findings d'unités nommées (carnet, notebook, cellule, exercice) lus un par un ; 0 sur 40 échantillonnés parmi les autres

    Toutes les unités qui produisent des findings sont dominées par les faux positifs : seed 28, bit 14, exemple 13, noeud 13, itération 9, etc.

    3. Classes de faux positifs observées :

    • la forme « Unité : M » du stream couvre aussi les échos de paramètres (Seed : 42, Noeud : 400, Iterations : 100) : l'organe confond un compte et une valeur de paramètre ;
    • la prose compte souvent une autre grandeur que la sortie :
      • un balayage (« 4 seeds » contre Seed : 42) ;
      • un graphe d'exemple (« 6 noeuds ») ;
      • l'univers contre la sélection (« 5 actifs » listés, Nombre d'actifs: 3 sélectionnés) ;
      • une fraction ou un sous-ensemble (« Quatorze carnets sur quinze ») ;
      • une approximation ou une plage (« ~730 jours », « 50-500 noeuds »).

    App-5 reste précis parce que Salles : 4 est le total du même objet que la prose. Ce cas ne se généralise pas.

    Conséquence proposée. Ne pas élargir UNITS. Un élargissement fiable demande d'abord un travail de précision, qui relève plutôt d'une issue de design que d'une extension de liste :

    • ne lire, dans le stream, que les lignes de total ou de résumé ;
    • exclure les échos de paramètres ;
    • exclure les fractions, sous-ensembles, plages et approximations.

    Hors périmètre, relevé : le canon App-5 (« 3 salles » contre Salles : 4) est toujours présent sur main. Le step CI (markdown-claims-output-advisory.yml, « factual-mislabel detector ») reste non bloquant : élargir n'ajouterait que du bruit dans le commentaire sticky, avec un impact estimé sur 5 des PRs ouvertes.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions