Desenvolvendo un asistente persoal intelixente

“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.

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *