Comment créer des applications LLM à l’aide d’une base de données vectorielle?

Comment utiliser une base de données vectorielle pour créer des applications LLM?

Introduction

Dans le domaine de l’intelligence artificielle, les modèles de langue large (LLM) et les modèles d’IA génératifs tels que GPT-4 d’OpenAI, Claude 2 d’Anthropic, Llama de Meta, Falcon, Palm de Google, etc., ont révolutionné notre façon de résoudre les problèmes. Les LLM utilisent des techniques d’apprentissage profond pour effectuer des tâches de traitement du langage naturel. Cet article vous apprendra à construire des applications LLM en utilisant une base de données vectorielle. Vous avez peut-être déjà interagi avec un chatbot comme le service client d’Amazon ou l’assistant de décision de Flipkart. Ils génèrent des textes qui ressemblent à des conversations humaines et offrent une expérience utilisateur interactive presque indiscernable des conversations réelles. Néanmoins, ces LLM doivent être optimisés pour produire des résultats hautement pertinents et spécifiques afin d’être vraiment utiles pour des cas d’utilisation spécifiques.

Par exemple, si vous demandez “Comment changer la langue dans l’application Android ?” à l’application service client d’Amazon, il se peut qu’elle n’ait pas été entraînée sur ce texte exact et qu’elle ne puisse donc pas répondre. C’est là qu’une base de données vectorielle intervient. Une base de données vectorielle stocke les textes de domaine (dans ce cas, des documents d’aide) et les requêtes précédentes de tous les utilisateurs, y compris l’historique des commandes, etc., sous forme d’indexations numériques et fournit une recherche de similarités en temps réel. Dans ce cas, elle encode cette requête sous forme de vecteur numérique et l’utilise pour effectuer une recherche de similarité dans sa base de données de vecteurs et trouver ses voisins les plus proches. Grâce à cette aide, le chatbot peut guider correctement l’utilisateur vers la section “Changer vos préférences linguistiques” de l’application Amazon.

Objectifs d’apprentissage

  • Comment fonctionnent les LLM, quelles sont leurs limites et pourquoi ont-ils besoin de bases de données vectorielles ?
  • Introduction aux modèles d’encodage et comment les encoder et les utiliser dans les applications.
  • Apprendre ce qu’est une base de données vectorielle et comment elle fait partie de l’architecture d’une application LLM.
  • Apprendre à coder des applications LLM/IA générative en utilisant des bases de données vectorielles et Tensorflow.

Cet article a été publié dans le cadre du Data Science Blogathon.

Qu’est-ce que les LLM ?

Les modèles de langue large (LLM) sont des modèles d’apprentissage machine fondamentaux qui utilisent des algorithmes d’apprentissage profond pour traiter et comprendre le langage naturel. Ces modèles sont entraînés sur d’énormes quantités de données textuelles pour apprendre les schémas et les relations entre les entités dans le langage. Les LLM peuvent effectuer de nombreux types de tâches linguistiques, telles que la traduction de langues, l’analyse des sentiments, les conversations de chatbot, etc. Ils peuvent comprendre des données textuelles complexes, identifier les entités et les relations entre elles, et générer un nouveau texte cohérent et grammaticalement correct.

Lire plus sur les LLM ici.

Comment fonctionnent les LLM ?

Les LLM sont entraînés sur une grande quantité de données, souvent des téraoctets, voire des pétaoctets, avec des milliards ou des trillions de paramètres, ce qui leur permet de prédire et de générer des réponses pertinentes en fonction des sollicitations ou des requêtes de l’utilisateur. Ils traitent les données d’entrée grâce à des plongements de mots, des couches d’auto-attention et des réseaux d’alimentation directe pour générer un texte significatif. Vous pouvez en savoir plus sur les architectures LLM ici.

Limitations des LLM

