Hangout — Chatbot Pernambuco + BotCaverna — API.AI

As APIs de linguagem natural fornecem uma boa maneira de começar com interações únicas (ex. Pergunta-resposta, ação de comando)

Quando você se move para conversas, a maior parte da lógica, inclusive gerenciando o estado e alterando as ações com base nela, precisa ser implementada pelo desenvolvedor, muitas vezes de forma rígida

As APIs disponíveis são boas para a construção de MVPs, mas têm várias desvantagens (Contexto e histórico não utilizados pelos algoritmos, gerenciamento de falhas deficiente, sem otimização de diálogo, nenhuma maneira de influenciar o conhecimento especializado, menor precisão) que podem dificultar a experiência do usuário

Bots são o novo preto, todo mundo quer construir um.

Bots are the new Black

O que é o api.ai e como funciona?

Agente

O agente é o seu assistente virtual. O api.ai permite que você tenha mais de um assistente virtual.

O api.ai suporta tanto o português brasileiro como o europeu.

Em PT_BR temos algumas limitações, sendo as mais importantes:

Porém com a aquisição do Google no final do ano passado e com o anuncio do Google Assistant em português (em breve) no Google I/O, é bem provável que logo teremos novidades.

O idioma escolhido não poderá ser alterado depois de salvo. Mas você pode sempre criar mais um agente se quiser que o assistente virtual se comunique em outro idioma.

Entities

Entities são objetos que ajudam o agente a interpretar linguagem natural e não apenas frases pré-programadas.

Se você criar uma entity denominada “doce”, onde vai especificar os doces que sua loja vende e alguns sinónimos.

Intents

Os Intents mapeam todas as requisições do usuário à uma ação.

O Default Fallback Intent possui algumas frases pré-definidas que serão enviadas ao usuário caso o assistente virtual “não entenda” a requisição feita. Ele provavelmente dirá coisas como “Não entendi”, “Ainda não fui programado para responder isso”, etc.

O Default Welcome Intent possui frases de boas vindas que são mostradas ao usuário quando ele ativa o Assistente Virtual em algumas plataformas.

A tecnologia Machine Learning é utilizada em todos os Intents. Isso significa que o seu agente irá se basear em todas as frases adicionadas no “User says” para treinar e começar a entender variações ou frases semelhantes.

É possível desativar o ML em uma determinada intent, porém o agente só irá dar match com os exemplos citados no “User Says”

Fórum: https://discuss.api.ai/

Quando criamos o nosso primeiro Intent, preenchemos 3 campos: nome do Intent, User says e Response.

Response

Como você provavelmente já sabe, o campo response permite definirmos a resposta que o nosso agente dará quando o Intent for chamado. Esta resposta não precisa de ser apenas uma; o api.ai permite definir até 10 respostas sequenciais.

Até agora só conhecemos a resposta em texto, mas o nosso bot também pode responder de outras formas:

Imagem

Se você estiver a desenvolver um bot capaz de funcionar em redes sociais (Facebook Messenger, Kik, Slack ou Telegram), é provável que você queira que o seu bot seja capaz de enviar imagens aos utilizadores. E é exatamente para isso que existe a Image Response.

Note que as redes sociais têm certas limitações para imagens:

  • Facebook Messenger: só suporta jpg, png e gif (incluindo os animados);
  • Kik: só jpg e a imagem não deve exceder 1Mb;
  • Slack: só suporta jpg, png, bmp e gif;
  • Telegram: basta não exceder 5Mb.

Resposta rápida

As respostas rápidas (quick replies) oferecem-nos a possibilidade de “prevermos” a resposta do utilizador. Damos algumas opções/sugestões (no máximo 10) ao utilizador de como responder. Quando ele clica numa dessas opções, o texto dessa opção é enviado ao agente como se fosse uma requisição do utilizador.

Nas redes sociais, estas opções são mostradas como botões para facilitar a interação entre o utilizador e o agente.

Note que pelo fato de serem apresentados em botões, cada opção da resposta rápida não pode ter mais de 20 caracerteres.

Card

Com as cartas (cards), podemos permitir que o bot dê uma resposta mais completa em relação às responses anteriores.

As cartas possuem 4 elementos:

Imagem;

Título;

Subtítulo;

Botões interactivos.

Actions

Uma ação corresponde ao passo que a nossa aplicação dará quando um Intent for chamado.

Ações podem conter parametros para passar alguns detalhes extras à nossa aplicação, quando necessário. Estes parametros podem ser definidos no campo Action, quando estamos a criar um Intent na consola do api.ai

Parameters

Como já foi dito, parametros são argumentos que podem, opcionalmente, ser adicionados ao nosso Intent para que a nossa aplicação tenha mais detalhes sobre a acção que deve tomar. Estes parametros podem ser definidos automaticamente de acordo com os exemplos que você coloca automaticamente no campo “User says” ou você pode colocá-los na tabela de forma manual.

Definição automática

