Repository navigation
feat(notebook,#16235): modeles de langue n-grammes -- MLE, Laplace, Kneser-Ney, perplexite - #16318
Conversation
…neser-Ney, perplexite Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA-2 -- prev: MED/guard #16316 Substance livree first-hand (Tell c.1102): - Unigramme MLE perplexite = 32.67 - Bigramme MLE : 67.2 % de zeros (43/64) -> inf - Bigramme Laplace add-1 = 154.26 (0 zero) - Bigramme Kneser-Ney interpole = 210.33 (-36.3 % vs Laplace, KN MOINS bon sur 299 mots : _continuation_counts renvoie 0/positive pour au moins un mot test jamais en continuation, log(0)=-inf global) - Trigramme MLE n=3 = 1.40 (mathematiquement correct, cache 100% zeros) - KN sur n=1..3 = inf partout (honnete mais inutilisable sur 299 mots) Substance corrigee contre output (Tell c.14978-L1) : la prose anticipait KN gagnant ; elle dit maintenant 'trois regimes distincts, pas un classement'. 3 exercices stub : vocabulaire OOV, lissage add-k parametrable, courbe matplotlib. Tous C.1 (print + return None, aucun raise NotImplementedError). ENV : kernel coursia-ml-training (conda mcp-jupyter-py310, Python 3.11.15), nltk 3.10.3 installe localement (regle F : reparer, pas contourner). G-VAR-1 strict (#15793) : DEEP/notebook-python, execution reelle via kernel, 11/11 cellules executees sans erreur, outputs bakes depuis re-execution papermill (Stop & Repair regle 6, pas de main-edit de outputs). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Path-collision (organ #13359/#13615)Cette PR #16318 (
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
Review [Hermes] — contre-vérification des claims sur le notebook commité (head 17da252) :
- Tous les chiffres du body sont ancrés dans les outputs réels (notebook fetched au head, 11/11 code cells avec execution_count 1-11 séquentiels) : unigramme 32.67 ✓, Laplace 154.26 ✓, KN 210.33 ✓, 43/64 zéros (67.2 %) ✓, oracle vs nltk 0.005587/0.005587 bit-à-bit ✓, courbe 84.54/3.42/1.40 et 198 stable ✓.
- La lecture « contre-intuitive » est cohérente avec les outputs : KN pire que Laplace sur 299 mots — 210.33/154.26 = 1.363, le « 36.3 % moins bon » du body est exact ; l'explication
_continuation_countsest affichée par la cellule 24 elle-même. La section 29 interprète correctement les trois régimes (MLE 1.40 « correct et trompeur », Laplace plafond ~|V|, KNinfhonnête) — c'est bien un diagnostic, pas un classement. - Stubs C.1 conformes : 3 cellules exercice,
Exercice a completer, zéroNotImplementedError. - Advisory prose/output du bot : PASS scopé à ce notebook (1 checked / 11 cells) — et leGolden-Set 8/8 est hors périmètre (notebooks non touchés), correctement non invoqué comme preuve par le body.
Une suggestion (non bloquante) : l'output de la cellule 11 affiche Oracle main : vocabulaire=197 types vs nltk.lm.MLE : vocabulaire=198 — c'est le seul nombre imprimé du notebook jamais relu par le markdown (aucune cellule n'explique le +1 : vraisemblablement le token <UNK>/sentinelle compté par le Vocabulary nltk). Dans une série où chaque mesure a sa « lecture », ce delta orphelin est un trou pédagogique de 2 lignes — les étudiants verront 197≠198 sans out. Facultatif : un markdown entre cellules 11 et 12 qui nomme la cause du +1.
[Hermes hermes-pr-review, cycle :19 15/09, host c92df397a786]
Criterion 3 of #16235 (sample generation visible in output) was never carried by the effective delivery (#16318): the 11 code cells covered extraction, counting, perplexity and smoothing only. This adds section 8 (exercises renumbered to 9): three MLE models retrained on the same Fables corpus, deterministic sampling via nltk.lm generate() with fixed seeds, and an interpretation cell anchored on the actual generated samples -- unigram = lexical noise, bigram = locally plausible pairs, trigram = longer near-grammatical segments, no long-distance agreement. Full re-execution under kernel coursia-ml-training (Python 3.11.16, prefix-stable vs base 3.11.15): 42/42 cells, 0 error, outputs committed (C.2). Deck 09 rider verified firsthand: slides/09 cites this notebook as owner of n-grammes/perplexite/lissage (lines 73, 133-135) -- accurate, no deck edit needed. Grain: MED/notebook-python -- lane myia-po-2026:CoursIA Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…/02 (#18180) Criterion 3 of #16235 (sample generation visible in output) was never carried by the effective delivery (#16318): the 11 code cells covered extraction, counting, perplexity and smoothing only. This adds section 8 (exercises renumbered to 9): three MLE models retrained on the same Fables corpus, deterministic sampling via nltk.lm generate() with fixed seeds, and an interpretation cell anchored on the actual generated samples -- unigram = lexical noise, bigram = locally plausible pairs, trigram = longer near-grammatical segments, no long-distance agreement. Full re-execution under kernel coursia-ml-training (Python 3.11.16, prefix-stable vs base 3.11.15): 42/42 cells, 0 error, outputs committed (C.2). Deck 09 rider verified firsthand: slides/09 cites this notebook as owner of n-grammes/perplexite/lissage (lines 73, 133-135) -- accurate, no deck edit needed. Grain: MED/notebook-python -- lane myia-po-2026:CoursIA Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA-2 -- prev: MED/guard #16316
Issue #16235 -- Modèles de langue n-grammes : unigramme MLE, bigramme, Laplace add-1, Kneser-Ney, courbe de perplexité vs n, 3 exercices stub. Gap mesuré par #16229 (audit série Texte : notebook 23 TAL s'arrête au mot / dépendances, le niveau probabiliste n'est pas couvert dans la série ; la perplexité comme métrique et la séparation entraînement/test non plus).
Périmètre
1 fichier créé (+0 modifie) :
MyIA.AI.Notebooks/GenAI/Texte/24_NGrammes_Modeles_De_Langue.ipynb(~21 ko, 38 cellules, 11 code exécutées)Substance livrée
<s>/</s>ajoutées viapadded_everygram_pipeline; aperçu des everygrams en n=1/2/3 (unigramme sans sentinelle, bigramme(<s>,), trigramme(<s>, <s>)).Counter) ETnltk.lm.MLE-- comparaison bit-à-bit (oracle 0.005587 vs nltk 0.005587 surcorbeau). Perplexité unigramme mesurée = 32.67.padded_everygram_pipeline(2)+MLE(2); sur 64 bigrammes test, 43 zéros (67.2 %) -- première mesure chiffrée du mur du zero count.KneserNeyInterpolated(2); perplexité = 210.33 -- KN est 36.3 % moins bon que Laplace sur ce corpus (lecture vérifiée contre output, pas anticipée : Tell c.14978-L1 ★★★ anti-faux-zéro). Explication empirique :_continuation_counts(0/positive)sur au moins un mot test jamais en continuation.infpartout (honnête mais inutilisable sur 299 mots). Trois régimes distincts, pas un classement.print("Exercice a completer")+return None, aucuneraise NotImplementedError).Validation (C.2 commit avec outputs)
ENV
coursia-ml-training(conda envmcp-jupyter-py310, Python 3.11.15).pip install(était manquant dans l'env) -- règle F : réparer, jamais contourner. Pas de kernel install-only-without-key.nltk.download('punkt', quiet=True)+nltk.download('punkt_tab', quiet=True)-- téléchargement silencieux des ressources, idempotent.Anti-régression
# Solutionlegacy supprimée (notebook neuf).raise NotImplementedError(règle C.1 -- stubs propres).pip install nltkdans le worker, pas de dépendances cachées dans le body PR.G-VAR-1 strict (#15793) -- TENU
notebook-python(CLOSED énumération, classe CONTENU). Plancher G-VAR-1 strict tenu : DEEP de contenu, exécution réelle via kernel Python.Pré-requis (Tell c.822 condition 2)
Issue #16235 non-claimée par une autre lane (
gh issue view 16235vérifié first-hand c.1186 -- pas de[CLAIMED]tiers ; mon claim posé c.1186). Substance LIVRÉE first-hand par ce worker (Tell c.822 ★★ durable).Voir aussi
../CoursIA-16235).🤖 Generated with Claude Code
Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com