Du texte à l’image : fondamentaux de CLIP
Flash info : les adolescents se tournent vers TikTok comme leur moteur de recherche préféré, et apparemment, cela fonctionne mieux qu’on ne le penserait. Ce n’est pas surprenant, car les moteurs de recherche traditionnels ne trouvent pas toujours ce que vous voulez. Surtout si vous êtes une personne visuelle comme moi, vous trouveriez probablement les images et les vidéos beaucoup plus intuitives et agréables que de devoir parcourir des lignes de texte. Vous êtes-vous déjà demandé, cependant, comment les machines comprennent un texte donné et l’associent aux images qu’elles renvoient ?
Dans cette série de blog, nous vous présenterons la recherche d’images basée sur des textes, ou services texte-vers-image. Le texte-vers-image a toujours été une application cross-modale importante, et l’industrie s’appuyait auparavant sur des solutions détournées nécessitant une énorme quantité de données générées par les utilisateurs pour regrouper les images et découvrir leurs relations sémantiques. Jusqu’à l’année dernière, lorsque OpenAI a jeté un pavé dans la mare de l’industrie avec la sortie de CLIP. OpenAI a utilisé un nombre stupéfiant de 400 millions de paires texte-image pour construire CLIP afin qu’il puisse apprendre des concepts visuels à partir d’une entrée en langage naturel. Maintenant, nous devons connaître quelques notions de base afin de comprendre les composants fondamentaux des algorithmes de recherche, de CLIP et du texte-vers-image.
Algorithmes de recherche et similarité sémantique
Les algorithmes de recherche, qu’ils soient traditionnels ou nouvelle école, ou unimodaux ou cross-modaux, ne peuvent se passer de la mesure de la similarité sémantique, ou plutôt de la distance sémantique entre deux choses. Cela peut sembler un peu abstrait, alors voyons quelques exemples. Commençons par l’espace unidimensionnel des entiers, qui est probablement gravé dans votre ADN depuis l’école primaire (même si ce n’était probablement pas formulé ainsi à l’époque). Maintenant, nous avons 5 entiers positifs {1, 5, 6, 8, 10}, dites-moi, quel nombre est le plus proche de 5 ? Oui, c’est 6. Félicitations pour avoir obtenu votre diplôme d’enfance. La raison est que 6 a la distance la plus courte par rapport à 5, qui est 1. La distance ici est la distance sémantique entre 5 et 6.
Figure 1 Un espace unidimensionnel d’entiers
Maintenant que vous êtes dans l’apprentissage automatique, faisons un tout petit pas en avant pour voir comment se fait la recherche de texte traditionnelle. Si vous parlez à quelqu’un qui a déjà fait de la recherche de texte, alors vous entendrez très probablement beaucoup parler de TF-IDF. TF désigne la fréquence des termes, c’est-à-dire la fréquence des mots. Imaginez qu’il existe un espace de grande dimension avec autant de dimensions qu’il y a de mots dans un dictionnaire. Si nous comptons le nombre d’occurrences de chaque mot dans un article et définissons ce nombre comme la valeur dans la dimension correspondante de cet espace, nous pouvons décrire n’importe quel article comme une distribution de vecteurs creux dans cet espace vectoriel de mots (creux parce qu’un article ne couvre généralement qu’une très petite fraction des mots du dictionnaire).
Figure 2 Une démonstration de l’espace vectoriel de mots
C’est une façon de penser très simple mais pratique. Comme indiqué ci-dessus, si deux articles sont similaires dans leur domaine ou leur contenu, alors les vecteurs correspondant à ces deux articles ne devraient pas être si éloignés dans l’espace vectoriel de mots. Si les deux articles sont identiques, alors la distance entre leurs vecteurs de mots sera de 0. Dans la recherche de texte, nous étendons l’espace unidimensionnel des entiers positifs de notre premier exemple à un espace vectoriel de mots de grande dimension, mais ils partagent fondamentalement la même approche : définir un espace qui peut être utilisé pour décrire la sémantique des données et déterminer la distance entre elles.
Faisons un autre petit pas (oui, vous l’aviez vu venir). Maintenant que nous avons traité les textes, pourquoi ne pas mapper également la sémantique des images dans l’espace vectoriel de mots afin de pouvoir réaliser une cross-modalité texte-image ?
Mais bien sûr, ce n’est pas si facile. Les textes nous donnent essentiellement leur sémantique gratuitement : ils ont des « mots » comme unité sémantique naturelle. Les images n’ont pas cela. Nous ne pouvons pas utiliser leurs pixels individuels pour définir leurs significations.
L’énigme de la vectorisation sans unités sémantiques naturelles a longtemps tourmenté le domaine de la recherche d’images et des données non structurées en général. La plupart des types de données (images, vidéos, audio, nuages de points, etc.) ne sont pas accompagnés d’unités sémantiques naturelles. Elle n’a pas pu être résolue efficacement avant que les données et la puissance de calcul ne deviennent suffisamment bon marché et que les réseaux de neurones ne deviennent populaires. Voyons comment ce problème est résolu par les réseaux de neurones.
Figure 3 Couches et architectures de réseaux de neurones convolutifs
L’une des grandes caractéristiques d’un réseau de neurones profond est qu’il est « suffisamment profond » (de rien). Dans la figure ci-dessus, l’entrée à gauche est une image de 224 x 224, et la sortie à droite est un vecteur à 4096 dimensions. De gauche à droite, une image traverse de nombreuses couches de réseau de neurones, et le réseau de neurones compresse progressivement les informations spatiales des pixels de l’image originale en informations sémantiques. Dans ce processus, nous pouvons voir que la dimension spatiale se rétrécit tandis que la dimension sémantique s’allonge (ce n’est pas l’affirmation la plus exacte, mais je n’ai pas trouvé de meilleure façon de le formuler). Essentiellement, ce processus est une projection de la sémantique de l’image vers un espace vectoriel réel à 4096 dimensions. Par rapport aux techniques décrites précédemment, la vectorisation via des réseaux de neurones profonds présente plusieurs avantages évidents :
- Elle n’exige pas que les données originales disposent d’unités sémantiques naturelles et directement segmentables, telles que les « mots ».
- La définition de la « similarité des données » est flexible et est déterminée par les données d’entraînement et la fonction objectif, et peut être personnalisée pour des caractéristiques propres à l’application.
- Le processus de vectorisation des données est le processus d’inférence du modèle, qui implique principalement des opérations matricielles et peut tirer parti des capacités d’accélération des GPU modernes.
Ce que CLIP a fait, c’est connecter les textes et les images de manière cross-modale. Côté données, OpenAI a développé un jeu de données à grande échelle de paires texte-image, WIT (WebImageText). Le modèle est entraîné au moyen d’une approche d’apprentissage contrastif afin de prédire si des images et des textes doivent être appariés. Sa conception est plutôt simple :
- Effectuer l’encodage des caractéristiques pour les textes et les images respectivement ;
- Projeter les caractéristiques des textes et des images depuis leurs espaces de caractéristiques unimodaux respectifs vers un espace de caractéristiques multimodal ;
- Au sein de l’espace multimodal, la distance entre les vecteurs de caractéristiques des textes et des images qui sont censés former des paires (échantillons positifs) doit être aussi faible que possible, et inversement pour les échantillons négatifs.
Figure 4 Apprendre des modèles visuels transférables à partir d’une supervision en langage naturel. Source de l’image : https://arxiv.org/pdf/2103.00020.pdf
La clé ici est la deuxième étape, qui consiste à projeter les caractéristiques unimodales des textes et des images vers un espace de caractéristiques multimodal au moyen de la couche de projection. Cela signifie que nous pouvons mapper la sémantique des images et des textes dans le même espace de grande dimension. Cet espace sémantique est le pont que CLIP réserve à la recherche cross-modale texte-image. Nous pouvons désormais encoder un morceau de texte descriptif sous forme de vecteur, trouver les vecteurs d’images ayant une sémantique similaire, puis trouver l’image originale que nous voulons grâce à ces vecteurs d’images !
Dans l’ensemble, c’est la même formule classique : espace vectoriel plus similarité sémantique. L’importance de CLIP est qu’il nous aide à créer un espace de grande dimension qui unifie la sémantique des textes et des images, où plus les sémantiques des textes et des images sont proches, plus la distance entre les vecteurs correspondants est faible.
Composants de base d’un service texte-vers-image
Un service texte-image typique comporte trois parties : le côté requête (textes), l’algorithme de recherche (le « to ») et les bases de données sous-jacentes (images).
Les bases de données contiennent les images originales, leurs vecteurs et le modèle d’inférence qui encode les images originales en vecteurs sémantiques. De manière correspondante, le côté requête implique principalement le modèle d’inférence qui encode les textes en vecteurs sémantiques.
La partie « to » est le processus qui relie les requêtes, la base de données vectorielle et la base de données d’images. Un texte provenant du côté requête passe par un modèle pour obtenir son vecteur, qui sera ensuite comparé dans la base de données vectorielle afin de trouver les topK vecteurs d’images les plus similaires. Les résultats sont renvoyés une fois que le programme localise les images originales correspondant aux vecteurs.
Figure 5 Composants de base d’un service texte-image
Conclusion
Vous connaissez maintenant les fondamentaux de la recherche texte-image et de CLIP ! Dans le prochain article, nous mettrons en pratique ce que nous avons appris ici en construisant un prototype de service texte-image, en seulement cinq minutes !
Si vous aimez cet article, pourquoi ne pas jeter un coup d’œil à notre projet ? Nous apprécions les étoiles, les forks, ou même un simple petit clic de votre part. N’hésitez pas non plus à nous poser vos questions sur Slack !
À propos de la série
« From Text to Image » est une série de blogs qui présente comment utiliser CLIP pour construire un service texte-image à grande échelle, notamment :
- Comprendre les algorithmes de recherche, CLIP et le texte-image ;
- Construire une démo texte-image en 5 minutes ;
- Sujet avancé 1 : Déployer une base de données vectorielle pour le rappel vectoriel à grande échelle
- Sujet avancé 2 : Déployer un service d’inférence qui vous permet de traiter plus de 1000 QPS de requêtes d’inférence
- Sujet avancé 3 : Compression des données vectorielles
Continuer à lire

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

Our Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch
Join us in celebrating Milvus, the vector database that hit 35.5K stars on GitHub. Discover our story and how we’re making AI solutions easier for developers.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.