Quando você introduz um exemplo no campo User says que contém uma entity (tanto system como developer entity), ele automaticamente irá destacar essa entity e adicionar à tabela de parametros:

Definição de constantes

Dependendo da aplicação que estamos a desenvolver, por vezes podemos querer que a nossa acção tenha parametros constantes.

Por exemplo, se o utilizador quiser fazer a aplicação ficar muda, podemos definir o nível do volume nos parametros da acção:

Definição de padrões

Caso o nosso utilizador não especifique um certo parâmetro, as vezes o mais correcto é definirmos um valor padrão ao invés de voltar a perguntar.

Parametros obrigatórios

No api.ai é possível marcarmos parametros como required (obrigatórios) quando a nossa acção não pode ser executada sem que o utilizador especifique este parametro. Consequentemente, isto irá gerar “Árvores de decisão” (Decision trees).

Fazer referência de parametros no Text Response

Quando quisermos referenciar ao parametro utilizado na resposta do nosso bot, podemos chamá-lo colocando um $ antes do nome da variavél:

Entities são objectos que ajudam o agente a interpretar linguagem natural e não apenas frases pré-programadas.

As entities que são utilizadas em cada agente podem variar dependendo dos parametros que se espera retornar na interação com o agente. Isto significa que não é necessário criarmos entities para todas palavras do agente, criamos apenas para dados que iremos precisar.

Existem 3 tipos de entities: System entities (entities pré-criados), Developer Entities (entities definidas por nós, desenvolvedores) e User Entities (uma entity definida para cada utilizador). Neste artigo veremos apenas os primeiros 2 tipos, o User Entity será abordado em um artigo futuro.

Tipos de entities

System Entities

São entities pré-criadas pela plataforma api.ai por serem os mais utilizados/populares. Todas as entities do sistema possuem o prefixo sys.

Alguns exemplos são o sys.date que facilita quando queremos colocar uma data e o sys.phone-number para colocar números de telefone. Infelizmente, estas entities ainda não têm tradução para português. O que significa que se criarmos um agente em português, ele não irá reconhecer “oito dois oito quatro” como um número. Você pode ver a lista de todas as System Entities na documentação.

Developer Entities

Você pode criar as suas próprias entities para os seus agentes através do formulário na consola do api.ai ou fazendo upload deles no formato .csv ou .json. No artigo anterior aprendemos a criar entities na consola, por isso vamos ver como fazer upload e download de entities.

Automated Expansion

Automated Expansion (expansão automática) é uma função do api.ai que permite que o utilizador adicione mais palavras à uma entity já existente. Você já deve ter visto esta função porque ela fica logo ao lado da função “define synonyms” quando criamos uma entity.

Por exemplo, se o utilizador disser algo como “Queria encomendar um pudim”, a palavra pudim será adicionada à lista de palavras da entity doce.

Atenção: Se a opção Automated Expansion estiver activa em mais de uma entity, poderão surgir conflitos e palavras adicionadas em entities onde não deviam estar.

O que é o Processamento de Linguagem Natural?

O Processamento de Linguagem Natural (PLN) é a subárea da Inteligência Artificial (IA) que estuda a capacidade e as limitações de uma máquina em entender a linguagem dos seres humanos. O objetivo do PLN é fornecer aos computadores a capacidade de entender e compor textos. “Entender” um texto significa reconhecer o contexto, fazer análise sintática, semântica, léxica e morfológica, criar resumos, extrair informação, interpretar os sentidos, analisar sentimentos e até aprender conceitos com os textos processados.

(Jéssica Rodrigues)

São executadas 5 tarefas muito utilizadas no pré-processamento textual:

Normalização

A normalização abrange tratativas como a tokenização, transformação de letras maiúsculas para minúsculas, remoção de caracteres especiais, remoção de tags HTML/Javascript/CSS, dentre outras.

A normalização é importante por começar a estruturar o texto, já que os processamentos seguintes atuam em cima de unidades sentenciais e lexicais.

Remoção de Stopwords

Uma das tarefas muito utilizadas no pré-processamento de textos é a remoção de stopwords. Esse método consiste em remover palavras muito frequentes, tais como “a”, “de”, “o”, “da”, “que”, “e”, “do” entre outras, pois na maioria das vezes não são informações relevantes para a construção do modelo.

No caso da Análise de Sentimentos, não poderíamos remover a stopword “não”, pois traz uma conotação de negatividade para a sentença, indicando justamente o sentimento transmitido. Uma lista de stopwords pode facilmente ser encontrada disponível na internet.

Remoção de numerais

Outra remoção necessária é dos numerais presentes no texto. Eles não agregam informação relevante por não trazerem carga semântica. Remova também os símbolos que os acompanham, como “R$”, “$”, “US$”, “kg”, “km”, “milhões”, “bilhões” dentre outros.

Correção Ortográfica

Os corretores ortográficos (Spell Checkers) são muito usuais para tratar um dataset que contém erros de digitação, abreviações e vocabulário informal. Esses erros são prejudiciais por gerarem novos tokens, aumentando a esparsidade dos dados.

Stemização e Lematização

O processo de stemização (do inglês, stemming) consiste em reduzir uma palavra ao seu radical. A palavra “meninas” se reduziria a “menin”, assim como “meninos” e “menininhos”. As palavras “gato”, “gata”, “gatos” e “gatas” reduziriam-se para “gat”. A lematização reduz a palavra ao seu lema, que é a forma no masculino e singular. No caso de verbos, o lema é o infinitivo. Por exemplo, as palavras “gato”, “gata”, “gatos” e “gatas” são todas formas do mesmo lema: “gato”. Igualmente, as palavras “tiver”, “tenho”, “tinha”, “tem” são formas do mesmo lema “ter”. A vantagem de aplicar a stemização ou lematização é clara: redução de vocabulário e abstração de significado.

Meu Bot Precisa de ML?

Josh Lovejoy is a UX Designer in the Research and Machine Intelligence group at Google

Não espere que Machine aprenda a descobrir quais problemas resolver

A aprendizagem de máquinas e a inteligência artificial têm muita excitação em torno deles agora. Muitas empresas e equipes de produtos estão saltando diretamente em estratégias de produtos que começam com o ML como solução e ignoram o foco em um problema significativo para resolver.

Pergunte-se se ML abordará o problema de uma maneira única

Uma vez que você identificou a necessidade ou as necessidades que deseja abordar, você quer avaliar se a ML pode resolver essas necessidades de maneiras únicas. Existem muitos problemas legítimos que não requerem soluções ML.

Um desafio neste momento no desenvolvimento do produto é determinar quais experiências requerem ML, que são significativamente aprimoradas pelo ML e que não se beneficiam da ML ou são mesmo degradadas por ela. Muitos produtos podem se sentir “inteligentes” ou “pessoais” sem ML. Não seja puxado para pensar que só são possíveis com ML.

Aqui estão três exemplos de exercícios que temos equipes para caminhar e responder sobre os casos de uso que eles estão tentando abordar com ML:

Descreva a forma como um “especialista” humano teórico pode realizar a tarefa hoje.

Se o seu perito humano deveria realizar esta tarefa, como responderia a eles para que eles melhorassem pela próxima vez? Faça isso para as quatro fases da matriz de confusão.

Se um ser humano executasse essa tarefa, quais os pressupostos que o usuário queria que eles fizessem?

Pesar os custos de falsos positivos e falsos negativos

Seu sistema ML cometerá erros. É importante entender como são esses erros e como eles podem afetar a experiência do produto com o usuário. Em uma das questões do ponto 2, mencionamos algo chamado de matriz de confusão. Este é um conceito-chave no ML e descreve o que parece quando um sistema ML o corre bem e o faz errado.

Referencias:

Amazon’s Alexa — https://developer.amazon.com/alexa

Google’s Api.ai — https://api.ai/

Microsoft’s Luis — https://www.luis.ai/

Apple’s SiriKit — https://developer.apple.com/sirikit/

IBM’s Watson — https://www.ibm.com/watson/developercloud/nl-classifier.html

Facebook’s Wit — https://wit.ai/

Snips — https://snips.ai/

Converse AI — http://www.converse.ai/

Artigo do Rosário Pereira Fernandes — Machine Learning — Entrando no mundo dos assistentes virtuais

https://medium.com/@rosariopfernandes/ml-b7eba66e0e03

Artigo da Caroline Wisniewski — Benchmarking Natural Language Understanding Systems

https://snips.ai/content/sdk-benchmark-visualisation/

Artigo do Jess Holbrook — Human-Centered Machine Learning

https://medium.com/google-design/human-centered-machine-learning-a770d10562cd

Artigo do Neil Balthaser — Fight! Api.ai vs. Converse.ai

https://chatbotsmagazine.com/fight-api-ai-vs-converse-ai-8e44e29b5fb

Artigo da Jéssica Rodrigues — O que é o Processamento de Linguagem Natural?

https://medium.com/botsbrasil/o-que-%C3%A9-o-processamento-de-linguagem-natural-49ece9371cff

Artigo do Pavlo Bashmakov — Advanced Natural Language Processing Tools for Bot Makers — LUIS, Wit.ai, Api.ai and others

https://stanfy.com/blog/advanced-natural-language-processing-tools-for-bot-makers/

Artigo do Abraham Kang — Understanding the Differences Between Alexa, API.ai, WIT.ai, and LUIS/Cortana

https://www.linkedin.com/pulse/understanding-differences-between-different-ai-platforms-abraham-kang

Artigo do Stefan Kojouharov — A Review of Natural Language APIs For Bots

https://medium.com/@Conversate/natural-language-apis-for-bots-e791f090e32f

Confusion matrix

https://en.wikipedia.org/wiki/Confusion_matrix

)

    Jackson F. de A. M.

    Written by

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade