A computação cognitiva integra uma nova classe de problemas. Basicamente lida com situações complexas, ambíguas e incertas; em em outras palavras problemas humanos!
Esse artigo integra a série Framework para desenvolvimento de Bots. Mas agora vamos conversar sobre o que seria computação cognitiva, a parte inteligente que vai estar no seu software.
Framework para desenvolvimento de Bots:
- Contexto.
- Computação cognitiva.
Teoria
Antes de começar com exemplos e aplicações, precisamos definir um conceito comum sobre o que é computação cognitiva, o que mais observo são combinação de letras e siglas que está associada a inteligência artificial, mas nem todas estão ligadas a computação cognitiva. O conceito que vou apresentar não foi de minha autoria, foi de um consorcio de pessoas muito mais inteligentes e capaz para definir algo tão complexo e ao mesmo tempo maravilhoso! Então, senta que lá vem história:
Em meados de 2014 um grupo de especialistas, com formações bem eclética, de diversas instituições de ensino, além de grandes empresas de tecnologia resolveram sentar e tentar definir o que seria computação cognitiva e qual seria a sua diferença para outros tipos de inteligência artificial, porem era importante que esse termo não fosse proprietária, podendo ser utilizada como referência pela indústria de tecnologia da informação (TI), pesquisadores, mídias e seus usuários. Para mais informações podem acessar o site Cognitive Computing Consortium. Ou se preferir segue um resumo sobre inteligencia artificial feito para ajudar a entender o seu conceito, mais informação podem ler o artigo Demystifying Artificial Intelligence. What is Artificial Intelligence & explaining it from different dimensions.
Mas qual é a definição de cognitivo? Até agora só está me enrolando.
Cognitivo
Cog·ni·ti·vo 1. Que se refere à cognição ou ao conhecimento.
2. psicol Diz-se de estados ou processos que se relacionam à identificação de um conhecimento dedutível e à solução de tarefas e problemas específicos.
3. ling Que se refere ao processo mental de percepção, juízo, memória e raciocínio.
Definido computação cognitiva
Basicamente a computação cognitiva é caracterizada pela confusão; ops! Pelas situações complexas que são incertas e ambíguas. Meu exemplo favorito é a forma que mineiro fala, olha só:
Mineiro A pergunta ao mineiro B: Pó pô pó?
Mineiro B responde ao mineiro A: Pó pô.
Como eu posso explicar a uma máquina que o primeiro Pó significa Pode e o segundo pó significa pó mesmo. Se até mesmo para alguns brasileiros, principalmente de outras regiões, não consegue entender esse exemplo, justamente por não conhecer o contexto por trás dessa expressão. Ou melhor, tenho outro exemplo formidável, a forma que minha esposa se expressa quando quer pedir para eu pegar alguma coisa.
Esposa: Pegue o trem do lado da coisa lá?
Eu: Pegar o que?
Esposa: Aquela coisa lá, com o trocinho coisado.
É um exemplo real. E sim faz sentido! Se não acredita veja esse vídeo aqui:
Agora como explicar a uma máquina, que no português temos várias formas de dizer a mesma coisa. Viu como esse tipo de situação é complexa, ambígua e incerta. Depende do contexto dos interlocutores envolvidos na conversa, e pode ainda sofrer mudanças, já que somos seres inteligentes e estamos sempre aprendendo novas habilidades.
Para responder à natureza fluida da compreensão dos problemas dos usuários, o sistema de computação cognitiva oferece uma síntese não apenas de fontes de informação, mas também de influências, contextos e ideias. Sendo assim esse sistema inteligente (cognitivo) deve responder com o que considera ser o melhor naquele momento, não o que seria o correto. Podemos afirmar aqui que não existe certo e errado, existe apenas eu acho! E sim, muitas pessoas estão aí se gabando que estão utilizando as tecnologias mais revolucionarias, mas que na raiz da solução estão pagando, ou construindo, sistemas para dizer o que acha com um grau de certeza!
A inteligência por trás dessa tecnologia está na forma que conseguimos organizar o caos, percorrendo coleções maciças de informações diversas para encontrar padrões e, em seguida, aplicam esses padrões para responder às necessidades do momento.
Um mundo globalizado como o nosso e que está cada vez mais conectado e ubíquo como o nosso. Precisamos rever a natureza dos relacionamentos entre pessoas e ambiente virtual, cada dia mais difuso onde tecnologias podem agir como um assistente, um treinador para o usuário ou podem atuar virtualmente autonomamente em muitas situações de solução de problemas, resultando em respostas indicativas, sugestiva, instrutiva ou simplesmente divertidas.
Para definir um sistema como cognitivo precisamos observar quatro características, sendo elas adaptativo, interativo, interativo e com estado e contextual.
Adaptativo
Sistemas cognitivos devem ser capaz de aprender com as mudanças, que os requisitos evoluem. Devem ser projetados para serem alimentados com dados dinâmicos e em tempo “quase” real.
Interativo
Devem ser simples para o usuário, deixando esses usuários confortáveis para dizer qual a sua necessidade. Os sistemas podem interagir com outros processadores, dispositivos e serviços em nuvem, bem como com pessoas.
Iterativo e com estado
Devem ajudar na solução de um problema, fazendo perguntas ou encontrando informações adicionais diretamente na fonte de dados. Eles precisam “lembrar” as interações anteriores e retornar informações adequadas para a aplicação específica naquele momento.
Contextual
Eles devem entender, identificar e extrair elementos contextuais, como significado, entidade, sintaxe, hora, local, domínio apropriado, regulamentos, perfil do usuário, processo, tarefa e objetivo. Eles podem recorrer a várias fontes de informação, incluindo informações digitais estruturadas e não estruturadas, bem como entradas sensoriais (visual, gestual, auditiva ou fornecida pelo sensor).
Os sistemas cognitivos coexistirão com os sistemas legados. Muitos sistemas cognitivos se basearão nos recursos de TI atuais. Mas a ambição e o alcance da computação cognitiva são fundamentalmente diferentes. Abandonando o modelo de computador como dispositivo, ele busca levar a computação a uma parceria fundamental mais próxima nos esforços humanos.
Os sistemas cognitivos diferem dos aplicativos de computação atuais, pois vão além da tabulação e cálculo com base em regras e programas pré-configurados. Embora sejam capazes de realizar tarefas da computação básica, eles também podem inferir e até raciocinar com base em objetivos mais amplos.
Para quem leu o primeiro artigo da serie um dos requisitos, não negociáveis, da nossa consultoria é implementar um bot conversacional utilizando o serviço da IBM o IBM Watson Assistant. Vamos entender o que seria esse tal de assistente vulgo bot. Seria um serviço de inteligencia com a finalidade ajudar sua marca a estar presente em qualquer dispositivo, aplicativo ou canal. Dessa forma o assistente pode se conectar aos recursos de engajamento do cliente que você já usa para entregar uma experiência de resolução de problemas unificada e envolvente para seus clientes, exemplo muito popular no Brasil seria o Whatsapp e Facebook.
Basicamente o assistente atual como um programa que interpreta a entrada do usuário, qualifica essa entrada para saber onde redirecionar o usuário e o que responder.
Teoria aplicada à prática
Agora vamos para a parte divertida, ou seja, vamos construir nosso assistente. Lembrando o nosso objetivo com essa parte pratica
- Planejar um diálogo
- Criando um assistente
- Criando uma habilidade de dialogo (Dialog Skill)
- Definir intents (intenções) customizados
- Incluir uma entidade padrão e usá-la no diálogo para localizar padrões na entrada do usuário
- Incluir entidades para tornar suas respostas mais específicas
- Incluir nós de diálogo que podem manipular suas intenções
- Juntando tudo em um diálogo
Planejar um diálogo
Antes de sair fazendo um bot conversacional é necessário ter mapeado o que deseja fazer. Em outras palavras precisamos de um serviço que ajude a criar um fluxo de conversa com início, meio e fim (é desejável que seja feito por um especialista, comumente chamado de UX Writer, já que é a parte mais complexa do desenvolvimento de um bot).
Particularmente gosto da ferramenta botsociety, pois possui uma camada de serviço gratuita. É excelente para demonstrar o bot antes de sair fazendo o fluxo na ferramenta da IBM. Uma das features que mais gosto é poder exportar um vídeo da a conversa:
Além de conseguir mapear fluxos alternativos e construir um fluxograma automaticamente de acordo com o que você for criando seu mockup, e possui ainda uma funcionalidade para realizar pesquisa e teste de usabilidade.
Criando um assistente
Uma vez que temos o fluxo mapeado vamos iniciar na o nosso assistente na plataforma da IBM. Se não possui uma conta é preciso criar uma conta:
O Watson Assistant (antigo Watson Conversation) é a API do Watson para a criação e desenvolvimento de interfaces conversacionais, ou chatbots. Este serviço possui uma interface simples e intuitiva para que profissionais não-técnicos possam usufruir de todos os recursos disponíveis, de forma simples e rápida.
Crie sua conta da IBM Cloud. Feito isso vamos precisar criar nosso primeiro assistente, segue um vídeo para ajudar no processo de criação.
Para criar um assistente precisamos procurar os serviços do watson, depois basta procurar pelo serviço Watson Assistant. Existe uma camada gratuita, com 10.000 mensagens recebidas de forma gratuita por mês. Este número somente é descontado através das chamadas de API. Além disso, é possível criar até 5 skills diferentes, com 100 intenções, 200 entidades e 100 nós de diálogo cada. No final da pagina é possível editar o nome do serviço. É possível utilizar o tutorial oficial da IBM (Criando um assistente).
Criando uma habilidade de dialogo (Dialog Skill)
Uma habilidade seria um conjunto de conhecimento em uma lógica treinada (baseada no cenário do seu negócio). É possível ter mais de uma habilidade para um assistente.
Um assistente é um conjunto de habilidades que podem ser agrupados em um único serviço para poder lidar com diversos cenários. No nosso caso é onde vamos criar o atendimento da secretaria da Escola do Futuro. E a habilidade que vamos construir seria a de um secretário.
É possível utilizar o tutorial oficial da IBM (Criando uma habilidade de diálogo) também.
Definir intents (intençoes) customizados
Uma intent ou intenção representa o desejo do usuário, o que o usuário deseja quando está enviando uma mensagem. No caso do Watson Assistent existe um padrão de nomenclatura para intenções iniciando com #.
E para conseguir treinar essa intenção e indicar para o bot como faz para identificar a intenção do usuário, precisamos dar alguns exemplos. Exemplo:
Intenção: #sim
Exemplos:
sim
s
yeap
positivo
Como o exemplo acima é possível notar que existem diversas formas de dizer a mesma coisa (intenção), por isso é preciso treinar com exemplos, e com o tempo precisamos voltar nos exemplos e atualizar os mesmos.
É possível utilizar o tutorial oficial da IBM (Definindo intenções) também.
Incluir uma entidade padrão e usá-la no diálogo para localizar padrões na entrada do usuário
Essas são entidades comuns criadas pela IBM que podem ser usadas em qualquer caso de uso. Eles estão prontos para uso assim que você os adicionar. É importante ressaltar que não é possível editar essas entidades.
É possível utilizar o tutorial oficial da IBM (Criando entidades) também.
Incluir entidades para tornar suas respostas mais específicas
Entidades representam objetos da intenção, seria um valor que queremos retirar do meio da oração, ops mensagem que o usuário enviou.
Uma entidade possui um tipo, um valor e pode possuir um sinônimo ou um padrão. No caso abaixo estamos criando uma entidade contato com um valor CpfCnpj cujo padrão é um regex para identificar CPF (sim, sim, o cnpj ainda não está no exemplo abaixo).
Também é possível criar uma entidade cujo valor pode possuir sinônimos, como é o exemplo do menu. Nome da entidade menuUra, valor conhecerEscola, sinônimos: conhecer mais sobre a escola, conhecer escola, informação da escola. Qualquer um desses termos que o usuário escrever irá corresponder a entidade menuUra com o valor conhecerEscola.
É possível utilizar o tutorial oficial da IBM (Criando entidades) também.
Juntando tudo em um diálogo
Agora que já foi criado as entidades e as intenções vamos juntar com o diálogo. Observe que um diálogo em branco sempre vai ter 2 caixas uma chamada Bem-vindo e outra Em outros casos, conforme imagem abaixo_._
Vamos começar criando um folder e dar o nome de Acolhimento, nesse exemplo esse folder serve para organizar tarefas relacionadas a etapa de acolhimento (receber o contato e identificar sua pessoa)
Dentro da pastar folder vamos criar nosso primeiro node (nó), esses 3 pontos na vertical tem a opção de criar o node. Esse node que estamos trabalhando vamos dar o nome de Boas-vindas, e vamos configurar para quando for identificado uma intenção de saudação vai ser direcionado para esse node. E como o watson vai saber disso? Simples basta configurar a caixa de diálogo logo abaixo da frase If assistant recognizes (se o assistente reconhecer) #saudacao (# lembra sempre intenções).
Agora podemos ter variáveis de contexto, criada para armazenar valores extraído da mensagem enviada pelo nosso usuário ou uma variável de controle interna. A sua sintaxe começa com $ como podemos ver abaixo criado no segundo node chamado Primeiro Contato !$contato (! representa negação $contato uma variável de contexto, e tudo junto indica que queremos entrar nesse node quando a variável $contato for nula ou não existir)
Outro ponto não menos importante de um node é a forma que ele vai tratar no final da sua execução, podemos esperar que nosso usuário responda algo, ou podemos redirecionar para outro node. Para nosso exemplo o node Boas vindas, após imprimir a sua mensagem vai redirecionar para o node Primeiro contato, e caso sua condição seja verdadeira irá imprimir a sua mensagem.
Além de variáveis de contexto ou intenções podemos utilizar as nossas entidades para validar uma condição. Vamos olhar o exemplo de perguntar qual o CPF do nosso usuário, criamos um node para perguntar o CPF e esperamos que o usuário responda, em seguida criamos um node filho para validar se na mensagem enviada pelo usuário contém um CPF, se existir vamos armazenar esse valor em uma variável de contexto chamada $cpfContato.
Uma boa prática é perguntar se o que nosso usuário escreve está certo (não que isso aconteça com muita frequência!!), sendo assim vamos utilizar a variável que criamos $cpfContato e vamos utilizar como um valor para concatenar em uma mensagem que vamos enviar para esse usuário. E para saber se estamos no caminho certo vamos criar 3 nodes filhos da pergunta sendo um para tratar da intenção #sim, outro para a intenção #nao e uma para tratar qualquer mensagem que não foi reconhecida como #sim ou #nao.
O interessante dessa abordagem é que não ficamos presos a valores literais, temos uma intenção logo tanto um valor sim como um yeap significa a mesma intenção. O mesmo vale para uma intenção negativa, serve tanto um não como um nops.
Após a etapa de acolhimento vamos mostrar nossa ura, ou se preferir chamar de menu com as opções que nosso usuário poderá solicitar um atendimento, é uma boa prática mostrar quais assuntos o seu bot consegue responder para seu usuário. Não deixe seu usuário perdido ou traumatizado em um bot sem um guia.
A nossa ura é inteligente o suficiente para entender expressões ou frases como reconhece um número. Lembra que criamos uma entidade chamada menuUra e para cada item dentro dessa entidade tínhamos um sinônimo vinculado a esse item. Então mesmo que o usuário escolha finalizar ou digite o número 4 vai cair no nó de finalização.
Esse artigo ficou maior do que o imaginado, deixo aqui o link para poder baixar a habilidade que criei nesse artigo e com isso ajudar você na sua jornada para a construção de um assistente virtual. Deixo também o link para o projeto que estou construindo durante o desenvolvimento dessa série de artigos.
juscelior/bot-template-community
Top comments (0)