2016-09-28 2 views
1

J'essaie de faire une application Apple Siri-like en python dans laquelle vous lui donnez des commandes vocales ou des questions via un microphone, elle détermine le texte version de l'audio entré, puis détermine l'action appropriée à prendre en fonction de la signification de la commande/question. Je vais utiliser la bibliothèque de reconnaissance vocale pour accepter l'entrée microphone et la conversion de la parole en texte (via l'API IBM Watson Speech to Text).Application ressemblant à Siri: calcul des similitudes entre une requête et un ensemble prédéfini de phrases de contrôle

Le problème principal que j'ai avec lui en ce moment est que quand je définis une action pour l'application à exécuter quand la commande appropriée est donnée/question est posée, je ne sais pas comment déterminer si ladite commande/question dénote cette action. Permettez-moi de clarifier ce que je veux dire par là avec un exemple:

Dites que nous avons une action appelée hello. Il y a plusieurs façons pour quelqu'un de dire « bonjour » à une autre personne (ou dans ce cas, ma demande), tels que:

  • « Bonjour »
  • « Salut »
  • « Howdy »
  • ... Etcetera ...

Bien sûr, je veux toutes ces manières de dire « bonjour » à classer sous l'action de hello. C'est-à-dire, quand quelqu'un dit "bonjour", "salut", ou "howdy", la réponse pour l'action hello devrait être exécutée (probablement juste l'application disant "bonjour" dans ce cas).

Ma première réflexion sur la façon de résoudre ce problème consistait à fournir à l'application toutes les manières les plus courantes de dire une commande/question. Donc, si je suis l'exemple précédent, je dirais à l'ordinateur que "bonjour", "salut" et "howdy" signifient tous la même chose: l'action hello. Cependant, cette méthode a quelques défauts. Tout d'abord, il ne comprendrait tout simplement pas les façons de dire "bonjour" qui n'étaient pas codées en dur, comme "hé". Deuxièmement, une fois que les réponses aux nouvelles commandes/questions commencent à être codées, il devient très fastidieux d'entrer dans toutes les façons de dire une certaine phrase. Alors, à cause des problèmes mentionnés ci-dessus, j'ai commencé à chercher des moyens de calculer les similitudes entre un groupe de phrases et une seule requête. Je suis finalement tombé sur la bibliothèque Gensim pour python. Je l'ai examiné et trouvé des informations très prometteuses sur des processus complexes tels que l'indexation/analyse sémantique latente (LSI/LSA) et Tf-idf. Cependant, il m'a semblé que ces choses étaient principalement pour comparer des documents avec de grands comptes de mots car ils s'appuient sur la fréquence de certains termes. En supposant que c'est vrai, ces processus ne me fourniraient pas vraiment de résultats précis car les commandes/questions données à mon application seront probablement d'environ huit mots en moyenne. Je pourrais me tromper complètement, après tout je connais très peu de choses sur ces processus. J'ai aussi découvert WordNet, et comment l'utiliser en python en utilisant le Natural Language Toolkit (NLTK). On dirait que ça pourrait être utile, mais je ne sais pas comment. Donc, enfin, je suppose que ma vraie question ici est quelle serait la meilleure solution au problème que j'ai mentionné? Dois-je utiliser l'une des méthodes que j'ai mentionnées? Ou y a-t-il une meilleure façon de faire ce que je veux que je ne sache pas?

Toute aide serait grandement appréciée. Merci d'avance.

P.S.Désolé pour l'explication verbeuse; Je voulais être sûr que j'étais clair: P

Répondre

3

Ceci est un problème difficile. Il fait également l'objet de Task 11 de l'ensemble des défis de l'évaluation sémantique de cette année (Semeval 2017). Alors jetez un oeil à la task description, qui vous donnera une feuille de route pour la façon dont ce problème peut être résolu. La tâche vient également avec une série de données d'entraînement, ce qui est essentiel pour aborder un problème comme celui-ci. Le défi est toujours en cours, mais vous pourrez éventuellement apprendre des solutions. Donc, la réponse courte à "comment déterminer si une commande/question dénote une certaine action" est: Utilisez les données d'entraînement de Semeval2017 (ou bien la vôtre bien sûr), et écrivez un classificateur. Le nltk book peut vous aider à vous familiariser avec les classificateurs d'écriture.

+0

Merci pour votre réponse. Je vais certainement lire sur la tâche 11 et les classificateurs. – RobertR