Zettelkasten
UFBA-MLOps - Lesson 3

Aula 3 do Curso de MLOps

"Imagine que você trabalha em uma empresa que desenvolve uma solução para atendimento ao cliente que utiliza uma tecnologia de "chatbot". A ideia por trás dessa solução é tentar resolver os problemas mais simples sem a necessidade de um atendente humano, tais como o acompanhamento de status de pedidos, consulta de informações cadastrais, entre outras ações que podem ser perfeitamente realizadas por um sistema conversacional."

Nesta aula vamos criar um chatbot que analisa sentimentos baseado no BERT da Google. O BERT é um modelo de linguagem que foi treinado pela Google para entender o contexto das palavras e frases.

Neste projeto utilizaremos um pacote pyhton chamado Chatterbot, que é uma biblioteca de aprendizado de máquina baseada em regras para responder a perguntas em linguagem natural.

Vamos lá, primeiro vamos começar pelo nosso ambiente de desenvolvimento:

pyenv virtualenv 3.8.12 chatbot
pyenv activate chatbot

Vamos criar o projeto em uma versão antiga do python (3.8.12) para evitar problemas de compatibilidade com o Chatterbot.

pyenv install 3.8.12

Em seguida vamos criar o nosso requirements.txt:

# Tested on Python 3.8.12
ChatterBot==1.0.4
pytz==2021.3

E então instalar as nossa dependencias:

pip install -r requirements.txt

Agora vamos criar o nosso arquivo app.py:

from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
import uuid
 
# Configuração da sessão de chat
sessao = uuid.uuid4()
nome_bot = "Robô"
chatbot = ChatBot(nome_bot, read_only=True)
 
# Treinando o robô
trainer = ChatterBotCorpusTrainer(chatbot)
trainer.train(
    "chatterbot.corpus.portuguese"
)
 
# Início da interação com o usuário
print("Sessão de chat iniciada: "+str(sessao))
nome = input('Digite o seu nome: ')
 
# Conversa principal
while True:
    # Lê pergunta do usuário
    pergunta = input(nome+': ')
 
    # Envia pergunta ao chatbot e obtém resposta
    resposta = chatbot.get_response(pergunta)
 
    # Imprime a conversa na tela
    print(nome_bot+': '+str(resposta)+'\n')

O código é bastante simples, graças ao pacote ChatterBot, que faz praticamente todo o trabalho. Os comentários são auto-explicativos, mas, resumidamente:

  1. Primeiro fazemos as importações do chatterbot, dos componentes de treinamento trainers, e do pacote uuid (usaremos para gerar um número de sessão).

  2. Em seguida, inicializamos a sessão de chat. Criamos um id de sessão, damos um nome ao robô ("Robô"), e inicializamos o componente conversacional no modo "Read Only" (ele não aprende com novas conversas).

  3. É necessário treinar o robô com alguns diálogos. Neste caso, estamos usando um corpus simples, que faz parte do próprio projeto do ChatterBot. É um corpus simples, apenas para teste. No mundo real, você deveria colocar aqui conversas do seu domínio de interesse (e-commerce, por exemplo).

  4. Em seguida, podemos dar início à interação com o usuário. Primeiro perguntamos o nome do usuário, e em seguida começamos um loop infinito, onde o usuário faz uma pergunta, e obtemos a resposta do chatbot por meio da função: chatbot.get_response. Ela faz exatamente o que sugere: dada uma pergunta, uma resposta é obtida. Enfim, imprimimos a resposta ao usuário