Réaliser un agent conversationnel en utilisant le deep-learning

Qui entre dans la gueule du crocodile ?

Laissez-moi vous raconter une histoire.

C’est l’histoire d’un loup. Un loup affamé. Depuis trois jours, il n’a rien mangé. Tout ça parce qu’il a MAL AUX DENTS !

"Ouille, ouille, ouille ! Au secours ! J’ai trop mal ! Aidez-moi !" Crie-t-il à longueur de journée. Qui voudrait s’approcher du loup pour l’aider ?

"Toi ? Ou bien toi, le lièvre ?

- Non, non, non, je le connais bien le loup, il a mangé mon frère, je ne lui fais pas confiance.

- Et toi, le chien, tu veux bien l’aider ?

- Moi, aider le loup, ce faux-frère qui mange les moutons que je garde ? Jamais !"

Le loup ne trouve personne qui ose entrer dans sa gueule pour le soigner. Il va trouver le crocodile : lui aussi a beaucoup de dents !

"Bonjour mon frère, comment vas-tu ?

- Pas mal, pas mal, répond le crocodile, et toi ?

- Oh, je souffre l’enfer : J’ai MAL AUX DENTS ! Tu n’aurais pas un conseil à me donner ?

- Hé ! Moi, j’ai mon dentiste attitré ! Regarde sur mon dos : l’oiseau qui est là, dès que j’ai mangé, il vient dans ma gueule me laver les dents.

- Voilà qui est pratique…

- Je vais lui demander s’il peut faire quelque chose pour toi. Mais attention, INTERDICTION DE L’AVALER ! tu m’as bien compris…

- Oui, oui, oui."

Voilà l’oiseau qui s’affaire dans la gueule noire du loup : il fouille et farfouille entre les dents pointues pour ôter toutes les petites saletés qui sont restées coincées. Le loup se sent vite soulagé, il se sent libéré de cet affreux mal de dents. Du coup, il sent qu’il a FAIM, très faim.

Et justement, il y a ce bel oiseau, là, juste dans sa bouche. IL L’AVALE ! GLOUP ! D’UN COUP !

"TRAITRE, hurle le crocodile furieux, disparais de ma vue où je te mets en pièces !"

C’est depuis ce jour-là qu’on ne voit plus le crocodile et le loup ensemble.

Mais, l’histoire ne finit pas là : Dans le ventre du loup, l’oiseau a sorti ses petits ciseaux et COUPE, COUPE, COUPE, il découpe son ventre, et ses fesses, et ses bras, et ses jambes, et sa tête. L’oiseau l’a MIS EN PIECES ! Puis, il s’est envolé pour retrouver son ami le crocodile.

Elle vous a plu ?

Utiliser le deep-learning pour répondre à des questions

Et maintenant, pouvez-vous répondre à la question (facile) suivante :

Qui entre dans la gueule du crocodile ?

Facile pour un humain.

Mais pour un ordinateur ? C'est moins simple. Car il faut comprendre l'histoire, et savoir que "Voilà l’oiseau qui s’affaire dans la gueule noire du loup" signifie qu'il y est entré.

C'est désormais possible grâce aux progrès réalisés sur le traitement du langage naturel (NLP). Ce domaine du deep-learning a connu plusieurs innovations récentes, dont le modèle de type BERT.

Sans entrer dans les détails, BERT (Bidirectional Encoder Representations from Transformers) est un modèle de deep-learning qui utilise une architecture de réseau de neurones très performante pour l'analyse du langage naturel.

Pour entraîner un modèle BERT sur la langue française, on lui soumet un grand nombre de textes et on masque certains mots aléatoirement. L'objectif est de doter le modèle de la capacité à prédire le mot manquant.

