Les applications des grands modèles linguistiques ont transformé divers secteurs, ouvrant une nouvelle frontière dans le traitement et la compréhension du langage naturel. Les LLM, réputés pour générer du texte de type humain, ont révolutionné les chatbots, la création de contenu et même les tâches complexes de résolution de problèmes.
Cependant, malgré leurs capacités impressionnantes, les LLM sont confrontés à des défis notables, notamment en termes de connaissance du contexte et de maintien de la précision lors d'interactions prolongées. Un piège courant est leur tendance aux « hallucinations », où le contenu généré, bien que fluide, peut dériver vers l'inexactitude ou la non-pertinence.
C’est là que des technologies telles que la génération augmentée par récupération (RAG) et les bases de données vectorielles deviennent essentielles. En intégrant les LLM à RAG, qui récupère dynamiquement des informations pertinentes à partir de vastes ensembles de données, nous pouvons considérablement atténuer ces limitations. La synergie entre les LLM et les bases de données vectorielles, capables de gérer et de récupérer efficacement des données vectorielles structurées, promet d'apporter un nouveau niveau de profondeur, de contexte et de fiabilité aux applications LLM.
Dans ce blog, les lecteurs peuvent s'attendre à :
La génération augmentée par récupération (RAG) est un paradigme innovant dans le domaine de l'IA et du traitement du langage naturel. Il marque un changement significatif par rapport aux modèles linguistiques conventionnels en intégrant la recherche d'informations dans le processus de génération du langage. Cette approche hybride améliore la capacité des modèles d’IA à générer des réponses non seulement contextuellement précises, mais également imprégnées de connaissances actualisées provenant de sources de données externes.
La création de RAG remonte à la quête visant à surmonter les limites des modèles de langage standard, tels que GPT (Generative Pre-trained Transformer). Les modèles traditionnels, malgré leur capacité à générer un texte cohérent, ont souvent du mal à fournir des réponses précises et fondées sur des faits, en particulier pour les requêtes nécessitant des connaissances spécifiques en temps réel.
Voici une description du fonctionnement de la génération de récupération augmentée (RAG), en s'intégrant à une base de données vectorielle :
Ingestion et indexation : le flux de travail commence par une base de connaissances complète, qui constitue le fondement de l'intelligence du système. Cette base de connaissances est généralement un vaste corpus de documents contenant les informations susceptibles d'être interrogées par les utilisateurs. Ces documents peuvent aller des fiches FAQ et des articles aux bases de données d'informations structurées. Avant que ces documents puissent être utilisés, ils subissent un processus d'ingestion au cours duquel ils sont prétraités et transformés en intégrations. Un modèle d'intégration (souvent un algorithme d'apprentissage automatique sophistiqué) est utilisé pour convertir les informations textuelles en intégrations vectorielles. Ces plongements représentent numériquement le contenu sémantique des documents dans un espace multidimensionnel, optimal pour les comparaisons de similarité.
Interaction client : tout commence avec un client interagissant avec une application et posant une requête. Cette requête est une demande d’informations ou une question à laquelle le client attend que l’IA réponde.
Embedding de requête : la requête brute du client est ensuite traitée par un modèle d'intégration. Ce modèle convertit la requête textuelle en vecteur, qui est une représentation numérique qui capture la signification sémantique de la requête dans un espace de grande dimension.
Recherche dans la base de données vectorielles : le vecteur de requête est envoyé à une base de données vectorielles, une base de données spécialisée conçue pour gérer des données vectorielles de grande dimension. La base de données effectue une recherche de similarité pour récupérer les intégrations de documents les plus pertinentes. Ces intégrations représentent des connaissances prétraitées provenant d'une base de connaissances qui ont été ingérées dans le système.
Récupération de contexte : les intégrations de documents récupérées sont combinées avec la requête d'origine pour former une invite qui inclut à la fois la requête et le contexte pertinent.
Génération de réponse de modèle linguistique : cette invite enrichie est ensuite introduite dans un modèle d'apprentissage du langage (LLM). Le LLM utilise le contexte des documents récupérés pour générer une réponse précise, informative et contextuellement pertinente par rapport à la requête du client.
Réponse générative : Enfin, le LLM produit une réponse générative, qui est renvoyée au client via l'application. Cette réponse est non seulement basée sur les connaissances pré-entraînées du modèle, mais également augmentée d'informations spécifiques extraites de la base de connaissances, ce qui la rend très pertinente par rapport à la demande de l'utilisateur.
Les bases de données vectorielles stockent et gèrent les données qui ont été converties sous forme vectorielle numérique, souvent via des processus tels que l'intégration de modèles dans l'apprentissage automatique. Les intégrations sont des représentations numériques de données, souvent des vecteurs de grande dimension, qui capturent les caractéristiques sémantiques ou contextuelles de l'entrée d'origine. Dans le cas de données textuelles, les intégrations convertissent des mots, des phrases ou des documents entiers sous une forme qu'un ordinateur peut traiter. Des modèles d'apprentissage automatique, en particulier des réseaux de neurones, sont utilisés pour générer ces intégrations afin que les significations similaires soient proches dans l'espace vectoriel. Ces bases de données sont conçues pour effectuer efficacement des recherches de similarité, qui localisent les points de données les plus proches d'un vecteur de requête donné dans l'espace vectoriel.
Voici un aperçu plus approfondi du processus :
Stockage des données : lorsque les documents sont ingérés, un modèle d'intégration (tel qu'un réseau de neurones) transforme le texte en un vecteur de grande dimension. Chaque vecteur représente la signification sémantique du document sous forme numérique. Ces vecteurs sont ensuite stockés dans la base de données vectorielles.
Indexation : Pour faciliter une récupération rapide, la base de données construit un index sur ces vecteurs à l'aide d'algorithmes adaptés aux espaces de grande dimension, tels que l'Inverted File Index (IVF) ou le Hierarchical Navigable Small World (HNSW). Le choix du type d’index équilibre entre la rapidité et la précision de la recherche.
Recherche de similarité : lorsqu'une requête est effectuée, elle est également convertie en vecteur en utilisant le même modèle d'intégration. La base de données vectorielles utilise ensuite l'index pour trouver rapidement les vecteurs les plus similaires au vecteur de requête. La similarité est déterminée par des mesures de distance telles que la distance euclidienne ou la similarité cosinus.
Avantages des intégrations :
Similarité sémantique : les intégrations sont conçues de manière à ce que les éléments sémantiquement similaires soient plus proches dans l'espace vectoriel, permettant aux systèmes de comprendre le contexte et la signification. Par exemple, dans le domaine de la génomique, les données d’expression génique peuvent être codées sous forme d’intégrations pour révéler des modèles indiquant les relations entre différents gènes et phénotypes. Cela peut aider à identifier des biomarqueurs de maladies qui peuvent ne pas être apparents grâce à l’analyse traditionnelle.
Relations complexes : ils peuvent capturer des relations complexes et des nuances dans les données qui pourraient manquer avec les représentations traditionnelles. Une application pratique apparaît dans les systèmes de recommandation, tels que ceux utilisés par les services de streaming comme Netflix ou Spotify. Ces plates-formes utilisent des intégrations pour comprendre les préférences des utilisateurs et les fonctionnalités du contenu, recommandant ainsi des films ou des chansons partageant des similitudes avec les choix précédents d'un utilisateur. Malgré la diversité du contenu, les intégrations permettent des recommandations nuancées qui vont au-delà du genre ou de l'artiste, en tenant compte de modèles plus profonds de consommation des utilisateurs.
Uniformité : les intégrations convertissent des types de données variés en un format vectoriel uniforme, simplifiant ainsi les opérations telles que la comparaison et la récupération.
La création d'un environnement de développement local pour RAG et Vector DB ( Milvus ) implique plusieurs étapes clés.
Voici un guide structuré :
Conditions préalables :
Assurez-vous que Python 3.6+ est installé sur votre système.
Docker est requis pour exécuter Milvus.
Environnement virtuel :
Créez un nouvel environnement virtuel et utilisez-le :
python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus
Milvus utilise Docker :
Extrayez et exécutez l'image Milvus Docker : (vous pouvez également utiliser d'autres bases de données vectorielles)
Vous pouvez utiliser les étapes ci-dessous ou suivre le guide de démarrage fourni ici .
docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest
Données de configuration :
Essayons maintenant de télécharger quelques exemples de données, de créer des intégrations et de les insérer dans une collection.
import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000]
Créer des intégrations
from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions)
Insérez dans la base de données vectorielle.
# connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections)
Indexez la collection.
from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params )
Interroger des documents
query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}")
Une fois que nous aurons obtenu des documents sémantiquement similaires à partir de la base de données vectorielle, nous pourrions transmettre cette requête de contexte + d'entrée aux LLM, ce qui aura de bien meilleurs résultats car les LLM ont maintenant un contexte.
En conclusion, l'intégration de RAG avec des bases de données vectorielles comme Milvus offre une solution puissante à certains des défis les plus urgents des applications LLM, en particulier ceux nécessitant une compréhension contextuelle approfondie et une récupération dynamique d'informations. En combinant les prouesses génératives des LLM avec la précision et l’efficacité des bases de données vectorielles, les entreprises peuvent considérablement améliorer la pertinence et l’exactitude des réponses basées sur l’IA, offrant ainsi aux utilisateurs des interactions précieuses et riches en contexte.
À mesure que l’IA continue de progresser, la fusion de ces technologies ne représente pas seulement une étape, mais un bond en avant, annonçant un avenir dans lequel l’IA pourra prendre en charge des applications plus sophistiquées, plus variées et plus nuancées dans tous les secteurs. Ce blog a ouvert la voie aux innovateurs et aux praticiens pour commencer à expérimenter ces outils, repoussant les limites de ce qui est possible dans le domaine des applications d'IA d'entreprise.