Accéder au contenu principal

Apprentissage auto-supervisé : comment les modèles apprennent sans données étiquetées

L’apprentissage auto-supervisé amène les modèles à tirer leur propre supervision de textes, d’images, d’audios et de vidéos non étiquetés, via des techniques comme l’apprentissage contrastif, la modélisation masquée et la prédiction autorégressive — les représentations qui alimentent les modèles de langue, de vision et multimodaux d’aujourd’hui.
Actualisé 9 sept. 2026  · 14 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Tout projet de machine learning finit par buter sur le besoin de données étiquetées — et les étiqueter coûte souvent bien plus de temps et d’argent que la plupart des équipes ne peuvent se le permettre.

Constituer une équipe pour taguer un million d’images ou transcrire un million d’audios peut rapidement atteindre six chiffres. En parallèle, Internet regorge de textes, d’images, d’audios et de vidéos non étiquetés. Les équipes ML disposent de plus de données brutes qu’elles n’en utiliseront jamais, mais très peu sont livrées avec les labels nécessaires pour entraîner un modèle.

L’apprentissage auto-supervisé supprime l’étape d’étiquetage. Il transforme la structure même des données en information d’entraîment. Plutôt que de payer des humains pour décrire le contenu d’une image ou le sens d’une phrase, vous mettez en place une tâche à laquelle les données savent déjà répondre — comme masquer un mot et demander au modèle de le deviner à partir du contexte.

Dans cet article, je vous explique le fonctionnement de l’apprentissage auto-supervisé, ses principales techniques et en quoi il diffère de l’apprentissage supervisé, non supervisé et semi-supervisé.

Qu’est-ce que l’apprentissage auto-supervisé ?

L’apprentissage auto-supervisé permet d’entraîner des modèles sans qu’une personne n’ait à étiqueter les données au préalable.

Au lieu de taguer manuellement chaque exemple, les données contiennent leur propre corrigé. Le modèle observe une partie de l’entrée, en masque une autre et apprend en essayant de combler le vide. Aucune intervention humaine n’est requise.

Par exemple, vous pouvez prendre une phrase, masquer un mot et demander au modèle de le deviner grâce aux mots alentours. « L’ingénieur a poussé le ___ vers la branche principale » fournit assez de contexte pour proposer « code » ou « modifications » sans qu’aucun humain n’indique la réponse. La phrase fait office de label.

L’apprentissage auto-supervisé occupe une position singulière entre deux catégories. Son objectif d’entraînement ressemble à l’apprentissage supervisé — entrée claire, cible claire et fonction de perte pour mesurer l’erreur. Mais comme ces cibles ne sont pas créées par des humains, on le classe généralement avec l’apprentissage non supervisé, qui travaille également sur des données brutes non étiquetées. L’auto-supervision emprunte la mécanique de l’un et la source de données de l’autre.

Comment fonctionne l’apprentissage auto-supervisé ?

Le processus suit un schéma reproductible, quel que soit le type de données. Les étapes :

  1. Démarrer avec des données non étiquetées : texte, images, audio, vidéo : peu importe, tant que le volume est important.
  2. Construire une tâche d’apprentissage à partir des données elles-mêmes : on parle de tâche de prétexte. Ce n’est pas la tâche finale : c’est un problème artificiel conçu pour forcer le modèle à apprendre quelque chose d’utile. Masquer un mot et le prédire en est un exemple.
  3. Entraîner le modèle à résoudre cette tâche : le modèle fait une prédiction, la compare à la valeur réelle et s’ajuste.
  4. Apprendre des représentations utiles : en résolvant la tâche de prétexte, le modèle acquiert une compréhension interne de la structure des données : grammaire, contexte, formes, motifs, etc.
  5. Adapter ces représentations aux tâches aval : une fois les représentations solides acquises, vous ciblez la tâche que vous souhaitiez vraiment résoudre. C’est la tâche aval.

La tâche de prétexte n’est qu’un exercice d’entraînement. Personne ne déploie un modèle qui prédit des mots masqués pour le plaisir : la valeur vient des représentations apprises en chemin, qui se transfèrent à des problèmes réels.

Apprentissage auto-supervisé vs autres approches

Le plus simple pour comprendre l’auto-supervision est de voir ses points communs et différences avec les autres paradigmes d’entraînement.

Auto-supervisé vs supervisé

L’apprentissage supervisé requiert un exemple étiqueté pour chaque entrée, comme une image taguée « chien » ou un avis « défavorable ». Quelqu’un doit créer ces labels à la main : cela implique des coûts, des délais et un plafond sur le volume de données réaliste à utiliser.

Avec l’auto-supervision, le modèle a toujours une cible à prédire, mais cette cible provient des données elles-mêmes — un mot masqué ou le prochain token d’une séquence. Aucun étiquetage humain n’est nécessaire pour générer le signal d’apprentissage.

Auto-supervisé vs non supervisé

Les deux travaillent sur des données non étiquetées, d’où la confusion fréquente. La différence réside dans l’objectif.

L’apprentissage non supervisé recherche une structure sans cible de prédiction explicite, par exemple en groupant des clients similaires ou en réduisant la dimension d’un jeu de données. L’auto-supervision, elle, construit une tâche de prédiction explicite à partir des données, puis entraîne le modèle à la résoudre. Cet objectif de prédiction donne à l’auto-supervision une boucle d’entraînement de type supervisé, même si les labels sont auto-générés.

Auto-supervisé vs semi-supervisé

L’apprentissage semi-supervisé mêle volontairement un petit jeu de données étiqueté à un plus grand jeu non étiqueté, pour améliorer le modèle.

Le pré-entraînement auto-supervisé ne nécessite aucun label pour commencer. Il peut se faire entièrement sur des données non étiquetées, puis basculer éventuellement vers un jeu étiqueté pour l’ajustement fin. Les labels, s’ils interviennent, arrivent après le pré-entraînement.

  Labels requis Source du signal d’apprentissage Usage typique
Supervisé Oui, pour chaque exemple Labels créés par des humains Entraîner un modèle directement sur la tâche cible
Non supervisé Non Structure des données (clusters, motifs) Regroupement, réduction de dimension
Semi-supervisé Partiellement, mélangé à des données non étiquetées Exemples étiquetés + motifs dans les données non étiquetées Gagner en précision quand peu de données étiquetées sont disponibles
Auto-supervisé Non, pour le pré-entraînement Une tâche de prétexte construite à partir des données Pré-entraînement avant l’ajustement fin sur une tâche aval

Apprentissage auto-supervisé comparé aux autres méthodes

Les grandes familles de l’auto-supervision

Les méthodes auto-supervisées se répartissent en quelques grandes familles, chacune centrée sur un type de tâche de prétexte.

Apprentissage contrastif

L’apprentissage contrastif entraîne un modèle à distinguer des exemples liés d’exemples non liés. Il rapproche les représentations d’exemples similaires et éloigne celles d’exemples dissemblables, sans jamais utiliser un label manuel pour définir « similaire ».

Deux versions augmentées de la même image comptent comme liées. Une image et sa légende correspondante aussi. SimCLR applique ce principe au sein d’une même modalité, en comparant différents recadrages ou transformations d’une image. CLIP l’applique entre modalités, en alignant des images avec le texte qui les décrit.

Modélisation masquée

La modélisation masquée consiste à masquer une partie de l’entrée et à entraîner le modèle à la reconstituer. C’est le même principe que l’exercice « texte à trous », généralisé à d’autres domaines.

En langage, on parle de masquage de mots : on cache quelques mots d’une phrase et on les prédit via le contexte. En vision, on masque des zones d’une image et on reconstruit les pixels manquants ou leur représentation sous-jacente.

Apprentissage autorégressif

L’apprentissage autorégressif prédit le prochain élément d’une séquence à partir de tout ce qui le précède. Donnez le début d’une phrase : le modèle prédit le mot suivant, puis le suivant, et ainsi de suite.

C’est l’objectif derrière la plupart des pré-entraînements de modèles de langue modernes. Il s’adapte naturellement au texte, séquentiel de gauche à droite, et passe à l’échelle sans configuration supplémentaire sur d’immenses corpus.

Auto-distillation

L’auto-distillation entraîne un modèle en utilisant ses propres prédictions comme cibles, plutôt qu’une réponse fixe présente dans les données.

