Optimisez l’intelligence conversationnelle

Optimisez l’intelligence conversationnelle de votre chatbot à l’aide de GPT-3

Image de l’auteur, générée avec Stable Diffusion. Invite originale : « Une illustration sur les vecteurs incorporés et la recherche sémantique »

Il y a quelques semaines, OpenAI a dévoilé sa dernière création – ChatGPT qui a pris d’assaut le monde entier, grâce à ses solides capacités de compréhension du langage naturel et sa capacité à répondre à toute question ou tâche qui lui est posée – de manière transparente et conversationnelle. La profondeur et l’étendue des connaissances qu’il semble posséder sont stupéfiantes, et son développement continu aura certainement un impact significatif sur l’avenir de l’IA conversationnelle.

Cependant, c’est loin d’être parfait. Il a ses propres limites et comme les auteurs l’ont souligné :

  • ChatGPT est toujours sensible aux hallucinations et aux confabulations, écrivant parfois des réponses plausibles mais incorrectes ou absurdes.
  • Le modèle utilise fréquemment un verbiage excessif et des phrases répétitives, comme rappeler constamment à l’utilisateur qu’il s’agit d’un modèle de langage formé par OpenAI. Ces problèmes proviennent de biais présents dans les données de formation.
  • Sa base de connaissances est statique et les dernières nouvelles et informations doivent être mises à jour et recyclées, ce qui nécessite de nombreux calculs supplémentaires. Étant donné que le modèle a terminé sa formation au début de 2022, ses données de formation ne comprennent que des informations jusqu’en 2021.
Fait intéressant, interroger ChatGPT sur les derniers événements vous dira qu’il ne connaît les informations que jusqu’en 2021. Beaucoup de conscience de soi ?

Dans cet article, je vais donc vous montrer comment surmonter certains de ces défis et étendre la base de connaissances de ces modèles GPT ou de toute application de chatbot.

Nous pouvons y parvenir en intégrant le chatbot à vos intégrations de base de connaissances spécifiques à un domaine, à l’aide de la recherche sémantique.

Reconnaissance

Cet article n’aurait pas été possible sans l’incroyable webinaire d’OpenAI & Pinecone intitulé — Beyond Semantic Search . Une grande partie des images et du code explicatifs proviennent de leur référentiel public , alors remerciez Pinecone et OpenAI pour partager librement leurs connaissances et leur expertise utiles !

Encastrements ? Sémantique… quoi ?

Je sais ce que vous pensez, mais supportez-moi pendant que j’essaie d’expliquer simplement ces sujets complexes. La recherche sémantique (ou neuronale) est une méthodologie de recherche de données utilisée dans l’apprentissage automatique et la PNL, largement utilisée dans les domaines des systèmes de recommandation et de la recherche d’informations.

Mais qu’est-ce que la sémantique, de toute façon ? Eh bien, cela fait référence à l’étude philosophique du sens lui-même (un sujet pour une autre fois lol).

Il s’agit essentiellement d’une technique qui vous permet de rechercher du texte avec un sens, plutôt que de simplement faire correspondre les mots clés.

Figure : Recherche sémantique — Auteur : Seobility — Licence : CC BY-SA 4.0

La recherche sémantique permet aux ordinateurs de comprendre le sens et le contexte des mots et des phrases, afin de fournir des résultats plus précis et pertinents à la requête d’un utilisateur.

En fait, il pose les bases et le fondement de l’intégralité d’Internet lui-même. Les moteurs de recherche sont aujourd’hui construits sur la recherche sémantique et depuis 2013, Google s’est progressivement développé pour devenir un moteur de recherche 100% sémantique.

Si la recherche de similarités est au cœur du succès d’une entreprise de 1,65 milliard de dollars – la cinquième entreprise la plus précieuse au monde, il y a de fortes chances que cela vaut la peine d’en savoir plus – James Briggs

Mais comment ça marche? Comment une machine peut-elle comprendre le « sens », un concept que nous, les humains, avons nous-mêmes du mal à comprendre ? C’est là que les intégrations entrent en jeu !

