• Português
  • English
  • Español
  • Do que são feitos os Chatbots

    Por: em 14 de maio de 2018

    Aqui no Datalab temos experimentado com diversas tecnologias de compreensão de texto e fala. Já tivemos alguns posts sobre o assunto aqui no blog, como esse post sobre reconhecimento automático de fala (parte 2 aqui) ou esse outro que introduz o histórico e algumas classificações de chatbots. Os chatbots são uma aplicação muito comum desse tipo de tecnologia, e têm ganhado cada vez mais atenção nos últimos anos. Nesse artigo, vou falar um pouco sobre como eles são construídos. Aqui, estou usando como referência a plataforma Dialogflow, do Google, que é uma das mais utilizadas para criação de chatbots e tem sido uma das nossas principais referências aqui no Datalab.

    De maneira geral, um chatbot é composto por pelo menos duas partes: uma aplicação cliente e um servidor ou motor do chatbot. A aplicação cliente é aquela com a qual o usuário interage diretamente, na qual ele fornece uma entrada, geralmente áudio ou texto, e obtém uma saída na forma áudio, texto, ou outros tipos de conteúdos ou ações (como o acendimento de uma lâmpada ou acionamento de um dispositivo eletrônico ou aplicação, no caso de casas inteligentes, por exemplo). O servidor é responsável por receber as requisições da aplicação cliente contendo a informação de entrada fornecida pelo usuário, interpretá-la e fornecer uma resposta que a aplicação cliente usará para gerar a sua saída para o usuário. Nosso foco aqui será mais direcionado a como um servidor desse tipo funciona.

    A figura abaixo, extraída do site do Dialogflow, exemplifica como essas duas partes mencionadas acima interagem entre si. Quando o servidor recebe uma requisição com a entrada do usuário (geralmente já convertida em texto, quando se trata de entrada de áudio, através da utilização de sistemas de reconhecimento de fala), esse conteúdo, associado às informações relativas ao seu contexto, passa por um motor de classificação de intenções e identificação de entidades. O resultado desse processo pode ser uma resposta direta para a aplicação cliente ou, alternativamente, essas informações podem ser usadas para fazer requisições a outros serviços ou para a execução de programas (cadastrados pelo desenvolvedor durante a criação do chatbot, aqui vamos nos referir a isso, de maneira genérica, como ações), possibilitando a criação de respostas de maneira dinâmica a partir dos resultados obtidos.

     

     

    Figura 1 – Arquitetura do Dialogflow

     

    Agora, vamos explorar em mais detalhes cada um dos conceitos mencionados acima: intenções, contextos, entidades, ações e respostas.

    Intenções

    Intenções mapeiam entradas do usuário a ações ou respostas a serem executadas/dadas pela aplicação. Cada intenção está associada a um conjunto de frases de treinamento, a ações, respostas e contextos. As frases de treinamento são textos anotados que exemplificam uma entrada típica de um usuário para a intenção em questão. Por exemplo, para a intenção de nome “pedir_pizza”, uma frase de exemplo pode ser “eu quero pedir uma pizza de calabresa”. As frases de exemplo são fornecidas pelo desenvolvedor no momento de criação do chatbot, ao cadastrar uma intenção. A qualidade da classificação de intenção depende diretamente da qualidade e quantidade de exemplos cadastrados para cada intenção. Para identificar uma intenção a partir de uma entrada do usuário com base nas frases de exemplos, algumas das técnicas utilizadas incluem o uso de detecção de padrões através de expressões regulares, além do uso de técnicas de aprendizado de máquina, nas quais um algoritmo aprende de maneira autônoma a identificar intenções a partir de detecção de padrões em exemplos anotados e fornecidos por um humano.

    Contextos

    Quando avalia uma entrada, o classificador de intenções pode considerar informações contextuais que lhe ajudam a diferenciar entradas similares que devem resultar em ações/respostas diferentes. Por exemplo, se uma pessoa responde “sim” a uma pergunta, ela deve ter resultados diferentes se essa entrada corresponde a uma resposta à pergunta “Você quer que eu apague a luz?” ou “Você confirma o pedido de uma pizza de calabresa?”. Para que o chatbot responda de maneira correta nesse tipo de situação, geralmente utiliza-se algum tipo de variável de contexto, que carrega informações sobre as últimas interações do usuário, como o nome das últimas intenções ou entidades sobre as quais o usuário tem falado a respeito.

    Entidades

    Ao cadastrar uma intenção como “pedir_pizza”, o criador do chatbot pode ter interesse em identificar itens específicos aos quais o usuário faz referência em sua entrada. Por exemplo, na frase “eu quero pedir uma pizza de calabresa”, podemos ter interesse em identificar as palavras “uma”, pizza” “calabresa”, que podem corresponder às entidades “quantidade”“prato” “sabor”, no caso do chatbot de um restaurante italiano. As palavras correspondentes a essas entidades são marcadas nas frases de exemplo e associadas às entidades correspondentes para que o sistema possa reconhecê-las quando uma nova entrada do usuário é fornecida. O processo de identificação dessas entidades pode ser similar ao de classificação de intenções, identificando-as a partir da detecção de padrões nas próprias palavras e aquelas do entorno em que aparecem. As entidades identificadas podem também ajudar a definir a intenção apropriada, fornecendo mais contexto para a decisão do algoritmo de classificação de intenção.

    Ações e Respostas

    Uma vez classificada a intenção do usuário e identificadas as entidades a ela relacionadas, o servidor pode executar ações específicas para aquela intenção, com o seu contexto e entidades específicas. No nosso exemplo de pedido de pizza, uma ação que o sistema poderia executar é realizar uma chamada para um serviço do restaurante para verificar a disponibilidade de pizzas do calabresa para dar ao usuário a resposta mais apropriada dependendo da informação retornada por esse serviço, como “Desculpe, estamos sem calabresa hoje :/ Gostaria de provar nossa pizza de peperoni?” ou “Boa pedida! Nossa pizza de calabresa é preparada com os melhores ingredientes. Posso confirmar o seu pedido?”.

    Em outros cenários, a execução de ações específicas pode não ser necessária para a intenção em questão. Nesse caso, o sistema pode fornecer uma resposta estática, pré-cadastrada no momento da criação do chatbot. Por exemplo, se o usuário pergunta “Qual o número de telefone da loja?”, o sistema pode simplesmente responder o número da loja, caso haja apenas uma, como em “Você pode falar conosco através do número (11) 1234-5678”. Para tornar a interação mais natural, é comum que sejam fornecidos vários exemplos de resposta estática para uma mesma intenção, de forma que o usuário receba variações da mesma resposta quando uma intenção é detectada múltiplas vezes.

    Wrapping up

    Chatbots são sistemas bastante complexos e esse artigo não tem a pretensão de abordar o tema de forma a abranger todas as suas nuances e especificidades técnicas, fornecendo apenas uma visão geral do que compõe esse tipo de sistema. Vale ressaltar também que foquei aqui em apresentar o funcionamento de chatbots de roteiro pré-determinado, que são o tipo mais comum. Apesar das limitações que esse tipo de chatbot possui, como a necessidade de antecipar as entradas do usuário para mapear as ações e respostas correspondentes, existe muito trabalho e inteligência por trás para criar sistemas capazes de identificar intenções e entidades a partir de exemplos textuais e fazê-los eficientes para que possam ser utilizados por milhares ou até milhões de usuários.

    Aqui no Datalab, além de explorar como um motor de chatbot pode ser construído, exploramos quais são as potenciais aplicações desse tipo de tecnologia e como elas podem gerar valor para governos, empresas e pessoas físicas. O vídeo abaixo, com a nossa assistente, Sara, é um exemplo da aplicação que essa tecnologia pode ter no setor de varejo:

     

    14 de maio de 2018

    Filtre por autor