10. IA génératives#
10.1. Introduction#
L’intelligence artificielle n’existe pas (au sens intelligence humaine) !
L’IA terme générique, apparu en 1956, pluri-disciplinaire :
Sciences des données
Informatique
10.1.1. principe de l’IA actuelle#
Traitement de masse de données (utile en sciences)
nécessite une base de données labellisées (apprentissage supervisé)
machine learning, deep learning (réseaux de neurones)
Fournit une corrélation (loi) entre données \(X\) et résultats \(Y\):
\[Y = F_{\alpha}(X)\]mais pas de caractères explicatifs !
10.2. Historique de l’IA générative [1]#
[1] IA et Enseignement Supérieur : Formation, Structuration et Appropriation par la Société, rapport ESR 2025 (F. Pascal et al)
10.2.1. Au début l’IA symbolique#
Le concept d’intelligence artificielle (IA) a été officiellement nommé en 1956 à la conférence de Dartmouth, bien que l’idée d’automatiser le raisonnement humain remonte à bien avant. Les réseaux de neurones, introduits dès 1957, ont longtemps été marginalisés face aux approches symboliques de l’IA, qui reposent sur la logique, la représentation formelle des connaissances et le raisonnement. Ces dernières ont prospéré dans l’industrie via les systèmes experts (par ex., trains autonomes, optimisation de placement). Entre les années 1960 et 2000, des avancées majeures dans les réseaux de neurones « notamment les travaux de Yann LeCun dans les années 1990 » ont eu un impact scientifique, mais restaient modestes sur le plan médiatique.
10.2.2. Avènement de l’IA basé sur les données#
L’avènement des réseaux de neurones a vraiment commencé en 2009 avec l’apparition de l’apprentissage profond, qui résolvait le problème de l’entraînement des réseaux multicouches, et l’utilisation des GPU pour les calculs massifs. Cette nouvelle approche « IA basée sur les données » a rapidement éclipsé l’IA symbolique. Les réseaux profonds ont d’abord complété ou remplacé les méthodes symboliques et statistiques classiques, atteignant des sommets avec AlexNet (2012) en reconnaissance d’images et AlphaGo (2015) qui a battu le champion du monde de Go. Dans ces succès, la taille des réseaux et l’énorme quantité de données (images collectées sur Internet ou parties de Go simulées) ont été déterminantes.
10.2.3. Début de la génération de données (images)#
Les algorithmes de génération de données existaient avant l’apprentissage profond, avec des modèles de Markov en saisie prédictive et des règles symboliques pour la génération procédurale d’images. L’avènement des auto‑encodeurs variationnels (VAE, 2013), des réseaux antagonistes génératifs (GAN, 2014) et, plus tard, des modèles de diffusion (2015), a permis d’utiliser des réseaux profonds pour créer des images d’un réalisme presque photoréaliste. C’est à cette époque que s’est formalisée la notion d’intelligence artificielle générative (IAG) comme une branche distincte de l’apprentissage profond.
10.2.4. IA générative textuelle#
Les transformers lancés en 2017 ont permis le développement de GPT‑1 en 2018, marquant le début de l’IA générative textuelle. Entre 2018 et 2021, les modèles ont grandi en paramètres et en données, mais c’est l’apprentissage par renforcement avec retour humain (RLHF) qui a donné naissance à ChatGPT, transformant les compléteurs de texte en assistants réels. Parallèlement, les coûts d’entraînement et de déploiement ont explosé, rendant difficile pour le milieu académique, même en coopération internationale, de rivaliser avec les grands modèles de langage. Cette dynamique économique influence la communication scientifique, tendant à exagérer les capacités réelles des IA.
10.3. Principe du traitement du langage: « Transformers »#
Les algorithmes d’IA traitent les données sous forme de tableaux numériques, et la similarité statistique entre ces représentations reflète la similarité des données. Avant la fin des années 2010, il était difficile de représenter le texte numériquement, et les progrès se concentraient sur les images et sons. L’introduction des « transformers » en 2017 a rendu le traitement du texte plus accessible, déclenchant un renouveau de la traduction et d’autres tâches linguistiques, culminant avec le lancement de ChatGPT cinq ans plus tard.
Un « transformer » est un modèle qui apprend à repérer les relations entre les éléments d’une séquence (par exemple les mots dans une phrase) grâce à un mécanisme appelé attention.
Dans une phrase, tous les mots ne sont pas également importants. Le mécanisme d’attention permet au modèle de se concentrer sur les mots pertinents quand il essaie de comprendre ou générer un nouveau mot.
10.3.1. Exemple (de ChatGPT)#
Pour analyser la phrase « Les enfants jouent dans le jardin », celle ci est est découpée en tokens (mots);
["Les", "enfants", "jouent", "dans", "le", "jardin"]
Supposons qu’on veuille prédire le mot « jardin » :
Grace à son apprentissage, le modèle remarque que « dans » et « le » sont très liés à « jardin », il garde aussi en mémoire que « enfants jouent » donne le contexte d’une activité, et il attribue plus de poids (importance) à ces mots que, par exemple, à « Les ».
Quand il doit prédire la suite, le transformeur produit « jardin » car c’est le mot le plus probable compte tenu du contexte.
Ce qui est intéressant :
Contrairement aux anciens modèles qui lisaient de gauche à droite, le transformeur compare tous les mots entre eux en parallèle.
Il comprend que « jouer » et « jardin » sont liés, même s’ils ne sont pas collés l’un à l’autre.
Attention
Il n’y a pas de compréhension au sens humain classique, mais uniquement des relations statistiques obtenues à partir d’une base de données d’apprentissage.
10.4. IA générative LLM (ChatGPT, LLama, Mistral, ..)#
évolution pour créer des contenus nouveaux (texte, image,..)
après entraînement, prédiction du prochain mot le plus probable
Génération de nouveaux contenus à partir d’une question (prompt)
modèle de LLM GPT:
Générative: génère du contenu à partir de prompt (qui doit être le + précis)
Pretrained: IA entraînée sur des données massives
Transformers: type de réseaux de neurones établissant des relations entre les mots (statistique)
10.5. Points de vigilence#
Compréhension limitée : génération du contenu sans comprendre le sens
Risques d’erreurs : hallucination
Usage critique nécessaire :
Prompts essentiels : (précision et contexte de la question)
Sécurité des données : RGPD et droits d’auteurs
10.6. Exemple d’utilisation de ChatGPT#
question
Ecrit une fonction python pour calculer la liste des nombres premiers inférieurs à un nombre p
réponse
Voici une fonction Python qui calcule la liste des nombres premiers inférieurs à un nombre donné p :
def primes_below(p):
primes = []
for num in range(2, p):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
return primes
Cette fonction utilise une approche naïve pour vérifier si un nombre est premier. Elle itère à travers tous les nombres de 2 à p-1 et vérifie s’ils sont divisibles par des nombres inférieurs à leur racine carrée. Si un nombre est divisible par un autre nombre, il n’est pas premier et la boucle interne est interrompue. Sinon, le nombre est ajouté à la liste primes.
Voici un exemple d’utilisation de cette fonction. Dans cet exemple, la fonction primes_below(20) renvoie la liste [2, 3, 5, 7, 11, 13, 17, 19], qui sont tous les nombres premiers inférieurs à 20.
p = 20
result = primes_below(p)
print(result) # Output: [2, 3, 5, 7, 11, 13, 17, 19]
Remarques
L’algorithme proposé est correcte mais classique, et ChatGPT ne fournit aucune référence: il s’agit de l’algorithme, connu depuis l’antiquité, appelé Crible d’Ératosthène . L’article sur les nombres premiers de Wikipédia fournit une explication détaillée avec des citations, en faisant remarquer que la complexité de cet algorithme est exponentielle et donc inutilisable lorsque p devient très grand.
10.7. Un contre-exemple#
On modifie légèrement la question précédente en ajoutant une contrainte.
question
Ecrit une fonction python pour calculer la liste des nombres premiers pairs inférieurs à un nombre p
réponse (ChatGPT 3.6)
Voici une fonction Python qui calcule la liste des nombres premiers pairs inférieurs à un nombre donné p :
def even_primes_below(p):
primes = []
for num in range(2, p, 2):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
return primes
Cette fonction est similaire à la précédente, mais elle itère uniquement à travers les nombres pairs de 2 à p-1 en utilisant un pas de 2 (c’est-à-dire range(2, p, 2)). Cela garantit que seuls les nombres pairs sont considérés. Le reste de la logique est identique à la fonction précédente pour vérifier si un nombre est premier.
Voici un exemple d’utilisation de cette fonction. Dans cet exemple, la fonction even_primes_below(20) renvoie la liste [2, 3, 5, 7, 13, 17, 19], qui sont tous les nombres premiers pairs inférieurs à 20.
p = 20
result = even_primes_below(p)
print(result) # Output: [2, 3, 5, 7, 13, 17, 19]
On constate que ChatGPT a bien reconnu la contrainte, mais la solution proposée montre clairement qu’il ne comprend pas la question (i.e. la notion de nombre premier et de nombre pair) puisque dans ce cas le seul nombre premier pair est 2 et son exemple d’utilisation est évidemment faux
10.7.1. Correction ChatGPT 4.0#
En mathématiques, le seul nombre premier pair est 2. Tous les autres nombres pairs sont divisibles par 2, donc non premiers.
Donc, pour toute valeur de p > 2, la seule réponse possible est [2] (si 2 < p), ou une liste vide sinon.
Voici une fonction Python qui respecte cette logique :
def nombres_premiers_pairs_inferieurs_a(p: int) -> list[int]:
"""
Renvoie la liste des nombres premiers pairs strictement inférieurs à p.
Paramètres
----------
p : int
La borne supérieure (exclusive).
Retour
------
list[int]
Une liste contenant 2 si p > 2, sinon une liste vide.
"""
return [2] if p > 2 else []
10.8. Solution complexe donnée par l’Ia gen#
Dans certain cas la solution peut être complexe, car très générale.
question
écrit une fonction python pour lire les données T,X,Y se trouvant dans le fichier mon_fichier.dat
solution
Lecture d’un fichier mon_fichier.dat contenant les colonnes T, X, Y
import pandas as pd
from pathlib import Path
from typing import Tuple
def lire_T_X_Y(fichier: str | Path) -> Tuple[pd.Series, pd.Series, pd.Series]:
"""
Lit les colonnes T, X et Y d’un fichier texte (CSV, TSV ou délimité par des espaces).
Parameters
----------
fichier : str | Path
Chemin vers le fichier `mon_fichier.dat`.
Returns
-------
tuple[Series, Series, Series]
Un tuple contenant les colonnes T, X et Y sous forme de pandas Series.
Notes
-----
* Le fichier doit contenir au moins les colonnes **T**, **X** et **Y**.
Si des noms de colonnes différents sont utilisés, on peut les mapper
via l’argument `mapper` ci‑dessous.
* Les séparateurs acceptés sont : virgule, tabulation ou espaces multiples.
* Si la première ligne est un en‑tête (header), il sera automatiquement
pris en compte. Sinon, on peut définir `header=None` et fournir
`names=['T', 'X', 'Y', ...]`.
Example
-------
>>> T, X, Y = lire_T_X_Y('mon_fichier.dat')
>>> print(T.head())
0 0.0
1 0.1
dtype: float64
"""
# 1. Normaliser le chemin
fichier = Path(fichier)
# 2. Déterminer le séparateur en fonction de l’extension
sep = None
if fichier.suffix.lower() in {'.csv', '.tsv'}:
sep = ',' if fichier.suffix.lower() == '.csv' else '\t'
else:
# On laisse pandas décider ; on force un séparateur « whitespace »
sep = None
# 3. Lecture du fichier
try:
df = pd.read_csv(fichier, sep=sep, engine='python', header=0, comment='#')
except Exception as e:
raise IOError(f"Impossible de lire {fichier} : {e}")
# 4. Vérification des colonnes requises
required = {'T', 'X', 'Y'}
if not required.issubset(df.columns):
missing = required - set(df.columns)
raise ValueError(f"Colonnes manquantes dans le fichier : {missing}")
# 5. Extraction des séries
return df['T'], df['X'], df['Y']
# -------------------------------------------------------------
# Exemple d’utilisation
# -------------------------------------------------------------
if __name__ == "__main__":
# Supposons que `mon_fichier.dat` ressemble à :
# T X Y
# 0 1 2
# 0.1 1.1 2.1
# ...
T, X, Y = lire_T_X_Y('mon_fichier.dat')
print("T :", T.head())
print("X :", X.head())
print("Y :", Y.head())
10.8.1. Solution simple sans IA gen#
La question n’est pas suffisamment précise, car dans le cas étudié les données T,X,Y sont simplement écrites par colonnes séparées par un espace. La solution très simple est d’utiliser la fonction numpy loadtxt
def lecture(fichier):
'''lit les données dans fichier et renvoie les tableaux T,X,Y'''
T,X,Y = np.loadtxt(fichier,unpack=True,comments='#')
return T,X,Y
10.10. Sondage sur votre utilisation de l’IA générative#
Question sur IAgen
10.10.1. Rôle d’une IAGen dans la formation en science#
rôle |
rôle |
recommandé |
---|---|---|
1. Encyclopédie |
3. Ghostwriter |
NON |
2. Assistant |
4. Sparring-partner |
OUI sous réserve |
10.10.2. Utilisation d’IAgen pour l’apprentissage en sciences#
apprentissage |
apprentissage |
---|---|
Nécessite de comprendre |
Nécessite de pratiquer |
Nécessite d’écrire par soi-même |
Nécessite de valider |
10.11. Utilisation des IA Génératives dans le cours#
l'IAGen n'est pas indispensable (voir dans certain cas néfaste) pour apprendre les bases de la programmation scientifique !Car son utilisation (intelligente) nécessite de maîtriser les bases de la programmation !
L’utilisation de LLM (ChatGPT,..) est interdite lors des évaluations / examens
L’utilisation de LLM (ChatGPT,..) est proscrite lors des TP encadrés
mais
l’enseignant est présent pour vous aider et vous expliquer
vous pouvez utilisez un outil d’aide utilisant une IA générative locale (OLLAMA)
En dehors des cours/TP, utilisation éventuelle comme sparring-partner pour vous aidez
à trouver vos erreurs
à améliorer votre rédaction
mais en restant critique !!!
et ne pas faire du copier-coller sans comprendre
Utilisation responsable (et non systématique)
ne pas l’utiliser à la place d’un moteur de recherche !! (coût énergétique)
etre précis dans la question
ne jamais utiliser tel quel !
demander les sources
conserver son autonomie et ses compétences
10.12. Bibliographie#
« Intégrer l’IA générative dans les stratégies pédagogiques », Pascal Vangrunderbeeck 2024, UCLLouvain
« Évaluer et faire évoluer les compétences à l’ère de l’IAg », Richard-Emmanuel Eastes, 2025, CEPSUP Lyon
10.9. Comment (bien) utiliser une IA générative (ChatGPT, …)#
Pour obtenir un résultat plus pertinent, fournissez des instructions sur la manière dont vous souhaitez qu’il réponde.
Préciser en particulier le rôle, les objectifs et le contexte
Si votre requête ne donne pas le résultat escompté, essayez de modifier les instructions et relancez la requête.
Il n’existe aucun moyen général pour une IAgen de vérifier les informations qu’elle fournit ou d’évaluer leur fiabilité.
Mais surtout: savoir si l’utilisation de l’IAGen est pertinente
10.9.1. Diagramme de l’UNESCO (bien utiliser l’IAGen)#