En termes simples, les plongements sont des représentations de texte sous la forme d’une liste de nombres à valeurs réelles, appelés vecteurs. Il s’agit d’une représentation mathématique du texte dans un espace sémantique, essentiellement, un moyen de cartographier le langage naturel en nombres que les ordinateurs peuvent comprendre. En général, l’objectif de l’utilisation des incorporations est de créer une représentation qui capture la structure inhérente des données, tout en permettant une manipulation et une analyse faciles par des algorithmes d’apprentissage automatique.

Les incorporations ont d’abord été introduites pour représenter des mots et étaient appelées incorporations de mots ( word2vec ). La technique a depuis évolué pour représenter des phrases entières, des sujets, des documents et d’autres unités de langage.

Figure : Le mot illustré2vec —Auteur : Jay Alammar
Les incorporations sont formées à la suite du codage du texte en vecteurs. Source : Webinaire Au-delà de la recherche sémantique

L’espace sémantique est appelé « sémantique » parce qu’il capture le sens des mots ou des phrases, et il est appelé un « espace » parce que les vecteurs sont disposés dans un système de coordonnées multidimensionnel, où des mots/phrases sémantiquement similaires sont situés plus près de les uns des autres dans l’espace euclidien.

Les textes étroitement liés par leur sens seront regroupés plus étroitement dans l’espace d’intégration.

En représentant des mots ou des phrases sous forme de vecteurs dans cet espace, les ordinateurs peuvent effectuer de manière intéressante des opérations mathématiques telles que l’addition et la soustraction, pour comparer et manipuler leurs significations. Cela peut permettre un traitement du langage naturel plus précis et plus efficace, ce qui améliore les performances dans diverses tâches basées sur le langage.

Pour illustrer comment les ordinateurs extraient des informations sémantiques en faisant des calculs sur du texte, nous pouvons utiliser le célèbre exemple « King-Queen » en PNL :

[roi] — [homme] + [femme] ~= [reine]

Cela signifie que, si vous soustrayez l’intégration du mot « homme » de celle du mot « roi » et y ajoutez l’intégration du mot « femme », le résultat sera une intégration qui est très similaire à la mot ‘reine.’ Cela est possible parce que l’espace sémantique capture les significations et les relations entre les mots, permettant d’effectuer des opérations mathématiques sur leurs incorporations pour manipuler et comparer leurs significations.

Pourquoi devriez-vous vous en soucier?

À l’ère de l’intelligence artificielle, l’intégration de la technologie de recherche sémantique dans votre chatbot est cruciale pour fournir des réponses efficaces et précises aux demandes des utilisateurs. La recherche sémantique est une technique incroyablement puissante qui permet aux ordinateurs de comprendre le sens et le contexte du langage parlé ou écrit, leur permettant de fournir des résultats plus pertinents et utiles aux requêtes des utilisateurs.

De plus, vous pouvez utiliser votre base de connaissances existante comme source fondamentale de vérité pour votre agent virtuel. Sur ma page de projets, j’ai décrit comment le Chatbot de RingCentral exploite la recherche sémantique comme intention de repli par défaut et les résultats sont exceptionnels ! En intégrant la recherche sémantique dans votre Chatbot, vous pouvez améliorer ses performances et le rendre plus convivial, en l’aidant à mieux répondre aux besoins de vos clients.

J’espère que cela a donné une idée intuitive et une perspective sur ce que sont les incorporations et comment elles sont utilisées dans la recherche sémantique. Maintenant que nous avons réglé cela, nous allons créer notre chatbot de recherche sémantique intelligente !

Commencer

Outre Dall-E et GPT-3, saviez-vous qu’OpenAI fournit également une API Embeddings ? En fait, ils viennent de sortir une version mise à jour de leur endpoint d’intégration !

Explorons-le en apprenant à tirer parti de la recherche sémantique dans notre assistant conversationnel.

L’objectif principal de ce guide est de démontrer comment les incorporations peuvent être utilisées pour élargir les connaissances de votre bot. Il existe actuellement 2 façons principales d’étendre votre base de connaissances aux modèles GPT :

  1. Finetuning – que j’ai expliqué dans mon post précédent . Approche simple, mais vous n’avez aucun contrôle sur la réponse du modèle en dehors de l’ingénierie initiale de l’invite.
  2. Embeddings – une meilleure approche pour étendre les connaissances spécifiques au domaine du modèle, permettant plus de flexibilité et de contrôle sur la sortie du modèle généré.

L’ensemble de données

Pour le démontrer, nous allons créer un assistant de chat de commerce électronique utile. La première étape consiste à préparer les données qui seront utilisées comme base de connaissances du bot.

Pour cette tâche, j’ai choisi l’ ensemble de données produit Amazon India de PromptCloud pour émuler la base de connaissances spécifique au domaine dont notre agent s’inspirera. Téléchargez le fichier CSV et chargez-le sur votre Google Drive afin que nous puissions explorer les données dans notre bloc- notes Colab .

En regardant les données, nous constatons qu’elles comportent plusieurs colonnes de produits, mais nous nous intéressons surtout au titre du produit, à la description du produit, à la catégorie, à la marque, au prix et à la disponibilité.

Nous pouvons utiliser ces colonnes comme source de données textuelles pour créer nos représentations incorporées. Mais avant cela, nous devons concaténer les colonnes requises afin que nous ayons tout notre texte au même endroit, et l’ajouter à une nouvelle colonne nommée « texte ».

data[ 'text' ] = "Catégorie : " + data.Category + " ; Titre du produit : " + data[ "Titre du produit" ] + " ; Description du produit : " + data[ "Description du produit" ] + " ; Marque : " + data.Brand + " ; Prix : " + data.Price + " ; Disponibilité du stock : " + data[ "Disponibilité du stock" ]

Il s’agit du format de données requis pour les intégrations OpenAI. Nous pouvons maintenant procéder à leur création.

Création des encastrements

Pour choisir la taille de vos embeddings, cela dépend des besoins spécifiques de votre cas d’utilisation.

Des modèles plus grands et plus sophistiqués, plus coûteux, pourront générer un espace sémantique avec un degré de granularité plus élevé, permettant une représentation plus précise et nuancée des significations et des relations entre les textes.

Pour cette démo, j’ai utilisé le modèle ‘babbage’ qui a 2048 dimensions pour ses vecteurs plongeants. Nous pouvons utiliser le openaipackage Python pour créer les incorporations, tout ce dont vous avez besoin est votre clé API OpenAI.

openai.api_key = "<API_KEY>"

 size = 'babbage' 

from openai.embeddings_utils import get_embedding 

data[ 'embeddings' ] = data.text.apply( lambda x: get_embedding(x, engine= f'text-search- {size } -doc-001' )) 
data.head()

Et ça y est, nous avons maintenant nos incrustations ! Exportons le jeu de données, y compris les représentations incorporées, et téléchargeons-le sous forme de fichier parquet. En savoir plus sur les avantages de l’utilisation du format de fichier parquet ici .

Choisir une base de données vectorielle

Maintenant que nous avons nos incorporations de texte, nous devons pouvoir les stocker avant de pouvoir les utiliser. Entrez dans les bases de données vectorielles.

Une base de données vectorielle est un type de base de données optimisé pour stocker et interroger des vecteurs. Alors, comment choisir une base de données vectorielle ?

Il existe 2 options – utiliser des bases de données vectorielles open source auto-hébergées ou des bases de données cloud gérées. Hackernoon a un excellent article sur la navigation dans le paysage des bases de données vectorielles . Mais ils ont raté un concurrent important – Redis. Oui, Redis a sa propre offre de base de données vectorielle et vous voudrez peut-être l’envisager, car votre organisation utilise très probablement déjà Redis.

Pour cette démo, j’ai utilisé Pinecone.io en raison de sa facilité d’utilisation et de sa capacité à démarrer rapidement dans un cahier, en utilisant simplement une clé API. Rendez-vous sur Pinecone pour obtenir votre clé API gratuite, et nous pourrons procéder à la création et à l’indexation de notre base de données vectorielles.

