DeepPavlov pour les développeurs : outils NLP n°1 et création de chatbot

Salut tout le monde! Nous ouvrons une série d'articles consacrés à la résolution de problèmes pratiques liés au traitement du langage naturel (Natural Language Processing ou simplement NLP) et à la création d'agents de dialogue (chatbots) à l'aide d'une bibliothèque open source. ProfondPavlov, qui est développé par notre équipe du Laboratoire MIPT des systèmes neuronaux et de l'apprentissage profond. L'objectif principal de la série est de présenter DeepPavlov à un large éventail de développeurs et de montrer comment vous pouvez résoudre des problèmes de PNL appliqués sans avoir de connaissances approfondies en apprentissage automatique et un doctorat en mathématiques.

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

Dans cet article, nous allons vous montrer comment exécuter un serveur REST avec des modèles NLP pré-entraînés, prêts à l'emploi sans aucune configuration ni formation supplémentaire.

DeepPavlov pour les développeurs : outils NLP n°1 et création de chatbot

Installation de DeepPavlov

Ici et ci-dessous, des instructions pour Linux seront données. Pour Windows, consultez notre documentation

  • Créez et activez un environnement virtuel avec la version actuellement prise en charge de Python :
    virtualelnv env -p python3.7
    source env/bin/activate
  • Installez DeepPavlov dans un environnement virtuel :
    pip install deeppavlov
    

Lancer un serveur REST avec le modèle DeepPavlov

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

Tout modèle en DP se compose de :

  • Code Python ;
  • Composants téléchargeables - résultats de formation sérialisés sur des données spécifiques (intégrations, poids des réseaux de neurones, etc.) ;
  • Un fichier de configuration (ci-après dénommé le config), 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 il nous suffit 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 qu'il utilise.

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

ner_ontonotes_bert_mult

On lance le serveur REST avec le modèle :

  1. Nous installons les dépendances du 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 de modèle sérialisés à 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 personnel de DeepPavlov, situé 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. S'il y a une correspondance, le téléchargement est ignoré et les fichiers existants sont utilisés. Les tailles des composants téléchargés peuvent varier en moyenne de 0.5 à 8 Go, atteignant dans certains cas 20 Go après décompression.

  3. On lance le serveur REST avec le modèle :
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Suite à l'exécution de cette commande, un serveur REST avec un modèle sera lancé sur le port 5005 de la machine hôte (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 peuvent être trouvés à l'URL http://127.0.0.1:5005. Testons le modèle en l'envoyant au point final http://127.0.0.1:5005/model Requête POST avec le contenu JSON suivant :

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

En réponse, nous devrions recevoir le JSON suivant :

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

À l'aide de 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, l'argument est le texte qui doit être traité. Plus d'informations sur les arguments et les valeurs renvoyés par les modèles peuvent être trouvées dans la section MODÈLES de la documentation ProfondPavlov

Dans l'exemple, une liste de deux chaînes a été transmise à l'argument x, chacune d'elles recevant un balisage distinct. Dans DeepPavlov, tous les modèles prennent en entrée une liste (lot) de valeurs traitées indépendamment.

Le terme « batch » fait référence au domaine de l'apprentissage automatique et désigne un lot 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 pendant lequel le modèle traite un élément d'un lot par rapport à la même valeur transmise séparément à l'entrée. Mais le résultat du traitement n'est émis qu'une fois que tous les éléments ont été traités. Par conséquent, lors de la génération d'un lot entrant, il sera nécessaire de prendre en compte la rapidité du modèle et le temps de traitement requis pour chacun de ses éléments individuels.

S'il existe plusieurs arguments dans le modèle DeepPavlov, chacun d'eux reçoit son propre lot de valeurs et, en sortie, le modèle produit toujours un lot de réponses. Les éléments du lot sortant sont le résultat du traitement des éléments des lots entrants de même index.

Dans l'exemple ci-dessus, le résultat du modèle consistait à décomposer chaque chaîne en jetons (mots et signes de ponctuation) et à classer le jeton par rapport à l'entité nommée (nom de l'organisation, devise) qu'il représente. Actuellement le modèle ner_ontonotes_bert_mult 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, les modèles prêts à l'emploi suivants sont disponibles dans DeepPavlov au moment de la rédaction :

Réponse aux questions textuelles

Répondez à la question du texte avec 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

Détection de la présence d'une insulte envers 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 des sentiments

Classification du sentiment 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 le même sens. Configuration du modèle : stand_paraphraser_fr

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 nous sommes familiarisés avec l'API DeepPavlov et certaines des capacités de traitement de texte de la bibliothèque fournie prête à 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 (domaine) de la tâche. De plus, un plus grand nombre de modèles ne peuvent en principe pas être formés pour toutes les situations.

Dans les articles suivants, nous examinerons les paramètres supplémentaires de la bibliothèque, le lancement de DeepPavlov depuis Docker, puis nous passerons aux modèles de formation. Et n'oubliez pas que DeepPavlov a forum – posez vos questions concernant la bibliothèque et les modèles. Merci pour votre attention!

Source: habr.com

Ajouter un commentaire