Il comprend vos commandes vocales, recherche des sources d'actualités et de connaissances, résume et vous lit le contenu.
Regardez la vidéo de démonstration.
Chatbots Magazine a présenté mon article Delbot dans le Top 100 des articles sur Chatbots Magazine.
python app.py
dans l'invite de commande pour lancer le service Web.Les robots restent un sujet brûlant. Tout le monde parle d'eux.
Et si vous en construisiez un à partir de zéro ? Le modèle simple que nous allons construire aujourd'hui comprendra et répondra à des questions telles que :
Notre objectif est de coder un robot à partir de zéro et d'utiliser le traitement du langage naturel (NLP) ce faisant.
De plus, notre bot sera à commande vocale et basé sur le Web si vous remplissez également la section de l'application Web. Le meilleur, c'est que nous n'avons pas besoin de faire quoi que ce soit d'extraordinaire en matière de reconnaissance et de synthèse vocales : nous utiliserons une fonctionnalité intégrée aux navigateurs Web modernes.
À un niveau élevé, nous voulons être capables de comprendre deux grands types de requêtes. Voici l’organigramme.
Nous pourrions demander des nouvelles . Par exemple :
Quelles sont les dernières nouvelles sur les Animaux Fantastiques dans le Guardian ?
Le bot interrogera l'API de la source d'information demandée (New York Times si aucune n'est spécifiée) et résumera les résultats :
[...] Comparer le premier film de Harry Potter (Harry Potter et la pierre philosophale de 2001) avec le dernier (Harry Potter et les reliques de la mort de 2011, deuxième partie) revient un peu à comparer Bambi avec Reservoir Dogs. Nous le rencontrons pour la première fois dans le New York des années 1920 – près de 60 ans avant même la naissance d'Harry – où il vit [...]
(source : https://www.theguardian.com/books/2016/nov/25/jk-rowling-fantastic-beasts-screenplay)
Nous pourrions poser une question de connaissances . Par exemple :
Que sont les triplets RDF ?
Et le bot répondra :
Un triple sémantique, ou simplement triple, est l'entité de données atomiques dans le cadre de description des ressources.nCe format permet de représenter les connaissances d'une manière lisible par machine. En particulier, chaque partie d'un triple RDF est adressable individuellement via des URI uniques ; par exemple, la deuxième instruction ci-dessus pourrait être représentée en RDF comme http://example.name#BobSmith12 http://xmlns.com/foaf/0.1/ connaît http://example.name#JohnDoe34.
(source : https://en.wikipedia.org/wiki/Semantic_triple)
Nous définissons une règle simple pour catégoriser les entrées : si la requête contient l'un des mots news ou Latest , il s'agit d'une requête News . Sinon, c'est une requête de connaissance .
La fonction predict
de la classe QueryAnalyzer
est le principal point d'entrée de notre bot. Il effectue la catégorisation ci-dessus. Il appelle d'autres fonctions pour
Enfin, il renvoie la sortie et un indicateur indiquant s'il y a eu une erreur.
Nous supposons que la saisie se présente sous l’une des formes suivantes.
Quelles sont les dernières nouvelles sur Star Wars dans le New York Times ?
Lisez-moi les dernières nouvelles sur le Brexit.
Donnez-moi des nouvelles des films Marvel Cinematic Universe en 2017 du Guardian.
Jeton | Donner | moi | le | dernier | nouvelles | sur | Donald | Atout | depuis | le | Nouveau | York | Fois | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PDV | VERBE | PRON | DÉT | ADJ | NOM | ADP | PROPN | PROPN | ADP | DÉT | PROPN | PROPN | PROPN | PONCTIF |
ÉTIQUETER | VB | PRP | DT | JJS | N.N. | DANS | PNN | PNN | DANS | DT | PNN | PNN | PNN | . |
Il existe un modèle dans les phrases structurées comme ci-dessus. Et les prépositions sont essentielles.
Le sujet de recherche se situe entre la première et la dernière préposition. La source demandée se trouve à la fin après la dernière préposition. Le dernier morceau de nom est la source.
Dans le cas où une source n'est pas spécifiée, comme dans le deuxième exemple, tout ce qui se trouve après la première préposition est supposé être le sujet de recherche.
Les adpositions , en termes simples, sont des prépositions et des postpositions.
Dans une langue à tête initiale comme l'anglais, les adpositions précèdent généralement le groupe nominal. Par exemple, des personnages de l'univers cinématographique Marvel. Dans une langue finale comme le gujarati, les adpositions suivent la phrase nominale. Ce sont des postpositions. Par exemple, માર્વેલ ચલચિત્ર જગત_ના_ પાત્રો, qui se traduit mot à mot par : Univers cinématographique Marvel de personnages.
Nous invoquons get_news_tokens
depuis la classe QueryExtractor
, qui extrait la source et la requête de l'entrée. En interne, il appelle _split_text
pour extraire des morceaux de noms, des parties du discours et le texte entièrement analysé de l'entrée. Nous lemmatisons les termes dans la requête.
Ensuite, nous invoquons la fonction get_news
en utilisant une requête sur l'une des classes Aggregator
dans media_aggregator.py en fonction de la source . Cela renvoie une liste des articles d'actualité envoyés en réponse par l'API d'actualités. Nous prenons actuellement en charge l'API Guardian et l'API du New York Times.
Enfin, nous sélectionnons le premier élément (par défaut) dans la liste de réponses et le résumons à l'aide de la fonction shorten_news
.
Nous supposons que la saisie se présente sous l’une des formes suivantes.
John Deere
Jeanne d'Arc
Qui est Donald Trump ?
Qui était JRR Tolkien ?
Qu’est - ce que l’objet prédicat sujet ?
Parlez -moi de la physique des particules.
Jeton | Quoi | est | un | RDF | tripler | ? |
---|---|---|---|---|---|---|
PDV | NOM | VERBE | DÉT | PROPN | NOM | PONCTIF |
ÉTIQUETER | WP | VBZ | DT | PNN | N.N. | . |
Jeton | Dire | moi | à propos | il | - | homme | et | le | maîtres | de | le | univers | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PDV | VERBE | PRON | ADP | PRON | PONCTIF | NOM | CONJ | DÉT | NOM | ADP | DÉT | NOM | PONCTIF |
ÉTIQUETER | VB | PRP | DANS | PRP | HYPHE | N.N. | CC | DT | NNS | DANS | DT | N.N. | . |
Si nous trouvons un verbe auxiliaire, nous traitons tout après sa première occurrence comme la requête. Ainsi, dans l'exemple 1 , la requête est RDF triple .
Sinon, nous traitons tous les morceaux de noms après le premier comme une requête. Ainsi, dans l'exemple 2 , la requête est l'homme qui maîtrise l'univers .
Nous invoquons get_knowledge_tokens
depuis la classe QueryExtractor
, qui extrait la requête .
Nous transmettons cela à la fonction get_gkg
, qui interroge l'API Wikipedia via le package Python Wikipédia et renvoie un résumé en 5 phrases du meilleur résultat.
J'ai utilisé la classe FrequencySummarizer
de Text Summarization avec NLTK. Alternativement, vous pouvez utiliser sumy.
En plus des packages re , bs4 , request , Operator , collections , heapq , string et nltk , nous utiliserons ce qui suit.
spaCy : veuillez le configurer comme indiqué dans la documentation d'installation de spaCy. spaCy nous aidera à faire de la PNL rapide. Nous pourrions utiliser NLTK mais spaCy vous permettra d'avancer plus rapidement. Nous utilisons spaCy dans ce projet.
Wikipédia : cela permet d'interroger l'API Wikipédia. Vous pouvez lire la documentation du package Python Wikipédia ici.
Summarizer : Celui que j'ai utilisé a été emprunté au blog The Glowing Python écrit par JustGlowing. Il résume un long contenu. Alternativement, vous pouvez utiliser sumy.
Flask-RESTful, Flask (facultatif) : ceux-ci servent à créer une application Web et à opérationnaliser notre bot via un service Web RESTful.
Nous ajoutons une page Web intéressante à partir de laquelle vous pouvez lancer des requêtes vocales et demander au navigateur de lire le contenu de la réponse. Nous utilisons pour cela l’API Web Speech.
Nous mettons en place notre service Web REST basé sur Flask en moins de 20 lignes de code. La classe QueryService
gère les requêtes.
Pour l’instant, nous n’avons besoin que d’un seul appel de service pour envoyer les entrées de notre application Web à notre bot. Cela se fait via la fonction post
de la classe QueryService
. post
, à son tour, appelle la fonction predict
, qui est le point d'entrée principal comme mentionné ci-dessus.
J'ai construit une page Web de base pour démontrer le bot. Il utilise l'API Web Speech pour recevoir des entrées vocales et lire le contenu. Vous pouvez trouver le fichier index.html dans le dossier des modèles. Assurez-vous d'avoir installé tous les packages et bibliothèques requis et que le service Web est opérationnel avant d'ouvrir le site Web.
Notre simple bot comprend une gamme limitée de demandes. Il ne peut pas comprendre d'autres types de demandes telles que celles qui suivent.
Demandes de connaissances avec une structure différente
Expliquez-moi ce qu'est l'agrégation bootstrap.
Parlez-moi quelque chose sur les neurosciences computationnelles.
Demandes d'actualités avec une structure différente
Que dit le New York Times du dernier match de Roger Federer ?
Que se passe-t-il dans le monde du tennis ?
Demandes de connaissances d'autres types
Comment est fabriqué le fromage ?
Où est née JK Rowling ?
Pouvons-nous construire une ville céleste sur Vénus ?
Quand a eu lieu la Révolution française ?
Pourquoi Jupiter a-t-il la grande tache rouge ?
Questions de suivi et contexte
Expliquez-moi ce qu'est l'agrégation bootstrap.
et ensuite : quel est le rapport avec les forêts aléatoires ?
Comprendre à quoi cela fait référence dans la question de suivi relève de ce que l'on appelle la résolution d'anaphore. Tout cela fait partie de la compréhension du contexte. Différents mots signifient différentes choses dans différents contextes. Bien que les humains en aient une compréhension nuancée, il est beaucoup plus difficile d’enseigner la même chose aux machines.
Nous avons atteint notre objectif de créer un bot basé sur certaines règles que nous avons définies. Nous avons également utilisé certaines techniques de PNL. Enfin, nous avons déployé notre bot sur une application web. Cependant, notre bot est limité dans le type de requêtes auxquelles il peut comprendre et répondre. Pourquoi sa portée de compréhension est-elle si étroite ?
En général, faire en sorte que les ordinateurs comprennent réellement le langage est un problème difficile à résoudre pour l’IA. Il existe un domaine connu sous le nom de NLU (Natural Language Understanding) au sein de la PNL dédié à cela.
Nous pourrions mettre en œuvre une solution basée sur l'apprentissage automatique afin que notre bot puisse potentiellement comprendre un éventail beaucoup plus large de demandes.
Veuillez vous assurer de lire les conditions d'utilisation des API utilisées ici.