IBM Watson I: Watson Assistant

Cássio Farias Machado
CWI Software
Published in
6 min readNov 13, 2018

Este é o primeiro de uma série artigos criados com base na experiência adquirida pelo time que atuou no projeto de Pesquisa e Inovação do Núcleo de Tecnologia da CWI com o objetivo de desenvolver o chatbot do Programa Crescer.

Neste artigo serão apresentados os principais conceitos necessários para a implementação de um chatbot, demonstrando através de exemplos práticos como fazer uso das ferramentas disponibilizadas no serviço IBM Watson Assistant.

O que é

O Watson Assistant (antigo Watson Conversation) é um serviço disponibilizado pela IBM, através da sua infraestrutura de nuvem IBM Cloud, que reconhece linguagem natural para criação de interfaces de conversação, mais conhecidas como chatbots.

A figura a seguir ilustra um possível fluxo de uma aplicação que utiliza o serviço Watson Assistant:

Fonte: https://console.bluemix.net/docs/services/conversation/index.html

No fluxo acima pode-se notar a presença da camada de Interface, a qual pode ser um canal tradicional (como Messenger, Slack, Telegram e outros) ou um frontend próprio (web ou mobile), com a qual o usuário irá interagir. Há também a aplicação propriamente dita (Application), que fará a comunicação com o Watson Assistant e que também pode se comunicar com outros serviços, como por exemplo o IBM Watson Speech to Text (conversão de áudio para texto), ou o IBM Watson Tone Analyzer (análise de emoções em texto), ou ainda comunicar-se com APIs internas (Back-end systems) para realizar ações específicas, como a de registrar chamados ou agendar atendimentos.

Principais conceitos

Existem três conceitos básicos quando se está utilizando o Watson Assistant: intenções, entidades e fluxo de diálogo.

Mas o quê!?!

Intenções

As intenções (intents em inglês) representam os objetivos do usuário durante a conversação, ou seja, literalmente o que ele quer fazer. Como por exemplo:

  • Resetar sua senha
  • Solicitar uma pizza
  • Agendar uma consulta médica

Para que o Watson reconheça essas intenções do usuário, devemos treiná-lo fornecendo exemplos de frases que o usuário poderia usar para expressar ao chatbot a sua demanda.

Exemplo: dada a intenção #resetarSenha, poderíamos ter os seguintes exemplos de frases para o treinamento:

  • gostaria de resetar minha senha
  • resetar a senha
  • esqueci minha senha

É nesse parte que entra a “inteligência” propriamente dita da ferramenta, a qual utiliza IA (Inteligência Artificial) para associar as diferentes frases que o usuário pode fornecer às intenções que ele foi previamente treinado.

Para mais informações sobre as intenções, você pode consultar a documentação oficial.

Entidades

As entidades (entities em inglês) são representações de objetos do mundo real que fazem sentido ao negócio. São muito semelhantes ao conceito de objetos da OOP (object oriented programming) e servem para ajudar na identificação do que usuário quer realizar. Assim elas podem identificar, por exemplo:

  • Uma localização
  • Um item de um menu
  • Um sabor de pizza

Exemplo: dada a entidade @cidade, poderíamos ter os seguintes exemplos de treinamento:

  • Porto Alegre
  • Florianópolis
  • São Paulo

É possível fornecer esses dados de treinamento para o Watson Assistant:

  • Cadastrando manualmente via interface web
  • Fazendo o upload de um arquivo CSV
  • Upload de arquivo JSON via API

Para obter mais informações sobre as entidades, você pode consultar a documentação oficial da IBM.

Entidades prontas

O Watson Assistant fornece algumas entidades prontas para uso (built-in entities). As entidades prontas disponíveis em português são:

  • @sys-currency: Reconhece 20 reais ou R$20,00 e retorna o valor 20.00
  • @sys-date: Reconhece hoje ou na próxima sexta-feira e converte para a data apropriada (yyyy/MM/dd)
  • @sys-time: Reconhece agora ou às 10:00 e converte para o horário apropriado (HH:mm:ss)
  • @sys-number: Reconhece dez ou 10 e retorna o valor 10
  • @sys-percentage: Reconhece trinta por cento ou 30% e retorna o valor 30

Existem também as entidades @sys-person (reconhecimento de nomes) e @sys-location (reconhecimento de locais), mas elas estão disponíveis apenas em inglês e ainda estágio beta de desenvolvimento.

Construindo um diálogo

Uma das características mais importantes do Watson Assistant é o seu gerenciador de diálogos, chamado de Dialog. O Dialog é uma interface web para edição do fluxo de diálogo. O fluxo de diálogo é muito semelhante a uma árvore de decisões, podendo ter vários nós encadeados. Para obter mais informações sobre o Dialog, você pode consultar a sua documentação oficial no site do Watson Assistant. A ordem de análise da árvore de nós é realizada de cima para baixo e da esquerda para a direita, como demonstrado na figura abaixo:

Fonte: retirado da interface web pelo próprio autor

Quando o usuário digita algo e envia para o chatbot, o Watson Assistant aciona a IA para reconhecer a intenção e as entidades citadas na frase do usuário. Após esta análise, os nós do fluxo de diálogo são verificados. Quando existe a correspondência de intenções e/ou entidades da frase com a condição de algum dos nós, ele executa a ação programada (retornar um texto para o usuário, alterar o contexto, etc), dando continuidade ao fluxo de diálogo. Os nós do Dialog são normalmente compostos por uma condição e por uma resposta, como por exemplo:

Fonte: retirado da interface web pelo próprio autor

Note que a condição no exemplo é #consultarPedido que é uma intenção e a resposta que esta sendo dada (ou seja, será enviada ao usuário se a condição for atendida) é "Ok, informe o seu número de pedido".

As condições podem ser construídas a partir de expressões lógicas contendo combinações de entidades, intenções e variáveis do próprio contexto do Watson (na próxima seção explicamos o que é o contexto no Watson Conversation).

Note também que no final do nó está selecionada a opção “Wait for user input” (esperar resposta do usuário), o que significa que na próxima vez que o serviço for chamado, o Watson continuará a conversa (ou análise das respostas) a partir desse ponto do fluxo.

Existem outras duas opções de finalização para o nó:

  • Skip user input (passar entrada do usuário): pula a resposta do usuário e avalia as condições dos nós filhos; e
  • Jump to (pular para): pula para um determinada nó especificado, alterando o fluxo padrão.

Contexto

A comunicação da Aplicação com o Watson Assistant é feita via JSON e uma das propriedades presente na estrutura de dados deste JSON é chamada o contexto (context) do diálogo. O contexto pode ser modificada tanto via o próprio Dialog na interface web do Watson Assistant ou via aplicação que vai consumir o serviço, através dos SDKs disponibilizados pela IBM para várias linguagens de programação.

Assim é possível, por exemplo, adicionar informações nesse contexto para serem utilizadas tanto nas condições dos nós do diálogo quanto nas respostas que serão dadas aos usuários, como por exemplo:

Fonte: retirado da interface web pelo próprio autor

No exemplo acima, a variável $numeroPedido será substituída pela informação do contexto anteriormente definida.

Exemplo de contexto com adição de informações via interface:

Fonte: criado pelo próprio autor

Conclusão

Nesse artigo apresentamos a arquitetura geral de um chatbot que use o serviço Watson Assisant e tivemos uma visão geral dos principais conceitos que fundamentam a sua utilização. Vimos que a intenção é literalmente o objetivo do usuário no diálogo, que as entidades são elementos do mundo real identificados e que o dialog serve para gerenciar e definir o fluxo de diálogo.

No próximo artigo da série, teremos um exemplo mais prático mostrando como definir as entidades, intenções e o fluxo de diálogo na interface web do Watson Assistant, bem como veremos um exemplo prático de como integrar tudo isso com a sua aplicação.

Referências

Seguem algumas referências utilizadas:

--

--