DeepPavlov pour les développeurs : #1 outils NLP et création de chatbots.

Bonjour à tous ! Nous lançons 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 de la bibliothèque open-source DeepPavlov, développée par notre équipe du laboratoire des Systèmes Neuromiques et de l'apprentissage profond de MIPT. L'objectif principal de cette série est de présenter DeepPavlov à un large éventail de développeurs et de montrer comment résoudre des problèmes d'application en NLP sans avoir de connaissances approfondies en Machine Learning et un doctorat en mathématiques.

Les tâches NLP incluent la détermination du ton d'un texte, le parsing des entités nommées, la compréhension de ce que l'interlocuteur souhaite du bot : commander une pizza ou obtenir des informations, entre autres. Vous pouvez en apprendre davantage sur les tâches et méthodes NLP ici.

Dans cet article, nous allons expliquer comment démarrer un serveur REST avec des modèles NLP pré-entraînés, prêts à l'emploi sans configuration ou formation supplémentaire.

DeepPavlov pour les développeurs : #1 outils NLP et création de chatbots.

Installation de DeepPavlov

Les instructions suivantes s'appliqueront à Linux. Pour Windows, veuillez consulter notre documentation

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

Démarrer le serveur REST avec le modèle DeepPavlov

Avant de démarrer le serveur avec le modèle DeepPavlov pour la première fois, il est utile de discuter certaines caractéristiques de l'architecture de la bibliothèque.

Tout modèle dans DP se compose de :

  • Code en Python ;
  • Composants téléchargeables — résultats sérialisés d'apprentissage sur des données spécifiques (embeddings, poids des réseaux de neurones, etc.) ;
  • Fichier de configuration (ci-après appelé config), contenant 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 expliquerons plus en détail ce qui se cache sous le capot de DeepPavlov dans les prochains articles, mais pour l'instant, il suffit de savoir que :

  • Chaque modèle dans DeepPavlov est identifié par le nom de son config ;
  • Pour faire fonctionner le modèle, il est nécessaire de télécharger ses composants depuis les serveurs de DeepPavlov ;
  • Il est également nécessaire d'installer les bibliothèques Python utilisées par le modèle.

Le premier modèle que nous lancerons sera la reconnaissance d'entités nommées (NER) multilingue. Ce modèle classifie les mots d'un texte selon le type d'entités nommées auquel ils appartiennent (noms propres, noms géographiques, noms de devises, etc.). Le nom de configuration pour la version NER la plus récente est :

ner_ontonotes_bert_mult

Nous lançons le serveur REST avec le modèle :

  1. Nous installons dans l'environnement virtuel actif les dépendances du modèle indiquées dans sa configuration :
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Nous téléchargeons les composants sérialisés du modèle à 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, qui se trouve par défaut

    ~/\.deeppavlov

    Lors du téléchargement, le hachage des composants déjà téléchargés est vérifié par rapport aux hachages des composants présents sur le serveur. En cas de correspondance, le téléchargement est ignoré et les fichiers déjà existants sont utilisés. La taille des composants téléchargés peut varier en moyenne de 0,5 à 8 Go, atteignant dans certains cas 20 Go après décompression.

  3. Nous lançons le serveur REST avec le modèle :
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

L'exécution de cette commande lancera un serveur REST avec le modèle sur le port 5005 de la machine hôte (le port par défaut est 5000).

Après l'initialisation du modèle, Swagger avec la documentation de l'API et la possibilité de tester sera accessible à l'URL http://127.0.0.1:5005. Testons le modèle en envoyant à l'endpoint http://127.0.0.1:5005/model Une requête POST avec le contenu JSON suivant :

{
  "x": [
    "On peut rejoindre le MIPT en prenant le train depuis la gare de Savyolovsky.",
    "Dans le sud-ouest de la Russie, un champ de blé est évalué à 15 hryvnias"
  ]
}

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