Un montage courant exécute deux versions du même réseau — un « élève » et un « professeur » — sur des vues différentes de la même entrée. L’élève apprend à faire correspondre la sortie du professeur, et le professeur est mis à jour comme une moyenne à évolution lente de l’élève. DINO et BYOL en sont des approches emblématiques. Pas besoin d’exemples négatifs ni d’entrées masquées : le modèle s’auto-supervise via la cohérence entre vues.

Auto-supervision et grands modèles de langue

L’auto-supervision constitue l’intégralité du pré-entraînement des grands modèles de langue. Tous les LLM majeurs ont appris la structure de la langue, des faits et des schémas de raisonnement sans le moindre label écrit par un humain, en résolvant des tâches de prétexte auto-supervisées sur du texte brut.

Prédiction du prochain token

La plupart des LLM modernes sont pré-entraînés sur la prédiction du prochain token : étant donnée une séquence de tokens, prédire celui qui suit. Le modèle lit tout ce qui précède une position, devine la suite, se vérifie contre le token réel suivant, puis s’ajuste.

En répétant cela sur des billions de tokens issus de sites web et de dépôts de code, le modèle se forge une compréhension opérationnelle de la grammaire, des faits et même de certains schémas de raisonnement. C’est l’objectif autorégressif évoqué plus haut, appliqué à grande échelle.

Modélisation de langue masquée

Avant que l’autorégressif ne s’impose, des modèles comme BERT utilisaient une autre tâche de prétexte : au lieu de prédire la suite, BERT masque aléatoirement des tokens dans une phrase et les prédit en s’appuyant sur le contexte bidirectionnel.

Ce contexte bidirectionnel rend les modèles masqués performants pour des tâches de compréhension comme la classification ou les questions-réponses, même s’ils ne génèrent pas de texte comme les modèles autorégressifs.

Apprendre à partir de vastes corpus

Rien de tout cela ne fonctionne sans volume. Le pré-entraînement puise dans des pages web, livres, dépôts de code et forums, filtrés et dédupliqués en corpus de milliards voire de billions de tokens. Plus le corpus est grand et varié, plus les représentations obtenues sont générales.

Le pré-entraînement est le terrain de jeu de l’auto-supervision, mais ce n’est pas l’ultime étape. L’ajustement fin sur des exemples d’instructions rédigés par des humains lui apprend à suivre des consignes, et des méthodes d’optimisation des préférences comme RLHF ou DPO utilisent des préférences humaines hiérarchisées pour façonner les réponses. Ces étapes ultérieures nécessitent des labels. Le pré-entraînement auto-supervisé est la seule étape qui n’en a pas besoin.

Auto-supervision en vision par ordinateur

La vision par ordinateur est un domaine typique où les données étiquetées manquent. Dessiner des bounding boxes et des masques de segmentation prend bien plus de temps que d’ajouter une simple étiquette à un texte, ce qui rend les méthodes auto-supervisées particulièrement précieuses ici.

L’apprentissage contrastif d’images reprend le principe « rapprocher/éloigner » : on prend deux versions augmentées de la même photo (recadrage, retournement) et on entraîne le modèle à les identifier comme liées, tout en traitant les autres images du lot comme non liées. SimCLR en est un exemple célèbre.

La modélisation d’images masquées transpose l’idée du texte à trous aux pixels : on masque des patchs d’image et on entraîne le modèle à reconstruire le contenu manquant, en pixels bruts ou en représentations de caractéristiques. C’est l’objectif des MAE (Masked Autoencoders).

L’alignement image-texte entraîne un modèle à faire correspondre des images avec leurs légendes, en rapprochant les paires assorties dans un espace d’embedding commun et en écartant les mauvaises correspondances. CLIP est l’exemple emblématique, et explique pourquoi ces modèles gèrent la classification zero-shot — ils reconnaissent des catégories jamais entraînées explicitement, en comparant une image à une description textuelle.

Au-delà du texte et de l’image

La tâche de prétexte épouse la forme des données. Partout où vous disposez de beaucoup de données non étiquetées, vous pouvez généralement conçoir une tâche auto-supervisée autour d’elles.

En parole et audio, les modèles prédisent des segments masqués ou contrastent des extraits comme en vision, acquérant des représentations utiles à la reconnaissance vocale sans transcription initiale.

En vidéo, la tâche de prétexte peut consister à prédire des images futures ou à apparier des extraits issus d’une même source, donnant au modèle un sens du mouvement et de la structure temporelle qu’une image fixe n’apporte pas.

Les modèles multimodaux combinent plusieurs idées à la fois, en alignant texte, images, audio et vidéo dans un espace de représentation commun, à l’instar de CLIP pour l’image et le texte, étendu à plus de modalités.

L’auto-supervision s’invite même dans les données scientifiques et de capteurs — séquences génomiques, séries temporelles, etc. : masquer ou prédire des parties du signal permet d’apprendre la structure à partir de mesures qui n’ont jamais été « étiquetées ».

Comment exploiter les modèles auto-supervisés en aval

Le pré-entraînement produit un modèle bon pour sa tâche de prétexte. Ce n’est pas le but : l’essentiel est ce que vous en faites ensuite.

Ajustement fin (fine-tuning)

L’ajustement fin reprend le modèle pré-entraîné et continue d’entraîner tous ses poids, cette fois sur des données étiquetées pour la tâche visée. Le modèle comprenant déjà la structure du domaine, il demande généralement beaucoup moins de labels que si l’on partait de zéro.

Sonde linéaire (linear probing)

La sonde linéaire gèle entièrement le modèle pré-entraîné et n’entraîne qu’une couche linéaire au-dessus de sa sortie. Si un simple classifieur linéaire sépare les classes avec ces caractéristiques gelées, c’est que les représentations pré-entraînées capturent la vraie structure. C’est une façon courante d’évaluer la qualité des représentations, indépendamment de la capacité d’ajustement fin.

Extraction de caractéristiques

L’extraction de caractéristiques fonctionne comme la sonde linéaire, sans la partie linéaire : vous récupérez les représentations gelées et les alimentez dans l’algorithme aval de votre choix. Le modèle pré-entraîné ne sert qu’à produire de bons embeddings.

Usage zero-shot et few-shot

Certaines représentations sont assez bonnes pour être utilisées sans aucun entraînement aval. CLIP le fait en projetant une image et un ensemble d’étiquettes candidates dans le même espace, puis en choisissant l’étiquette la plus proche de l’image. Le few-shot learning reprend l’idée en ajoutant un petit nombre d’exemples étiquetés, souvent suffisant car l’essentiel de la structure est déjà présent dans les représentations.

Avec l’auto-supervision, vous obtenez des représentations réutilisables. Vous pré-entraînez une fois, puis vous ajustez finement, sondez, extrayez des caractéristiques ou interrogez ce même cœur sur autant de tâches aval que nécessaire. La majeure partie du coût se concentre une seule fois au pré-entraînement, pas à chaque tâche.

Auto-supervision en Python

Voici un exemple léger utilisant un modèle pré-entraîné — pas un système auto-supervisé construit de zéro — pour illustrer le flux de travail.

all-MiniLM-L6-v2, disponible via le package sentence-transformers, a été pré-entraîné avec un objectif de modélisation de langage masqué puis affermi avec un objectif contrastif sur des paires de phrases. La partie auto-supervisée est donc déjà faite — vous exploitez simplement les représentations résultantes.

Pour commencer, installez les dépendances :

pip install sentence-transformers scikit-learn

Passons au code :

from sentence_transformers import SentenceTransformer
from sklearn.linear_model import LogisticRegression

# Créer des données non étiquetées
support_tickets = [
    "My order arrived damaged and I need a replacement.",
    "The app crashes every time I try to upload a photo.",
    "I love how fast the checkout process is now.",
    "Can you tell me when my refund will be processed?",
    "The new dashboard layout is so much easier to use.",
    "I can't log in, it keeps saying my password is wrong.",
]

# Charger un modèle pré-entraîné avec un objectif auto-supervisé
model = SentenceTransformer("all-MiniLM-L6-v2")

# Obtenir des représentations apprises
embeddings = model.encode(support_tickets)
print(embeddings.shape)

Forme des embeddings

Forme des embeddings

La méthode .encode() fait passer chaque ticket dans le modèle pré-entraîné et renvoie un vecteur dense qui en capture le sens. D’à partir de là, une tâche aval ne nécessite qu’une poignée d’exemples étiquetés, puisque les embeddings portent déjà l’essentiel de la structure :

