Chatbots são uma das aplicações mais populares de inteligência artificial. Existem várias formas de implementá-los e elas devem ser escolhidas com base nos objetivos do projeto. Mas, independentemente de qual for a estratégia selecionada, o Python possui várias bibliotecas que podem facilitar muito a implementação desta tarefa. Nesse post, vamos criar um chatbot com uma delas, a biblioteca Chatterbot.
A biblioteca Chatterbot
Chatterbot é uma biblioteca que facilita muito a criação de chatbots, mas ela não é atualizada com frequência. Consequentemente, não é incomum aparecerem desafios durante o desenvolvimento de projetos com ela. Ela foi desenvolvida usando a NLTK como biblioteca auxiliar para processamento de linguagem natural. Como vai ficar claro nesse post, a biblioteca Chatterbot é bastante intuitiva de usar. Portanto, se você tem interesse em desenvolver chatbots, ela é uma opção viável.
Pré-requisitos
É preciso instalar a biblioteca Chatterbot. Recomendamos fortemente que você use um ambiente virtual para essa instalação.
python -m pip install chatterbot==1.0.4 pytz
A instalação criará várias pastas e arquivos no diretório onde for feita.
Criação de um chatbot com Chatterbot
Primeiro, é necessário importar o ChatBot da biblioteca. Também é necessário importar o módulo languages e selecionar explicitamente o modelo de português (linha 3).
from chatterbot import ChatBot
from chatterbot import languages
languages.POR.ISO_639_1 = "pt_core_web_sm"
Após as importações necessárias, é hora de criar o chatbot. Ele precisa de um nome. Para esse post, nosso chatbot irá se chamar “Botinho”, mas você pode usar o nome que quiser.
chatbot = ChatBot("Botinho")
Em seguida, vamos especificar os comandos para terminar a interação com nosso chatbot. Por uma questão de convenção, eles serão especificados em inglês. Tanto a palavra quit quanto exit serão definidas como formas de terminar a interação com nosso chatbot.
exit_conditions = ("quit", "exit")
A interação com o chatbot é definida com o while loop mostrado abaixo. O símbolo “>” serve para marcar nossos inputs. Os inputs sem esse símbolo na frente são os do chatbot.
Esses comandos são suficientes para a criação mínima do Botinho. Portanto, vamos testá-lo. Salve o arquivo e o execute. A execução já é uma interação com o Botinho. Ela deve ser iniciada com uma frase ou palavra qualquer.
while True:
query = input("> ")
if query in exit_conditions:
break
else:
print(f" {chatbot.get_response(query)}")
No nosso exemplo, começamos com Oi. Nossa interação é mostrada abaixo.
> Oi
Oi
> Tudo bem?
Oi
> Quem é você?
Tudo bem?
> Tudo bem. E você?
Oi
> Oi
Oi
> exit
Como deve ter ficado claro, o Botinho é capaz de interagir, mas de forma limitada. Você deve ter notado também que a execução do código criou um arquivo db.sqlite3. Ele é o arquivo responsável pelo armazenamento da aprendizagem do chatbot. Se você quiser começar as interações do zero, é só deletá-lo.
Um pequeno treinamento
Chatbots como o Botinho precisam ser treinados para começarem a interagir de uma forma melhor. Para ilustrar como isso pode ser feito, vamos criar uma pequena interação para o Botinho aprender. Antes, é necessário importar o método ListTrainer como mostrado abaixo em destaque.
from chatterbot import ChatBot
from chatterbot import languages
from chatterbot.trainers import ListTrainer
languages.POR.ISO_639_1 = "pt_core_web_sm"
chatbot = ChatBot("Botinho")
exit_conditions = ("quit", "exit")
while True:
query = input("> ")
if query in exit_conditions:
break
else:
print(f" {chatbot.get_response(query)}")
Nas linhas em destaque abaixo, criamos algumas interações para o chatbot aprender. A execução deste código já é suficiente para o Botinho ser treinado.
from chatterbot import ChatBot
from chatterbot import languages
from chatterbot.trainers import ListTrainer
languages.POR.ISO_639_1 = "pt_core_web_sm"
chatbot = ChatBot("Botinho")
trainer = ListTrainer(chatbot)
trainer.train(
["Oi",
"Bem-vindo, amigo!"]
)
trainer.train(
["Você e um bot?",
"Não, eu sou um chatbot!"]
)
trainer.train(
["O que você faz?",
"Eu falo com NLP!"]
)
exit_conditions = ("quit", "exit")
while True:
query = input("> ")
if query in exit_conditions:
break
else:
print(f" {chatbot.get_response(query)}")
Veja abaixo um exemplo de interação que obtivemos após esse treino.
> Oi
Bem-vindo, amigo!
> Como vai?
Você e um bot?
> Não, e você?
Oi
> Oi
Bem-vindo, amigo!
> Você é um bot?
Bem-vindo-vindo, amigo!
> Você é um bot?
Você e um bot?
> Não, e você?
Eu falo com NLP!
> exit
É importante frisar que as interações têm um grau de aleatoriedade considerável. Por isso, não espere obter resultados exatamente iguais aos nossos.
Um treinamento um pouco maior
O treinamento que fizemos aumentou o repertório do nosso chatbot, mas ele ainda é bem limitado. Para melhorar um pouco seu desempenho, vamos usar um treinamento maior.
O procedimento é bastante simples. Nós criamos um arquivo do Python (texto.py) que contém uma tupla com várias interações linguísticas. Elas foram retiradas de sites de ensino de português para estrangeiros e são exemplos de pequenos diálogos para situações cotidianas. É importante notar que, para um chatbot profissional, esse tipo de treino não é suficiente. Nós iremos usá-lo apenas para demonstrar como proceder.
Baixe o arquivo que criamos e importe-o no seu código como mostrado abaixo. É necessário que ele esteja na mesma pasta que o código.
Em seguida, vamos substituir as interações que havíamos usado para treino pelo tupla importada. Veja abaixo as alterações no código em destaque. Agora é só executar o código novamente e o treinamento irá ocorrer.
from chatterbot import ChatBot
from chatterbot import languages
from chatterbot.trainers import ListTrainer
languages.POR.ISO_639_1 = "pt_core_web_sm"
from texto import treino
chatbot = ChatBot("Botinho")
trainer = ListTrainer(chatbot)
trainer.train(treino)
exit_conditions = ("quit", "exit")
while True:
query = input("> ")
if query in exit_conditions:
break
else:
print(f" {chatbot.get_response(query)}")
Esses são alguns exemplos das interações que tivemos com o chatbot após seu novo treinamento.
> Oi
Bem-vindo, amigo!
> Tudo bem?
Ok, até mais.
> Já vai embora?
Não estão, não. Estão na praia. Hoje é sábado.
> Como é?
Eu estou vendo que é bem provável que você prefira ir com sua namorada.
> Namorada?
Não me diga! Ricardo e eu esperamos que você faça uma viagem à Bahia conosco.
> Quando?
Ok. Daqui a pouco trarei seu pedido.
> Você é maluco?
Como é o seu nome?
> tchau
Você está na casa deles, não é?
> exit
Como é evidente, seu repertório aumentou muito. Porém, como usamos diálogos de interações variadas para treino, é fácil perceber que suas falas não são muito coerentes.
Conclusão
Nesse post, mostramos as etapas básicas para criar um chatbot com a biblioteca Chatterbot. O procedimento é simples. Porém, para ser usado para finalidades sérias, seu chatbot precisará ser muito bem treinado.
Um chatbot para uso profissional precisa ser treinado com uma quantidade grande de dados e, preferencialmente, específicos para o contexto onde ele irá interagir.
O procedimento que mostramos nesse post pode ser usado como base para o desenho de um chatbot robusto. Portanto, se chatbot é sua área de interesse, considere a biblioteca Chattebot como sua aliada.