index_name = 'amzn-semantic-search' 

sinon  index_name dans pinecone.list_indexes () : 
    pinecone.create_index( 
        index_name, dimension= len (df[ 'embeddings' ].tolist()[ 0 ]), 
        metric= 'cosinus'
     ) 

index = pomme de pin.Index(nom_index)

Notez que nous utilisons la « similarité cosinus » comme métrique pour noter les textes similaires. Nous pouvons ensuite spécifier une taille de lot pour insérer nos intégrations par lots dans notre index de pomme de pin nouvellement créé.

from tqdm.auto import tqdm 

batch_size = 32 

for i in tqdm(range(0, len(df), batch_size)): 
    i_end = min(i+batch_size, len(df)) 
    df_slice = df.iloc[i:i_end] 
    to_upsert = [ 
        ( 
            row['id'], 
            row['embeddings'].tolist(), 
            { 
                'Category': row['Category'], 
                'Prix': row['Prix'], 
                'Marque': row ['Marque'], 
                'Disponibilité du stock' : row['Disponibilité du stock'], 
                'Urls d'image' : row['Urls d'image'], 
                'n_tokens' : row['n_tokens'] 
            } 
        ) pour _, ligne dans df_slice.iterrows() 
    ]
    index.upsert(vecteurs=to_upsert)

Notez également qu’en plus des incorporations, nous pouvons inclure des métadonnées supplémentaires dans nos lignes, afin de permettre une recherche et un filtrage plus robustes. Et félicitations, vous venez d’indexer votre première base de données vectorielles !

Nous pouvons maintenant l’utiliser pour rechercher tout ce que nous voulons sur l’ensemble de données. L’interrogation de n’importe quel texte dans la base de données vectorielle renverra les lignes sémantiquement les plus similaires de l’ensemble de données intégré. Nous pouvons ensuite utiliser les résultats de la recherche comme contexte pour notre assistant conversationnel.

Où la magie opère

L’instant Eurêka !

Les modèles génératifs comme GPT-3 ont créé beaucoup de buzz dans l’espace IA/ML, cependant, leur adoption dans le domaine de l’IA conversationnelle est encore restée relativement limitée.

Cela peut être attribué au scepticisme des gens à l’égard des LLM et de leur utilisation dans des environnements orientés client prêts pour la production, craignant les résultats imprévisibles qui peuvent être générés par ces modèles.

Ces préoccupations sont valables, cependant, le paradigme actuel du développement de chatbots axé sur l’intention est brisé . Aujourd’hui, les organisations n’ont tout simplement pas le temps ni les données nécessaires pour créer des chatbots intelligents réellement efficaces, à l’aide d’intentions. Le PDG de Botpress a publié un article perspicace sur ce sujet intitulé —  Les chatbots seront-ils jamais à la hauteur du battage médiatique ? (La réponse est oui)

Ce n’est pas ce que proposent les chatbots d’aujourd’hui. Au lieu de cela, ce sont des robots de questions-réponses glorifiés qui classent les requêtes et émettent une réponse prédéfinie. Les avancées récentes dans plusieurs domaines de l’IA offrent cependant des opportunités pour produire quelque chose de mieux — Sylvain Perron

Je suis ici pour briser le mythe et vous montrer comment il est tout à fait possible d’utiliser ces grands modèles de manière sûre, en minimisant autant de risques que possible.

Le secret réside dans le « contexte » ! Au lieu d’utiliser directement des modèles génératifs en production, les combiner avec une base de connaissances intégrée s’avère être la bonne solution et la bonne approche pour atténuer les dangers des LLM.

En définissant votre base de connaissances existante comme la source fondamentale de la vérité, il est alors possible de conserver les informations que le modèle génératif connaît comme contexte, et il ne s’écartera jamais en dehors de son contexte fourni ! (à moins que nous ne le voulions, bien sûr). Nous pouvons utiliser la même technique pour étendre les connaissances de votre bot en lui fournissant un contexte supplémentaire. Cette recherche n’est en aucun cas nouvelle et s’appelle Information Retrieval based Question Answering .

Voici un exemple d’invite que vous pouvez utiliser pour vous assurer que l’agent conversationnel s’en tient uniquement au contexte fourni. Demandez-lui autre chose en dehors de votre base de connaissances et il vous dira qu’il n’a pas cette information—

Ce qui suit est une conversation de chat entre un assistant de commerce électronique IA et un utilisateur. 
Rédigez un paragraphe répondant à la question de l'utilisateur et utilisez le contexte ci-dessous pour obtenir des informations pertinentes. 
S'il est absolument impossible de répondre à la question en fonction du contexte, dites que vous ne savez pas. 

Contexte : <les résultats de recherche de la base de données vectorielle vont ici> 
Chat : <la transcription du chat va ici>

Les résultats:

Le modèle est capable d’identifier correctement le prix et la disponibilité des produits à partir de sa base de connaissances
Posez des questions ou des produits au bot en dehors de ses données et il vous dira qu’il ne les a pas

Les résultats, à mon avis, sont fantastiques!

Ce n’est pas parfait bien sûr, mais le modèle génératif n’est fourni qu’avec les meilleures correspondances sémantiques de la requête de l’utilisateur, et il fait un excellent travail pour donner un sens au contexte renvoyé et proposer une réponse utile.

Vous pouvez lui demander n’importe quelle information relative au produit et il vous répondra de manière appropriée ; cependant, lui poser des questions en dehors de son domaine l’empêchera de répondre à la demande et au lieu de cela, il essaiera doucement d’orienter la conversation vers son objectif programmé.

Essentiellement, ce que fait l’agent conversationnel GPT, c’est qu’au lieu de répondre directement à la question de l’utilisateur lui-même, notre base de connaissances intégrée agit comme un « Oracle » et notre modèle n’utilisera que les résultats de l’oracle pour générer la sortie. Nous avons essentiellement intégré un moteur de recherche dans notre chatbot. Plutôt cool, hein ?

N’hésitez pas à jouer avec le chatbot ici – https://amagastyas-amazon-bot.streamlit.app/ et faites-moi part de toute réponse intéressante/brisée dans les commentaires ci-dessous !

Limites

Dans son état actuel, le cadre de recherche sémantique pour les conversations de chat n’est pas parfait et nécessite encore des recherches supplémentaires avant de pouvoir être perfectionné. En raison de la manière dont les contextes sont récupérés, le bot ne peut mener une conversation que sur un sujet particulier à un moment donné. Si vous lui posez une question sur un sujet différent au cours d’une discussion en cours, il sera confus par le contexte précédent et il ne générera plus de résultats précis, bien que cela puisse sembler très convaincant ! La solution que j’ai imaginée est de réinitialiser le chat avant de lui poser une nouvelle question de sujet.

La solution actuelle est assez naïve, donc si quelqu’un trouve une meilleure solution à ce défi, faites-le moi savoir ! Le code de l’application de démonstration est lié ici .

Conclusion

Comme nous l’avons vu, l’intégration de la recherche neuronale d’OpenAI ou de toute technologie de recherche sémantique dans votre chatbot peut considérablement améliorer sa capacité à trouver des informations pertinentes et à fournir des réponses précises aux requêtes des utilisateurs. L’utilisation d’une base de connaissances comme source d’informations pour les LLM garantit la sécurité et donne au bot les connaissances indispensables sur votre tâche spécifique à un domaine. En utilisant des modèles pré-formés ou en intégrant l’API OpenAI, vous pouvez tirer parti de la puissance de l’apprentissage automatique pour améliorer les capacités de recherche de votre chatbot, ainsi que surmonter certains des défis existants dans les grands modèles de langage.

La mise en œuvre de la technologie de recherche neuronale dans votre projet de chatbot est assez simple et les résultats peuvent être impressionnants. Alors pourquoi ne pas l’essayer et voir comment cela peut améliorer les performances de votre chatbot ? Vous pourriez être surpris.

Ressources et références

Retour en haut