# Utiliser les représentations pour une tâche aval, 1 = plainte, 0 = retour positif
labels = [1, 1, 0, 1, 0, 1]

clf = LogisticRegression()
clf.fit(embeddings, labels)

new_ticket = ["The delivery was late and no one responded to my email."]
new_embedding = model.encode(new_ticket)
print(clf.predict(new_embedding))

Prédiction de la régression logistique

Prédiction de la régression logistique

Six tickets étiquetés et un classifieur LogisticRegression suffisent ici, car ce sont les représentations — plus que le classifieur — qui font l’essentiel du travail.

Avantages et limites de l’auto-supervision

Passons en revue les points forts et les points faibles de l’apprentissage auto-supervisé.

Avantages

  1. Réduit la dépendance aux labels manuels : la tâche de prétexte génère ses propres cibles, le budget d’étiquetage n’est plus une limite dure au volume d’entraînement.
  2. Exploite des jeux de données très volumineux : des collections à l’échelle du web deviennent utilisables, pas seulement les petits sous-ensembles étiquetés qu’une équipe peut annoter.
  3. Produit des représentations transférables : un même modèle pré-entraîné peut servir à l’ajustement fin, à la sonde linéaire, à l’extraction de caractéristiques et au zero-shot sur diverses tâches aval.
  4. Permet le pré-entraînement à grande échelle : c’est ce qui rend possibles les fondation models d’aujourd’hui.

Limites

  1. Exigences matérielles importantes : pré-entraîner à l’échelle d’Internet requiert un matériel et du temps considérables, hors de portée pour la plupart des équipes.
  2. Le choix de la tâche de prétexte est crucial : un mauvais choix produit des représentations peu transposables, quel que soit le volume de données.
  3. Les représentations apprises peuvent hériter de biais : les schémas, lacunes ou déséquilibres des données d’entraînement se retrouvent dans les représentations, faute de filtrage au pré-entraînement.
  4. Un fort score en pré-texte ne garantit pas le succès aval : un modèle qui réussit bien sa tâche de prétexte peut sous-performer sur une tâche spécifique non optimisée directement.

Pourquoi l’auto-supervision compte pour l’IA moderne

L’apprentissage auto-supervisé est la raison pour laquelle les fondation models existent.

Le pré-entraînement à l’échelle nécessaire serait inenvisageable s’il dépendait de labels manuels. Nul ne va étiqueter à la main un billion de tokens ou un milliard d’images. L’auto-supervision a rendu possible le pré-entraînement sur des collections à l’échelle du web, puis la réutilisation d’un seul modèle pour un large éventail de tâches, plutôt que d’entraîner un modèle différent par tâche.

Ce passage de nombreux modèles spécifiques à un modèle généraliste pré-entraîné adapté à de multiples usages illustre la trajectoire actuelle de l’IA. L’auto-supervision en est le moteur.

Conclusion

L’apprentissage auto-supervisé tire sa supervision de la structure des données non étiquetées plutôt que de labels humains. Le schéma courant consiste à masquer un mot ou à prédire le prochain token. Les données se posent leurs propres questions, et le modèle apprend en tentant d’y répondre correctement.

Les approches majeures déclinent cette idée de façons différentes. L’apprentissage contrastif rapproche les exemples liés et éloigne les autres. La modélisation masquée masque une partie de l’entrée et entraîne le modèle à la reconstituer. L’autorégressif prédit le prochain élément d’une séquence. Les mécaniques diffèrent, mais le principe — laisser la structure des données fournir le signal d’apprentissage — reste le même.

Ce principe explique pourquoi l’auto-supervision alimente la plupart des modèles de langage, de vision et multimodaux que vous utilisez déjà. La prédiction du prochain token pré-entraîne les LLM actuels, les objectifs contrastifs et masqués pré-entraînent les modèles de vision, et l’alignement image-texte pré-entraîne les modèles multimodaux qui relient les deux.

Pour apprendre à créer un LLM de A à Z, inscrivez-vous au parcours Developing Large Language Models pour voir PyTorch, Hugging Face et les dernières techniques NLP en action.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Scientifique de données senior basé en Croatie. Rédacteur technique de premier plan avec plus de 700 articles publiés, générant plus de 10 millions de vues. Auteur du livre Machine Learning Automation with TPOT.

FAQs

Qu’est-ce que l’apprentissage auto-supervisé ?

L’apprentissage auto-supervisé est une façon d’entraîner des modèles sans labels créés par des humains. Le modèle observe une partie de l’entrée, en masque une autre et apprend en essayant de prédire la partie manquante. Les données fournissent elles-mêmes le signal d’entraînement, d’où le terme « auto-supervisé ».

En quoi l’auto-supervision diffère-t-elle du non supervisé ?

Les deux traitent des données non étiquetées, mais différemment. Le non supervisé recherche une structure sans cible de prédiction explicite, par exemple en regroupant des clients similaires. L’auto-supervision construit une tâche de prédiction explicite à partir des données elles-mêmes, puis entraîne le modèle à la résoudre.

Pourquoi l’auto-supervision est-elle cruciale pour l’IA moderne ?

C’est ce qui rend possibles les fondation models. Le pré-entraînement à l’échelle actuelle serait inatteignable s’il dépendait de labels manuels — personne n’étiquette à la main un billion de tokens. L’auto-supervision permet de réutiliser un unique modèle pré-entraîné sur plusieurs tâches aval, au lieu d’entraîner un modèle par tâche.

Quelle différence entre tâche de prétexte et tâche aval ?

Une tâche de prétexte est un problème artificiel résolu lors du pré-entraînement, comme prédire un mot masqué. Ce n’est pas la tâche finale : elle force le modèle à apprendre des représentations utiles. Une tâche aval est le vrai problème sur lequel on applique ces représentations ensuite, par exemple la classification ou la recherche.

L’auto-supervision peut-elle fonctionner sans aucun label ?

Oui, le pré-entraînement ne nécessite aucun label. Ensuite, certains usages aval, comme la classification zero-shot de CLIP, ne demandent toujours aucun label. D’autres, comme l’ajustement fin ou le few-shot, n’introduisent qu’une petite quantité de données étiquetées à ce stade ultérieur.

Sujets
Apprentissage automatique

Apprenez avec DataCamp

Cours

Apprentissage supervisé avec scikit-learn

4 h
300.7K
Développez vos compétences en machine learning avec scikit-learn en Python et apprenez à faire des prédictions à partir de données réelles.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow
Contenus associés

blog

Types d'agents d'intelligence artificielle : Comprendre leurs rôles, leurs structures et leurs applications

Découvrez les principaux types d'agents d'intelligence artificielle, comment ils interagissent avec les environnements et comment ils sont utilisés dans les différents secteurs d'activité. Comprendre les agents réflexes simples, les agents basés sur un modèle, les agents basés sur un but, les agents basés sur l'utilité, les agents d'apprentissage, etc.

blog

Architecture de l'entrepôt de données : Tendances, outils et techniques

Apprenez l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !
Kurtis Pykes 's photo

Kurtis Pykes

15 min

blog

Comprendre les TPU et les GPU dans l'IA : Un guide complet

L'essor du développement de l'intelligence artificielle (IA) a entraîné une augmentation notable de la demande en matière de calcul, d'où la nécessité de disposer de solutions matérielles robustes. Les unités de traitement graphique (GPU) et les unités de traitement tensoriel (TPU) sont devenues des technologies essentielles pour répondre à ces demandes.
Kurtis Pykes 's photo

Kurtis Pykes

9 min

Tutoriel

Normalisation vs. Standardisation: comment faire la différence

Découvrez les principales différences, les applications et la mise en œuvre de la normalisation et de la standardisation dans le prétraitement des données pour l’apprentissage automatique.
Samuel Shaibu's photo

Samuel Shaibu

9 min

cursor ai code editor

Tutoriel

Cursor AI : Un guide avec 10 exemples pratiques

Apprenez à installer Cursor AI sur Windows, macOS et Linux, et découvrez comment l'utiliser à travers 10 cas d'utilisation différents.

Tutoriel

Tutoriel Python sur les structures de données

Initiez-vous aux structures de données de Python : apprenez-en plus sur les types de données et les structures de données primitives et non primitives, telles que les chaînes de caractères, les listes, les piles, etc.
Sejal Jaiswal's photo

Sejal Jaiswal

24 min

Voir PlusVoir Plus