Plan. (1) ce qu’est un sophisme, formel vs informel ; (2) le terrain du cours : la taxonomie Argumentum (repo-locale) ; (3) les taxonomies académiques en face — et le choix de corpus qui en découle.
1. Ce qu’est un sophisme
Un sophisme est un raisonnement qui paraît valide mais dont la conclusion ne suit pas des prémisses — ou ne suit que par un détour rhétorique fautif. On distingue :
les sophismes formels : la forme logique elle-même est invalide (ex. affirmation du conséquent : « s’il pleut, le sol est mouillé ; le sol est mouillé ; donc il a plu ») ;
les sophismes informels : la forme peut être correcte mais le contenu triche (ex. ad hominem : disqualifier l’auteur plutôt que l’argument ; faux dilemme : réduire à deux options ce qui en admet d’autres).
La détection automatique de sophismes (l’objet de cette série) consiste à étiqueter un texte d’argumentation avec le (ou les) sophisme(s) qu’il commet — ce qui suppose d’abord de fixer la taxonomie des étiquettes. C’est le rôle des sections 2 et 3.
# Six exemples courts, avec l'etiquette attendue (formel vs informel + type).# Ce sont des exemples construits pour le cours, pas des extraits de corpus.exemples = {"E1": "S'il pleut, le sol est mouille. Le sol est mouille. Donc il a plu.","E2": "Tous les hommes sont mortels. Socrate est mortel. Donc Socrate est un homme.","E3": "Mon contradicteur est un mauvais pere, donc son argument ne vaut rien.","E4": "Soit tu soutiens cette reforme, soit tu es contre le progres.","E5": "Ce medicament a ete pris par 3 personnes gueries, donc il soigne.","E6": "Le stade est soit plein, soit vide ; il n'est pas plein, donc il est vide.",}attendu = {"E1": ("formel", "affirmation du consequent"),"E2": ("formel", "affirmation du consequent"),"E3": ("informel", "ad hominem"),"E4": ("informel", "faux dilemme"),"E5": ("informel", "generalisation hative"),"E6": ("formel", "fausse disjonction")}for k, txt in exemples.items(): cat, t = attendu[k]print(f"{k} [{cat:8s}] {t:28s} :: {txt[:60]}")
E1 [formel ] affirmation du consequent :: S'il pleut, le sol est mouille. Le sol est mouille. Donc il
E2 [formel ] affirmation du consequent :: Tous les hommes sont mortels. Socrate est mortel. Donc Socra
E3 [informel] ad hominem :: Mon contradicteur est un mauvais pere, donc son argument ne
E4 [informel] faux dilemme :: Soit tu soutiens cette reforme, soit tu es contre le progres
E5 [informel] generalisation hative :: Ce medicament a ete pris par 3 personnes gueries, donc il so
E6 [formel ] fausse disjonction :: Le stade est soit plein, soit vide ; il n'est pas plein, don
Lecture des six exemples. E1 et E2 portent la même étiquette — affirmation du conséquent — et c’est le point pédagogique central : un sophisme formel est visible dans la forme du raisonnement, pas dans son vocabulaire. E2 est la version « Socrate » d’une structure que E1 habille en météo ; aucune ligne de logique symbolique n’est nécessaire pour la repérer, ce qui explique pourquoi la détection de sophismes est une tâche NLP à part entière et pas un exercice de démonstration automatisée.
E6 mérite une attention particulière : la prémisse pose une exclusivité (« soit plein, soit vide ») que le monde réel n’impose pas — un stade à 60 % de remplissage réfute l’alternative. Le faux dilemme de E4 opère exactement de la même manière sur le plan argumentatif, mais il est classé informel : la forme « A ou non-A » y est injectée par le contenu (qui « est contre le progrès » ?), pas par la structure grammaticale. La frontière formel/informel court donc entre la forme est fausse quelle que soit la substitution (E1, E2, E6) et la faute naît de la substitution elle-même (E3, E4, E5).
Enfin, le dictionnaire s’appelle attendu — pas vrai. L’étiquette cible est celle de la taxonomie du cours ; le notebook 03 montrera que les taxonomies académiques divergent entre elles, donc qu’un même exemple peut changer d’étiquette selon la grille. Un classifieur entraîné sur une grille n’est évaluable que sur cette grille.
Exercice 1 — Formel ou informel ?
Contexte. Les six exemples ci-dessus sont étiquetés dans attendu. Avant de lire cette variable, entraînez l’œil : la distinction formel/informel est le premier geste du détecteur (humain ou modèle).
Objectif. Pour chaque exemple E1–E6, produire votre propre couple (formel|informel, type) dans etiquettes_formel, puis comparer avec attendu et compter les désaccords.
# Exercice 1 — Etiqueter les six exemples# Etape 1 : pour chaque cle E1..E6, decider formel ou informel + le type.# Indice : deux exemples seulement sont des paralogismes formiques pures (E1, E2).# Indice : E6 cache une disjonction qui n'est pas exhaustive -- formel ou informel ?# Etape 2 : comparer avec attendu et compter les desaccords.etiquettes_formel =None# TODO etudiant
2. Le terrain du cours : la taxonomie Argumentum
Le cours ancre la détection sur la taxonomie Argumentum (catalogue francophone de 1 408 nœuds de sophismes, hiérarchie jusqu’à la profondeur 4, traduite en 8 langues — le CSV repo-local expose des colonnes _fr et _en entre autres). Mesure et discussion dans 03 ; ici, on charge et on compte.
import csvfrom pathlib import Pathfrom collections import Counter# Robuste au cwd (papermill peut lancer depuis repo-root ou le dossier notebook)._CANDIDATES = [ Path("MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/data/argumentum_fallacies_taxonomy.csv"), Path("../SymbolicAI/Argument_Analysis/data/argumentum_fallacies_taxonomy.csv"), Path("../../SymbolicAI/Argument_Analysis/data/argumentum_fallacies_taxonomy.csv"),]CSV_PATH =next((c for c in _CANDIDATES if c.is_file()), None)assert CSV_PATH isnotNone, "Taxonomie introuvable depuis cwd="+str(Path.cwd())withopen(CSV_PATH, encoding="utf-8-sig", newline="") as f: rows =list(csv.DictReader(f))all_paths = {r["path"].strip() for r in rows if r.get("path")}leaves = [r for r in rowsif r["path"].strip() and r["path"].strip() !="0"andnotany(p.startswith(r["path"].strip() +".") for p in all_pathsif p != r["path"].strip())]families = Counter(r["Famille"].strip() for r in leaves if r.get("Famille", "").strip())print(f"Taxonomie Argumentum chargee : {CSV_PATH}")print(f" noeuds total : {len(rows)} | feuilles (sophismes identifiables) : {len(leaves)}")print(" top familles :")for fam, n in families.most_common(5):print(f" {fam:<28}{n}")
Lecture du comptage. Le CSV de la taxonomie Argumentum encode chaque sophisme par un path hiérarchique (famille → sous-famille → feuille). Les nœuds intermédiaires de ce chemin — familles, sous-familles, spécialisations intermédiaires — sont eux-mêmes des sophismes étiquetables : « ad hominem » est une catégorie directement utilisable dès qu’on refuse de descendre dans la discrimination circumstantiae vs abusif. Seules les feuilles — extrémités sans descendance — représentent le maximum de spécialisation de la grille : ce sont les choix les plus fins qu’un annotateur peut faire face à un exemple, mais elles ne sont pas les seules classes réelles de la taxonomie. Compter les feuilles mesure donc la granularité opérationnelle d’annotation, et compter tous les nœuds mesure la cardinalité du vocabulaire adressable — deux quantités orthogonales, à ne pas confondre.
Deux détails d’ingénierie à noter, car ils reviennent dans toute la série : la robuesse au cwd (trois chemins candidats testés selon que papermill lance depuis la racine du dépôt ou depuis le dossier — pattern systématique dans les notebooks exécutables en CI comme en local), et l’assertion explicite quand rien n’est trouvé : échouer avec un message qui nomme le répertoire courant vaut mieux qu’une cellule silencieuse qui rend le reste du notebook mensonger. Le Counter final servira au notebook 03 pour la distribution de profondeur — le même chargement n’est donc pas re-décrit mais rejoué.
Exercice 2 — Compter les feuilles d’une mini-taxonomie
Contexte. Le comptage de feuilles ci-dessus utilise le critère de préfixe : un nœud est une feuille si son path n’est préfixe d’aucun autre. Voici une mini-taxonomie du même format :
mini = {"1", "1.1", "1.1.1", "1.1.2", "1.2", "2", "2.1", "3"}
Objectif. Écrire une fonction compte_feuilles(chemins) qui généralise ce critère (sans réutiliser la variable leaves), la tester sur mini (attendu : 5), puis sur l’ensemble des path réels du CSV.
# Exercice 2 — Fonction compte_feuilles(chemins)# Etape 1 : ecrire compte_feuilles(chemins) -> int par le critere de prefixe.# Indice : un path P est feuille ssi aucun autre path ne commence par P + ".".# Etape 2 : tester sur mini (attendu 5), puis sur all_paths du CSV.# Indice : attention au path racine "0" -- il est exclus du comptage des feuilles dans la cellule ci-dessus.nb_feuilles =None# TODO etudiant
3. Les taxonomies académiques en face
Les corpus académiques annotés (mesurés en accès réel dans 02) portent des taxonomies beaucoup plus petites — et c’est la tension centrale de la série :
L’écart — plus d’un ordre de grandeur — est mesuré et discuté dans 03 ; la stratégie de données qui en découle (corpus synthétique par produit cartésien Scénarii × Fallacy) est détaillée dans le README de la série.
# Table comparative chiffree (constantes du markdown ci-dessus ; cf. 02/03 pour les mesures).taxonomies = {"Logic/LogicClimate (Jin et al. 2022)": 13,"MAFALDA L2 (Helwe et al. 2023)": 23,"Argotario (Habernal et al. 2017)": 5,"Argumentum (feuilles, CSV repo-local)": len(leaves),}ref = taxonomies["Logic/LogicClimate (Jin et al. 2022)"]for nom, n in taxonomies.items():print(f"{nom:<42}{n:>5} classes (x{n / ref:.0f} vs Logic)")
Logic/LogicClimate (Jin et al. 2022) 13 classes (x1 vs Logic)
MAFALDA L2 (Helwe et al. 2023) 23 classes (x2 vs Logic)
Argotario (Habernal et al. 2017) 5 classes (x0 vs Logic)
Argumentum (feuilles, CSV repo-local) 894 classes (x69 vs Logic)
Exercice 3 — Choisir le corpus d’entraînement de la Phase 2
Contexte. Le README de la série pose deux voies : corpus académiques annotés (petits, humains) vs corpus synthétique par produit cartésien (couverture complète). Le choix n’est pas exclusif — mais il faut savoir pour quel usage chaque voie est bonne.
Objectif. Au vu de la table ci-dessus et des critères de 02 (labels explicites, cardinalité, accès programmatique), désigner le corpus pilote du fine-tuning Phase 3 et justifier en trois lignes : que valide-t-il, que ne valide-t-il pas ?
# Exercice 3 — Choix du corpus pilote (Phase 3 fine-tuning)# Etape 1 : relire les criteres de 02 (labels fallacy explicites, cardinalite, acces).# Indice : une evaluation OOS sur donnees humaines exige un corpus reellement annote.# Indice : la couverture uniforme de la taxonomie n'est portee que par la voie synthetique.# Etape 2 : designer le pilote + 3 lignes de justification (valide / ne valide pas).choix_pilote =None# TODO etudiant
Attendus et anti-pièges (exercices 1 à 3)
Exercice 1 (étiqueter les six exemples).Attendu : l’étiquette formel/informel d’abord, le type ensuite — l’ordre n’est pas décoratif, il correspond à la profondeur du path dans la taxonomie. E6 est le piège classique : la structure « soit… soit… » ressemble à un dilemme informel, mais la faute est dans la prémisse (l’exclusivité est fausse), pas dans la charge émotionnelle. Anti-piège : ne pas justifier l’étiquette par la vérité de la conclusion (E5 a une conclusion parfois vraie — trois guérisons ne prouvent rien, c’est la forme inductive qui est défaillante).
Exercice 2 (compter les feuilles).Attendu : le compte par famille révèle l’asymétrie de la grille — les familles ne sont pas peuplées uniformément, ce qui préfigure le problème de long tail du notebook 03 (des dizaines de feuilles rarissimes). Anti-piège : compter les lignes du CSV au lieu des feuilles du path — certaines lignes sont des nœuds intermédiaires, et le ratio feuilles/nœuds est un proxy de spécialisation de la taxonomie — pas une mesure de sa finesse sémantique : les deux divergent dès qu’une famille profonde coïncide avec une spécialisation sémantique vide, ou qu’une spécialisation sémantique riche est majoritairement attachée à un nœud intermédiaire.
Exercice 3 (choisir le corpus pilote).Attendu : la réponse est un compromis explicite entre cardinalité, licence et langue — pas « le plus gros ». Un corpus de 8 000 exemples sous licence restrictive et en anglais only peut perdre contre 3 000 exemples réutilisables dont un sous-ensemble FR. Anti-piège : raisonner sur la seule cardinalité totale ; les classes rares (celles qui ont moins de ~30 exemples) décident de la faisabilité du fine-tuning bien avant le total.