Données non tabulaires : texte, images, audio, graphes
Un modèle ne consomme que des nombres. Tout le travail, sur ces données, consiste donc à construire une représentation — et le choix de cette représentation pèse bien plus lourd que le choix de l'algorithme qui vient après. Ce module traite les quatre modalités que l'on rencontre le plus souvent, avec une insistance particulière sur les graphes, absents de la plupart des cours généralistes alors qu'ils modélisent naturellement beaucoup de systèmes d'ingénierie.
📋 Au programme
1. Texte : du TF-IDF aux transformers
Le problème
Un modèle attend un vecteur de nombres ; on lui donne « la pompe P-204 fuit au niveau du presse-étoupe ». La première solution historique, le sac de mots, consiste à compter les occurrences de chaque mot du vocabulaire : chaque document devient un vecteur de la taille du vocabulaire, presque entièrement nul. On perd l'ordre des mots, mais on obtient quelque chose d'exploitable immédiatement.
TF-IDF raffine ce comptage en pondérant chaque terme par sa fréquence dans le document et sa rareté dans le corpus :
terme présent dans log(N/nₜ) poids si présent 3 fois "le" 9 900 / 10 000 0,01 0,03 → quasi ignoré "pompe" 3 000 / 10 000 1,20 3,60 → informatif "presse- 12 / 10 000 6,73 20,19 → très discriminant étoupe"
BM25 va plus loin sur deux points : il sature la fréquence (le dixième « pompe » n'apporte presque rien de plus que le troisième) et normalise par la longueur du document, pour qu'un rapport de dix pages ne domine pas mécaniquement. C'est la composante lexicale de la recherche hybride des modules 22 et 23.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
modele = make_pipeline(
TfidfVectorizer(
ngram_range=(1, 2), # mots seuls ET paires : capture "non conforme"
min_df=3, # ignorer ce qui apparaît moins de 3 fois (bruit)
max_df=0.7, # ignorer ce qui apparaît dans 70 % des documents
sublinear_tf=True, # log(1+tf) : sature les répétitions
strip_accents="unicode",
),
LogisticRegression(C=1.0, max_iter=1000, class_weight="balanced"),
).fit(textes_train, y_train)
# interprétabilité gratuite : les n-grammes les plus discriminants
noms = modele[0].get_feature_names_out()
poids = modele[-1].coef_[0]
print("en faveur :", [noms[i] for i in poids.argsort()[-15:]])
print("en défaveur :", [noms[i] for i in poids.argsort()[:15]])Quand le classique suffit — et quand il ne suffit plus
TF-IDF et régression logistique restent excellents quand le vocabulaire est discriminant par lui-même : tri de tickets, détection de spam, classification thématique de documents techniques. L'approche échoue dès que le sens dépend de l'ordre, de la négation ou du contexte — « ce n'est pas un défaut » et « c'est un défaut » ont presque le même sac de mots. C'est là que les embeddings contextuels et les modèles de langage (module 22) deviennent nécessaires. La bonne démarche reste de mesurer l'écart : si la baseline lexicale atteint 95 % de la performance d'un transformer pour un millième du coût et avec une explication par mot, la question est tranchée.
Sur le prétraitement, deux remarques. La lemmatisation (ramener « fuyaient » à « fuir », avec spaCy) est utile en français, langue fortement fléchie, là où la racinisation brutale dégrade souvent le sens. Et la suppression des mots vides n'est pas toujours souhaitable : la négation et les mots-outils portent parfois exactement l'information recherchée.
2. Tâches classiques du NLP
- Classification — thématique, sentiment, intention. Métriques du module 8, attention au déséquilibre.
- Reconnaissance d'entités (NER) — extraire personnes, dates, références produit, valeurs avec unités. Évaluation par F1 au niveau de l'entité : une entité partiellement détectée compte comme fausse, ce qui est bien plus sévère qu'une évaluation par jeton.
- Extraction structurée — passer d'un rapport libre à un enregistrement exploitable. Historiquement des règles et des expressions régulières, aujourd'hui souvent un LLM à sortie contrainte (module 22) — mais les règles restent supérieures sur les formats rigides, et elles sont déterministes et gratuites.
- Topic modeling — LDA (modèle génératif bayésien, module 10), NMF (factorisation à coefficients positifs, plus lisible, module 8) ou BERTopic (embeddings + clustering + c-TF-IDF), qui donne aujourd'hui les regroupements les plus interprétables.
- Résumé, traduction, question-réponse — domaine des modèles génératifs ; la difficulté s'y déplace entièrement vers l'évaluation (module 22).
3. Images : au-delà de la classification
Le module 16 traite les CNN et la classification. En pratique, les tâches utiles sont souvent d'un autre type :
Classification une étiquette par image accuracy, F1 Détection d'objets boîtes + classes (YOLO, DETR) mAP à IoU 0,5 / 0,5:0,95 Segmentation sém. une classe par PIXEL (U-Net, DeepLab) IoU, Dice Segmentation d'inst. objets séparés (Mask R-CNN, SAM) mAP masque Estimation de pose points clés PCK, OKS OCR texte dans l'image (docTR, Tesseract) CER, WER Recherche d'images similarité par embedding (module 22) recall@k
vérité terrain ███████ prédiction ░░░███████
intersection = 5 pixels
union = 9 pixels
IoU = 5/9 = 0,56 Dice = 2×5/(7+7) = 0,71
Le Dice est toujours ≥ l'IoU et pénalise moins durement les petits objets :
c'est pourquoi il est préféré en imagerie médicale et scientifique, où
l'objet d'intérêt occupe souvent 1 % de l'image.Pour un profil d'ingénieur, les cas d'usage les plus fréquents ne sont d'ailleurs pas les photographies : segmentation de micrographies pour quantifier une microstructure (taille de grains, porosité, fraction de phase), détection de défauts sur des images de contrôle non destructif, analyse d'images de simulation ou de tomographie. Trois particularités y changent la méthode : les jeux annotés sont très petits (d'où le transfert et une augmentation agressive, module 13), les images sont souvent en niveaux de gris et à haute résolution (d'où le découpage en tuiles, avec recouvrement pour éviter les artefacts de bord), et la sortie attendue est généralement une mesure physique — ce qui déplace l'évaluation du score de segmentation vers l'erreur sur la grandeur mesurée.
4. Audio et signaux perceptifs
La chaîne standard transforme le son en image : découpage en fenêtres qui se recouvrent, FFT sur chaque fenêtre (module 17), passage sur l'échelle de Mel — qui reproduit la résolution non linéaire de l'oreille, plus fine dans les graves —, puis un CNN ou un transformer sur le spectrogramme obtenu. Les MFCC (coefficients cepstraux) restent une représentation compacte utile pour les tâches légères sur processeur.
Trois précautions spécifiques : l'augmentation se fait sur le signal (bruit additif, variation de vitesse, réverbération) et sur le spectrogramme (SpecAugment, qui masque des bandes de temps et de fréquence) ; la découpe train/test doit se faire par locuteur ou par appareil, jamais par extrait, sous peine de fuite (module 12) ; et pour la reconnaissance vocale, un modèle pré-entraîné comme Whisper rend l'entraînement de zéro sans objet dans l'immense majorité des cas.
5. Graphes : représentation et mesures
Un graphe modélise des entités (les nœuds) et leurs relations (les arêtes). Beaucoup de systèmes techniques en sont naturellement : un réseau électrique ou hydraulique, un maillage de calcul, une molécule, un graphe de dépendances logicielles, un circuit, une chaîne d'approvisionnement, un réseau social. Ignorer cette structure et aplatir en tableau revient à jeter l'information la plus spécifique du problème — c'est comme décrire un plan de métro par la seule liste des stations.
Degré nombre de voisins : popularité, connectivité locale
Intermédiarité fréquence d'apparition sur les plus courts chemins entre
(betweenness) toutes les paires. Identifie les points de passage obligés,
donc les points de FRAGILITÉ d'un réseau technique.
PageRank importance récursive : est important qui est pointé par
des nœuds importants
Coefficient de propension des voisins d'un nœud à être voisins entre eux :
clustering mesure la "densité locale" du réseau
Communautés partition en groupes densément connectés (Louvain, Leiden)
Composantes parties déconnectées : souvent la première chose à regarder
Assortativité les nœuds semblables se connectent-ils entre eux ?import networkx as nx
G = nx.from_pandas_edgelist(df, "source", "cible", edge_attr="poids")
print(f"{G.number_of_nodes()} nœuds, {G.number_of_edges()} arêtes, "
f"densité {nx.density(G):.4f}, {nx.number_connected_components(G)} composantes")
centralite = nx.betweenness_centrality(G, weight="poids") # points critiques
communautes = nx.community.louvain_communities(G, seed=0)
# CES MESURES DEVIENNENT DES VARIABLES TABULAIRES pour un modèle classique (module 14)
df_noeuds["pagerank"] = df_noeuds.index.map(nx.pagerank(G))
df_noeuds["degre"] = df_noeuds.index.map(dict(G.degree()))
df_noeuds["clustering"] = df_noeuds.index.map(nx.clustering(G))
df_noeuds["intermediar."] = df_noeuds.index.map(centralite)Les quatre dernières lignes méritent d'être soulignées : dans bien des projets, la meilleure façon d'exploiter un graphe n'est pas d'entraîner un modèle de graphe, mais d'en extraire des variables et de les donner à un gradient boosting. C'est simple, robuste, interprétable, et souvent suffisant. Les plongements de nœuds (node2vec, DeepWalk), qui appliquent l'idée de word2vec à des marches aléatoires sur le graphe, constituent l'étape intermédiaire.
6. Réseaux de neurones sur graphes
Un GNN généralise la convolution à une structure irrégulière. Sur une image, chaque pixel a exactement huit voisins disposés de façon régulière, ce qui permet un noyau fixe ; dans un graphe, un nœud peut avoir deux ou deux mille voisins, sans ordre. Le principe, appelé passage de messages : chaque nœud met à jour sa représentation en agrégeant celles de ses voisins.
○ B (h_B)
╲ 1. MESSAGE : chaque voisin envoie ψ(h_A, h_v, e)
C ○───● A (h_A) 2. AGRÉGATION : on combine les messages reçus par une
╱ opération INVARIANTE PAR PERMUTATION (somme, moyenne,
○ D (h_D) max) — le résultat ne doit pas dépendre de l'ordre
arbitraire des voisins
h_A ← φ(h_A, ⊕{messages de B, C, D})
3. MISE À JOUR : on combine avec l'état précédent
Après K couches, un nœud "voit" son voisinage à distance K.Les variantes diffèrent par le choix de \(\psi\) et de l'agrégation : GCN (moyenne normalisée par les degrés), GraphSAGE (échantillonnage d'un nombre fixe de voisins, ce qui permet de passer à l'échelle), GAT (pondération des voisins par attention, module 16), MPNN (formulation générale avec attributs d'arêtes, la plus utilisée en chimie).
Nœud classification ou régression par nœud détection de fraude, rôle dans
un réseau, propriété d'un atome
Arête prédiction de lien recommandation, complétion de
graphe de connaissances
Graphe propriété du graphe ENTIER propriété d'une molécule, d'un
(après agrégation globale) circuit, d'une structureLes applications les plus convaincantes sont scientifiques : prédiction de propriétés moléculaires et de matériaux (le graphe atomes-liaisons est la représentation naturelle), simulation physique apprise sur maillage — un maillage de calcul est un graphe, et les GNN y apprennent des opérateurs de propagation, ce qui rejoint le module 21 —, prévision de trafic sur réseau routier, et détection de fraude par anneaux de comptes liés.
7. Multimodal
Combiner plusieurs modalités se fait de trois façons : fusion précoce (concaténer les données brutes, rarement efficace car les échelles et les structures n'ont rien à voir), fusion tardive (un modèle par modalité, puis combinaison des prédictions — simple et robuste), et fusion intermédiaire (concaténer les représentations apprises, le meilleur compromis en général).
Les modèles contrastifs type CLIP vont plus loin en alignant deux modalités dans un espace commun : une image et sa description y sont voisines, ce qui permet la recherche d'images par texte et la classification sans aucun exemple étiqueté (module 13). En contexte industriel, le cas le plus fréquent est la combinaison d'un tableau de mesures, d'un texte libre (rapport d'intervention) et d'une image ou d'un signal. La recette qui marche : encoder chaque modalité en un vecteur, les concaténer, et laisser un gradient boosting faire la synthèse.
8. Annotation et qualité
Sur ces données, la performance est presque toujours limitée par les annotations, pas par le modèle. Quelques principes qui économisent beaucoup de temps :
- Écrire un guide d'annotation avant d'annoter, et le tester sur vingt exemples avec deux annotateurs. Les désaccords révèlent les cas limites que la définition du problème n'avait pas tranchés — et c'est le vrai livrable de cette étape.
- Mesurer l'accord inter-annotateurs (kappa de Cohen, alpha de Krippendorff). Il plafonne la performance atteignable : si deux experts ne sont d'accord qu'à 80 %, aucun modèle n'ira significativement au-delà, et un score de 85 % doit éveiller les soupçons plutôt que la satisfaction.
- Annoter en priorité les cas informatifs plutôt qu'au hasard : c'est l'apprentissage actif du module 13.
- Vérifier les étiquettes existantes : les jeux de référence publics contiennent eux-mêmes des erreurs, et un modèle très confiant en désaccord avec l'étiquette est un excellent détecteur d'annotation fautive (
cleanlab, module 13).
Ce qu'il faut retenir du module
- Sur données non structurées, la représentation compte plus que l'algorithme.
- TF-IDF et régression logistique restent une baseline honnête, et interprétable mot par mot ; mesurer l'écart avant de sortir un transformer.
- En vision, les tâches utiles sont souvent détection et segmentation ; le Dice et l'IoU y remplacent l'accuracy, et l'augmentation doit respecter la physique.
- L'audio se ramène à une image temps-fréquence ; découper les jeux par locuteur ou appareil.
- Un graphe s'exploite d'abord par des variables structurelles données à un modèle classique.
- Les GNN agrègent les voisins de façon invariante par permutation ; ils sont peu profonds, sensibles au lissage excessif, et exigent un découpage adapté.
- La qualité et la cohérence des annotations plafonnent la performance : les mesurer avant de changer de modèle.