Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ python scripts/fallacy_detection/sample_external_eval.py \
--n 200 --min-per-family 10 --seed 42
```

L'outil garantit, par construction et par tests (`tests/test_sample_external_eval.py`) :
L'outil garantit, par construction et par tests (`scripts/fallacy_detection/tests/test_sample_external_eval.py`) :

- **plancher stratifié** : chaque famille de premier niveau ≥ 10 paires, sinon refus fail-closed nommant la famille déficiente ;
- **aveugle structurel** : `sheet.jsonl` (feuille évaluateur) ne contient jamais le nœud cible **ni sa famille de premier niveau** (la liste fermée des familles reste connue des évaluateurs — c'est l'espace de réponse du passage 1 — mais la famille correcte d'un item est la première moitié de la réponse : la porter sur la feuille rendrait le seuil « branche » du §4 circulaire) ; `key.jsonl` (correction, qui porte la famille pour la stratification) est un fichier séparé ;
Expand All @@ -50,7 +50,7 @@ python scripts/fallacy_detection/render_annotation_sheet.py convert \
--out .../pass1/<pseudonyme>.jsonl
```

Trois points que le rendu tient par construction (`tests/test_render_annotation_sheet.py`) :
Trois points que le rendu tient par construction (`scripts/fallacy_detection/tests/test_render_annotation_sheet.py`) :

- **l'aveuglement est vérifié à l'entrée** : une feuille portant un champ autre que `item_id` et `text` est refusée — passer `key.jsonl` par erreur échoue au lieu de publier les étiquettes ;
- **l'espace de réponse est la liste des nœuds**, groupée par famille, sans définition ni exemple : c'est exactement ce que le passage 1 du §3 autorise à montrer ;
Expand All @@ -62,7 +62,7 @@ restent soumis au §6.

## 3. Évaluateurs

- **≥ 3 évaluateurs indépendants** (l'arbitrage du panel — qui sont les humains, et sous quelle modalité — est l'objet de la question user Q25, registre de la lane).
- **≥ 3 évaluateurs indépendants** (la **voie** — pilote ou campagne — est autorisée par la question user Q25 le 2026-10-12, qui n'a pas tranché entre les deux ; le choix reste au coordinateur, cf. §7, et l'identité des évaluateurs et la modalité de recrutement restent à décider au moment de l'exécution).
- **Passage 1 « annotation nue » (obligatoire)** : l'évaluateur voit le texte et la liste des familles de premier niveau ; il choisit la famille, puis le nœud dans la famille. Il ne voit **ni la définition des nœuds, ni aucun exemple** — c'est le passage qui mesure la retrievability « à froid ».
- **Passage 2 « avec définitions » (optionnel, séparé)** : mêmes items, définitions des nœuds visibles. Il mesure l'apport des définitions, jamais il ne remplace le passage 1.

Expand Down Expand Up @@ -103,5 +103,8 @@ Un identifiant qui afficherait la graine (forme `eval-<graine>-<rang>`) la donne

- [x] Instrument d'échantillonnage + tests (ce grain).
- [x] Échantillon réel `run1` (2026-10-20, table mergée via #20315 ; **re-émis le 2026-10-23** après le fix dedup du builder) : le corpus aligné (225 paires, `data/academic/aligned/`) est construit par `build_aligned_eval_corpus.py` — 128 joins exacts, 97 par pont déclaré (un rationale par pont), 44 exclus motivés, **unicité (texte, nœud) garantie à l'émission** (3 paires démultiplicées fusionnées, libellés sources dans `source_labels` ; la première émission dupliquait des paires, ce qui rendait la campagne inmesurable — c.6373865101). Tirage : 200 items, graine 42, stratifiés sur **6 familles** (17-56 par famille) ; la 7ᵉ (Tricherie) est **mesurée à 0 paire source** dans le gold MAFALDA entier — aucun span ne porte son unique label L2 (`Fallacy of proportion`). `sheet.jsonl` / `key.jsonl` / `manifest.json` (empreintes SHA-256 de la source, de la feuille et de la clé) vivent hors dépôt : `G:\Mon Drive\MyIA\IA\external-eval-20222\run1\` (circulation §6 — organisateur seul) ; la première émission (défectueuse, jamais circulée) est préservée dans `run1-superseded-20261023\`.
- [ ] Panel d'évaluateurs : arbitrage user Q25 (recommandation lane : étudiants des cours, TP guidé).
- [ ] Campagne d'annotation + mesures (§4) + re-vues (§5).
- [x] **Reproductibilité de `run1` confirmée par un second tirage indépendant** (2026-10-24, lane `myia-po-2028:CoursIA`) : relancé sur le corpus aligné courant, `--n 200 --min-per-family 10 --seed 42`, le tirage rend un `sheet.jsonl` **octet pour octet identique** à celui de `run1` — même empreinte source `8f2dc776…`, même empreinte feuille `f66058b6…`, même empreinte clé `4b66ace4…` et mêmes effectifs par famille (17/22/56/44/27/34). La propriété « même graine = même échantillon » du §2 est donc tenue par une mesure, pas seulement par un test unitaire. Copie du tirage conservée hors dépôt : `…\external-eval-20222\run1-200-po2028\sample\` — `run1\` reste la référence de la campagne.
- [x] **Chaîne complète exercée de bout en bout** (2026-10-24, même lane) : `sample_external_eval.py` → `render_annotation_sheet.py render` → `… convert` → `score_external_eval.py`. Contrôle d'étanchéité **de plomberie, pas une mesure** : trois feuilles de réponses recopiées depuis la clé elle-même donnent alpha nœud 1,000, alpha branche 1,000, exactitude 1,000 (IC Wilson 0,994-1,000) et 0 item à revoir. Ce que ce contrôle prouve est que la feuille rendue est **remplissable** et que le mesureur consomme la forme exacte que `convert` produit ; il ne dit **rien** de l'accord entre humains (§4), et ses artefacts portent `_plumbing_control` dans leur chemin pour ne jamais être pris pour une campagne.
- [x] **Feuilles d'annotation du passage 1 rendues** (2026-10-24) : trois documents de 200 énoncés (`eval_a`, `eval_b`, `eval_c`), chacun avec son gabarit CSV et son manifeste de rendu, sous `…\external-eval-20222\run1-200-po2028\pass1\`. L'espace de réponse fermé y est la section « 6 familles, 16 nœuds » ; aucun énoncé ne porte son nœud ni sa famille (vérifié : la feuille ne porte que `item_id` et `text`). Une feuille par évaluateur, le critère 2 exigeant trois évaluateurs indépendants.
- [ ] **Panel humain** : Q25 est **répondue** depuis le 2026-10-12 (« OK pour i ou ii », citée dans le corps de #22233) — le pilote 30-50 paires est autorisé, cette ligne ne décrit donc plus un arbitrage en attente mais une **exécution** : recruter ≥ 3 évaluateurs indépendants, leur remettre les feuilles du passage 1, récupérer les CSV remplis. Choix de la voie (pilote 30-50 paires avant la campagne complète, ou campagne 200 directe) à trancher par le coordinateur.
- [ ] Campagne d'annotation + mesures (§4) + re-vues (§5) — aucune des deux ne peut être produite par un agent : elles exigent des évaluateurs humains.
Loading