RAG : Réponse aux questions sur la connaissance du domaine avec la recherche sémantique et l'IA générative

Répondre à des questions basées sur la connaissance d'un domaine (comme la documentation interne, les contrats, les livres, etc. Dans cet article, nous explorons une technique avancée appelée Retrieval-Augmented Generation (RAG) afin d'y parvenir avec une grande précision, en mélangeant la recherche sémantique et la génération de texte avec des modèles tels que ChatDolphin, LLaMA, ChatGPT, GPT-4...

Réponse aux questions

Les défis de la réponse aux questions sur la connaissance du domaine

Pour répondre à des questions sur la connaissance d'un domaine, il faut d'abord envoyer un certain contexte au modèle d'IA, puis poser une question à ce sujet.

Par exemple, vous pouvez envoyer le contexte suivant :

All NLP Cloud plans can be stopped anytime. You only pay for the time you used the service. In case of a downgrade, you will get a discount on your next invoice.

Vous pouvez maintenant vous poser la question suivante :

When can plans be stopped?

L'IA répondrait à peu près ceci :

Anytime

Pour plus de détails, voir notre documentation sur la réponse aux questions. ici.

Le problème de cette approche est que la taille de votre contexte (c'est-à-dire la taille de votre texte d'entrée) est limitée. Vous ne pouvez donc pas envoyer toute votre connaissance du domaine en tant que contexte.

Supposons que vous souhaitiez créer un chatbot d'assistance qui connaisse tout de la documentation de votre produit, afin que les utilisateurs finaux puissent lui poser n'importe quelle question relative au produit sans avoir à contacter un véritable agent d'assistance. Il est très probable que votre documentation soit composée de plusieurs centaines ou milliers de mots, voire de millions de mots...

Voyons comment surmonter cette limitation et répondre à des questions sur des documents très volumineux.

Recherche sémantique VS IA générative

Lorsqu'il s'agit de répondre à des questions, deux types de technologies peuvent être utilisés. La génération de texte (IA générative) et la recherche sémantique.

La première, la génération de texte, est essentiellement ce que je viens de montrer ci-dessus. Il s'agit généralement d'un modèle de génération de texte avancé tel que ChatDolphin, LLaMA, ChatGPT, GPT-4... Il est capable de comprendre une question humaine et de répondre comme un humain. Cependant, il ne fonctionne pas sur les documents volumineux. Le réglage fin d'un modèle d'IA génératif avec votre connaissance du domaine ne fonctionnerait pas bien car le réglage fin n'est pas une bonne technique pour ajouter de la connaissance à un modèle.

La recherche sémantique consiste essentiellement à rechercher un document de la même manière que Google, mais en se basant sur sa propre connaissance du domaine.

Pour ce faire, vous devez convertir vos documents internes en vecteurs (également appelés "embeddings"). Ensuite, vous devez également convertir votre question en vecteur, puis effectuer une recherche vectorielle (également connue sous le nom de "similarité sémantique") afin de récupérer la partie de votre connaissance du domaine qui est la plus proche de votre question.

Une première solution consiste à stocker vos embeddings dans une base de données vectorielle dédiée comme PG Vector. Une autre solution est d'encoder votre propre modèle de recherche sémantique avec votre propre connaissance du domaine et de le déployer sur un GPU (c'est la solution que nous proposons à NLP Cloud car elle offre le meilleur temps de réponse). Une fois votre base de données vectorielle prête, ou une fois votre modèle créé, vous pouvez poser des questions en langage naturel et votre modèle d'IA vous renverra un extrait de votre connaissance du domaine qui répondra le mieux à votre question.

La recherche sémantique est généralement très rapide et relativement bon marché. Elle est également plus fiable que la stratégie de réglage fin de la génération de texte, de sorte que vous ne serez pas confronté à un problème d'hallucination de l'IA. Mais elle n'est pas en mesure de "répondre" correctement à une question. Elle renvoie simplement un morceau de texte qui contient une réponse à votre question. Il appartient ensuite à l'utilisateur de lire l'intégralité du texte pour trouver la réponse à sa question.

Pour plus de détails, voir notre documentation sur la recherche sémantique. ici.

La bonne nouvelle, c'est qu'il est possible de combiner la recherche sémantique et l'IA générative afin d'obtenir des résultats avancés !

Réponse aux questions : mélange de recherche sémantique et d'IA générative

Pour répondre à des questions sur la connaissance d'un domaine, la stratégie que nous préférons chez NLP Cloud est la suivante : faites d'abord une requête avec la recherche sémantique afin de récupérer les ressources qui répondent le mieux à votre question, puis utilisez la génération de texte pour répondre à la question en vous basant sur ces ressources, comme un être humain.

Supposons que nous soyons un revendeur d'imprimantes HP et que nous souhaitions répondre aux questions de nos clients sur notre site web.

Tout d'abord, nous devrons calculer les embeddings et les stocker dans une base de données vectorielle, ou créer notre propre modèle de recherche sémantique. Ici, il sera composé de 3 exemples seulement, mais dans la vraie vie, vous pouvez inclure jusqu'à 1 million d'exemples lorsque vous utilisez la recherche sémantique sur NLP Cloud. Il suffit de créer un fichier CSV et d'y placer les éléments suivants :

HP® LaserJets have unmatched printing speed, performance and reliability that you can trust. Enjoy Low Prices and Free Shipping when you buy now online.
Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert.
HP LaserJet ; Lowest cost per page on mono laser printing. · $319.99 ; Wireless options available. · $109.00 ; Essential management features. · $209.00.

Nous téléchargeons ensuite notre jeu de données CSV dans NLP Cloud et cliquons sur "Create model" (Créer un modèle). Au bout d'un moment, notre propre modèle de recherche sémantique contenant notre propre connaissance du domaine sera prêt et nous recevrons une URL API privée pour l'utiliser.

Posons une question à notre tout nouveau modèle à l'aide du client NLP Cloud Python :

import nlpcloud

# We use a fake model name and a fake API key for illustration reasons.
client = nlpcloud.Client("custom-model/5d8e6s8w5", "poigre5754gaefdsf5486gdsa56", gpu=True)
client.semantic_search("How long is the warranty on the HP Color LaserJet Pro?")

Le modèle renvoie rapidement les informations suivantes avec un temps de réponse court :

{
"search_results": [
    {
        "score": 0.99,
        "text": "Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."
    },
    {
        "score": 0.74,
        "text": "All consumer PCs and printers come with a standard one-year warranty. Care packs provide an enhanced level of support and/or an extended period of coverage for your HP hardware. All commercial PCs and printers come with either a one-year or three-year warranty."
    },
    {
        "score": 0.68,
        "text": "In-warranty plan · Available in 2-, 3-, or 4-year extension plans · Includes remote problem diagnosis support and Next Business Day Exchange Service."
    },
    ]
}

Nous récupérons maintenant la réponse qui a le score le plus élevé (nous pourrions parfaitement récupérer plusieurs réponses) : "Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."

Cette réponse est correcte, mais elle n'est pas très conviviale, car l'utilisateur doit lire un long texte pour obtenir la réponse. Nous posons donc à nouveau la même question à notre point final de réponse aux questions, en utilisant le modèle ChatDolphin. Nous utiliserons la réponse de la recherche sémantique comme contexte :

import nlpcloud

client = nlpcloud.Client("chatdolphin", "poigre5754gaefdsf5486gdsa56", gpu=True)
client.question(
    """How long is the warranty on the HP Color LaserJet Pro?""",
    context="""Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."""
)

Il renvoie la réponse suivante :

{
    "answer": "The warranty lasts for three years."
}

Pas mal, non ?

Conclusion

Malgré les récents progrès réalisés sur les modèles d'IA générative tels que ChatDolphin, LLaMA, ChatGPT, GPT-4, etc., la taille limitée des requêtes rend impossible l'utilisation de ces grands modèles sur des connaissances de domaine spécifiques pour la réponse aux questions. Le réglage fin de ces modèles ne fonctionne malheureusement pas bien pour un tel cas d'utilisation...

Une bonne stratégie consiste à mettre en œuvre un système RAG. Répondez d'abord à votre question en convertissant vos documents en encastrements et en les stockant dans une base de données vectorielle, ou en créant votre propre modèle de recherche sémantique à partir de vos documents, puis utilisez un modèle de réponse aux questions classique basé sur l'IA générative afin de renvoyer une réponse humaine à la question initiale.

Si vous souhaitez mettre en œuvre cette stratégie, n'hésitez pas à créer votre propre modèle de recherche sémantique sur NLP Cloud : voir la documentation correspondante ici!

Mark
Ingénieur d'application chez NLP Cloud