Recherche sémantique multimodale avec des images et du texte
En tant qu'êtres humains, nous interprétons le monde à travers nos sens. Nous entendons des sons, nous voyons des images, des vidéos et des textes, souvent superposés. Nous comprenons le monde grâce à ces multiples modalités et à la relation qui existe entre elles. Pour que l'intelligence artificielle puisse réellement égaler ou dépasser les capacités humaines, elle doit développer cette même capacité à comprendre le monde à travers plusieurs lentilles simultanément.
Dans ce billet, dans la vidéo qui l'accompagne (à venir) et dans le bloc-notes, nous présenterons les récentes avancées dans les modèles capables de traiter à la fois le texte et les images. Nous le démontrerons en construisant une application de recherche sémantique qui va au-delà de la simple correspondance de mots clés - elle comprend la relation entre ce que les utilisateurs demandent et le contenu visuel qu'ils recherchent.
Ce qui rend ce projet particulièrement intéressant, c'est qu'il est entièrement construit avec des outils open-source : la base de données vectorielles Milvus, les bibliothèques d'apprentissage automatique de HuggingFace et un ensemble de données d'avis de clients d'Amazon. Il est remarquable de penser qu'il y a à peine dix ans, la construction d'un tel projet aurait nécessité d'importantes ressources propriétaires. Aujourd'hui, ces puissants composants sont disponibles gratuitement et peuvent être combinés de manière innovante par toute personne ayant la curiosité d'expérimenter.
Notre application de recherche multimodale est du type "récupération et classement". Si vous êtes familier avec la méthode RAG ( retrieval-augmented-generation ), elle est très similaire, à ceci près que le résultat final est une liste d'images qui ont été reclassées par un grand modèle de vision linguistique (LLVM). La requête de l'utilisateur contient à la fois du texte et une image, et la cible est un ensemble d'images indexées dans une base de données vectorielle. L'architecture comporte trois étapes - l'indexation, la récupération et le reclassement (proche de la "génération") - que nous résumons à tour de rôle.
Indexation
Notre application de recherche doit avoir quelque chose à rechercher. Dans notre cas, nous utilisons un petit sous-ensemble de l'ensemble de données "Amazon Reviews 2023", qui contient à la fois du texte et des images provenant d'avis de clients d'Amazon sur tous les types de produits. Vous pouvez imaginer qu'une recherche sémantique comme celle que nous sommes en train de construire puisse être un complément utile à un site web de commerce électronique. Nous utilisons 900 images et écartons le texte, tout en observant que ce bloc-notes peut atteindre la taille de production avec la bonne base de données et les déploiements d'inférence.
Le premier élément "magique" de notre pipeline est le choix du modèle d'intégration. Nous utilisons un modèle multimodal récemment développé appelé Visualized BGE qui est capable d'intégrer du texte et des images conjointement, ou séparément, dans le même espace avec un modèle unique où les points qui sont proches sont sémantiquement similaires. D'autres modèles de ce type ont été développés récemment, par exemple MagicLens.
La figure ci-dessus illustre le fait que l'intégration de [l'image d'un lion de profil] avec le texte "vue de face" est proche de l'intégration de [l'image d'un lion de face] sans texte. Le même modèle est utilisé à la fois pour les entrées texte et image et pour les entrées image seule (ainsi que pour les entrées texte seul). De cette manière, le modèle est capable de comprendre l'intention de l'utilisateur en ce qui concerne la relation entre le texte de la requête et l'image de la requête.
Nous intégrons nos 900 images de produits sans le texte correspondant et nous stockons les intégrations dans une base de données vectorielle à l'aide de Milvus.
Récupération
Maintenant que notre base de données est construite, nous pouvons répondre à la requête d'un utilisateur. Imaginons qu'un utilisateur vienne avec la requête suivante : "un étui de téléphone avec ceci" et "un étui de téléphone avec cela" : "un étui de téléphone avec ceci" plus [une image d'un léopard]. En d'autres termes, il recherche des étuis de téléphone avec des motifs de léopard.
Notez que le texte de la requête de l'utilisateur dit "ceci" plutôt que "une peau de léopard". Notre modèle d'intégration doit être capable de relier "ceci" à ce à quoi il fait référence, ce qui est un exploit impressionnant étant donné que les itérations précédentes de modèles n'étaient pas en mesure de traiter des instructions aussi ouvertes. L'article sur MagicLens donne d'autres exemples.
Nous intégrons conjointement le texte et l'image de la requête et effectuons une recherche de similarité dans notre base de données vectorielle, en renvoyant les neuf premiers résultats. Les résultats sont présentés dans la figure ci-dessus, avec l'image du léopard. Il apparaît que le premier résultat n'est pas le plus pertinent par rapport à la requête. Le septième résultat semble être le plus pertinent - il s'agit d'une housse de téléphone avec une impression de peau de léopard.
Génération
Il semble que notre recherche ait échoué car le premier résultat n'est pas le plus pertinent. Nous pouvons toutefois y remédier en procédant à un reclassement. Vous savez peut-être que le reranking des éléments récupérés est une étape importante dans de nombreux pipelines RAG. Nous utilisons Phi-3 Vision comme modèle de reclassement.
Nous demandons d'abord à un LLVM de générer une légende pour l'image de la requête. Le LLVM produit un résultat :
"L'image montre un gros plan du visage d'un léopard avec un accent sur sa fourrure tachetée et ses yeux verts".
Nous introduisons ensuite cette légende, une image unique avec les neuf résultats et l'image de la requête, et nous construisons une invite textuelle demandant au modèle de reclasser les résultats, en donnant la réponse sous forme de liste et en fournissant une raison pour le choix de la meilleure correspondance.
Le résultat est illustré dans la figure ci-dessus - l'élément le plus pertinent est maintenant le premier résultat - et la raison donnée est la suivante :
"L'élément le plus approprié est celui avec le thème du léopard, qui correspond à l'instruction de la requête de l'utilisateur pour un étui de téléphone avec un thème similaire."
Notre reclasseur LLVM a été en mesure de comprendre les images et le texte et d'améliorer la pertinence des résultats de la recherche. Un artefact intéressant est que le reclassement n'a donné que huit résultats et en a abandonné un, ce qui souligne le besoin de garde-fous et de résultats structurés.
Résumé
Dans ce billet, la vidéo (à venir) et le carnet de notes qui l'accompagnent, nous avons construit une application pour la recherche sémantique multimodale à travers le texte et les images. Le modèle d'intégration est capable d'intégrer du texte et des images conjointement ou séparément dans le même espace, et le modèle de base est capable de saisir du texte et des images tout en générant du texte en réponse. Il est important de noter que le modèle d'intégration a été capable de relier l'intention de l'utilisateur d'une instruction ouverte à l'image de la requête et de spécifier ainsi comment l'utilisateur voulait que les résultats soient liés à l'image d'entrée.
Ce n'est qu'un avant-goût de ce qui nous attend dans un avenir proche. Nous verrons de nombreuses applications de recherche multimodale, de compréhension et de raisonnement multimodaux, etc. dans diverses modalités : image, vidéo, audio, molécules, réseaux sociaux, données tabulaires, séries temporelles, le potentiel est illimité.
Au cœur de ces systèmes se trouve une base de données vectorielle qui constitue la "mémoire" externe du système. Milvus est un excellent choix à cette fin. Il s'agit d'un logiciel libre, doté de nombreuses fonctionnalités (voir cet article sur la recherche plein texte dans Milvus 2.5) et qui s'adapte efficacement à des milliards de vecteurs avec un trafic à l'échelle du web et une latence inférieure à 100 ms. Pour en savoir plus, consultez la documentation de Milvus, rejoignez notre communauté Discord, et nous espérons vous voir à notre prochain meetingup sur les données non structurées. D'ici là !
Ressources
Carnet de notes : " Recherche multimodale avec Amazon Reviews et LLVM Reranking"
Vidéo Youtube AWS Developers (bientôt disponible)
Modèle d'intégration : Carte modèle BGE visualisée
Modèle d'intégration alt : Repo du modèle MagicLens
LLVM : Carte modèle Phi-3 Vision
Jeu de données : Amazon Reviews 2023
- Indexation
- Récupération
- Génération
- Résumé
- Ressources
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word