Automatisation des réponses aux questions fréquemment posées dans la compétence "Alice" à l'aide de la bibliothèque DeepPavlov

Depuis plus d'un an, le Laboratoire des systèmes neuronaux et de l'apprentissage en profondeur du MIPT crée DeepPavlov - une bibliothèque ouverte pour la création de systèmes interactifs. Il contient un ensemble de composants formés pour l'analyse du langage, avec lesquels vous pouvez résoudre efficacement les problèmes commerciaux.

Par exemple, organisez les réponses aux questions fréquemment posées par les clients. Pour ce faire via un centre d'appels, un widget sur un site Web ou un réseau social en embauchant des employés est une question simple. La tâche urgente est d'optimiser le processus afin qu'il soit exécuté automatiquement, avec un minimum d'erreurs, et également dans une interface utilisateur pratique. Par exemple, dans l'assistant vocal "Alice" de "Yandex".

Dans cet article, nous voulons expliquer comment résoudre efficacement le problème de la réponse à la FAQ à l'aide du traitement du langage naturel et comment intégrer la solution dans Alice.



Classification des textes et comment le faire
Création d'une compétence de questions et réponses basée sur la bibliothèque DeepPavlov
Installer la bibliothèque DeepPavlov
Exécuter une compétence sur Alice
Conclusion

Classification des textes et comment le faire


Le problème de la recherche d'une question qui est proche d'une question donnée à partir d'un ensemble prêt à l'emploi de paires question-réponse est résolu par des algorithmes pour déterminer la proximité sémantique / classification de texte.

Pour résoudre ce problème «en production», il existe deux moyens: vous pouvez engager un spécialiste de la PNL dans l'État, ou vous pouvez externaliser la solution.

Inconvénients des deux options: 1) le besoin de collecte de données, 2) l'itération sans fin de la formation du modèle et de la mesure de la qualité, 3) les exigences sérieuses pour le développement des développeurs. Même le processus d'intégration d'une solution de traitement de langage prête à l'emploi n'est pas une tâche facile, sans parler de sa création à partir de zéro. Les solutions cloud étrangères (Google Assistant ou Microsoft Cortana) offrent une solution complète au problème de la classification de texte (DialogFlow, Azure Bot Service), mais il y a toujours des problèmes de mise à l'échelle, de liaison avec les services d'API payants et de prise en charge de la langue russe.

Mais applaudissements - il existe une alternative: vous pouvez utiliser la bibliothèque de logiciels ouverte, qui simplifie considérablement la création d'une solution pour répondre à la FAQ en russe et son intégration dans l'assistant vocal.

Création d'une compétence de questions et réponses basée sur la bibliothèque DeepPavlov


DeepPavlov est exactement une telle bibliothèque. Il contient un ensemble de composants formés pour l'analyse linguistique, y compris des composants de classification de texte. Vous pouvez en savoir plus sur les différents composants de DeepPavlov dans l' aide .

Travailler avec DeepPavlov ne nécessite pas de compétences particulières de la part du développeur, la bibliothèque est gratuite et offre de nombreuses possibilités de réglage fin.

Vous pouvez trouver toutes les instructions pour créer une compétence basée sur une base de connaissances dans ce tutoriel. Nous vous recommandons de réécrire le code du didacticiel dans un script distinct et d'exécuter la compétence à partir du script.

Installer la bibliothèque DeepPavlov


Pour commencer, installez Python 3.6 et activez l'environnement de développement. Installez ensuite DeepPavlov.

source activate py36 pip install -q deeppavlov 

Développement des compétences


La compétence (compétence) dans DeepPavlov est une entité qui, quelle que soit la fonctionnalité ( classification de texte , réponse aux questions en domaine ouvert , etc.) a un format d'entrée et de sortie unifié. Les compétences sont créées de manière à pouvoir être combinées en une seule pile d'un système de dialogue simple qui, à la réception d'une demande, prend une réponse d'une compétence avec la plus grande confiance.

Créez un objet de la classe SimilarityMatchingSkill qui répond à une demande utilisateur sur la base d'une liste de questions fréquemment posées.

 from deeppavlov.contrib.skills.similarity_matching_skill import SimilarityMatchingSkill faq = SimilarityMatchingSkill(data_path = 'http://files.deeppavlov.ai/faq/dataset_ru.csv', x_col_name = 'Question', y_col_name = 'Answer', save_load_path = './model', config_type = 'tfidf_autofaq', edit_dict = {}, train = True) 

