Sviluppare una procedura guidata personale intelligente

“Siri, leggi i messaggi e-mail”

“Ciao Cortana, com’è il tempo? “

” ok Google, come si dice ciao in inglese? “

“Alexa, impostato su Timer per 15 minuti”

Questo tipo di frasi (comandi) è parte della nostra vita quotidiana. Ogni giorno è più comune usare la nostra voce e un linguaggio naturale per interagire con dispositivi e servizi. La stragrande maggioranza dei dispositivi e dei sistemi operativi più popolari incorpora ciò che è noto come assistente personale intelligente; È una tendenza che sta accelerando.

Un Assistente personale intelligente (Intelligent Personal Assistant, IPA) è un agente software che può eseguire attività o offrire servizi a un individuo. L’utente può interagire con l’IPA utilizzando il linguaggio naturale attraverso la voce o il testo. L’IPA può anche ottenere e utilizzare ulteriori informazioni sul contesto come la posizione dell’utente, le informazioni all’interno dello stesso dispositivo (foto, contatti, ecc.) E altri servizi per fornire una migliore risposta all’utente.

Gli assistenti personali tali Come Siri, Google ora o Cortana può eseguire molte azioni e rispondere a un’ampia varietà di richieste degli utenti. In genere, il dispositivo è solo una facciata per fornire il servizio, poiché in realtà i servizi che riconoscono il discorso e determinano la risposta o l’azione adeguata, sono ospitati servizi nel cloud.

Voglio il mio IPA

Se vogliamo creare un servizio IPA, un’opzione è quella di farlo come un’estensione di servizi esistenti come Siri, Cortana o Alexa. Tuttavia, questo potrebbe avere limitazioni o non darci il controllo completo che potremmo richiedere. Quindi un’altra opzione è che sviluppiamo la nostra applicazione e utilizza semplicemente i servizi di riconoscimento vocale che espongono alcuni di questi motori.

Per costruire il nostro IPA per primo dobbiamo identificare i suoi diversi componenti o sottosistemi. Le grandi caratteristiche sono: interfaccia per interagire con l’assistente, il riconoscimento vocale, la lingua del dominio specifico (DSL) e l’endpoint per accedere all’agente.

Avanti parleremo di ciascuno di essi.

Riconoscimento vocale

è un campo di linguistica computazionale orientato a sviluppare metodologie e tecnologie che consentono ai computer di comprendere e tradurre linguaggio parlato. Vale la pena chiarire che il riconoscimento vocale è diverso dal riconoscimento vocale, poiché quest’ultimo si concentra solo sull’identificazione della persona che parla, ma non quello che sta dicendo.

Come puoi immaginare, sviluppare un servizio di riconoscimento vocale è Un compito molto grande e quasi impossibile per una singola persona. Fortunatamente aziende come Microsoft, Google e Xamarin tra gli altri, le hanno già sviluppate e li hanno aperti in modo che possiamo usarli nelle nostre applicazioni. Nell’elenco 1 mostro come possiamo inizializzare il servizio di riconoscimento vocale in .NET. Successivamente, in elenco 2 mostro come potrebbe essere fatto sul Web utilizzando l’API del discorso Web, che è supportato da Chrome.

Elenco 1. Codice C # per utilizzare il riconoscimento vocale di Windows.

Elenco 2. Codice JavaScript per utilizzare l’API del discorso Web .

Lingua del dominio specifico (DSL)

è un linguaggio del computer progettato per rappresentare o risolvere un problema specifico. C’è una grande varietà di DSL, da lingue molto comuni come HTML o SQL, alle lingue di nicchia, come il csound per la sintesi del suono. Il dominio può anche essere un’area di business. Quindi, ad esempio, potremmo creare un DSL per la gestione della polizza assicurativa.

Quando viene creato un DSL che verrà utilizzato solo in un’applicazione, viene utilizzato per chiamare un mini-lingua.

Per implementare la lingua che dobbiamo definire la grammatica e creare un parser (analizzatore sintattico) per essere in grado di interpretare ciò che l’utente ci dice e dare una risposta. Potremmo fare le due cose a mano, ma al momento ci sono già molti strumenti che ci forniscono di definire la grammatica e creare il nostro parser.

Uno degli strumenti più comuni per lo sviluppo delle lingue è YACC, che Ci consente di generare un impulsire basato su una grammatica analitica che dobbiamo descrivere in un metalinguage simile alla notazione Backus-Naur.

In questo caso non useremo YACC, ma useremo ironia, uno sviluppo Kit per implementare le lingue nella piattaforma .NET. A differenza di soluzioni come Yacc e Lex, che generano un parser dalla grammatica analitica che abbiamo definito, ironia ci consente di esprimere la grammatica della nostra lingua direttamente in C #.

L’elenco 3 mostra come definiamo la grammatica attraverso i terminali e i non terminali, nonché le dichiarazioni che riconosciamo.

Elenco 3. Definizione del DSL.

Endpoint

Esporremo i servizi del nostro Assistente attraverso un endpoint ospitato nella nostra applicazione web. Questo endpoint riceverà come parametro la query dell’utente e andrà alla procedura guidata, che interpreterà i risultati e invierà una risposta serializzata.

App

L’utente può interagire con il nostro assistente intelligente attraverso un’applicazione mobile.

Già in elenchi 1 e 2 che abbiamo visto Come possiamo utilizzare API di Chrome e Windows per il riconoscimento vocale. Ora in elenchi 4a, 4b e 4C possiamo vedere come lanciare la ricerca e visualizzare i risultati in un’applicazione universale di Windows.

list 4a mostra come sparare a una richiesta asincrona e sbriciolare i risultati, quindi elencare 4b Mostra come l’elenco 4C può essere implementato e finalmente mostra come potremmo accompagnare questi risultati da un messaggio vocale.

Elenco 4a . Scatta i risultati della ricerca e del processo.

Elenco 4b. Distribuisci risultati.

Elenco 4C. Dare discussione.

alternative

Un assistente personale intelligente può svilupparsi in molti modi. In questo articolo prendiamo alcune decisioni relative alle tecnologie e all’architettura, per la parte del riconoscimento vocale potremmo utilizzare i servizi Xamarin con API di riconoscimento linguistico ed è multipiantino. Potremmo anche integrare la nostra applicazione con servizi come Siri o Cortana. La DSL, come abbiamo detto, avremmo potuto anche averlo sviluppato con YACC, Lex o qualche variante di questi.

Codice sorgente

Tutto il codice sorgente in questo articolo è parte di un piccolo Assistente personale che è ospitato in http://deepthoughtagent.azurewebsites.net/, nell’URL: http://deepthoughtagent.azurewebsites.net/ Home / Domande sono il tipo di domande che la procedura guidata può rispondere; Alcuni esempi sono:

  • Quanti vasi contract A123456?
  • Quanti contratti questa nave?
  • Quale capacità ha Morelos?
  • Quale contratto inizia prima del ’12 / 12/2015 ‘?
  • Quale nave ha una velocità maggiore?
  • Quale contratto ha meno barche?
  • Quando inizia il contratto ABCDE?
  • Mostra tutte le barche
  • Mostra tutti i contratti
  • Visualizza il contratto ABCDE
  • Aggiorna La vernice della nave cambia la sua velocità di 20
  • quanto è 2 + 2?
  • quanto è 2 tra 2?

Il codice sorgente può essere ottenuto in https://github.com/pedro-ramirez-suarez/ScioAssistant, l’applicazione mobile (App Windows Universal) è configurata per utilizzare l’endpoint http://deepthoughtagent.azurewebsites.net/, essendo che il servizio è ospitato su un server con molto Le risorse limitate non saranno in grado di gestire molte richieste, per eseguire i propri esperimenti, è sufficiente ospitare il DSL in o TRO Posizionare e modificare l’URL definito nel file “appressources.resx” in modo che punti su dove è il nostro endpoint è.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *