Classificação natural de linguagem e chatbots

Robô com um balão de mensagem sob a cabeça

Classificação natural de linguagem e chatbots

De uma forma resumida e simplificada, pode-se afirmar que NLP (Natural Language Processing) é um campo da Inteligência Artificial através do qual sistemas atuam conjuntamente para lidar com interações entre humanos e computadores.

Embora os conceitos pareçam confusos, existe uma área específica da NLP, preocupada exclusivamente com a compreensão e entendimento da linguagem humana por computadores, a NLU (Natural Language Understanding). Uma das aplicações mais típicas para essa necessidade é a transformação de linguagem humana em solicitações ou comandos, como é o caso de diálogos de humanos com chatbots ou para comandos de texto ou de voz em dispositivos com Alexa (*) ou SIRI (apple), por exemplo.

A compreensão da estrutura das expressões da linguagem humana, determinando-se “o que um humano quer”, em alguns casos pode ser chamada de classificação de linguagem natural (Natural Language Classification). Essa nomenclatura — classificação de linguagem — será usada como referência em alguns pontos, na sequência deste conteúdo.

* Alexa é um dispositivo de reconhecimento de voz popular, desenvolvido e comercializado pela Amazon. Ele tem uso doméstico, e é usado para ligar, desligar ou controlar equipamentos domésticos em geral.

Elementos-chave na classificação de linguagem

Intenção

O primeiro elemento a ser identificado em uma expressão da linguagem humana é a intenção. Uma intenção, como a palavra indica, representa o objetivo ou a finalidade de uma expressão. Por exemplo, se um humano diz “por favor, apague a luz”, a intenção claramente identificada é apagar a luz.

Embora isto pareça muito simples para nós, humanos, é diferente para os computadores. É necessário realizar um treinamento planejado e abrangente para que uma intenção, como essa do exemplo, seja compreendida por um sistema.

O principal motivo dessa complexidade está no fato de que as pessoas expressam uma necessidade, ou uma intenção, de diversas maneiras. Se todas as pessoas, ao desejarem apagar a luz, falassem ou escrevessem exatamente dessa forma, a programação da compreensão pelos computadores seria muito simples. Para esse exemplo ilustrativo, a mesma intenção poderia ser expressa de diversas formas:

1-Por favor, apague a luz (exemplo inicial)

2-Apaga a luz

3-Desliga a luz

4-Está claro demais

5-Quero ficar no escuro

Nos três primeiros exemplos, temos verbos que teoricamente indicam diretamente a intenção, e ainda temos a palavra ‘luz’ presente. Podemos supor que as palavras ‘apague’ e ‘apaga’ são parecidas e que é óbvio o entendimento. Em programação de computadores não existem suposições, então teria que ser validada a comparação das strings ‘apag’ e ´deslig´ como comandos para apagar a luz.

Ao observarmos as duas últimas expressões dos exemplos (4 e 5), contudo, não vamos encontrar as strings ‘apag’ e ‘deslig’, nem sequer um verbo que indique uma intenção direta de apagar a luz. É aí que aumentam enormemente a complexidade e o desafio, e o objetivo do campo da NLU, com a compreensão de linguagem natural.

Podemos ilustrar um grau maior de complexidade da determinação de intenção com outros dois exemplos:

Exemplo 1 — Gostaria de saber se o equipamento funciona em 110V

Exemplo 2 — Gostaria de saber por que o equipamento não liga em 110V

Na primeira expressão a intenção é saber ‘se o equipamento vai ligar’, ou seja, se poderá ser ligado em 110V. Já no segundo exemplo a intenção é saber ‘por que o equipamento não ligou’, ou seja, por que não está funcionando. Uma pequena variação na forma de escrever uma expressão em linguagem humana muda totalmente a intenção da expressão. Muitas vezes a forma com que os humanos se comunicam gera ambiguidade de intenção.

Revisando, a intenção indica o que o humano deseja com sua expressão, e o desafio dos sistemas de NLU é justamente extrair essa intenção.

Entidade

Entidade é o complemento, ou o objeto de uma intenção. No exemplo anterior, a intenção era apagar, ou desligar. A luz, no caso, seria a entidade, como um complemento da intenção. Ela é importante porque uma outra solicitação expressa por um humano poderia ser desligar o rádio, e neste caso poderiam ser solicitados as seguintes variações de intenções e entidades:

-Desligar a luz

-Desligar o rádio

Ambas as expressões têm como intenção apagar, ou desligar. Só que uma delas é relacionada à luz e a outra ao rádio.

Surge então uma variação no conceito. Citamos anteriormente que as pessoas expressam suas intenções de formas variadas e personalizadas. Isso aplica-se também as entidades. Uma pessoa poderia dizer ‘desliga o som’, enquanto outra poderia citar ‘desliga o home-teather’, ou ‘desliga o rádio’. Cabe ao sistema NLU compreender todas as variações na forma com a qual alguém dá nome ao aparelho de som.

Intenções e entidades em chatbots

Embora os exemplos acima possam parecer relacionados somente a interface de voz, isto é, no entendimento dos computadores sobre o que os humanos falam, o processamento de NLU para a comunicação escrita é a mesma. Tratando-se de voz, existe um sistema que transforma a fala em texto, e no fim das contas sempre vai ocorrer o processamento de NLU em texto.

