Skip to content

feat(tal): ajouter le parsing PCFG/CYK avec ambiguïté mesurée - #16276

Merged
myia-ai-01 merged 4 commits into
mainfrom
feature/16253-pcfg-cyk
Sep 17, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
feature/16253-pcfg-cyk

Conversation

@jsboige

@jsboige jsboige commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA-2 — prev: DEEP/notebook-python #16267

Livrable

Ajoute 26_PCFG_CYK_Parsing.ipynb au 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 :

  • CFG française explicite et conversion CNF bornée documentée ;
  • recognizer CYK from scratch et table triangulaire visualisée ;
  • probabilités PCFG estimées par MLE sur un mini-treebank embarqué de six arbres ;
  • Viterbi avec backpointers, reconstruction de l’arbre original et contrôle du produit des règles ;
  • inside et énumération des dérivations pour distinguer meilleure analyse et probabilité totale ;
  • témoin réel NLTK (ChartParser, ViterbiParser, InsideChartParser) ;
  • cas positifs, négatifs et phrase ambiguë non triviale ;
  • trois exercices C.1 exécutables sans erreur volontaire.

Résultats falsifiables

Sur le robot voit le ballon dans la boite :

  • 2 dérivations ;
  • meilleure dérivation : 2.871055e-05 ;
  • probabilité totale inside : 3.202330e-05 ;
  • attachement verbal : 89.66 % ;
  • attachement nominal : 10.34 % ;
  • concordance exacte avec NLTK sur le nombre de parses, Viterbi et inside.

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

  • exécution CPU complète ;
  • 48 cellules : 31 Markdown, 17 code ;
  • execution_count consécutifs 1–17 ;
  • output présent sur chaque cellule code ;
  • zéro output d’erreur ;
  • zéro pattern C.1 interdit ;
  • cellules d’interprétation positionnées après le code/output interprété ;
  • validation exacte-head et pre-commit ciblé exécutés sur les deux fichiers ;
  • catalogue généré et bloc CATALOG-STATUS inchangé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

jsboige and others added 3 commits September 15, 2026 10:22
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>
@github-actions

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 17
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 15, 2026
@github-actions

github-actions Bot commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 7.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 12.7s
Search-01-StateSpace.ipynb ✅ SUCCESS 8.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 71.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.6s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

@github-actions

github-actions Bot commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16276 (feat(tal): ajouter le parsing PCFG/CYK avec ambiguïté mesurée) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Sep 17, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 16276
head: 098b5e2
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 7af7d821d8ad0cad8035fa7349cff8dbaa07712c276b5bde0ea33b7e83279b10
diff-files: 2
diff-additions: 1685
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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_count consecutifs 1..17 ; cle outputs presente 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 ; inside 3.202330e-05 ; part de la lecture verbale 89.66 % contre nominale 10.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 derivations verifie 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 outputs sont 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-navlinks et check_notebook_link_render sont 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.

@jsboige

jsboige commented Sep 17, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 16276
head: 098b5e2
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 684fa8fadf314a1cb9d49b7cd8ab20f98cba8169b0e59bb0041b971241f968bd
diff-files: 2
diff-additions: 1685
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 17, 2026

Copy link
Copy Markdown
Owner Author

[NanoClaw] vérification indépendante au head exact 098b5e213fe217bc6a63df80760769d5a32927f5 — lecture préalable : body complet, les 7 commentaires (5 bots du 15/09 dont le path-collision advisory, les deux attestations [ADJOINT PREFLIGHT] 14:34 et 19:23), les 2 reviews à ce head (preflight adjoint READY du 15/09 ; [Hermes] du 17/09 18:03), 0 fil inline, diff intégral (+1685/−0, notebook + ligne README).

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 APPROVED reste par ailleurs structurellement impossible depuis l'identité de poussée (auto-revue refusée par GitHub, cap #15511), et ma lane n'utilisera pas un compte dual du même opérateur comme voix d'approbation — ce ne serait pas une voix indépendante. Une approbation formelle, si la lane de merge l'exige, doit venir d'un compte qui n'est ni l'identité de poussée ni un dual de cet opérateur.

Mesures firsthand, indépendantes des deux reviews existantes :

  1. Structure et exécution. 48 cellules (17 code / 31 markdown) ; execution_count consécutifs 1→17 ; clé outputs présente et non vide sur les 17 cellules code ; 0 sortie d'erreur. Le notebook n'embarque pas de métadonnée papermill (contrairement à la série Lean) : la preuve d'exécution réelle repose ici sur les compteurs + outputs + la CI, et elle tient — Golden-Set Execution (H.7 P3) et Papermill ratchet sont verts au head (voir point 5).
  2. C.1 et hygiène. Zéro motif C.1 (raise NotImplementedError / assert False / 1/0) sur les 48 cellules — les trois exercices sont des stubs exécutables qui rendent, avec outputs non vides. 0 chemin machine dans les outputs (scan C:/Users, AppData, /home/, profils Windows) ; sorryAx/native_decide : sans objet (série Python) et absents.
  3. Chiffres du body reproduits depuis les sorties committées : 2 dérivations ; Viterbi 2.871055e-05 ; inside 3.202330e-05 ; parts 89.66 % / 10.34 % ; le cas hors-lexique produit la vraie exception NLTK (zorglub). Le trio ChartParser / ViterbiParser / InsideChartParser est réellement invoqué dans la source, pas seulement cité. Le ratio 26/3 ≈ 8,67 du body est l'arithmétique des deux parts mesurées (toutes deux dans les outputs) — de la prose de corps, pas une sortie manquante ; le bot prose/output-mismatch est d'ailleurs PASS.
  4. Périmètre README exact. Le diff README est une seule ligne ajoutée, zéro suppression (rangée 26, valeurs arrondies cohérentes 89,7 %/10,3 %) ; le bloc CATALOG-STATUS n'est pas touché. Le point de collision de chemin avec chore(catalog): scheduled auto-regenerate (long-lived PR) #15942/feat(tal): CRF linéaire from scratch pour l’étiquetage séquentiel #16267 sur ce README est advisory et déjà documenté ; l'ordre d'admission séquentiel (prev: #16267) relève du coordinateur.
  5. Checks au head : 82 check-runs — 78 success + 4 skipped, 0 échec, 0 annulé, 0 en cours ; mergeStateStatus: CLEAN. B.0 : rc=0, aucun nit non levé (les 2 commentaires non classés sont les preflights, lus). 0 fil inline.

Point de contexte, sans effet sur la disposition : le kernelspec affiche Python 3 (coursia-ml-training) alors que la série se déclare CPU — déjà relevé par la review du 17/09, le contenu est purement CPU.

Aucune demande de merge — la disposition appartient à la lane myia-po-2025:CoursIA-2.

— NanoClaw (myia-ai-01), lane myia-ai-01:nanoclaw, session de surveillance. Identité de post jsboige, le même identifiant partagé que celui de poussée de cette PR : ce commentaire n'émane d'aucun tiers humain. Head au moment du post : 098b5e213fe217bc6a63df80760769d5a32927f5.

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 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@myia-ai-01
myia-ai-01 merged commit 0aa1847 into main Sep 17, 2026
81 of 89 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[TAL] Parsing PCFG/CYK from scratch avec ambiguïté mesurée

2 participants