2016-06-06 15 views
5

La mia domanda è legata al progetto su cui ho appena iniziato a lavorare, ed è un ChatBot.Ordinare biglietti per il cinema con ChatBot

Il bot che voglio creare ha un compito piuttosto semplice. Deve automatizzare il processo di acquisto dei biglietti del cinema. Questo è un dominio abbastanza vicino e il bot ha tutto il necessario accesso al database del cinema. Naturalmente va bene che il bot risponda come "Non so" se il messaggio dell'utente non è correlato al processo di ordinazione dei biglietti del cinema.

Ho già creato una semplice demo solo per mostrarla a poche persone e vedere se sono interessate a un prodotto del genere. La demo utilizza un semplice approccio DFA e alcuni semplici abbinamenti di testo con lo stemming L'ho hackerato in un giorno e si è scoperto che gli utenti sono rimasti colpiti dal fatto di essere in grado di ordinare i biglietti che desiderano. (La demo utilizza una connessione al database del cinema per fornire agli utenti tutte le informazioni necessarie per ordinare i biglietti che desiderano).

Il mio obiettivo attuale è quello di creare la versione successiva, una più avanzata, soprattutto in termini di comprensione del linguaggio naturale. Ad esempio, la versione demo chiede agli utenti di fornire solo una informazione in un singolo messaggio e non riconosce se hanno fornito informazioni più pertinenti (titolo del film e ora, ad esempio). Ho letto che una tecnica utile qui si chiama "Semantica frame e slot", e sembra essere promettente, ma non ho trovato alcun dettaglio su come utilizzare questo approccio.

Inoltre, non so quale approccio sia il migliore per migliorare la comprensione del linguaggio naturale. Per la maggior parte, considero:

  1. Utilizzo di tecniche di "NLP" standard per comprendere meglio i messaggi degli utenti. Ad esempio, database di sinonimi, correzione ortografica, parte di tag vocali, formazione di classificatori basati su statistiche per acquisire somiglianze e altre relazioni tra parole (o tra tutte le frasi se possibile?) Ecc.
  2. Utilizzare AIML per modellare il flusso di conversazione . Non sono sicuro se sia una buona idea usare AIML in un dominio chiuso. Non l'ho mai usato, quindi è la ragione per cui lo sto chiedendo.
  3. Utilizzare un approccio più "moderno" e utilizzare le reti neurali per addestrare un classificatore per la classificazione dei messaggi utente. Potrebbe, tuttavia, richiedere molti dati etichettati
  4. Qualche altro metodo che non conosco?

Quale approccio è il più adatto al mio obiettivo?

Sai dove posso trovare più risorse su come funziona la "semantica frame e slot" nei dettagli? Mi riferisco a questo PDF from Stanford quando si parla di frame e slot.

+0

Duplicato di http://datascience.stackexchange.com/q/12095/8820 –

+0

Se possibile, si prega di rivedere la domanda in modo che non sia basata sull'opinione pubblica. – Tor

risposta

0

La domanda è piuttosto ampia, ma qui ci sono alcuni pensieri e consigli pratici, basati sull'esperienza con la PNL e l'apprendimento automatico basato su testo in domini di problemi simili.

Suppongo che, sebbene questa sia una versione "più avanzata" del tuo chatbot, lo scopo del lavoro che può essere preso in considerazione è piuttosto limitato. A mio avviso questo è un fattore molto importante in quanto diversi metodi differiscono ampiamente nella quantità e nel tipo di sforzo manuale necessario per farli funzionare, e le tecniche più avanzate potrebbero essere ampiamente fuori portata qui.

Generalmente i due approcci principali da considerare sarebbero basati su regole e statistiche.Il primo è tradizionalmente più incentrato sulla corrispondenza dei modelli, e nell'impostazione che descrivi (lo sforzo limitato può essere investito), implicherebbe il trattamento manuale di regole e/o schemi. Un esempio di questo approccio sarebbe l'utilizzo di un insieme (chiuso) (ma grande) di modelli da confrontare con l'input dell'utente (ad esempio utilizzando espressioni regolari). Questo approccio ha spesso un "soffitto di vetro" in termini di prestazioni, ma può portare a risultati abbastanza buoni in tempi relativamente brevi.

L'approccio statistico consiste nel dare un po 'di dati all'algoritmo ML e consentirne l'estrazione di regolarità, concentrando lo sforzo manuale nella raccolta e nell'etichettatura di un buon set di allenamento. Secondo me, al fine di ottenere risultati "abbastanza buoni", la quantità di dati necessari potrebbe essere eccessivamente grande, a meno che non si riesca a trovare un modo per raccogliere facilmente grandi quantità di dati almeno parzialmente etichettati.

Praticamente Suggerirei di considerare un approccio ibrido qui. Utilizzare alcuni strumenti generali statistici basati su ML per estrarre informazioni dall'input dell'utente, quindi applicare regole/modelli costruiti manualmente. Ad esempio, puoi utilizzare Google Parsey McParseface per eseguire l'analisi sintattica, quindi applicare un motore di regole ai risultati, ad es. abbinare il verbo a un elenco di azioni possibili come "compra", utilizzare le relazioni grammaticali estratte per trovare i candidati per i nomi dei film, ecc. Questo dovrebbe portarti a risultati abbastanza buoni rapidamente, poiché la forza del parser sintattico permetterebbe di "capire" frasi anche elaborate e potenzialmente confuse.

Vorrei anche suggerire di posticipare alcuni degli elementi che si pensa di fare, come la correzione ortografica e persino il derivazione e il DB dei sinonimi - poiché il problema è relativamente chiuso, probabilmente si avrà un ROI migliore da investire in una regola/modello-quadro e creazione di regole manuali. Questo consiglio vale anche per la modellazione esplicita del flusso di conversazione.

+0

Grazie per la risposta. Sfortunatamente, non posso usare Parsey McParsefase, perché il bot non è destinato alla lingua inglese. Tuttavia, poiché mi aspetto che i messaggi degli utenti siano piuttosto brevi, penso che prendere in considerazione tutte le possibili partizioni di un messaggio in frasi e per ciascuna di queste frasi cercando di classificarlo come "titolo del film", "datetime", "tipo di film" "e altri intenti possono essere utili. Inoltre, considero una sorta di classificazione dei verbi in classi corrispondenti alle azioni da eseguire. – pkacprzak

+0

Esistono parser sintattici per la maggior parte delle lingue, ad es. Il parser di Stanford (http://nlp.stanford.edu/software/lex-parser.shtml) ha modelli per il cinese, il tedesco, l'arabo, l'italiano e altro, quindi l'approccio in generale dovrebbe essere ancora fattibile (quale lingua/e sono stai prendendo di mira?). Dalla mia esperienza, l'input dell'utente, anche in dominio chiuso, può essere estremamente variabile, ci penserei due volte prima di andare con l'approccio non strutturato che consideri – etov

Problemi correlati