Bien que les LLM semblent générer des réponses avec une grande précision, même meilleures que celles des humains dans de nombreux tests normalisés, ces modèles ont encore des limites. Tout d’abord, ils se fient uniquement à leurs données d’entraînement pour construire leur raisonnement et peuvent donc manquer d’informations spécifiques ou actuelles dans les données. Cela conduit le modèle à générer des réponses incorrectes ou inhabituelles, également appelées “hallucinations”. Des efforts sont en cours pour atténuer cela. Deuxièmement, le modèle peut ne pas se comporter ou répondre de manière conforme aux attentes de l’utilisateur.

Pour remédier à cela, les bases de données vectorielles et les modèles d’encodage améliorent les connaissances des LLM/IA générative en fournissant des recherches supplémentaires pour des modalités similaires (texte, image, vidéo, etc.) pour lesquelles l’utilisateur recherche des informations. Voici un exemple où les LLM n’ont pas la réponse demandée par l’utilisateur et s’appuient plutôt sur une base de données vectorielle pour trouver cette information.

LLMs et bases de données vectorielles

Les modèles de langage de grande taille (LLMs) sont utilisés ou intégrés dans de nombreux secteurs de l’industrie, tels que le commerce électronique, les voyages, la recherche, la création de contenu et la finance. Ces modèles reposent sur un type de base de données relativement nouveau, appelé base de données vectorielle, qui stocke une représentation numérique de texte, d’images, de vidéos et d’autres données dans une représentation binaire appelée embeddings. Cette section met en avant les fondamentaux des bases de données vectorielles et des embeddings, et se concentre sur la façon de les utiliser pour intégrer des applications LLM.

Une base de données vectorielle est une base de données qui stocke et recherche des embeddings à l’aide d’un espace de grande dimension. Ces vecteurs sont des représentations numériques des caractéristiques ou attributs d’une donnée. En utilisant des algorithmes qui calculent la distance ou la similarité entre les vecteurs dans un espace de grande dimension, les bases de données vectorielles peuvent récupérer rapidement et efficacement des données similaires. Contrairement aux bases de données traditionnelles basées sur des scalaires qui stockent les données dans des lignes ou des colonnes et utilisent des méthodes de recherche correspondantes exactes ou basées sur des mots-clés, les bases de données vectorielles fonctionnent différemment. Elles utilisent des bases de données vectorielles pour rechercher et comparer une grande collection de vecteurs en très peu de temps (de l’ordre des millisecondes) en utilisant des techniques telles que la recherche des voisins les plus proches approximatifs (ANN).

Un tutoriel rapide sur les embeddings

Les modèles d’IA génèrent des embeddings en entrant des données brutes telles que du texte, de la vidéo, des images dans une bibliothèque d’embedding vectorielle comme word2vec. Dans le contexte de l’IA et de l’apprentissage automatique, ces caractéristiques représentent les différentes dimensions des données qui sont essentielles pour comprendre les motifs, les relations et les structures sous-jacentes.

Voici un exemple de génération d’embeddings de mots à l’aide de word2vec.

1. Générez le modèle en utilisant votre propre corpus de données ou utilisez un modèle préconstruit à partir de Google ou FastText. Si vous générez le vôtre, vous pouvez l’enregistrer sur votre système de fichiers sous forme de fichier “word2vec.model”.

import gensim# Créez un modèle word2vecmodel = gensim.models.Word2Vec(corpus)# Enregistrez le fichier du modèlemodel.save('word2vec.model')

2. Chargez le modèle, générez un embedding vectoriel pour un mot d’entrée et utilisez-le pour obtenir des mots similaires dans l’espace d’embedding vectoriel.

import gensimimport numpy as np# Chargez le modèle word2vecmodel = gensim.models.Word2Vec.load('word2vec.model')# Obtenez le vecteur pour le mot "roi"king_vector = model['king']# Obtenez les vecteurs les plus similaires aux vecteurs roisimilar_vectors = model.similar_by_vector(king_vector, topn=5)# Affichez les vecteurs les plus similairesfor vector in similar_vectors:    print(vector[0], vector[1])    

3. Voici les 5 mots les plus proches du mot d’entrée.

Résultat : homme 0,85prince 0,78reine 0,75seigneur 0,74empereur 0,72

Architecture d’application LLM utilisant des bases de données vectorielles