No caso de chatbots, a NLU aplica-se para a compreensão do que os humanos escrevem quando interagem com um assistente virtual, o que geralmente relaciona-se a dúvidas ou solicitações.

Um exemplo típico poderia ser visto com o seguinte diálogo:

[chatbot] Olá, em que posso ajuda-lo?

[humano] Gostaria de saber o prazo de entrega do produto x.

Para essa interação, a expressão escrita pelo humano seria analisada e classificada da seguinte forma:

Intenção: saber o prazo de entrega

Entidade: produto x

Este é um exemplo bastante simples de extração de intenção e entidade. Veremos a seguir que podem surgir situações de maior complexidade.

Abrangência e profundidade de classificação

A abrangência e a profundidade da classificação dependem do nível de especialização e assertividade que deseja-se para o chatbot.

A abrangência relaciona-se ao alcance horizontal, ou seja, à quantidade de assuntos ou áreas de conhecimento nas quais um chatbot vai ser treinado. Como regra geral, recomenda-se que sejam criados chatbots especialistas por área de conhecimento, o que facilita o planejamento e implementação do treinamento. Chatbots muito abrangentes tendem a ter treinamento complexo e sua assertividade depende de muito tempo de amadurecimento no ciclo ‘planejamento, criação de conteúdo, validação e atualização’. Na área de chatbots, esse tipo geralmente é chamado AMA — pela sigla em inglês, Ask Me Anything. AMA significa, em outras palavras, que um chatbot deveria estar apto a responder qualquer pergunta sobre qualquer assunto, mesmo que restrito a um certo contexto. O ideal, e recomendado, é que se planeje um chatbot que relacione-se a uma certa abrangência e um contexto limitado, para que seja mais viável o seu treinamento. Por exemplo, ao invés de planejar-se um chatbot para interagir com clientes sobre qualquer área ou tipo de dúvida, é mais adequado pensar-se em treinamentos distintos para dúvidas comerciais, dúvidas técnicas e sugestões sobre produtos. Isso não implica, necessariamente, em criar-se 3 chatbots distintos, mas sim em realizar o planejamento e treinamento de forma segmentada e especializada.

A profundidade de classificação de linguagem tem a ver com o detalhamento ou especialização do conjunto intenção/entidade(s). Quanto mais detalhado for o nível de diferenciação de entidades nas intenções, maior vai ser a quantidade de treinamento a ser gerada para o chatbot. Para o nível de abrangência, não existe uma regra, cada caso pode ser definido como sendo menos ou mais detalhado. O que vai mudar é a quantidade de esforço para as etapas de ‘planejamento, criação de conteúdo, validação e atualização’.

O conceito de profundidade pode ser melhor compreendido através dos exemplos a seguir.

Para a seguinte expressão humana, que representa uma dúvida:

Gostaria de saber quais as condições para pagamento à vista

Poderiam ser criados esquemas diferentes de classificação, de menor ou maior profundidade.

A opção de menor profundidade implicaria em classificar-se somente uma intenção relacionada a “dúvida sobre condições de pagamento”. Para essa intenção, única, seria criado um conteúdo também único e genérico que explicasse todas as condições de pagamento praticadas, em um único texto.

Em contrapartida, pode-se desejar aumentar a profundidade e criar um conteúdo específico para a intenção “dúvida sobre condições de pagamento” e para a entidade “pagamento à vista”. O conteúdo seria mais especializado, no caso, direcionado ao pagamento à vista. Obviamente esta parece a melhor opção, então por que não utilizá-la?

Temos que lembrar que desta forma teremos que pensar também nas outras entidades relacionadas às demais condições de pagamento, e criar conteúdo para elas. Provavelmente existam condições para pagamento com cartão, pagamento parcelado, pagamento com débito em conta e assim por diante. Todas essas modalidades seriam entidades que precisariam ter conteúdo criado.

Ciclo de treinamento de Chatbots

O treinamento de chatbots consiste de várias etapas e atividades. Anteriormente citamos as palavras ‘planejamento, criação de conteúdo, validação e atualização’, que representam as etapas principais no treinamento de chatbots.

O treinamento de chatbots é um ciclo contínuo de etapas e atividades, de certa forma similar ao PDCA.

Ferramentas de classificação de linguagem natural

Embora um caminho a ser escolhido possa ser o de desenvolver-se um sistema próprio de classificação de linguagem (o que é extremamente complexo e requer pesquisa aplicada e atualização constantes), o mais usual é a utilização de sistemas disponibilizados como serviço por grandes desenvolvedores de software. Esta utilização é feita na forma de consumo de serviços, através da integração via API´s (Application Programming Interface, uma forma padronizada através das quais sistemas interagem entre si).

Dois importantes sistemas de classificação de linguagem são oferecidos gratuitamente, sendo suportados pelo Google e pelo Facebook. São eles, respectivamente Dialog.flow (até recentemente chamado API.AI) e WIT.AI.

Existem ainda soluções pagas, como as oferecidas pela Microsoft (LUIS — Language Understanding Intelligent Services) e pela IBM, dentro da oferta de serviços cognitivos do Watson.

Todas elas apresentam o mesmo propósito, que é receber uma expressão, analisa-la e retornar uma classificação de intenção e entidade(s). O que varia é a forma em que cada uma é configurada e treinada, bem como o nível de assertividade das classificações.