L'objet de la classe SimilarityMatchingSkill a les paramètres suivants:

  • data_path - chemin vers le fichier de données csv (délimiteur de virgule)
  • x_col_name - nom de la colonne avec des questions dans le fichier csv (Question, par défaut)
  • y_col_name - nom de la colonne avec les réponses dans le fichier csv (Réponse, par défaut)
  • config_type est le nom de la configuration que vous souhaitez utiliser pour la classification. Liste de toutes les configurations .
  • edit_dict - `dict` avec des paramètres à réécrire dans la configuration d'un config_type spécifique
  • save_load_path - le chemin où enregistrer le modèle formé
  • former - s'il faut former le modèle

Pour commencer à utiliser le modèle, après la formation, il suffit de le charger avec la commande suivante:

 faq = SimilarityMatchingSkill(save_load_path='./model')`. 

La classe SimilarityMatchingSkill simplifie l'accès aux composants de classification de texte. Mais s'il y a une partie de la configuration que vous souhaitez modifier, vous pouvez le faire en définissant le paramètre edit_dict. Un objet de la classe SimilarityMatchingSkill (comme toute compétence) prend trois paramètres en entrée: une liste d'offres de classification, une liste de l'historique des requêtes et une liste d'états (dans le cas de SimilarityMatchingSkill, les deux derniers peuvent être des listes vides).

 faq(['  ?'],[],[]) 

Un système de dialogue typique contient généralement plusieurs compétences. Pour démontrer le travail avec plusieurs compétences, nous allons créer plusieurs compétences de la classe PatternMatchingSkill.

 from deeppavlov.skills.pattern_matching_skill import PatternMatchingSkill hello = PatternMatchingSkill(responses=['', ''], patterns=['', '']) bye = PatternMatchingSkill(responses=['', ' '], patterns=['', ' ']) fallback = PatternMatchingSkill(responses=[' '], default_confidence = 0.3) 

PatternMatchingSkill est une classe de compétences simple qui est appelée lorsque la demande d'un utilisateur correspond à l'un des éléments de la liste de modèles et répond à des éléments aléatoires de la liste de réponses avec la confiance default_confidence. Vous pouvez configurer manuellement le paramètre default_confidence pour hiérarchiser les réponses de compétence.

La dernière étape consiste à combiner les compétences en un agent et à configurer le paramètre de sélection des compétences. Le paramètre «HigherConfidenceSelector» détermine que la compétence sera appelée avec la confiance la plus élevée.

 from deeppavlov.agents.default_agent.default_agent import DefaultAgent from deeppavlov.agents.processors.highest_confidence_selector import HighestConfidenceSelector agent = DefaultAgent([hello, bye, faq, fallback], skills_selector=HighestConfidenceSelector()) 

Ensuite, démarrez le serveur avec le chemin pour les requêtes `endpoint = 'faq`` et le port de connexion` port = 5000`

 from deeppavlov.utils.alice import start_agent_server start_agent_server(agent, host='0.0.0.0', port=5000, endpoint='/faq') 

Veuillez noter que Yandex.Dialogs nécessite un serveur avec une adresse IP externe et un accès via https en tant qu'URL Webhook. Pour un prototypage rapide, vous pouvez utiliser Ngrok - il vous permet de créer un tunnel pour accéder à votre serveur depuis DeepPavlov sur le réseau local. Pour ce faire, exécutez

 ngrok http 5000 

sur votre serveur avec DeepPavlov. En réponse à cela, deux tunnels seront créés, un pour les protocoles http et https. Copiez l'adresse du tunnel pour https, ajoutez le point de terminaison / faq au lien, le lien final sera l'URL Webhook de notre Yandex.Dialog.

Exécuter une compétence sur Alice


Pour tester l'interaction avec la plate-forme Yandex.Dialogs, accédez à dialogs.yandex.ru/developer et créez un nouveau dialogue . Définissez un nom unique et un nom d'activation. Pour l'URL Webhook, spécifiez le lien reçu précédemment. Enregistrez les modifications. Pour interagir avec la compétence, accédez à l'onglet Test.

Conclusion


Eh bien, vous savez maintenant comment utiliser les modèles de classification de texte de la bibliothèque DeepPavlov pour créer un bot question-réponse, comment créer rapidement des prototypes de compétences à l'aide de DeepPavlov et les connecter à Alice.

Par ailleurs, les interfaces de connexion à Amazon Alexa et Microsoft Bot Framework sont également implémentées dans notre bibliothèque.

Nous apprécions les commentaires dans les commentaires. Et vous pouvez poser des questions sur DeepPavlov sur notre forum .

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


All Articles