À un niveau élevé, les bases de données vectorielles reposent sur des modèles d’embedding pour gérer à la fois la création et la recherche d’embeddings. Sur le chemin d’ingestion, le contenu du corpus est encodé en vecteurs à l’aide du modèle d’embedding et stocké dans des bases de données vectorielles telles que Pinecone, ChromaDB, Weaviate, etc. Sur le chemin de lecture, l’application effectue une requête à l’aide de phrases ou de mots, qui est à nouveau encodée par le modèle d’embedding en un vecteur qui est ensuite interrogé dans la base de données vectorielle pour obtenir les résultats.

Applications de LLM utilisant des bases de données vectorielles

LLM aide dans les tâches linguistiques et est intégré dans une classe plus large de modèles, tels que l’IA générative qui peut générer des images et des vidéos en plus du texte. Dans cette section, nous apprendrons comment construire des applications pratiques de LLM/IA générative en utilisant des bases de données vectorielles. J’ai utilisé des bibliothèques de transformeurs et de torch pour les modèles linguistiques et pinecone comme base de données vectorielle. Vous pouvez choisir n’importe quel modèle linguistique pour LLM/embeddings et n’importe quelle base de données vectorielle pour le stockage et la recherche.

Application de chatbot

Pour construire un chatbot utilisant une base de données vectorielle, vous pouvez suivre ces étapes:

  1. Choisissez une base de données vectorielle telle que Pinecone, Chroma, Weaviate, AWS Kendra, etc.
  2. Créez un index vectoriel pour votre chatbot.
  3. Entraînez un modèle linguistique en utilisant un corpus de texte volumineux de votre choix. Par exemple, pour un chatbot d’actualités, vous pouvez fournir des données d’actualités.
  4. Intégrez la base de données vectorielle et le modèle linguistique.

Voici un exemple simple d’une application de chatbot qui utilise une base de données vectorielle et un modèle linguistique:

import pineconeimport transformers# Créez un client API pour la base de données vectoriellesclient = pinecone.Client(api_key="YOUR_API_KEY")# Chargez le modèle linguistiquemodel = transformers.AutoModelForCausalLM.from_pretrained("google/bigbird-roberta-base")# Définissez une fonction pour générer du textedef generate_text(prompt):    inputs = model.prepare_inputs_for_generation(prompt, return_tensors="pt")    outputs = model.generate(inputs, max_length=100)    return outputs[0].decode("utf-8")# Définissez une fonction pour récupérer les vecteurs les plus similaires au vecteur de requête de l'utilisateurdef retrieve_similar_vectors(query_vector):    results = client.search("my_index", query_vector)    return results# Définissez une fonction pour générer une réponse à la requête de l'utilisateurdef generate_response(query):    # Récupérez les vecteurs les plus similaires au vecteur de requête de l'utilisateur    similar_vectors = retrieve_similar_vectors(query)    # Générez un texte basé sur les vecteurs récupérés    response = generate_text(similar_vectors[0])    return response# Lancez le chatbotwhile True:    # Obtenez la requête de l'utilisateur    query = input("Quelle est votre question? ")    # Générez une réponse à la requête de l'utilisateur    response = generate_response(query)    # Affichez la réponse    print(response)

Cette application de chatbot récupérera les vecteurs les plus similaires au vecteur de requête de l’utilisateur à partir de la base de données vectorielle, puis générera du texte en utilisant le modèle linguistique basé sur les vecteurs récupérés.

ChatBot > Quelle est votre question?User_A> Quelle est la hauteur de la Tour Eiffel?ChatBot>La hauteur de la Tour Eiffel mesure 324 mètres (1 063 pieds) de sa base au sommet de son antenne. 

Application de génération d’images

Explorons comment construire une application de génération d’images qui utilise à la fois l’IA générative et les bibliothèques LLM.

  1. Créez une base de données vectorielle pour stocker vos vecteurs d’images.
  2. Extrayez les vecteurs d’images de vos données d’entraînement.
  3. Insérez les vecteurs d’images dans la base de données vectorielle.
  4. Entraînez un réseau antagoniste génératif (GAN). Lisez ici si vous avez besoin d’une introduction au GAN.
  5. Intégrez la base de données vectorielle et le GAN.

Voici un exemple simple d’un programme qui intègre une base de données vectorielle et un GAN pour générer des images:

import pineconeimport torchfrom torchvision import transforms# Créez un client API pour la base de données vectoriellesclient = pinecone.Client(api_key="YOUR_API_KEY")# Chargez le GANgenerateur = torch.load("generateur.pt")# Définissez une fonction pour générer une image à partir d'un vecteurdef generate_image(vector):    # Convertissez le vecteur en tenseur    tensor = torch.from_numpy(vector).float()    # Générez l'image    image = generateur(tensor)    # Transformez l'image en une image PIL    image = transforms.ToPILImage()(image)    return image# Lancez le générateur d'imageswhile True:    # Obtenez la requête de l'utilisateur    query = input("Quel type d'image souhaitez-vous générer? ")    # Récupérez le vecteur le plus similaire au vecteur de requête de l'utilisateur    similar_vectors = client.search("my_index", query)    # Générez une image à partir du vecteur récupéré    image = generate_image(similar_vectors[0])    # Affichez l'image    image.show()

Ce programme récupérera le vecteur le plus similaire au vecteur de requête de l’utilisateur dans la base de vecteurs, puis générera une image à l’aide du GAN basé sur le vecteur récupéré.

ImageBot>Quel genre d'image souhaitez-vous générer? Me>Une image idyllique d'une montagne avec une rivière qui coule. ImageBot> Attendez une minute! Le voici...
Image générée

Vous pouvez personnaliser ce programme pour répondre à vos besoins spécifiques. Par exemple, vous pouvez former un GAN spécialisé dans la génération d’un type particulier d’image, comme des portraits ou des paysages.

Application de recommandation de films

Explorons comment construire une application de recommandation de films à partir d’un corpus de films. Vous pouvez utiliser une idée similaire pour construire un système de recommandation pour des produits ou d’autres entités.

  1. Créez une base de données de vecteurs pour stocker vos vecteurs de films.
  2. Extrayez les vecteurs de films à partir des métadonnées de vos films.
  3. Insérez les vecteurs de films dans la base de données de vecteurs.
  4. Recommandez des films aux utilisateurs.

Voici un exemple d’utilisation de l’API Pinecone pour recommander des films aux utilisateurs:

import pinecone# Créer un client APIclient = pinecone.Client(api_key="VOTRE_CLÉ_API")# Obtenir le vecteur de l'utilisateuruser_vector = client.get_vector("user_index", user_id)# Recommander des films à l'utilisateurresults = client.search("movie_index", user_vector)# Afficher les résultatsfor result in results:    print(result["title"])

Voici une recommandation d’exemple pour un utilisateur:

The Shawshank RedemptionThe Dark KnightInceptionThe GodfatherPulp Fiction

Cas d’utilisation réels des LLMs utilisant la recherche/vectorisation de vecteurs

  • Microsoft et TikTok utilisent des bases de données de vecteurs telles que Pinecone pour la mémoire à long terme et les recherches plus rapides. C’est quelque chose que les LLMs ne peuvent pas faire seuls sans une base de vecteurs. Cela aide les utilisateurs à enregistrer leurs questions/réponses passées et à reprendre leur session. Par exemple, les utilisateurs peuvent demander: “Parle-moi davantage de la recette de pâtes dont nous avons discuté la semaine dernière.” Lire ici.

  • L’assistant de décision de Flipkart recommande des produits aux utilisateurs en encodant d’abord la requête sous forme d’embedding vectoriel, puis en effectuant une recherche parmi les vecteurs stockant les produits pertinents dans un espace multidimensionnel. Par exemple, si vous recherchez “Veste en cuir marron pour homme de Wrangler VoAGI”, il recommande des produits pertinents à l’utilisateur en utilisant une recherche de similarité vectorielle. Sinon, les LLMs n’auraient aucune recommandation, car aucun catalogue de produits ne contiendrait de tels titres ou détails de produits. Vous pouvez le lire ici.
  • Chipper Cash, une fintech en Afrique, utilise une base de données de vecteurs pour réduire les inscriptions frauduleuses d’utilisateurs de 10 fois. Il le fait en stockant toutes les images des inscriptions d’utilisateurs précédentes sous forme d’embeddings vectoriels. Ensuite, lorsqu’un nouvel utilisateur s’inscrit, il l’encode en tant que vecteur et le compare aux utilisateurs existants pour détecter la fraude. Vous pouvez le lire ici.
Source: Chipper Cash
  • Facebook utilise sa bibliothèque de recherche vectorielle appelée FAISS (blog) dans de nombreux produits en interne, notamment Instagram Reels et Facebook Stories, pour effectuer une recherche rapide de tout multimédia et trouver des candidats similaires pour de meilleures suggestions à montrer à l’utilisateur.

Conclusion

Les bases de données de vecteurs sont utiles pour construire diverses applications LLM, telles que la génération d’images, les recommandations de films ou de produits, et les chatbots. Elles fournissent aux LLMs des informations supplémentaires ou similaires sur lesquelles les LLMs n’ont pas été formés. Elles stockent les embeddings vectoriels de manière efficace dans un espace multidimensionnel et utilisent la recherche des voisins les plus proches pour trouver des embeddings similaires avec une grande précision.

Principaux points à retenir

Les principaux points à retenir de cet article sont que les bases de données vectorielles sont très adaptées aux applications LLM et offrent les caractéristiques significatives suivantes pour les utilisateurs à intégrer :

  • Performance : Les bases de données vectorielles sont spécialement conçues pour stocker et récupérer efficacement des données vectorielles, ce qui est essentiel pour développer des applications LLM performantes.
  • Précision : Les bases de données vectorielles peuvent mettre en correspondance avec précision des vecteurs similaires, même s’ils présentent de légères variations. Elles utilisent des algorithmes de voisinage le plus proche pour calculer les vecteurs similaires.
  • Multi-Modal : Les bases de données vectorielles peuvent prendre en charge diverses données multimodales, notamment du texte, des images et du son. Cette polyvalence en fait un choix idéal pour les applications LLM/IA générative qui nécessitent de travailler avec différents types de données.
  • Convivialité pour les développeurs : Les bases de données vectorielles sont relativement conviviales, même pour les développeurs qui ne possèdent pas une connaissance approfondie des techniques d’apprentissage automatique.

De plus, je tiens à souligner que de nombreuses solutions SQL/NoSQL existantes ajoutent déjà un stockage d’incorporation vectorielle, un indexage et des fonctionnalités de recherche de similarité plus rapides, par exemple PostgreSQL et Redis. Il s’agit d’un domaine en évolution rapide, les développeurs d’applications auront donc de nombreuses options disponibles dans un avenir proche pour créer des applications innovantes.

Questions fréquemment posées

Les médias affichés dans cet article ne sont pas la propriété d’Analytics Vidhya et sont utilisés à la discrétion de l’auteur.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Alibaba présente deux modèles de langage à grande échelle (LVLM) en open source Qwen-VL et Qwen-VL-Chat

Dans le domaine en constante évolution de l’intelligence artificielle, le défi persistant a été de combler le f...

Science des données

Gestion des coûts de stockage Cloud pour les applications Big-Data

Avec la croissance de la dépendance à des quantités de données toujours plus importantes, les entreprises modernes so...

AI

Les écoles devraient-elles compter sur le gouvernement pour la protection contre la cybercriminalité ?

Le gouvernement fédéral peut-il protéger les écoles primaires et secondaires ainsi que leurs élèves contre les cybera...

AI

Ces nouveaux outils pourraient aider à protéger nos images de l'IA

Cependant, ces outils ne sont ni parfaits, ni suffisants par eux-mêmes.

AI

DALL·E 3 est là avec l'intégration de ChatGPT

Plongez dans la façon dont le générateur d'images DALL·E 3 d'OpenAI repousse les limites, et voyez comment il rend la...