2017-08-04 3 views
3

Ceci est ma première publication sur Stack Overflow, alors s'il vous plaît laissez savoir si je devrais être plus approfondie lorsque vous posez des questions à l'avenir.Requête de classification pour Virtual Assistant en Java?

Actuellement, je travaille sur une application Assistant virtuel pour Android en utilisant Java, et bien que ça se passe bien jusqu'à présent, je ne sais pas comment aborder la classification des entrées des utilisateurs. Jusqu'à présent, j'ai implémenté le Stanford NLP Parser dans le programme, de sorte que les étiquettes de mots, de phrases et de mots puissent être appliquées au texte brut. Cela m'a permis de faire reconnaître par le programme des questions directes et d'en extraire le sujet, simplement en cherchant l'occurrence de certaines étiquettes.

(ROOT 
    (SBARQ <--- Indicates that the sentence is a question 
    (WHNP (WP Who)) 
     (SQ (VBD were) 
     (NP (DT the) (FW samurai))) <--- Subject of question 
     (. ?))) 

Bien que cela ressemble à un pas en avant, j'espère avoir finalement l'assistant capable de classer différents types de questions (questions liées à la météo, l'heure/date des questions liées, etc.) tout en étant capable de reconnaître des questions qui ne sont pas aussi directs mais qui demandent la même information (par exemple, "pouvez-vous me parler des samouraïs?" par opposition à "qui étaient les samouraïs?"). Faire cela en utilisant simplement l'interpréteur PNL de Stanford et en cherchant certaines balises semble une tâche très difficile. Est-ce que quelqu'un a des conseils sur les approches alternatives que je pourrais prendre?

Merci!

Répondre

2

En ce qui concerne les assistants virtuels ou les chatbots, ceci est généralement appelé intention classification. Il y a une foule de façons de le faire, mais en général, vous fournissez des exemples étiquetés et formez un modèle pour les différencier. Voici quelques exemples de données de a blog post sur le sujet:

# 3 classes of training data 
training_data = [] 
training_data.append({"class":"greeting", "sentence":"how are you?"}) 
training_data.append({"class":"greeting", "sentence":"how is your day?"}) 
training_data.append({"class":"greeting", "sentence":"good day"}) 
training_data.append({"class":"greeting", "sentence":"how is it going today?"}) 

training_data.append({"class":"goodbye", "sentence":"have a nice day"}) 
training_data.append({"class":"goodbye", "sentence":"see you later"}) 
training_data.append({"class":"goodbye", "sentence":"have a nice day"}) 
training_data.append({"class":"goodbye", "sentence":"talk to you soon"}) 

training_data.append({"class":"sandwich", "sentence":"make me a sandwich"}) 
training_data.append({"class":"sandwich", "sentence":"can you make a sandwich?"}) 
training_data.append({"class":"sandwich", "sentence":"having a sandwich today?"}) 
training_data.append({"class":"sandwich", "sentence":"what's for lunch?"}) 

Bien que vos données de formation est spécifique à votre application, en principe, il n'est pas différent de catégoriser automatiquement des e-mails ou des articles de presse.

Un algorithme de ligne de base facile à utiliser pour la classification de texte est Naive Bayes. Les méthodes plus récentes incluent l'utilisation Word Mover's Distance ou réseaux de neurones.

La partie où vous extrayez le sujet est également appelée détection de fente, et les architectures "intention et fente" pour les assistants sont courantes. Même si vous voulez construire quelque chose à partir de rien, regarder les écrans de configuration pour les plates-formes de chatbot comme rasa peut être utile pour avoir une idée de la façon d'utiliser les données d'entraînement.

+0

Merci pour votre réponse! Si je devais appliquer des balises POS aux données d'entrée et d'entraînement de l'utilisateur, cela augmenterait-il potentiellement la précision globale du classificateur? – Exo445

+1

Les étiquettes POS peuvent être utiles ou non, cela dépend entièrement de votre méthode. Essayez de les utiliser sur vos données et voyez si cela fonctionne! – polm23