https://a.storyblok.com/f/270183/62251/571cf8b9e9/intent-classification-hierarchy.png

Como construir uma hierarquia de classificação de intenções

Publicado em March 18, 2024

Tempo de leitura: 11 minutos

Os agentes de IA conversacional são uma ótima maneira de economizar o recurso mais importante da sua empresa: o tempo dos funcionários! Esses agentes são como seções interativas de perguntas frequentes, só que muito mais flexíveis. Quando desenvolvidos corretamente, eles podem ajudar significativamente a melhorar a experiência do cliente. Mas a questão é: como desenvolvê-los corretamente?

Felizmente, a equipe do AI Studio já fez o trabalho pesado por você! Conseguimos melhorar consideravelmente o desempenho de grandes agentes de IA (mais de 50 intenções). Essas técnicas resultaram, em alguns agentes, em um aumento de 55% nas chamadas bem-sucedidas e uma redução de 83% nas solicitações para agentes humanos.

Esta publicação abordará como criar uma hierarquia no Classificação de Intenções para melhorar o desempenho dos seus agentes no direcionamento dos usuários para a intenção correta. Os tópicos incluirão práticas recomendadas gerais de NLU, exemplos de como criar uma classificação hierárquica e dicas sobre como projetar seu agente de IA conversacional no AI Studio.

Melhores práticas de NLU

O que é NLU? A Compreensão da Linguagem Natural, ou NLU, é o processo que permite que um computador compreenda a intenção de um texto. A NLU é a forma como um computador entende o que um usuário quer dizer quando se comunica com ele. O software faz isso por meio da Classificação de Intenções e da Extração de Entidades.

Sobreposição de intenções e ambiguidade

A classificação de intenções parece bem simples, não é mesmo? O agente apenas analisa a entrada do usuário e a mapeia para as intenções definidas por você. Mas, na prática, é muito fácil confundir o modelo.

Considere o cenário de um agente desenvolvido para uma instituição financeira, como um banco. Nesse contexto, os clientes podem iniciar diversas interações relacionadas a empréstimos, como fazer uma solicitação de empréstimo, verificar o andamento do empréstimo ou buscar informações gerais sobre empréstimos.

O desafio surge quando termos como “empréstimo” ou “hipoteca” são utilizados em diversos contextos, como em frases como “conversar com um representante de hipotecas” ou “obter uma oferta de hipoteca”. Esse uso generalizado das mesmas palavras-chave dentro de um único nó de classificação pode potencialmente resultar em erros de classificação por parte do modelo.

Para mitigar esse problema, propomos a implementação de uma estrutura hierárquica com duas camadas, composta essencialmente por dois nós de classificação. A primeira camada se concentraria na classificação do conceito central, como “empréstimo” ou “hipoteca”, enquanto a segunda camada se especializaria em identificar a ação ou intenção específica associada à consulta do usuário (solicitação, status, representante etc.). Essa abordagem hierárquica visa aprimorar a precisão do modelo e reduzir a probabilidade de classificação incorreta de intenções semelhantes, mas contextualmente distintas.

Intent Overlap & AmbiguityIntent Overlap & Ambiguity

Consistência do conjunto de treinamento

Além disso, como os conjuntos de treinamento que compõem cada intenção terão expressões muito semelhantes, precisamos ser extremamente consistentes. Adicionar palavras ambíguas aos seus conjuntos de treinamento pode causar comportamentos inesperados se aplicadas de forma inconsistente.

Por exemplo, imagine que sua intenção (Empréstimo) contenha a expressão “Quero solicitar um empréstimo”. Agora, um usuário pergunta ao seu agente: “Quero saber o status do meu empréstimo”, o que deveria direcioná-lo para “Status (de empréstimo)”. A menos que seu conjunto de treinamento para “Status” inclua uma expressão com as palavras “quero” e “empréstimo”, há uma probabilidade muito alta de que ele seja direcionado incorretamente para “Solicitação”. Para resolver esse problema, seus dados de treinamento precisam ser extremamente consistentes em relação a palavras de preenchimento ou de apoio ambíguas. Portanto, ou adicione-as em todos os lugares ou remova-as em todos os lugares. Muitas vezes, é mais fácil omitir.

Training Set ConsistencyTraining Set Consistency

Estudo de caso sobre conjuntos de treinamento: Vendas x Suporte ao Cliente

Agora imagine que quiséssemos adicionar duas novas intenções ao nosso agente “Banco”: “Retorno de chamada” e “Vendas”. A intenção “Retorno de chamada” é para usuários que desejam que um representante de atendimento ao cliente ligue de volta, e a intenção “Vendas” é para que alguém do departamento de Vendas entre em contato com eles.

Inconsistent Training ExampleInconsistent Training Example

Esperamos que todos os itens a seguir sejam classificados como “vendas”:

  • Gostaria de falar com um representante de vendas

  • gostaria de falar com um representante de vendas

  • com um representante de vendas

  • representante de vendas

No entanto, como podemos ver no diagrama, as duas primeiras entradas do usuário que contêm “quero falar com” acabam sendo classificadas como “retornar a ligação”. Isso ocorre porque as palavras “falar com” são mais semelhantes a “retornar a ligação” do que a “vendas”.

A solução é adicionar dados de treinamento à nossa intenção “vendas” que contenham a expressão “quero falar com”. Esses dados devem estar na mesma proporção que os dados de treinamento semelhantes no conjunto de treinamento “retorno de chamada”.

Em um agente mais complexo, essas duas intenções podem parecer muito semelhantes em comparação com outras intenções. Veremos em breve como a classificação hierárquica ajudará nosso agente a chegar ao ponto em que ele possa fazer essa distinção mais detalhada.

O que é classificação hierárquica?

Sanitizar nossas intenções para evitar sobreposições entre elas e garantir que nossos conjuntos de treinamento sejam consistentes é um bom começo para melhorar a classificação, mas, assim que começarmos a ter agentes com muitas intenções, isso não será suficiente, já que o mundo está repleto de sobreposições inevitáveis. E esses usuários incômodos nunca se comportam como queremos que se comportem!

A classificação hierárquica auxilia nesses agentes de grande escala, pois cria níveis de classificação para concentrar a classificação em apenas uma variável ou tópico por vez. Ao classificar em etapas, o agente se torna mais eficaz ao categorizar as intenções em grupos com base em seus principais diferenciais. O agrupamento com base nos maiores diferenciais ajuda a eliminar sobreposições e ambiguidades.

Como agrupar intenções em uma classificação hierárquica

Dividir nossa classificação em etapas pode parecer simples, mas logo percebemos que existem diferentes maneiras de agrupar as intenções. Podemos agrupá-las tanto pelos substantivos quanto pelos verbos.

Os substantivos são os itens do seu agente sobre os quais um usuário pode fazer perguntas. Pense neles como os objetos diretos da solicitação do usuário. Na maioria das vezes, são os produtos ou serviços que sua empresa oferece. Exemplos de substantivos seriam “check-out tardio”, “pacote de aniversário” e “consulta individual”.

Os verbos, por outro lado, representam a ação que alguém deseja realizar sobre o substantivo. Considere as diferenças entre as solicitações dos clientes: “FAZER uma reserva”, “CANCELAR uma reserva” e “ALTERAR uma reserva”.

Estudo de caso: Agrupamento por substantivos versus verbos

Imagine que ampliemos nosso cenário bancário. Em vez de oferecer apenas empréstimos, queremos também começar a oferecer seguros. No caso dos seguros, também oferecemos ao usuário a opção de solicitar um seguro, verificar o status do seguro e obter informações gerais sobre seguros. Nosso classificador agora precisa comparar as entradas do usuário com uma grande quantidade de dados de treinamento, que, por natureza, começarão a se sobrepor.

Esse é exatamente o cenário em que a hierarquia melhorará o desempenho do nosso agente. O primeiro passo é agrupar nossos tópicos. Neste exemplo, temos algumas maneiras de agrupar os tópicos. Poderíamos agrupá-los por produto ou por serviço.

Este diagrama ilustra como poderíamos agrupar por verbos:

Hierarchy Grouped By VerbsHierarchy Grouped By Verbs

Embora os grupos façam sentido do ponto de vista lógico e possamos passar pelo classificador inicial com bons resultados, o que acontecerá na segunda etapa da classificação? Como vimos anteriormente, o classificador terá dificuldades na segunda rodada, pois é provável que haja alta ambiguidade ao comparar itens que se assemelham a entradas do usuário, como “Instruções de Empréstimo” e “Instruções de Seguro”. Nesses casos, haverá grande sobreposição nos conjuntos de treinamento e precisaremos ser muito meticulosos para manter a consistência dos dados.

Agora, vamos tentar ver o que acontece quando agrupamos as intenções por substantivos:

Hierarchy Grouped By NounsHierarchy Grouped By Nouns

O que vemos aqui é que, além de eliminarmos uma camada de complexidade ao diferenciar imediatamente entre Suporte e Vendas, criamos, o que é mais importante, agrupamentos na segunda rodada que são muito mais fáceis de classificar. Em cada grupo de Empréstimos e Seguros, cada intenção pode ser simplificada para apresentar muito pouca sobreposição, como fizemos anteriormente.

Como criar uma classificação hierárquica

Agora que você já entendeu a teoria, vamos partir para um guia prático.

Passo 1: Reunir ou criar um conjunto de treinamento idealizado

Se você tem dados do mundo real, isso é ótimo — você já está um passo à frente! Passe diretamente para a etapa 2; você pode se concentrar nos dados de treinamento principais e deixar de lado quaisquer valores atípicos por enquanto.

Caso contrário, imagine que seus usuários falem sem usar palavras de preenchimento ou palavras extras desnecessárias. Agora, anote todas as expressões dos usuários que vierem à sua mente. Esse é o seu conjunto de treinamento idealizado.

  • Imagine todos os sinônimos possíveis para seus produtos/serviços.

    • Exemplo: quarto/reserva/agendamento/estadia

Etapa 2: Organize seus dados idealizados em grandes grupos

Assim como organizamos os tópicos do “Bank” em grupos amplos em torno de substantivos, você também deve agrupar seus tópicos em categorias amplas de substantivos ou locuções substantivas. Nesta fase, você já pode começar a identificar os verbos de apoio.

No mundo real, os usuários se comportam um pouco como homens das cavernas. Muitas vezes, eles respondem com palavras isoladas, sendo muito mais comum o uso de substantivos do que de verbos. Agrupar as palavras em torno de substantivos levará a um desempenho muito melhor.

Onde está o maior potencial para alta ambiguidade? Para os casos de alta ambiguidade, adicione dados de treinamento para padronizar e criar frases uniformes entre os diferentes grupos. Assim como você viu no exemplo das intenções “Vendas” e “Retorno de Chamada” acima, normalize os dados de treinamento para grupos com alta ambiguidade.

Etapa 3: Lidar com os valores atípicos

Depois de resolver a maioria dos casos de uso, você pode perceber que ainda há algumas intenções que não se encaixam nos seus tópicos de escopo amplo. Onde você deve incluí-las?

Você deve adicionar essas intenções no momento em que elas têm maior probabilidade de serem rejeitadas pelo seu modelo. Suponha que você tenha um agente para um nutricionista e que uma de suas intenções seja “Alimentos Saudáveis”. No entanto, um usuário pergunta: “Posso pedir uma pizza?”. É muito provável que o modelo direcione o usuário para a intenção “Alimentos Saudáveis”, mesmo que uma pizza não deva ser incluída nessa categoria. Veja o diagrama:

Classification Hierarchy: Nutritionist ExampleClassification Hierarchy: Nutritionist Example

Nossa solução é criar uma nova intenção “negativa” para capturar o comportamento padrão e encaminhá-la adequadamente. Assim, criamos uma intenção chamada “Alimentos Não Saudáveis” que irá capturar esses casos “negativos” e direcioná-los para o fluxo correto. Nossa classificação atualizada:

Classification Negative Intent ExampleClassification Negative Intent Example

Considerações sobre design no AI Studio

Como usar subfluxos no AI Studio

O AI Studio facilita o início rápido e permite começar a criar agentes com nós do tipo “arrastar e soltar”. No entanto, à medida que seu agente começa a crescer, fica muito difícil acompanhar dezenas ou centenas de nós. Não só a organização do agente se tornará incontrolável, como o Studio começará a ficar lento na janela do navegador, ao carregar um grande número de nós.

É melhor se antecipar a esses problemas planejando seu agente com antecedência e utilizando o recurso Subfluxo. De acordo com as melhores práticas, cada intenção deve ter seu próprio subfluxo. Cada um desses subfluxos se unirá no nível de um grupo de tópicos. Cada um desses grupos, por sua vez, fluirá para um nível principal. Criar uma classificação hierárquica antes de começar a trabalhar facilita muito a organização dos seus subfluxos e ajuda a evitar a acumulação de dívida técnica no futuro.

Repetição de intenções em vários fluxos

Depois de criar a primeira versão do seu agente, você pode perceber que sua hierarquia apresenta “vazamentos”. Um pequeno número de usuários pode acabar, acidentalmente, no fluxo errado. Em vez de se dar trabalho tentando reprojetar o modelo de hierarquia perfeito, basta “seguir o fluxo!”.

Por exemplo, considere este caso em que um hotel oferecia um pacote de restaurante premium chamado “Eagles Nest”. Os usuários perguntariam por uma “oferta premium do hotel” ou usariam outra terminologia, pois não sabem que se chama “Eagles Nest”. Havia um classificador de nível superior para o “Hotel” e outro para o “Eagles Nest”. Havia tantos dados de treinamento para o “Hotel” que as consultas dos usuários frequentemente acabavam no “Hotel” em vez de no “Eagles Nest”. Assim, em vez de reprojetar o agente inteiro, podemos adicionar um subfluxo no Hotel, que então redireciona para o Eagles Nest. No agente final, esse subfluxo pode estar em três ou quatro lugares diferentes, pois tudo depende de como alguém possa solicitá-lo.

Tratamento de consultas amplas

Além de os usuários fornecerem entradas excessivamente simplistas, muitas vezes eles mencionam o assunto sobre o qual têm uma dúvida, em vez de formular uma pergunta detalhada. Uma ótima maneira de lidar com isso e melhorar a experiência do usuário é criar uma intenção “catch” no nível mais alto da sua classificação.

Por exemplo, em vez de dizer: “Quero marcar uma consulta com o Dr. Smith para uma cirurgia”, eles dirão: “Dúvida sobre agendamento” ou “Dúvida sobre cirurgia”.

Question Deflection ExampleQuestion Deflection Example

Constatamos que a inclusão dessa opção genérica para receber perguntas ajudou a transmitir aos usuários a confiança de que o agente virtual seria capaz de ajudá-los.

Conclusão

Agora que você já viu o poder da Hierarquia de Classificação nos agentes de IA conversacional, pode partir para tornar seus agentes muito mais eficientes na hora de responder aos usuários! Lembre-se destas etapas e você será o herói da sua empresa:

  1. Analisar os dados de treinamento

  2. Organize os dados e identifique onde há potencial para alta ambiguidade

  3. Criar uma classificação hierárquica

  4. Agente de expansão

  5. Teste, teste, teste

Se você gostou deste artigo, conte para a gente no Vonage Developer no Slack da Comunidade Vonage. Esta postagem foi inspirada por uma pergunta de um membro da comunidade! Você também pode nos seguir no X, antes conhecido como Twitter, para ficar por dentro das últimas notícias sobre a API da Vonage.

Recursos adicionais

Compartilhar:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovDeveloper Advocate

Benjamin Aronov is a developer advocate at Vonage. He is a proven community builder with a background in Ruby on Rails. Benjamin enjoys the beaches of Tel Aviv which he calls home. His Tel Aviv base allows him to meet and learn from some of the world's best startup founders. Outside of tech, Benjamin loves traveling the world in search of the perfect pain au chocolat.