DeepPavlov pour les développeurs: # 1 outils NLP et créer des chatbots

Bonjour à tous! Nous ouvrons une série d'articles consacrés à la résolution de problèmes pratiques liés au traitement du langage naturel (ou simplement à la PNL) et à la création d'agents interactifs (chat bots) à l'aide de la bibliothèque open source DeepPavlov , développée par notre équipe du Laboratoire des systèmes neuronaux et du Deep Learning MIPT. L'objectif principal du cycle est de présenter DeepPavlov à un large éventail de développeurs et de montrer comment résoudre les problèmes d'application de la PNL sans avoir de connaissances approfondies en apprentissage automatique et un doctorat en mathématiques.

Les tâches de PNL incluent la détermination de la tonalité du texte, l'analyse des entités nommées, la détermination de ce que l'autre personne veut de votre bot: commander une pizza ou obtenir des informations d'aide et bien plus encore. Vous pouvez en savoir plus sur les tâches et méthodes PNL ici .

Dans cet article, nous vous expliquerons comment exécuter REST North avec des modèles NLP pré-formés prêts à l'emploi sans configuration ni formation supplémentaires.

Tous les articles du cycle:
1. DeepPavlov pour les développeurs: # 1 outils NLP et créer des robots de chat
2. DeepPavlov pour les développeurs: configuration et déploiement n ° 2



Installez DeepPavlov


Ci-après, des instructions pour Linux seront données. Pour Windows, consultez notre documentation.

  • Créez et activez un environnement virtuel avec la version actuelle de Python prise en charge:

    virtualelnv env -p python3.7 source env/bin/activate 
  • Installez DeepPavlov dans un environnement virtuel:

     pip install deeppavlov 

Exécution d'un serveur REST avec le modèle DeepPavlov


Avant de lancer le serveur avec le modèle DeepPavlov pour la première fois, il sera utile de parler de certaines fonctionnalités de l'architecture de la bibliothèque.

Tout modèle en DP comprend:

  • Code Python;
  • Composants téléchargeables - résultats d'apprentissage sérialisés sur des données spécifiques (plongements, poids des réseaux de neurones, etc.);
  • Un fichier de configuration (ci-après dénommé la configuration), qui contient des informations sur les classes utilisées par le modèle, les URL des composants téléchargés, les dépendances Python, etc.

Nous vous en dirons plus sur ce qui se cache sous le capot de DeepPavlov dans les articles suivants, pour l'instant nous n'avons besoin que de savoir que:

  • Tout modèle dans DeepPavlov est identifié par le nom de sa configuration;
  • Pour exécuter le modèle, vous devez télécharger ses composants depuis les serveurs DeepPavlov;
  • De plus, pour exécuter le modèle, vous devez installer les bibliothèques Python utilisées par celui-ci.

Le premier modèle que nous lancerons sera la reconnaissance multilingue des entités nommées (NER). Le modèle classe les mots de texte en fonction du type d'entités nommées auxquelles ils appartiennent (noms propres, noms géographiques, noms de devises et autres). Le nom de la configuration pour la version la plus récente de NER:

 ner_ontonotes_bert_mult 

Nous démarrons le serveur REST avec le modèle:

  1. Installez les dépendances de modèle spécifiées dans sa configuration dans l'environnement virtuel actif:

     python -m deeppavlov install ner_ontonotes_bert_mult 
  2. Téléchargez les composants du modèle sérialisé à partir des serveurs DeepPavlov:

     python -m deeppavlov download ner_ontonotes_bert_mult 

    Les composants sérialisés seront téléchargés dans le répertoire principal de DeepPavlov, qui se trouve par défaut
     ~/.deeppavlov 
    Lors du téléchargement, le hachage des composants déjà téléchargés est comparé aux hachages des composants situés sur le serveur. En cas de correspondance, le téléchargement est ignoré et les fichiers existants sont utilisés. La taille des composants téléchargés peut varier en moyenne de 0,5 à 8 Go, atteignant parfois 20 Go après décompression.
  3. Nous démarrons le serveur REST avec le modèle:

     python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005 

À la suite de cette commande, un serveur REST avec un modèle sur le port 5005 de la machine hôte sera lancé (le port par défaut est 5000).

Après avoir initialisé le modèle, Swagger avec la documentation de l'API et la possibilité de tester, peut être trouvé à l'URL http: http://127.0.0.1:5005 . Nous testerons le modèle en envoyant un point de terminaison avec le contenu JSON suivant à la demande http: //127.0.0.1►005/model POST:

 { "x": [ "        .", " -      15 " ] } 

En réponse, nous devrions obtenir ce JSON:

 [ [ ["", "", "", "", "", "", "", "", "", "."], ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"] ], [ ["", "", "-", "", "", "", "", "", "", "15", ""], ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"] ] ] 

Pour ces exemples, nous analyserons l'API REST DeepPavlov.

API DeepPavlov


Chaque modèle DeepPavlov a au moins un argument d'entrée. Dans l'API REST, les arguments sont nommés, leurs noms sont les clés du dictionnaire entrant. Dans la plupart des cas, un argument est le texte qui doit être traité. Vous pouvez en savoir plus sur les arguments et les valeurs renvoyés par les modèles dans la section MODELS de la documentation DeepPavlov.

Dans l'exemple, une liste de deux lignes a été transmise à l'argument x, chacune ayant reçu un balisage distinct. Dans DeepPavlov, tous les modèles acceptent en entrée une liste (lot) de valeurs qui sont traitées indépendamment.

Le terme «lot» fait référence au domaine de l'apprentissage automatique et fait référence à un ensemble de valeurs d'entrée indépendantes traitées simultanément par un algorithme ou un réseau de neurones. Cette approche vous permet de réduire (souvent - de manière significative) le temps de traitement du modèle d'un élément du lot par rapport à la même valeur transférée à l'entrée séparément. Mais le résultat du traitement n'est émis qu'après avoir traité tous les éléments. Par conséquent, lors de la formation du lot entrant, il sera nécessaire de prendre en compte la vitesse du modèle et le temps de traitement requis pour chacun de ses éléments individuels.

Dans le cas où il y a plusieurs arguments du modèle DeepPavlov, chacun d'eux a son propre lot de valeurs, et en sortie, le modèle donne toujours un lot de réponses. Les éléments des lots sortants sont les résultats du traitement des éléments des lots entrants avec le même index.

Dans l'exemple ci-dessus, le résultat du modèle a été une répartition de chaque ligne en jetons (mots et signes de ponctuation) et une classification du jeton par rapport à une entité nommée (nom de l'organisation, devise) qu'elle représente. À l'heure actuelle, le modèle ner_ontonotes_bert_mult est capable de reconnaître 18 types d'entités nommées, une description détaillée peut être trouvée ici .

Autres modèles prêts à l'emploi de DeepPavlov


En plus du NER dans DeepPavlov, les modèles prêts à l'emploi suivants sont disponibles au moment de la rédaction:

Réponse à une question textuelle


La réponse à la question au texte est un fragment de ce texte. Configuration du modèle: squad_ru_bert_infer

Exemple de demande:

 { "context_raw": [ "DeepPavlov   .", " -      15 ." ], "question_raw": [ "  DeepPavlov?", "     ?" ] } 

Résultat:

 [ [" ", 27, 31042.484375], ["15 ", 39, 1049.598876953125] ] 

Détection des insultes


Identification de la présence d'insulte à la personne à qui le texte est adressé (au moment de la rédaction, uniquement pour l'anglais). Configuration du modèle: insults_kaggle_conv_bert

Exemple de demande:

 { "x": [ "Money talks, bullshit walks.", "You are not the brightest one." ] } 

Résultat:

 [ ["Not Insult"], ["Insult"] ] 

Analyse de sentiment


Classification de la tonalité du texte (positif, neutre, négatif). Configuration du modèle: rusentiment_elmo_twitter_cnn

Exemple de demande:

 { "x": [ "   DeepPavlov.", "    DeepPavlov.", "    ." ] } 

Résultat:

 [ ["positive"], ["neutral"], ["negative"] ] 

Détection de paraphrase


Déterminer si deux textes différents ont la même signification. Configuration du modèle: stand_paraphraser_ru

Demande:

 { "text_a": [ "   ,  .", "      ." ], "text_b": [ " ,     ,   .", "       ." ] } 

Résultat:

 [ [1], [0] ] 

La liste actuelle de tous les modèles DeepPavlov prêts à l'emploi peut toujours être trouvée ici .

Conclusion


Dans cet article, nous avons présenté l'API DeepPavlov et certaines des capacités de traitement de texte de la bibliothèque prêtes à l'emploi. Il convient de garder à l'esprit que pour toute tâche PNL, le meilleur résultat sera obtenu lors de la formation du modèle sur un ensemble de données correspondant au domaine sujet (domaine) de la tâche. De plus, encore plus de modèles ne peuvent en principe pas être formés pour toutes les occasions.

Dans les articles suivants, nous examinerons des paramètres de bibliothèque supplémentaires, lancerons DeepPavlov à partir de Docker, puis nous passerons aux modèles pédagogiques. Et n'oubliez pas que DeepPavlov a un forum - posez vos questions concernant la bibliothèque et les modèles. Merci de votre attention!

Source: https://habr.com/ru/post/fr472890/


All Articles