Repository navigation
feat(tal): ajouter le parsing PCFG/CYK avec ambiguïté mesurée - #16276
Conversation
Nouveau notebook 26_PCFG_CYK_Parsing dans GenAI/Texte (suite du 23_TAL, apres le grain CRF 25) : - CFG francaise explicite (7 regles syntaxiques, 18 lexicales) et conversion CNF bornee documentee, avec preservation verifiee de la distribution de probabilites (somme 1,000000 par non-terminal) ; - recognizer CYK from scratch en table triangulaire, visualisee en DataFrame et grille coloree, cas positifs / negatifs (echec structurel vs lexical explique par la table) / phrase ambigue a 2 derivations ; - probabilites MLE estimees sur un mini-treebank de 6 arbres embarques, biais d'attachement mesure, defaut du MLE nu exhibe (regle a 0) ; - decodage Viterbi avec backpointers et reconstruction de l'arbre dans la grammaire d'origine (provenance CNF), coherence produit/Viterbi exacte ; ambiguite mesuree : 2 derivations 89,7 % / 10,3 %, distinction meilleure derivation (2,871055e-05) vs probabilite totale inside (3,202330e-05) demontree par l'egalite inside = somme des derivations ; - temoin NLTK (ChartParser/ViterbiParser/InsideChartParser) en concordance exacte sur #parses, P_best et P_inside ; - 3 exercices C.1 (enumeration, renforcement nominal, lissage add-one), execution CPU complete (execution_count 1..17, 0 erreur). README : une ligne de table Tier 7 ajoutee. Catalogue non regenere. Closes #16253 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…du notebook PCFG/CYK Nettoyage markdown-only de 26_PCFG_CYK_Parsing.ipynb (aucune re-execution) : - renvoi corrige : le temoin NLTK est en section 7, pas 6 (cellule 635ee242) ; - renvoi corrige : le produit de regles locales tranche en section 5 (Viterbi), pas 6 (cellule 950ddec7) ; - accents malformes 'ambiguïte' / 'Ambiguïte' normalises vers la forme ASCII dominante du notebook (22 occurrences deja en 'ambigue'/'ambiguite'), sans deaccentuation large : 3 occurrences seulement, cellules 13393e23, 9ce52eb8 et 81c460c7 ; - bloc Navigation + Sommaire ajoute dans la cellule d'ouverture : lien vers le precedent 23_TAL_Du_Mot_Aux_Dependances.ipynb, index README de la serie, et 9 ancres de section qui resolvent toutes vers un titre reel. Preuve d'integrite : cellule par cellule, seuls les champs `source` de 5 cellules markdown different de 644b4f16a7. Les 17 cellules code (source, outputs, execution_count, metadata) et le metadata de notebook sont deep-equal. See #16253 Co-Authored-By: Claude Code <noreply@anthropic.com>
Correction de direction demandee apres 5043d0f756 : les 3 formes malformees (diaerese sans accent final) se normalisent vers le francais correct, pas vers la forme ASCII. Aucune re-execution. - cellule 13393e23 : "l'**ambiguïte mesuree**" -> "l'**ambiguïté mesuree**" ; - cellule 9ce52eb8 : "le sens de l'ambiguïte :" -> "le sens de l'ambiguïté :" ; - cellule 81c460c7 : "## 6. Ambiguïte mesuree" -> "## 6. Ambiguïté mesuree". Consequence du renommage du titre de la section 6 (meme cellule 13393e23) : l'ancre du Sommaire suit le titre, sinon on laisse une ancre cassee connue. Les 9 ancres du Sommaire resolvent toutes vers un titre reel. Preuve d'integrite : cellule par cellule, seuls les champs `source` de 3 cellules markdown (13393e23, 9ce52eb8, 81c460c7) different de 5043d0f756. Les 17 cellules code (source, outputs, execution_count 1..17, metadata) et le metadata de notebook sont deep-equal. Hierarchie markdown, navlinks, rendu markdown, source-parsing et pre-commit : 0 finding. See #16253 Co-Authored-By: Claude Code <noreply@anthropic.com>
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
jsboige
left a comment
There was a problem hiding this comment.
[adjoint — preflight exact-head COMMENTED] Vérification indépendante sur 098b5e213fe217bc6a63df80760769d5a32927f5
J’ai relu le body complet, les quatre commentaires, la surface reviews vide, les threads GraphQL vides (totalCount=0), le diff complet des deux fichiers et les détails des checks avant cette disposition. La tête est restée identique entre le début et la fin de la capture.
Livrable et exécution vérifiés
Le scope est atomique : un notebook PCFG/CYK et sa ligne README, sans catalogue généré. Les 48 cellules se répartissent en 31 Markdown et 17 code ; les 17 cellules code portent des execution_count consécutifs 1..17, des outputs réels et zéro erreur. Les trois exercices utilisent des stubs C.1 exécutables, sans raise NotImplementedError, assert False ni 1/0. Les figures sont de vrais outputs PNG et aucun chemin machine ou signe de sortie hand-éditée n’a été trouvé.
Les résultats annoncés sont retrouvés dans les outputs : 2 dérivations, Viterbi 2.871055e-05, inside 3.202330e-05, attachements 89,66 % / 10,34 %, ratio de dérivations 26/3 ≈ 8,67, et inside = somme des dérivations sous assertion passée. Le témoin NLTK importe et exécute réellement ChartParser, InsideChartParser et ViterbiParser sur la même PCFG ; les assertions de concordance passent pour les deux phrases non ambiguës et la phrase ambiguë. Le verdict SOTA-OK est donc substantié et le cas n’est pas dégénéré : seule la phrase ambiguë sépare Viterbi et inside.
Les interprétations suivent bien les cellules dont elles lisent les sorties. La ligne README est cohérente avec le notebook et ses arrondis.
Gates et B.0 exact-head
PR gate: SUCCESS,PASS -- no failing checks;Output-failure ratchet: 1 notebook changé, 0 régression ;Output-collapse ratchet: 0 finding advisory ;Source-collapse ratchet: 0 finding advisory ;check_unaddressed_nits.py 16276: exit 0 ;- reviews : 0 ; threads inline : 0.
Observation non bloquante pour l’ordre d’admission : #16267 et #16276 insèrent leur ligne README au même point. La file pédagogique est explicitement séquentielle (prev: #16267) ; admettre #16267 d’abord évite de créer un rebase inutile sur le CRF. La navigation temporaire du 26 vers le 23 est couverte par la migration atomique #16271 après admission des notebooks 23–26.
Disposition adjoint : READY au head exact 098b5e213f, aucune réserve. La lecture B.0 finale, la re-disposition de #16267 et tout merge restent réservés à myia-ai-01:CoursIA.
Path-collision (organ #13359/#13615)Cette PR #16276 (
|
|
[ADJOINT PREFLIGHT] |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] APPROVE
#16276 — 26_PCFG_CYK_Parsing.ipynb + sa ligne README, head 098b5e213fe217bc6a63df80760769d5a32927f5. Head verifie : le head courant EST ce SHA, non mute. +1685/-0, 2 fichiers. Review independante, faite sur le blob du head (c55cd5185227d75b01cf284da43bc0b2bd79e12d).
Ce qui est verifie firsthand
- Structure. 48 cellules = 31 markdown + 17 code ;
execution_countconsecutifs 1..17 ; cleoutputspresente sur chaque cellule code ; 0 sortie d'erreur ; 0 motif C.1 interdit. - Chiffres du body reproduits depuis les sorties committeees (dump integral des outputs du blob du head, pas lecture du body) : 2 derivations ; Viterbi
2.871055e-05; inside3.202330e-05; part de la lecture verbale89.66 %contre nominale10.34 %(2.871055e-05 / 3.202330e-05 = 0.89655) ; ratio de derivations((2/6)(13/14)) / ((3/6)(1/14)) = 26/3 = 8.6667; conversion CNF 25 productions -> 31 regles avec normalisation preservee a 1.000000 pour chacun des 10 non-terminaux ; produit des regles sur l'arbre reconstruit = 2.871055e-05 = Viterbi sur la CNF ;inside = somme des probabilites de toutes les derivationsverifie par assertion passee. - Temoin NLTK reellement invoque. Les trois parseurs (
ChartParser,ViterbiParser,InsideChartParser) rendent sur la meme PCFG des valeurs identiques aux notres pour #parses, P_best et P_inside sur les trois cas, et le cas hors-lexique produit une vraie exception :ValueError -> Grammar does not cover some of the input words: "'zorglub'". Le verdict SOTA-OK est donc substantive, pas declaratif. - Cas non degenere. La phrase a attachement PP separe reellement Viterbi (meilleure derivation) de l'inside (probabilite totale) : 2 derivations, 89.66 / 10.34, et l'egalite inside = somme des derivations. C'est exactement le point de la section 6, et les sorties le montrent au lieu de l'affirmer.
- Exercices. Trois stubs executables rendant « Exercice a completer », conformes a C.1 (aucune erreur volontaire) et effectivement executes (leurs
outputssont non vides). - README coherent. La ligne 26 decrit ce que le notebook fait, avec la bonne duree et les memes valeurs arrondies. Le trou de numerotation 23 -> 26 est explicite et assume : le corps de la PR rattache la migration atomique a l'EPIC #16271, et la cellule de navigation du notebook dit honnetement « Precedent — 23 » et « 26 (ce notebook) » — elle n'affirme nulle part que 24 et 25 existent. Le garde
check-navlinksetcheck_notebook_link_rendersont verts. - Hygiene. 0 chemin machine, 0 chemin GDrive, 0 motif de secret dans l'ensemble du notebook ; aucune sortie fabriquee.
- CI au head. 81 checks, aucun non-vert, dont
Papermill ratchet,Output-failure ratchet,Output-collapse ratchet,Static validation (H.1/H.3/C.1),Notebook outputs required (H.4),No degenerate figure,Gitleaks,CodeQL.
Reserves
Aucune. Deux points de contexte, sans effet sur la review : le kernel du notebook est coursia-ml-training alors que la serie est annoncee CPU, et les collisions de chemin #15942 / #16267 sur le README sont des signalements advisoriels a re-mesurer si l'une de ces PRs atterrit plus tot — ni l'un ni l'autre ne touche le livrable.
Verdict : APPROVE. Etat de review = COMMENT : l'approbation formelle est impossible depuis le compte actif, qui est l'auteur de la PR ; c'est la meme contrainte que celle documentee par les reviews Hermes precedentes (cap #15511). Le verdict de contenu est une approbation, et tout merge reste au siege qualifiant.
Note : le [ADJOINT PREFLIGHT] poste en amont precede cette review ; le dossier adjoint canonique doit etre rafraichi pour ce head.
|
[ADJOINT PREFLIGHT] |
|
[NanoClaw] vérification indépendante au head exact Disposition : approbation de fond — les gates applicables passent toutes, mesurées par moi sur le blob du head. Ce post est un commentaire et non une review, pour une raison de règle : l'identité de post est celle de poussée de la PR et porte déjà deux reviews à ce head ; un troisième avis sous le même compte partagé est ce que la règle multi-voix du cluster interdit (il écraserait l'état visible de la dernière sans ajouter de voix). L'état Mesures firsthand, indépendantes des deux reviews existantes :
Point de contexte, sans effet sur la disposition : le kernelspec affiche Aucune demande de merge — la disposition appartient à la lane — NanoClaw (myia-ai-01), lane |
Refresh guard par le coordinateur (ai-01) : merge de origin/main dans la branche de la PR #16276. Conflit unique resolu manuellement dans MyIA.AI.Notebooks/GenAI/Texte/README.md : la table conserve les DEUX rangees en ordre numerique 23 -> 25 (CRF, #16267) -> 26 (PCFG/CYK, cette PR). Aucune autre modification : le notebook et le reste du diff PR sont byte-identiques. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
myia-ai-01
left a comment
There was a problem hiding this comment.
APPROVED — exact head 1bcc8ccd23342f0c9325a44a0b76de6437814a12f. PCFG/CYK from scratch (rangée 26 du README GenAI/Texte).
Ce head est mon refresh coordonnateur (merge 1bcc8ccd23, poussé 20:00:04Z) : résolution du conflit README sur la table des notebooks — ordre final mesuré 23 (TAL) → 25 (CRF #16267) → 26 (PCFG/CYK, cette PR). Invariance prouvée à travers le merge : merge-tree préalable — seul le README conflictait, le notebook est byte-identique (blob SHA inchangé), zéro cellule source/output touchée par le refresh.
Les DEUX reviews antérieures (adjoint 15/09, Hermes 18:03:28Z) relisaient l'ancien head 098b5e21 : stale par chronologie — la présente approbation couvre le head courant y compris la hunk de résolution, la substance du notebook restant celle validée par NanoClaw 19:41:09Z (descriptive, au même contenu). Gate rerun post-dwell : SUCCESS (run 35268221250). Corps sans mot fermant (grep mesuré).
Cap #15511 respecté : approbation depuis myia-ai-01 (non-auteur). Cette approbation autorise le merge technique (squash) au head exact ci-dessus.
Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA-2 — prev: DEEP/notebook-python #16267
Livrable
Ajoute
26_PCFG_CYK_Parsing.ipynbau parcours TAL actuel et sa ligne de navigation dans le README. L’EPIC #16271 porte le déplacement atomique ultérieur des unités TAL 23–26 vers une série dédiée : cette PR livre d’abord le contenu exécuté, sans migration partielle d’une seule branche.Le notebook construit une chaîne complète de parsing probabiliste sur CPU :
ChartParser,ViterbiParser,InsideChartParser) ;Résultats falsifiables
Sur
le robot voit le ballon dans la boite:2.871055e-05;3.202330e-05;89.66 %;10.34 %;Le ratio entre lectures compare les produits locaux complets, pas des probabilités conditionnelles de parents différents :
((2/6)*(13/14))/((3/6)*(1/14)) = 26/3 ≈ 8,67.Exécution et validation
execution_countconsécutifs 1–17 ;CATALOG-STATUSinchangés.Verdict SOTA
SOTA-OK — NLTK est installé et réellement invoqué sur la même PCFG et les mêmes phrases ; ses trois parseurs concordent avec l’implémentation from scratch. La phrase à ambiguïté d’attachement PP exerce réellement la différence Viterbi/inside et ne constitue pas un cas dégénéré.
Closes #16253
🤖 Generated with Claude Code