Desenvolvendo um assistente pessoal inteligente

“siri, leia as mensagens de e-mail”

“Olá Cortana, como está o clima? “

” OK Google, como você diz olá em inglês? “

“Alexa, definido para temporizador por 15 minutos”

Este tipo de frases (comandos) estão fazendo parte de nossa vida diária. Todos os dias é mais comum usar nossa voz e uma linguagem natural para interagir com dispositivos e serviços. A grande maioria dos dispositivos mais populares e sistemas operacionais incorporam o que é conhecido como assistente pessoal inteligente; É uma tendência que está acelerando.

Um assistente pessoal inteligente (Intelligent Personal Assistant, IPA) é um agente de software que pode executar tarefas ou oferecer serviços a um indivíduo. O usuário pode interagir com o IPA usando linguagem natural através de voz ou texto. O IPA também pode obter e usar informações de contexto adicionais, como local de usuário, informações dentro do mesmo dispositivo (fotos, contatos, etc.) e outros serviços para fornecer melhor resposta ao usuário.

Os assistentes pessoais tais Como Siri, o Google agora ou o Cortana pode executar muitas ações e responder a uma ampla variedade de solicitações de usuários. Normalmente, o dispositivo é apenas uma fachada para fornecer o serviço, já que, na verdade, os serviços que reconhecem a fala e determinar a resposta ou ação adequada, são serviços hospedados na nuvem.

Eu quero meu próprio IPA

Se quisermos criar um serviço IPA, uma opção é fazer isso como uma extensão a serviços existentes, como Siri, Cortana ou Alexa. No entanto, isso pode ter limitações ou não nos dar o controle completo que poderíamos exigir. Portanto, outra opção é que desenvolvemos nosso próprio aplicativo e simplesmente usamos os serviços de reconhecimento de fala que expõem alguns desses mecanismos.

Para construir nosso IPA primeiro, precisamos identificar seus diferentes componentes ou subsistemas. Grandes recursos são: Interface para interagir com o assistente, reconhecimento de fala, linguagem de domínio específico (DSL) e ponto final para acessar o agente.

Em seguida, falaremos sobre cada um deles.

Reconhecimento de fala

é um campo de linguística computacional orientada para desenvolver metodologias e tecnologias que permitem que os computadores compreendam e traduza a linguagem falada. Vale a pena esclarecer que o reconhecimento de fala é diferente do reconhecimento de voz, já que este último apenas se concentra em identificar a pessoa que fala, mas não o que ele está dizendo.

Como você pode imaginar, desenvolver um serviço de reconhecimento de fala é uma tarefa muito grande e quase impossível para uma única pessoa. Felizmente, empresas como a Microsoft, o Google e Xamarin, entre outras, já os desenvolveram e as abriram para que possamos usá-las em nossas aplicações. Na Listagem 1, mostro como podemos inicializar o serviço de reconhecimento de fala no .NET. Posteriormente, na Listagem 2, mostro como isso pode ser feito na Web usando a API de fala da Web, que é suportada pelo Chrome.

Listagem 1. Código C # Para usar o reconhecimento de fala do Windows.

Lista 2. Código Javascript para usar a API de fala da Web .

Idioma de domínio específico (DSL)

é um idioma de computador projetado para representar ou resolver um problema específico. Há uma grande variedade de DSLs, desde idiomas muito comuns, como HTML ou SQL, para idiomas de nicho, como o CSound para síntese de som. O domínio também pode ser uma área de negócios. Então, por exemplo, poderíamos criar um DSL para gerenciamento de apólice de seguro.

Quando um DSL é criado que só será usado em um aplicativo, ele será usado para chamar uma mini-linguagem.

Implementar o idioma, precisamos definir sua gramática e criar um analisador (analisador sintático) para poder interpretar o que o usuário nos diz e dar uma resposta. Poderíamos fazer as duas coisas à mão, mas no momento já existem muitas ferramentas que nos fornecem para definir gramática e criar nosso analisador.

Uma das ferramentas mais comuns para desenvolver idiomas é YACC, que Permite-nos gerar um camionete com base em uma gramática analítica que devemos descrever em uma metalinguagem semelhante à notação de Backus-Naur.

Neste caso, não usaremos YACC, mas usaremos a ironia, um desenvolvimento Kit para implementar idiomas na plataforma .NET. Ao contrário de soluções como Yacc e Lex, que geram um analisador da gramática analítica que definimos, a ironia nos permite expressar a gramática da nossa língua diretamente em C #.

A Listagem 3 mostra como definimos a gramática através de terminais e não terminais, bem como as declarações que vamos reconhecer.

Listagem 3. Definição do DSL.

Endpoint

Expospiremos os serviços de nosso assistente através de um endpoint hospedado em nosso aplicativo da Web. Este ponto final receberá como um parâmetro a consulta do usuário e irá para o assistente, que irá interpretar os resultados e enviar uma resposta serializada.

app

O usuário pode interagir com o nosso assistente inteligente através de um aplicativo móvel.

já nas listagens 1 e 2 vimos Como podemos usar a APIs Chrome e Windows para reconhecimento de fala. Agora, nas listagens 4A, 4B e 4C, podemos ver como jogar a pesquisa e exibir os resultados em um aplicativo universal do Windows.

Lista 4A mostra como fotografar uma solicitação assíncrona e desmoronar os resultados e, em seguida, listar 4b Mostrar como a listagem 4C pode ser implantada e finalmente mostra como poderíamos acompanhar esses resultados de uma mensagem de voz.

Listagem 4a . Resultados e resultados de processos.

lista 4b. Implantar resultados.

Lista 4c. Dê discussão.

Alternativas

Um assistente pessoal inteligente pode se desenvolver de várias maneiras. Neste artigo, tomamos algumas decisões sobre tecnologias e arquitetura, para a parte do reconhecimento de fala que poderíamos usar serviços Xamarin que possuem uma API de reconhecimento de idioma e é multiplataforma. Também poderíamos integrar nossa inscrição por serviços como Siri ou Cortana. O DSL, como mencionamos, também poderíamos tê-lo desenvolvido com YACC, Lex ou alguma variante destes.

código fonte

todo o código fonte neste artigo é parte de um pequeno Assistente pessoal que é hospedado em No URL: Home / Questões são o tipo de perguntas que o assistente pode responder; Alguns exemplos são:

  • quantas embarcações contratam A123456?
  • quantos contratos esta embarcação um?
  • Qual capacidade Morelos?
  • O que o contrato começa antes de ’12 / 12/2015 ‘?
  • qual embarcação tem uma velocidade maior?
  • Qual contrato tem menos barcos?
  • Quando o contrato de Abcde começa?
  • mostra todos os barcos
  • Mostrar todos os contratos
  • Exibe o contrato ABCDE
  • Atualizar a tinta da embarcação é alterada velocidade por 20
  • Quanto custa 2 + 2?
  • Quanto custa 2 entre 2?

o código-fonte pode ser obtido em https://github.com/pedro-ramirez-suarez/ScioAssistant, o aplicativo móvel (Windows Universal App) é configurado para usar o endpoint , sendo que o serviço é hospedado em um servidor com muito Recursos limitados não poderão lidar com muitas solicitações, para executar suas próprias experiências, basta hospedar o DSL ou Tro Place e altere o URL definido no arquivo “Apresentources.resx” de modo que ele aponte para onde é o nosso endpoint.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *