Skip to content

feat(nlp,#18058): NLP/02 N-grammes - section 8 génération conditionnelle - #18293

Closed
jsboige wants to merge 2 commits into
mainfrom
feature/18148-nlp02-ngram-generation
Closed

jsboige wants to merge 2 commits into
mainfrom
feature/18148-nlp02-ngram-generation

Conversation

@jsboige

@jsboige jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2023:CoursIA-2 -- prev: MED/notebook-python #18138

Resume

Ajout d'une section 8 « Generation d'echantillons » dans le carnet NLP/02 N-grammes, entre la courbe perplexite (section 7) et les exercices (anciennement section 8, renommee 9).

Trois nouvelles cellules :

  1. Intro markdown (12 lignes) : pourquoi la generation est un test de coherence pour un modele de langue, ce que la theorie predit selon l'ordre (bruit -> fragments -> verbatim).
  2. Cellule code (37 lignes) : construction d'un trigramme MLE sur le train, generation de 8 mots avec 3 graines (<s>, «, Il) pour les modeles unigramme, bigramme et trigramme, affichage structure en 3 blocs.
  3. Lecture du resultat (24 lignes) : interpretation des sorties reelles sur le corpus Fables de La Fontaine, signature bruit -> fragments -> verbatim documentee avec les valeurs effectivement generees.

Detail technique

random_seed par graine

Le bug rencontre en prototypage : un random_seed=42 unique pour les 3 graines textuelles faisait converger les 3 sorties sur la meme sequence. Cause : nltk.lm.generate() utilise random_seed pour amorcer le RNG interne ; seul le premier appel conditionne la chaine sur text_seed, ensuite le RNG determine tout. Un germe unique = une seule trajectoire du RNG = memes sorties pour toutes les graines.

Correctif : random_seed = germe_base + i (42, 43, 44). La reproductibilite reste acquise par couple (text_seed, random_seed) -- la cellule est rejouable a l'identique (C.2).

Sorties observees (kernel coursia-ml-training, FABLES_TRAIN ~350 mots)

=== Unigramme (ordre 1) ===
  seed=['<s>'] rs=42 | le , au Phenix ne les ses ,
  seed= ['«'] rs=43 | , loup . et lente pot et faisiez-vous
  seed=['Il'] rs=44 | des gagna sa La Que , . ,

=== Bigramme  (ordre 2) ===
  seed=['<s>'] rs=42 | Nuit et la force . <UNK> Rien ne
  seed= ['«'] rs=43 | He bonjour , le renard se parlerent longtemps
  seed=['Il'] rs=44 | Le lion , elle alla crier famine chez

=== Trigramme (ordre 3) ===
  seed=['<s>'] rs=42 | <UNK> He bonjour , Monsieur du Corbeau .
  seed= ['«'] rs=43 | <UNK> Pas un seul petit morceau de mouche
  seed=['Il'] rs=44 | <UNK> Le rat des champs se rencontrerent et

Lecture : unigramme = bruit lexical (mots frequents, ordre aleatoire). Bigramme = fragments localement plausibles (cooccurrences article+nom, pronom+verbe). Trigramme = verbatim du corpus (segments memorises), avec <UNK> en position initiale parce que les 3-mois vus a l'entrainement ne commencent pas par les graines.

Comptage

Avant Apres
39 cellules 41 cellules
11 code 12 code
8 sections 9 sections (section 8 inseree, ancienne 8 renommee 9)

Toutes les cellules code conservent execution_count != null et outputs != [] (C.2). Pre-commit H.3 passe.

Verification

  • Re-execution : jupyter nbconvert --to notebook --execute --inplace --ExecutePreprocessor.kernel_name=coursia-ml-training -- 48500 octets ecrits, exit 0.
  • nltk : pip install nltk dans coursia-ml-training (nltk 3.10.3, regex 2024.11.6). punkt/punkt_tab et stopwords deja presents dans ~/AppData/Roaming/nltk_data.
  • Sorties : verbatim de la cellule 31 apres re-execution (ci-dessus).

Lien

Cible : issue #18058 (tranche NLP). Cette PR est une des 5 tranches de l'inventaire c.921 sur MyIA.AI.Notebooks/Search/Applications ; la liste complete est dans #18256.

Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com

3 nouvelles cellules entre la courbe perplexite (section 7) et les
exercices (anciennement section 8, renommée 9) : une intro markdown,
une cellule code qui genere 3 echantillons (uni/bi/tri) avec 3
graines textuelles distinctes, et une lecture du resultat qui
documente la progression bruit -> fragments -> verbatim.

Le random_seed varie par graine (germe_base + i) pour que la
condition sur text_seed soit visible. Un random_seed unique pour
les trois graines converge sur la meme sequence (le germe du RNG
fixe toute la chaine), ce qui rend la demonstration inerte. La
reproductibilite reste acquise : un couple (text_seed, random_seed)
rejoue a l'identique (C.2).

Cellule 31 re-executee (kernel coursia-ml-training), outputs
committes (C.2). 12 cellules code, toutes execution_count != null.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

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

github-actions Bot commented Sep 28, 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 2.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.7s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 17.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.4s

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

@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 28, 2026
@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 12
  • 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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #18293 (feat(nlp,#18058): NLP/02 N-grammes - section 8 génération conditionnelle) 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.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Fermeture par supersede, decision coordinateur (ai-01).

Trois PRs ajoutaient la meme section 8 « generation » a NLP/02_NGrammes_Modeles_De_Langue.ipynb : #18180 (lane po-2026:CoursIA, ouverte 02:42Z, review NanoClaw LGTM, seule a porter la section en premier), #18230 (fermee) et celle-ci (18:14Z). Une seule continue : #18180, par anteriorite de livraison. Le claim de cette lane sur #18148 (12:57Z) est posterieur a l'ouverture de #18180 : le controle des PRs ouvertes sur le fichier n'a pas tourne, cause et correctif sur le dashboard CoursIA.

Ce qui est propre a cette PR et merite d'etre repris : le conditionnement sur trois graines textuelles (<s>, «, Il) avec un random_seed distinct par graine, et l'explication du piege (un germe unique fait converger les trois sorties). Si #18180 ne le couvre pas, la lane l'ajoute par une PR courte apres le merge de #18180, sur la tete de main a ce moment-la. Cette PR se rouvre si #18180 est refusee.

@myia-ai-01 myia-ai-01 closed this Sep 29, 2026
myia-ai-01 added a commit that referenced this pull request Sep 29, 2026
…hs (#18347)

`check_lane_claim.py N --lane L` (SANS `--paths`) lisait `my_paths` au lieu
de `my_scope`. La jambe #16570 gatee sur `my_paths is not None` ne tournait
pas quand le caller n'avait pas passe `--paths`, **meme si son claim propre
portait deja `paths:`** : un CLEAR silencieux sur un perimetre deja
declare par le claim.

Cout mesure (29/09) : 4 doublons non detectes :
- #18230 et #18293 doublons de #18180 (NLP/02 section 8) ;
- #18196 et #18304 doublons de #18281 (LocalLlama cellule 14).

Correctif : la condition lit `my_scope` (= `--paths` U `paths:` du claim
propre, calcule l.2403). Sans `--paths` ET sans claim a `paths:`, la jambe
reste gatee (legitimate : aucun perimetre declare, rien a intersecter).

Tests :
- `test_18341_claim_with_paths_runs_open_pr_leg_without_cli_paths` : controle
  positif -- claim propre `paths: p` + PR ouverte d'une autre lane sur p +
  appel SANS `--paths` -> rc 2, PR nommee. Avant le fix : rc 0 silencieux.
- `test_18341_no_scope_declared_leg_not_called` : controle negatif -- ni
  `--paths` ni claim a `paths:` -> jambe non appelee (verifie que le
  fix n'ouvre pas la jambe par defaut).
- `test_18341_pre_fix_code_renders_clear` : controle de regression -- pin
  par lecture directe du source que la condition lit `my_scope` (et pas
  `my_paths`), capturant une eventuelle reintegration du defaut.

Périmètre : 2 fichiers, +80/-2.

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants