Como potencializar um Serviço de Atendimento ao Consumidor com Vertex Palm API

Um exemplo da flexibilidade e produtividade com LLMs para endereçar problemas clássicos de Machine Learning e NLP

Gabriel Moreira
google-cloud-brasil
8 min readNov 6, 2023

--

Foto de Charanjeet Dhiman na Unsplash

Os Large Language Models (LLMs) vêm surpreendendo o mundo por sua versatilidade para realizar diferentes tarefas e capacidade de compreensão, geração de texto e de automatização de tarefas.

Neste post vamos utilizar LLMs através da Vertex AI Palm API para explorar alguns casos de uso de atendimento ao cliente:

  1. Classificação de sentimentos
  2. Estimativa de rating da avaliação
  3. Sumarização de avaliações
  4. Resposta automatizada à avaliações de produtos
  5. Análise de clusters de avaliações utilizando embeddings
  6. Chatbot de atendimento ao cliente

O notebook com o código completo pode ser encontrado no GitHub.
Ele foi desenvolvido em apenas uma tarde enquanto eu explorava a Vertex AI Palm API, o que demonstra a produtividade propiciada pelas LLMs para endereçar casos de uso que poderiam consumir semanas de um cientista de dados / engenheiro de ML utilizando técnicas tradicionais de aprendizado de máquina (Machine Learning — ML) e processamento de linguagem natural (Natural Language Processing — NLP).

Setup

Este notebook pode ser executado facilmente através do Google Colab.

Para executá-lo, será necessária uma conta na Google Cloud Platform (GCP). Caso não tenha uma conta, pode criar uma aqui e ganhar USD 300 de crédito. A execução deste notebook utiliza a Vertex Palm API, e deve consumir apenas cerca de R$ 0,20 dos seu créditos 🙂.

Na seção Setup no notebook você encontrará o código necessário para instalar o google-cloud-aiplatform no Colab e authenticá-lo com sua conta Google.

O próximo passo é inicializar a conexão da Vertex AI com seu projeto GCP.

O notebook utiliza o Vertex AI SDK Python da Palm API, que possui recursos para responder a perguntas ou instruções dos usuários, interagir como um sistema de chat com memória de múltiplas mensagens e gerar embeddings para os textos, com suporte a português.

Que comecem os testes!

Obtendo um dataset de avaliações de produtos

Para este exemplo, vamos utilizar um dataset aberto disponibilizado pela empresa B2W com avaliações de produtos coletadas no site de e-commerce Americanas, mantido neste repositório GitHub. Ele contém mais de 130,000 avaliações de produtos, incluindo nome, marca, e categoria do produto, avaliação do consumidor, rating e informações demográficas, conforme o exemplo abaixo.

Exemplo do dataset de avaliações de clientes

Você encontrará o código para baixar o dataset carregá-lo em um Pandas DataFrame na seção correspondente do notebook.

Classificação de sentimentos

Trata-se de um caso de uso clássico de ML e NLP, geralmente aplicado a análise de avaliações de clientes ou posts em redes sociais.

Vamos começar instanciando um TextGenerationModel, que permite requisições de geração de texto à Vertex Palm API. Utilizaremos o modelo “text-bison@001”; mais informações sobre os outros modelos disponíveis podem ser encontrados aqui.

LLMs como este disponibilizada da Vertex Palm API têm um treinamento especial para aceitar instruções do usuário no prompt. Neste exemplo, criamos um template de prompt com uma instrução para classificação de sentimentos, que encapsulamos em uma função encarregada de enviar a requisição para a API através do SDK Python e retornar o texto da resposta gerada.

Estimativa de rating

Ratings são uma forma numérica para avaliação da satisfação de um cliente. O dataset utilizado contém ratings fornecidos pelos usuários, em uma escala 1–5. A intuição é de que o rating numérico reflete o nível de satisfação do usuário e deve se correlacionar com texto da avaliação.

E se tentássemos estimar o rating da avaliação através do texto?

Este problema de regressão tradicionalmente exigiria combinar várias técnicas de NLP e ML tradicionais para treinamento de um modelo para este fim, por exemplo TF-IDF + SVM/Logistic Regression/Random Forest, ou Word2Vec embeddings + Rede Neural MLP/LSTM, ou BERT, ...

Será que conseguiríamos implementar esta solução utilizando apenas um prompt e esta API?

Que tal?

Fiz um exercício no notebook de estimar os ratings das primeira 30 avaliações. Então calculei uma métrica clássica de regressão — RMSE (Root Mean Squared Error) — que indica que o erro médio das estimativas de rating foi de 0.81, ou seja, desvio médio de menos de uma unidade em uma escala de 1–5. Podemos ver o gráfico de boxplot da distribuição do erro da estimativa, que mostra que a mediana do erro é 0 e que quando o modelo erra a estimativa está geralmente 1 ponto abaixo do rating real.

Boxplot da distribuição da diferença entre o rating real e estimado da amostra

Sumarizar avaliações

O gerente gostaria de um resumo das avaliações de produtos da primeira semana de Janeiro…

  • Gerente: Quem se habilita a ler e resumir todas as avaliações?
  • Vertex Palm API: ✋

As LLMs são capazes de gerar sumarizações abstrativas, ao invés de apenas extrair as principais sentenças do texto, como nas técnicas tradicionais de NLP de sumarização.

Neste exemplo, listo as primeiras 10 avaliações do dataset e peço para o modelo sumarizá-las em um parágrafo.

E se quisermos listar os tópicos principais das avaliações?

Tradicionalmente utilizamos técnicas de modelagem de tópicos (como Latent Dirichlet Allocation — LDA) para este fim, mas podemos agora realizar esta tarefa facilmente com um simples prompt.

Resposta automatizada de avaliações

Será que podemos utilizar a Vertex Palm API para criar um rascunho de resposta para cada avaliação de cliente?

Note que a mensagem foi finalizada com “Equipe Americanas” mas esta informação não está no template do prompt, ela foi gerada a partir da citação da empresa na avaliação do cliente.

Veja este outro exemplo de uma avaliação negativa.

Esta resposta endereça as reclamações do cliente de forma polida. Mas ela inclui o telefone do SAC da Motorola (0800 773 1244) e menciona aquela empresa como a remente da mensagem (Equipe Motorola), que não seria adequado se o suporte ao cliente fosse do e-commerce Americanas.

Este exemplo demonstra o que as LLMs são: poderosos modelos probabilísticos que estimam recursivamente a próxima palavra do texto, treinados de forma não supervisionada em grandes quantidades de texto disponíveis na internet e absorvendo padrões semânticos entre palavras (ou tokens mais especificamente) que co-ocorrem, neste caso, a relação entre “Motorola” e o telefone do seu SAC.

Logo, casos de uso que visem gerar respostas diretamente aos usuários devem tem instruções mais detalhadas no prompt e ter uma camada de proteção (e.g., Nvidia Nemo Guardrails) para minimizar ou impedir que respostas inadequadas sejam enviadas em nome da empresa.

Clusterização de avaliações utilizando embeddings

Embeddings são representações vetoriais densas, muito úteis para tarefas relacionadas a busca semântica/por similaridade e clusterização. A Vertex AI SDK oferece a classe TextEmbeddingModel como interface para geração de embeddings.

No notebook demonstro como extrair embeddings de uma amostra de avaliações de produtos de informática e como plotar os embeddings gerados em 2 dimensões (usando a técnica t-SNE) para visualizar os clusters de avaliações similares.

O resultado é um gráfico interativo (no notebook) usando a biblioteca gráfica plot.ly, onde é possível verificar que as avaliações (representadas pelos pontos) similares estão próximas. A tematização das cores é dada por uma escala de cores baseada no rating.

Distribuição com t-SNE dos embeddings de uma amostra de avaliações de produtos de Informática

Chatbot de atendimento ao cliente

Que tal prototiparmos um chatbot de atendimento ao cliente para fazer o primeiro nível de atendimento?

Podemos utilizar a classe ChatModel para gerenciar conversas, mantendo o estado das mensagens trocadas.

Na seguinte função, encapsulamos um prompt com instruções detalhadas para a LLM de como o atendimento deve ser conduzido. A função expõe algumas configurações importantes da API (temperature, top_p, top_k), relacionadas ao nível de aleatoriedade e “criatividade” do texto a ser gerado.

Você vai notar no template do prompt que as instruções se parecem muito com as que você daria para um ser humano. É importante que as restrições de atendimento sejam explícitas, pois em meus primeiros testes com instruções mais básicas, dependendo da mensagem do usuário, o modelo chegou a prometer uma data de entrega para pedidos atrasados, encaminhar o atendimento para um telefone aleatório e até a gerar uma receita de bolo de chocolate quando solicitado.

Abaixo encontra-se um exemplo de um chat fictício entre um cliente com problema de entrega e a LLM.

Você encontrará no notebook outros exemplos de conversas sobre defeito de produto e perguntas fora do escopo que são tratadas adequadamente devido às restrições detalhadas que inclui no prompt.

Conclusão

Neste post demonstramos como a utilização de LLMs, como as disponibilizadas pela Vertex AI Palm API, torna fácil endereçar a análise de avaliações de cliente e a automatização de tarefas como geração de respostas e primeiro nível de atendimento em um sistema de chat.

Para quem já trabalha com aprendizado de máquina há alguns anos como eu, tem sido notável a flexibilidade e produtividade propiciada pelas LLMs para endereçar casos de uso que costumavam exigir maior conhecimento técnico para implementação e disponibilidade de dados com qualidade e quantidade suficientes para treinamento dos modelos.

Ferramentas como Vertex Palm API e Generative AI Studio permitem a prototipação rápida de idéias por pessoas que não conhecem machine learning e até por aqueles que não sabem programar.

Estamos vivendo a revolução das LLMs, que têm criado muitas oportunidades para empresas e profissionais que queiram mergulhar e extrair o máximo destas tecnologias.

Você é um deles?

May an LLM be with you

Para saber mais

Nota: Este notebook utiliza a Vertex AI Palm API, que já oferece suporte a português. A Google lançou recentemente para alguns países uma versão da Palm API e uma interface para testar prompts (MakerSuite) que funciona sem a necessidade de uma conta GCP. Estas ferramentas devem ser disponibilizadas em breve para o Brasil com suporte a português. Os prompts apresentados neste notebook devem funcionar da mesma forma quando a Palm API estiver disponível aqui, necessitando apenas de alguma atualização das funções para utilizar-se o SDK Python da Palm API.

--

--

Gabriel Moreira
google-cloud-brasil

Gabriel Moreira is a Phd, Senior Applied Researcher at NVIDIA working on LLMs and Recommender Systems, and Google Developer Expert for ML since 2019.