Les chercheurs français de l'INRIA ont appliqué ce procédé d'entraînent pour proposer un modèle pré-entrainé sur la langue française nommé "CamenBERT" (oui, on comprend que c'est français du coup...). C’est une avancée notable, car le corpus en langue française utilisé pour l’entrainement comporte 33Md de mots.

On dispose alors d'un point de départ pour ajuster le modèle sur un problème précis de traitement du langage naturel, tel que :

  • la classification de texte : trier les commentaires positifs et négatifs déposés à propos d'un produit,

  • Le résumé de texte, ou au contraire la génération de contenu,

  • la traduction,

  • l’élaboration automatique de réponses à des questions en allant chercher les éléments dans un texte fourni au préalable. Ca permettra de réaliser un "bot" (ou agent conversationnel). C’est justement ce que l’on voudrait tester avec notre histoire de loup.

Le fine-tuning : affiner son CamenBERT

Pour entrainer le modèle à répondre à des questions en analysant un texte, on a besoin d'un jeu de données avec des questions et des réponses.

Plusieurs initiatives ont été menées en ce sens :

  • PIAFv1.1, qui contient 7569 pairs des questions/réponses

  • FQuAD (French Question Answering Dataset) : qui en comporte + de 25000

Comment constitue-t-on ces données ? Tout simplement en demandant à des humains de répondre à des questions !

A partir de ces ensembles de questions / réponses, on dispose de données d'une qualité suffisante pour affiner le CamenBERT. C'est ce “fine-tuning” qui a été réalisé par Etalab, et dont le résultat est publié sur la plateforme huggingface.co.

Tout ce processus de constitution des jeux de données et d'entraînement des modèles (nécessitant des heures de calcul) aboutit à un modèle librement téléchargeable. Il constitue un début de solution pour construire un agent conversationnel.

On peut tester avec seulement quelques lignes de code Python, en y insérant l’histoire en tant que contexte de la question :

from transformers import pipeline
  
nlp = pipeline('question-answering', model='etalab-ia/camembert-base-squadFR-fquad-piaf', tokenizer='etalab-ia/camembert-base-squadFR-fquad-piaf')  

histoire = """ 
C’est un loup. Un loup affamé. Depuis trois jours...
[...] 
Puis, il s’est envolé pour retrouver son ami le crocodile. 
""" 
 
question = "Qui est l'ami du chien ?"  
reponse = nlp({'question': question,'context': histoire}) 

print(reponse) 
# {'score': 0.8011658374498409, 'start': 282, 'end': 291, 'answer': 'le lièvre'} 

Les ressources de deep-learning deviennent accessibles

Les logiciels open-source ont transformé le monde du développement logiciel, en donnant accès gratuitement à des outils très performants : Postgresql, React, ... Ce sont devenus les briques logiciels des développements modernes.

Le deep-learning suit cette tendance : les modèles et les datasets sont accessibles. Ils fournissent les matériaux pour construire des solutions innovantes à base d'IA. L'enjeu consiste maintenant à se doter des compétences pour personnaliser ces modèles génériques pour les rendre performants sur un domaine précis.

Bonne semaine !

— Hervé

PS : un petit extrait des questions/réponses du modèle sur l'histoire du crocodile et du loup afin de cerner les limites de l’exemple :

Qui entre dans la gueule du crocodile ? 
{ 'answer': 'l’oiseau'}  

Qu'est-ce qu'un crocodile ? 
{''answer': 'lui aussi a beaucoup de dents'}  

Qui meurt ? 
{'answer': 'le loup,'}  

Qui a mal aux dents ? 
{'answer': 'Le loup'}  

Comment soigner son mal de dents ? 
{'answer': 'laver les dents.'} 
 
Qui mange les moutons ? 
{'answer': 'le loup,'}  

Qui est le dentiste ? 
{'answer': 'l’oiseau'}  

Que garde le chien ? 
{'answer': 'moutons'}  

Qui donne un conseil au loup ? 
{'answer': 'l’oiseau'}

Si vous aimez cette newsletter et que quelqu’un dans votre entourage pourrait lui aussi l’apprécier, vous pouvez lui partager 👇

Partager

Si vous êtes tombés par hasard sur cette newsletter et que le contenu vous intéresse :