Boas práticas ao criar chatbots com inteligência artificial — Intenções & Entidades

Renato dos Santos Rosa Leal
Bots Brasil
Published in
6 min readJun 25, 2018

Que um chatbot pode ser algo muito benéfico para uma empresa todo mundo já sabe, talvez você tenha até tentado criar um pra você ou pra sua empresa: é nesse momento que surgem diversas dúvidas:

Será que estou fazendo da melhor forma? Porque ele não tá respondendo tão bem? Tem como acelerar o processo?

As dicas que darei aqui são um compilado de boas práticas que encontrei ao conversar com diversas equipes e empresas que desenvolvem com Watson, elas não são regras e não se aplicam em todos os casos mas provavelmente poderão te ajudar.

Entidades

Um "erro" comum que vejo em muitos chatbots criado com o Watson é que eles não utilizam entidades, seja porque já foram criados a um tempo ou por desconhecimento dessa funcionalidade.

A verdade é que, por mais que não sejam obrigatórias, elas trazem uma série de benefícios ao seu modelo:

Dica #1 — Entidades melhoram o entendimento das intenções também!

Ao criar entidades e sinônimos esses novos conteúdos também são utilizados para melhorar o modelo de classificação (é só ver que o modelo re-treina).

É possível também referenciar diretamente entidades ao criar intenções, basta inserir um exemplo do tipo "O que significa @ValorEntidade?" (mas para isso você deve tomar alguns cuidados).

Leia mais sobre essa funcionalidade no item "Directly referencing an @Entity as an intent example" desta página.

Vale mencionar que as entidades não farão milagre pelo seu modelo, você ainda precisará ter bons exemplos e uma boa separação dos temas.

Dica #2 — Entidades dão capilaridade ao modelo

Imagine a seguinte situação: você possui duas intenções distintas: uma para saber o saldo da conta corrente (#saldoContaCorrente) e outra para saber o saldo da poupança (#saldoPoupança).

É bem provável que essas duas intenções compartilhem exemplos muito parecidos não é mesmo?

  • Quero saber o saldo da minha conta poupança (#saldoPoupança)
  • Quero saber o saldo da minha conta corrente (#saldoContaCorrente)

Nos exemplos acima temos dois exemplos distintos em intenções separadas que compartilham 7 das oito palavras que possuem. Isso vai gerar um pouco de confusão ao modelo, ele provavelmente ainda acertará se você explicitar a palavra "poupança" ou "corrente" mas e se falar algo um pouco diferente?

Uma abordagem interessante pode ser unificar essas duas intenções em uma mais geral (#saberSaldo) e criar uma entidade para os tipos de contas @contas com os valores "poupança" e "conta corrente".

Assim ele possuirá um lugar único para falar de saldo e não dois, sendo assim deve retornar um valor mais alto de confiança no geral.

Isso também ajuda o modelo uma vez que você consegue reduzir a quantidade de intenções pela metade (ou mais) utilizando uma abordagem deste tipo.

Dica #3 — Entidades ajudam na desambiguação.

Imagine que ainda estamos no modelo original com duas intenções separadas e o usuário falou:

  • Quero saber o saldo da minha conta.

Com qual intenção você retorna? Você até poderia calcular a diferença da confiança entre as intenções e retornar que não entendeu mas isso daria muito trabalho.

Poderia também começar a conviver com três intenções diferentes, uma geral e duas específicas mas isso diminuiria a acurácia do modelo e daria muito mais trabalho ao continuar o treino do modelo pois aumenta a chance de erro humano ao colocar um novo exemplo na intenção errada e exigiria mais frases de exemplos para chegar em um nível aceitável.

A mesma solução usada no item anterior pode ser aplicada aqui, isso facilita bastante a construção do nosso nó de diálogo:

Com uma intenção única para o tema basta que você habilite múltiplas respostas e filtrar cada resposta por entidade, deste modo poderá resolver todo o seu problema em apenas um nó.

Dica #4 — Entidades aceleram a construção do seu chatbot

O último ponto que vou listar sobre os benefícios de utilizar entidades é que ao fazê-lo você poderá adicionar novos conteúdos muito mais rapidamente.

Ainda sobre o exemplo do saldo, imagine que queremos consultar o saldo de um novo produto lançado: a "conta investimento".

No modelo tradicional precisaríamos adicionar uma nova intenção, pensar em 5 a 10 exemplos novos para essa intenção e depois alterar o diálogo.

No modelo proposto você precisará apenas adicionar o termo "conta investimento" como um novo valor da entidade conta e alterar o diálogo.

CUIDADO! Porque você não deve usar entidades!

O título dessa seção pode parecer um pouco contraditório considerando tudo que mostrei até o momento mas é muito importante que você conheça os dois lados da moeda.

Existe um GRANDE ponto negativo ao utilizar a abordagem proposta acima e cabe a você determinar se entidades vão lhe ajudar ou não.

Eu acredito que não existe muito certo e errado ao construir os chatbots, são escolhas e o importante é você estar ciente das ramificações das suas escolhas.

Imagem retirada deste post.

Mas então qual é o tal problema em utilizar entidades para criar um chatbot?

O problema é que usar uma abordagem baseada em entidades pode "engessar" o seu bot.

Um dos motivos para que o Watson entenda bem as perguntas enviadas é que ele já foi treinado com o português em geral e sendo assim conhece quais as palavras que são próximas a outras, e isso ocorre no nível das intenções. Sendo assim ao utilizarmos entidades para fazer a especialização de uma intenção acabamos tirando um pouco da flexibilidade do bot também.

Na prática:

Imagine que você possui uma intenção #adotarAnimal e a entidade animal com os valores cachorro e gato.

O que acontece ao fazer uma pergunta sobre uma raça específica de cachorro que não foi mapeada? Ele não saberá responder pois conhece apenas os valores fixos de "cachorro" e "gato" e não suas raças.

A única forma de fazer funcionar seria colocar todas as raças de cachorro e gato como entidades ou sinônimos só que isso acaba sendo muito exaustivo.

Com o modelo antigo teríamos duas entidades: #adotarCachorro e #adotarGato e com isso não precisaríamos explicitar todas as raças pois no treinamento prévio do Watson ele já aprendeu que a palavra cachorro e o termo "pastor alemão" são linguisticamente próximos em um contexto de animais.

Conclusão

Vimos aqui vários prós e contras para a utilização de entidades, cabe a você decidir se o contexto que você possui pode ser modelado em uma abordagem como a que foi apresentada aqui.

Eu particularmente acredito que essa abordagem é muito útil nas seguintes situações:

  • Quando a entidade é bem definida e possui poucas variações.
  • Quando é algo que não está presente no português em geral, é algo específico do domínio (Watson não aprendeu previamente).

Essas duas situações são bastante frequentes em contextos empresariais como por exemplo ter uma lista de produtos definida como entidades e portanto podem ser aplicadas com bastante sucesso em bots especialistas.

Vale também lembrar que você pode ter um mesmo chatbot utilizando as duas abordagens, cada uma em seu conjunto de conhecimento mais adequado.

--

--