[
  [
    ["On", "peut", "rejoindre", "le", "MIPT", "en", "prenant", "le", "train", "depuis", "la", "gare", "de", "Savyolovsky", "."],
    ["O", "O", "O", "B-FAC", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["Dans", "le", "sud", "-", "ouest", "de", "la", "Russie", ",", "un", "champ", "de", "blé", "est", "évalué", "à", "15", "hryvnias"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Avec ces exemples, nous allons explorer l'API REST de DeepPavlov.

API DeepPavlov

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

Dans cet exemple, une liste de deux chaînes a été passée en argument x, et chaque chaîne a reçu un balisage distinct. Dans DeepPavlov, tous les modèles acceptent en entrée une liste (batch) de valeurs traitées indépendamment.

Le terme « batch » désigne un ensemble de valeurs d'entrée indépendantes traitées simultanément par un algorithme ou un réseau neuronal dans le domaine de l'apprentissage automatique. Cette approche permet de réduire (souvent de manière significative) le temps de traitement d'un élément du batch par rapport à la même valeur transmise séparément. Cependant, le résultat de ce traitement n'est délivré qu'après le traitement de tous les éléments. Par conséquent, lors de la formation du batch d'entrée, il sera nécessaire de prendre en compte la vitesse de travail du modèle et le temps requis pour traiter chacun de ses éléments.

Lorsque les modèles DeepPavlov possèdent plusieurs arguments, chacun d'eux reçoit son propre batch de valeurs, tandis qu'en sortie, le modèle délivre toujours un batch de réponses. Les éléments du batch sortant sont les résultats du traitement des éléments des batches entrants avec le même index.

Dans l'exemple donné, le résultat du modèle consistait en la segmentation de chaque chaîne en tokens (mots et signes de ponctuation) et en la classification de chaque token par rapport à l'entité nommée (nom d'organisation, devise) qu'il représente. Actuellement, 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 DeepPavlov prêts à l'emploi

En plus de NER, d'autres modèles prêts à l'emploi DeepPavlov sont disponibles au moment de la rédaction de cet article :

Réponse aux questions de texte

Réponse à une question sur le texte par un extrait de ce texte. Configuration du modèle : squad_ru_bert_infer

Exemple de requête :

{
  "context_raw": [
    "DeepPavlov est développé par le laboratoire de MIPT.",
    "Dans le sud-ouest de la Russie, le prix d'un tas de blé était de 15 hryvnias."
  ],
  "question_raw": [
    "Qui développe DeepPavlov ?",
    "Combien coûtait le tas de blé en Russie ?"
  ]
}

Résultat :

[
  ["laboratoire MIPT", 27, 31042.484375],
  ["15 hryvnias", 39, 1049.598876953125]
]

Détection d'insultes

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

Exemple de requête :


{
  "x": [
    "L'argent parle, les conneries marchent.",
    "Tu n'es pas le plus brillant.",
  ]
}

Résultat :

[
  ["Pas d'insulte"],
  ["Insulte"]
]

Analyse de sentiment

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

Exemple de requête :

{
  "x": [
    "J'aime la bibliothèque DeepPavlov.",
    "J'ai entendu parler de la bibliothèque DeepPavlov.",
    "Les trolls et les anonymes m'énervent."
  ]
}

Résultat :

[
  ["positif"],
  ["neutre"],
  ["négatif"]
]

Détection de Paraphrase

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

Requête :

{
  "text_a": [
    "La ville s'endort, la Mafia se réveille.",
    "Le président des États-Unis a menacé de résilier le contrat avec l'Allemagne."
  ],
  "text_b": [
    "La nuit tombe, tous les habitants de la ville vont dormir, et les criminels se réveillent.",
    "L'Allemagne n'a pas l'intention de céder aux menaces des États-Unis."
  ]
}

Résultat :

[
  [1],
  [0]
]

Vous pouvez toujours trouver la liste actualisée de tous les modèles DeepPavlov prêts à l'emploi ici.

Conclusion

Dans cet article, nous avons découvert l'API DeepPavlov et quelques-unes des fonctionnalités de la bibliothèque pour le traitement du texte, fournies 'prêtes à l'emploi'. Cependant, il est important de garder à l'esprit que pour toute tâche de NLP, le meilleur résultat sera obtenu en formant le modèle sur un ensemble de données correspondant au domaine de la tâche. De plus, il est impossible d'entraîner davantage de modèles pour tous les scénarios.

Dans les articles suivants, nous examinerons des configurations supplémentaires de la bibliothèque, le démarrage de DeepPavlov à partir de Docker, puis nous passerons à l'entraînement des modèles. Et n'oubliez pas que DeepPavlov propose forum – posez vos questions concernant la bibliothèque et les modèles. Merci de votre attention !

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster