“Siri, le as mensaxes de correo electrónico”
“Ola Cortana, como é o tempo? “
” Ok Google, como di Hola en inglés? “
“Alexa, configurado no temporizador durante 15 minutos”
Este tipo de frases (comandos) están formando parte da nosa vida diaria. Todos os días é máis común usar a nosa voz e unha linguaxe natural para interactuar con dispositivos e servizos. A gran maioría dos dispositivos e sistemas operativos máis populares incorporan o que se coñece como asistente persoal intelixente; É unha tendencia que está acelerando.
Un asistente persoal intelixente (asistente persoal intelixente, IPA) é un axente de software que pode realizar tarefas ou ofrecer servizos a un individuo. O usuario pode interactuar co IPA usando a linguaxe natural a través de voz ou texto. O IPA tamén pode obter e utilizar información adicional de contexto como a localización do usuario, a información dentro do mesmo dispositivo (fotos, contactos, etc.) e outros servizos para proporcionar unha mellor resposta ao usuario.
Os asistentes persoais tales Como Siri, Google Now ou Cortana pode executar moitas accións e responder a unha gran variedade de solicitudes de usuario. Normalmente, o dispositivo é só unha fachada para proporcionar o servizo, xa que realmente os servizos que recoñecen o discurso e determinan a resposta adecuada ou a acción, son servizos aloxados na nube.
Quero a miña propia IPA
Se queremos crear un servizo IPA, unha opción é facelo como unha extensión para os servizos existentes como Siri, Cortana ou Alexa. Non obstante, isto pode ter limitacións ou non darnos o control completo que poderiamos esixir. Polo tanto, outra opción é que desenvolvemos a nosa propia aplicación e simplemente usamos os servizos de recoñecemento de voz que expoñen algúns destes motores.
Para construír o noso IPA primeiro necesitamos identificar os seus diferentes compoñentes ou subsistemas. As grandes características son: a interface para interactuar co asistente, o recoñecemento de voz, o idioma de dominio específico (DSL) e o punto final para acceder ao axente.
A continuación falaremos de cada un deles.
Recoñecemento de voz
é un campo de lingüística computacional orientada a desenvolver metodoloxías e tecnoloxías que permiten que as computadoras comprendan e traduzan a lingua falada. Vale a pena aclarar que o recoñecemento de voz é diferente do recoñecemento de voz, xa que este último só se centra en identificar a persoa que fala, pero non o que di.
Como podes imaxinar, desenvolver un servizo de recoñecemento de voz é unha tarefa moi grande e case imposible para unha soa persoa. Afortunadamente empresas como Microsoft, Google e Xamarin entre outros, xa os desenvolveron e abrírono para que poidamos usalos nas nosas aplicacións. Na lista 1 Amosar como podemos inicializar o servizo de recoñecemento de voz en .NET. Posteriormente, na listaxe 2 mostro como se podería facer na web usando a API de voz web, que é compatible con Chrome.
Listado 1. C # código para usar o recoñecemento de voz de Windows.
Lista 2. Código de JavaScript para usar a API de voz web .
Idioma de dominio específico (DSL)
é un idioma informático deseñado para representar ou resolver un problema específico. Hai unha gran variedade de DSLs, desde linguas moi comúns como HTML ou SQL, a idiomas de nicho, como a CSOUND para a síntese de son. O dominio tamén pode ser unha área de negocio. Entón, por exemplo, poderiamos crear unha DSL para a xestión da póliza de seguro.
Cando se crea un DSL que só se usará nunha aplicación, úsase para chamar a un mini-linguaxe.
Para implementar o idioma necesitamos definir a súa gramática e crear un analizador (analizador sintáctico) para poder interpretar o que o usuario nos di e dar unha resposta. Poderiamos facer as dúas cousas a man, pero na actualidade xa hai moitas ferramentas que nos proporcionan definir a gramática e crear o noso analizador.
Unha das ferramentas máis comúns para desenvolver idiomas é YACC, que permítenos xerar un parzer baseado nunha gramática analítica que debemos describir nunha metalenguaxe similar á notación de Backus-Naur.
Neste caso, non usaremos YACC, pero imos usar ironía, un desenvolvemento Kit para implementar idiomas na plataforma .NET. A diferenza de solucións como YACC e LEX, que xeran un analizador da gramática analítica que definimos, a ironía permítenos expresar a gramática da nosa lingua directamente en C #.
Listado 3 mostra como definimos a gramática a través de terminales e non terminales, así como as declaracións que imos recoñecer.
Listado 3. Definición do DSL.
Endpoint
Expoñeremos os servizos do noso asistente a través dun punto final aloxado na nosa aplicación web. Este punto final recibirá como parámetro a consulta do usuario e irá ao asistente, que interpretará os resultados e enviará unha resposta serializada.
Aplicación
O usuario pode interactuar co noso asistente intelixente a través dunha aplicación móbil.
Xa nos listados 1 e 2 que vimos Como podemos usar a API de Chrome e Windows para o recoñecemento de voz. Agora, nos anuncios 4A, 4B e 4C podemos ver como tirar a busca e amosar os resultados nunha aplicación Universal Windows.
Lista 4A mostra como disparar unha solicitude asíncrona e desmoronar os resultados, a continuación, a lista 4b Mostrar como se pode implementar a lista de 4C e, finalmente, mostra como poderiamos acompañar estes resultados desde unha mensaxe de voz.
Listado 4a .. Tire os resultados de busca e proceso.
Lista 4b. Implantar resultados.
Lista 4c. Dar discusión.
Alternativas
Un asistente persoal intelixente pode desenvolver de moitas maneiras. Neste artigo tomamos algunhas decisións sobre tecnoloxías e arquitectura, para a parte de recoñecemento de voz que poderiamos usar servizos de Xamarin que ten unha API de recoñecemento de idiomas e é multiplataforma. Tamén poderiamos integrar a nosa aplicación con servizos como Siri ou Cortana. O DSL, como mencionamos, tamén poderiamos desenvolvelo con YACC, LEX ou algunha variante destes.
Código fonte
Todo o código fonte deste artigo é parte dun pequeno Asistente persoal que está aloxado en http://deepthoughtagent.azurewebsites.net/, no URL: http://deepthoughtagent.azurewebsites.net/ Home / Preguntas son o tipo de preguntas que o asistente pode responder; Algúns exemplos son:
- cantos contratos de buques a123456?
- Cantos contratos este buque?
- Que contrato comeza antes ’12 / 12/2015 ‘?
- Que buque ten unha velocidade maior?
- Que contrato ten menos embarcacións?
- cando comeza o contrato de abcde?
- mostra Todos os barcos
- Mostrar todos os contratos
- Mostra o contrato ABCDE
- Actualizar a pintura do buque cambia a súa velocidade por 20
- canto é 2 + 2?
- Canto é 2 entre 2?
O código fonte pode obterse en https://github.com/pedro-ramirez-suarez/ScioAssistant, o móbil A aplicación (Windows Universal App) está configurada para usar o punto final http://deepthoughtagent.azurewebsites.net/, sendo que o servizo está aloxado nun servidor con recursos moi limitados non será capaz de manexar moitas solicitudes, para executar o seu experimentos propios, é suficiente para albergar o DSL en ou Tro lugar e cambiar a URL definida no ficheiro “Appressources.Resx” para que apunte a onde está o noso punto final.