Márcio Luiz Bezerra Lopes Júnior
Desenvolvimento de um Chatbot usando
redes de aprendizado profundo
Natal RN
Márcio Luiz Bezerra Lopes Júnior
Desenvolvimento de um Chatbot usando redes de
aprendizado profundo
Trabalho de Conclusão de Curso Sub-metido à Coordenação do Curso de En-genharia de Computação e Automação do Centro de Tecnologia da Universidade Federal do Rio Grande do Norte, como parte dos requisitos necessários para a ob-tenção do grau de Engenheiro de Compu-tação.
Universidade Federal do Rio Grande do Norte UFRN Departamento de Engenharia de Computação e Automação DCA
Curso de Engenharia de Computação
Orientador: Agostinho de Medeiros Brito Júnior
Natal RN
Agradecimentos
Agradeço primeiramente a painho, mainha e Jó, pelo amor, carinho e in-centivo que me deram por todos estes anos; e a Fernanda, pelo apoio, inin-centivo, carinho e por todos os empurrões que me colocaram no caminho deste trabalho. Em seguida, agradeço à UFRN e seu corpo docente, pelos ensinamentos e pela experiência desta graduação; à SINFO e ao professor Gibeon, pela oportu-nidade de desenvolver este projeto; e também a Jean, Gusttavo, e Victor, pelo grande apoio recebido em meu período na SINFO.
Finalmente, agradeço ao professor Agostinho por aceitar ser meu orientador e pela boa vontade para me ajudar neste trabalho.
Resumo
Apresenta o desenvolvimento de um chatbot voltado à comunidade acadêmica da UFRN utilizando técnicas de aprendizado profundo, com o objetivo de auxiliar discentes e funcionários a realizar consultas e sanar dúvidas mais rapidamente e a qualquer momento. Para isso, foram construídas uma rede neural convolucional capaz de identicar o que o usuário deseja, uma estrutura de banco de dados capaz de alimentar esta rede, e sequências de consultas e respostas capazes de solucio-nar o problema do usuário. O sistema foi testado com diversas congurações até ser encontrada uma que obteve resultados satisfatórios para cada tipo de entrada esperado.
Palavras-chaves: Atendimento ao usuário, redes de aprendizado profundo, chat-bot
Abstract
Presents the development of a chatbot focused on the UFRN academic community using deep learning, for the purpose of helping students and employees making con-sultations and answering questions faster and at any given time. A convolutional neural network was used to identify what the user wants, a database was created in order to feed this network, and a series of queries and answers to solve the user's issue was designed. The system was tested on several congurations until one was found to have satisfactory results for every expected input.
Lista de ilustrações
Figura 1 Vetorização de palavras. . . 25
Figura 2 Modelo simplicado de um neurônio articial. . . 33
Figura 3 Modelo simplicado de uma rede neural. . . 37
Figura 4 Convolução simples. . . 40
Figura 5 Exemplo de uma rede convolucional simples em PLN. . . 41
Figura 6 Caso de uso do chatbot . . . 44
Figura 7 Fluxograma do funcionamento da função principal. . . 48
Figura 8 Representação do funcionamento do módulo processador. . . 49
Figura 9 Rede convolucional para a classicação.. . . 50
Figura 10 Exemplo de probabilidades de intenções na classicação. . . 51
Figura 11 Comparação de funções de ativação no bot. . . 54
Figura 12 Comparação de otimizadores no bot. . . 54
Figura 13 Visualização de mensagem recebida do chatbot . . . 55
Figura 14 Visualização de tipo de entidade do chatbot . . . 56
Figura 15 Visualização de entidade do chatbot . . . 56
Figura 16 Visualização de intenção do chatbot . . . 57
Figura 17 Interação com o bot. . . 58
Figura 18 Interação com o bot com entidades identicadas.. . . 59
Figura 19 Interação com o bot com mesma intenção m. . . 59
Figura 20 Interação com o bot em uxo de conversa. . . 60
Lista de tabelas
Tabela 1 Exemplo de n-gramas. . . 26
Tabela 2 Exemplo de marcação de entidades em texto. . . 27
Lista de abreviaturas e siglas
API Interface de Programação de Aplicação
CNN Rede neural convolucional
HTML Hypertext Markup Language
MIT Massachusetts Institute of Technology
PLN Processamento de Linguagem Natural
RNA Rede Neural Articial
SGD Método do gradiente estocástico
SINFO Superintendência de Informática
Sumário
1 INTRODUÇÃO . . . 17 1.1 Metodologia . . . 18 1.2 Estrutura . . . 19 2 FUNDAMENTOS DE UM CHATBOT . . . 21 2.1 Denição . . . 21 2.2 Plataforma . . . 232.3 Processamento de Linguagem Natural . . . 24
2.3.1 Vetorização . . . 24
2.3.2 N-gramas . . . 25
2.3.3 Reconhecimento de entidades . . . 26
2.3.4 Classicação de intenção . . . 27
3 REDES DE APRENDIZADO PROFUNDO . . . 29
3.1 Aprendizagem de máquina . . . 29
3.1.1 Métodos de avaliação . . . 30
3.1.2 Aprendizagem profunda . . . 32
3.2 Redes neurais . . . 32
3.2.1 Redes neurais articiais . . . 33
3.2.1.1 Neurônios . . . 33
3.2.1.2 Funções de ativação . . . 34
3.2.1.3 Otimizadores e método do gradiente . . . 36
3.2.1.4 Camadas . . . 37 3.3 Redes convolucionais . . . 38 3.3.1 Convolução . . . 38 3.3.2 Pooling . . . 40 3.3.3 Arquitetura geral . . . 40 4 DESENVOLVIMENTO DO CHATBOT . . . 43 4.1 Projeto. . . 43
4.2 Ferramentas. . . 44 4.3 Funcionamento . . . 46 4.3.1 Administrador . . . 46 4.3.2 Processador . . . 47 4.4 A rede convolucional . . . 49 4.4.1 Teste de hiperparâmetros . . . 50 5 RESULTADOS . . . 53 5.1 Hiperparâmetros . . . 53 5.2 Administrador . . . 55 5.3 Processador . . . 57 6 CONCLUSÕES. . . 61 REFERÊNCIAS . . . 63
1 Introdução
Sistemas de atendimento ao usuário são comuns no dia-a-dia de milhares de empresas em todo mundo. Tradicionalmente, o atendimento é feito através de estruturas denominadas call centers, onde humanos realizam conversação com os usuários para atender suas dúvidas.
Os sistemas modernos de atendimento de usuário estão migrando para uma nova tendência: a de chatbots, estes utilizam de técnicas de reconhecimento de linguagem para automatizar o processo de conversação com os clientes, resolvendo alguns possíveis problemas através de consultas realizadas pelo programa.
No campo educacional, já são utilizados chatbots em algumas instituições de ensino superior para auxiliar com os processos de inscrição e entrada (Pounce
da Georgia State University) (HERNDON, 2017) ou até com perguntas sobre os
conteúdos ensinados (Ada do Bolton College) (HUSSAIN,2017). O primeiro citado
obteve resultados satisfatórios na redução do fenômeno conhecido nos Estados Unidos como summer melt, em que estudantes, geralmente de baixa renda, perdem a motivação de entrar na faculdade por falta de assistência, guia ou encorajamento. No comércio, os chatbots têm se tornado bem comuns na última década. Eles já são utilizados há algum tempo por grandes corporações. Desde 2011
sur-giram Siri (APPLE, 2018), Cortana (MICROSOFT, 2018) e Alexa (AMAZON,
2018), três assistentes virtuais anexadas a alguns dos mais populares sistemas
do mundo. Outras grandes empresas de computação, como Google e Facebook, fornecem ferramentas para criação de bots para seus clientes. Estas ferramentas ajudaram a desenvolver um novo campo de relações entre empresas e clientes, em que os pedidos de compra são feitos via interação com chatbot.
Assim como outras tecnologias, os chatbots ainda enfrentam as barreiras naturais de concorrência e de resistência às novidades. Apesar disso, o crescimento recente no desenvolvimento e investimento nos bots, assim como no conhecimento das pessoas sobre eles, já os tornaram tópico importante na discussão sobre o futuro dos serviços.
Durante a realização do Hackathon da UFRN de 2017, foi encorajado aos participantes que pensassem em formas de utilizar os dados disponíveis na ainda recente API de Sistemas da UFRN para melhorar o ambiente universitário. Neste cenário, surgiu a ideia de desenvolver um chatbot focado em auxiliar os discentes da UFRN.
Hoje, muitos questionamentos dos alunos da universidade ainda requerem, por mais simples que sejam, que o aluno vá a alguma secretaria ou coordenação para que possam resolvê-los. Alguns destes questionamentos são repetidos por diferentes alunos, de forma que os funcionários têm de repetir as mesmas falas por diversas vezes a cada semestre.
Este projeto, então, nasce da crença de que utilizando-se de dados já exis-tentes e guardados nos sistemas de armazenamento da UFRN, é possível resolver diversos questionamentos de alunos de forma automatizada.
Dessa forma, o desenvolvimento deste projeto busca proporcionar uma maior facilidade ao discente, permitindo que certas dúvidas sejam sanadas a qual-quer hora do dia e sem necessidade de deslocamentos; e busca também retirar alguma carga dos ombros dos servidores da universidade, reduzindo a necessidade de responder questionamentos repetidos e as possíveis perdas de tempo com ques-tões que não fazem parte de suas prioridades.
1.1 Metodologia
Para desenvolver o chatbot foram construídos dois módulos: processamento e administração. O primeiro ca responsável por realizar o treinamento da inteli-gência articial, incluindo a rede convolucional, pelo processamento da mensagem recebida pelo usuário, e pela resposta a essa mensagem; o segundo é responsável por gerenciar os dados utilizados no treinamento e por scalizar o funcionamento do bot.
Para realizar a classicação das intenções nas mensagens dos usuários, foi aplicada uma rede convolucional. Esta rede recebe como entrada a mensagem em formato matricial e tem como saída as probabilidades da mensagem pertencer a
cada uma das intenções existentes no banco de dados.
1.2 Estrutura
O trabalho é dividido em cinco capítulos, dois capítulos teóricos, um deta-lhando a estrutura do projeto, um exibindo os resultados, e ao nal, a conclusão.
O referencial teórico se inicia no Capítulo 2, em que se dene o que é
chat-bot e são explicadas suas principais utilidades atuais. Em seguida, são denidos alguns conceitos de Processamento de Linguagem Natural que foram utilizados
neste trabalho. No Capítulo 3, são apresentados e explicados conceitos de
aprendi-zagem de máquina, com ênfase nas redes neurais e convolucionais. São detalhados os processos que ocorrem nas camadas da rede convolucional.
NoCapítulo 4, é detalhada a forma de organização da aplicação, separando-a em dois módulos. São separando-apresentseparando-adseparando-as separando-as ferrseparando-amentseparando-as utilizseparando-adseparando-as nseparando-a construção dseparando-a aplicação e é feito um maior detalhamento da rede convolucional utilizada e de seus testes.
Os resultados obtidos são apresentados no Capítulo 5, incluindo exemplos
de uso dos dois módulos e os testes realizados na rede convolucional. O trabalho é
2 Fundamentos de um chatbot
2.1 Denição
Chatbots, também chamados de bots ou assistentes virtuais, são sistemas programados que buscam compreender mensagens enviadas por usuários humanos e respondê-las. Podendo ser usados para vários propósitos, os chatbots mais antigos tinham foco em simular as conversas e o comportamento de uma personagem criada, às vezes com cunho cientíco, outras vezes com cunho humorístico. Hoje, a utilização dos bots por organizações tem foco maior no auxílio aos seus clientes por meio da execução automatizada de tarefas.
O programa geralmente creditado como o marco inicial dos bots é a
psico-terapeuta virtual ELIZA (WEIZENBAUM,1966), desenvolvida entre 1964 e 1966
por Joseph Weizenbaum, no laboratório de inteligência articial do MIT. ELIZA simulava uma psicoterapeuta através de uma abordagem bem simples, que buscava padrões dentro da mensagem enviada pelo usuário e replicava com uma frase rela-tiva àquele padrão. ELIZA foi capaz de convencer muitas pessoas que interagiram com ela de que ela realmente entendia o que lhe era dito.
Em 1971, na Universidade de Stanford, foi desenvolvido o programa PARRY (COLBY,1971), bot que simulava um paciente que sofria de esquizofrenia. PARRY seguia uma lógica de funcionamento similar àquela de ELIZA, e as primeiras in-terações entre ELIZA e PARRY, proporcionadas pela rede de computadores AR-PANET, são consideradas um marco dos chatbots e da inteligência articial. Além das características de ELIZA, PARRY introduzia um sistema que guardava os seus níveis de raiva e medo, com suas respostas sofrendo variações conforme o valor desses níveis. Em experimentos realizados com PARRY, ele foi o primeiro bot a passar em uma versão Teste de Turing, em 1972, em que psicoterapeutas recebe-ram transcritos de conversas com PARRY e de conversas com pacientes humanos e
armavam se a conversa era produzida pelo robô ou pelo humano (COLBY; HILF,
Apesar do feito de PARRY de se confundir com humanos ser muito rele-vante para a época, o tipo de pessoa que o robô buscava imitar (pacientes com esquizofrenia) autorizava que ele dissesse coisas que fugissem da lógica da conversa sem que isso gerasse muitas suspeitas. Colby, criador de PARRY, chamava os tes-tes de "Turing-like tes-tests" (algo como: tes-testes-tes parecidos com o de Turing). Alguns bots mais modernos já foram anunciados como se tivessem passado no Teste de Turing, porém, como no caso de PARRY, há sempre algum detalhe para justicar respostas ilógicas.
O desenvolvimento dos bots continuou, e do nal da década de 1980 até o nal do século foram desenvolvidos alguns que obtiveram destaque. Jabberwacky
(1988) buscava aprender com a entrada enviada pelo usuário para entretê-lo (
CAR-PENTER, 2018); Dr. Sbaitso (1990) o papel de psicólogo e respondia ao usuário
em mensagens de voz (CREATIVE LABS,1990); e A.L.I.C.E. (1995) utilizava de
heurísticas para compreender os padrões de entrada do usuário e assim ter uma
conversa (WALLACE, 2002), este último serviu de inspiração para o lme
premi-ado Her, de 2013. Em 2001 surgiu o Smarterchild, um bot distribuído em plata-formas de conversação por mensagem que se tornou popular. Ele realizava acesso a dados e era personalizado e, apesar do caráter conversacional e humorístico que compartilhava com os demais bots surgidos no nal do século XX, Smarterchild in-troduzia algumas das principais características que seriam observadas nos chatbots
modernos, sendo considerado até o precursor deles (RODRIGUES, 2016).
Características contemporâneas
Como visto, o desenvolvimento de chatbots não é algo recente, tendo a possibilidade de conversar com máquinas sido bastante discutida e comentada no século XX, seja por cientistas e desenvolvedores de softwares conversacionais, seja por pessoas fora da área que apenas imaginavam que o desenvolvimento tecnológico poderia chegar a tal ponto. Entretanto, foi apenas recentemente que os assistentes virtuais passaram a gurar como elementos de uso diário e como fonte de notícias em jornais.
Os assistentes desenvolvidos por grandes empresas de tecnologia passaram a proporcionar aos usuários uma série de recursos adicionais e externos às
funci-onalidades tradicionais dos bots que permitem uma forma diferente de acesso à informação, e por vezes mais rápida que a comum sequência de comandos (cli-ques). A inserção destes bots dentro de celulares extensamente utilizados e o uso de técnicas avançadas de compreensão de fala proporcionaram um grande alcance e tornaram comuns os chatbots genéricos, que realizam as diversas tarefas possí-veis do seu ambiente, como, no caso de smartphones: ligar, mandar um mensagem, abrir um aplicativo, pesquisar algo, dentre várias outras.
Além dos bots mais genéricos incluídos em dispositivos, são também bem populares assistentes modeláveis, oferecidos por uma organização a outra com o intuito que esta utilize das ferramentas desenvolvidas por aquela para montar um chatbot simples e de funcionalidade geralmente mais limitada. São comumente usados em vendas pela internet, e geralmente seguem os uxos de conversa, onde são esperadas que as respostas do usuário sigam um padrão mais restrito.
2.2 Plataforma
A plataforma conversacional pela qual o assistente virtual se comunica com o usuário é de vital importância ao projeto. É por meio das funcionalidades, do alcance e das limitações da plataforma que o bot deve ser pensado.
Como mencionado noCapítulo 1, o crescimento, ou surgimento, recente dos
chatbots, é em grande parte atribuído à popularização dos aplicativos de troca de mensagens, como Telegram ou Facebook Messenger, que tornaram as mensagens o meio mais comum de comunicação a distância.
O formato incentivado por esses aplicativos, onde mensagens curtas são en-viadas e recebidas por usuários em tempo real, é muito adequado às necessidades de um chatbot, sendo necessário pouco ou nenhum ajuste em relação aos formatos tradicionais testados em linhas de comando. Mas é claro que, quando há funcio-nalidades adicionais que podem melhorar a relação do cliente com o bot como, por exemplo, detecção de voz, estas são comumente exploradas.
Outras plataformas de destaque, como mencionado no tópico anterior, são os telefones celulares modernos (smartphones), estes implementam bots internos
que servem de auxílio ou facilitador na sua utilização. Estes utilizam algum co-mando padrão no dispositivo para ativar o bot e partir daí o usuário faz sua requisição do que desejar fazer.
2.3 Processamento de Linguagem Natural
Processamento de linguagem natural (PLN) é um campo da ciência da com-putação que estuda formas de compreender um texto, de extrair informações espe-cícas dele, e até de gerar um novo texto. O PLN possui uma grande quantidade de aplicações, sendo utilizado em diversos campos linguísticos e computacionais.
As diversas técnicas de PLN incluem várias formas de marcar ou modi-car o texto para realizar o processamento desejado. Neste tópico estão destacados os principais conceitos utilizadas neste projeto: Vetorização, N-gramas, reconheci-mento de entidades e classicação de intenção. Sendo os dois últimos formas de abstrair o texto para análise, e os dois primeiros técnicas que ajudam a chegar a essa abstração.
2.3.1 Vetorização
Um processo muito comum em PLN é a vetorização de palavras. A vetori-zação consiste em, de certa forma, avaliar matematicamente as palavras presentes em textos.
Na vetorização, um algoritmo - o vetorizador - é alimentado por uma de-terminada quantidade de textos, sendo responsável por extrair as diferentes carac-terísticas de cada palavra nos textos utilizando alguma técnica de processamento de linguagem. Estas palavras são então transformadas em vetores de tamanho de-terminado pelo vetorizador. Uma vez as palavras estando em formato vetorial, é possível fazer uma série de operações e comparações que não seriam possíveis em formato de texto.
Existem diversos algoritmos distintos para a vetorização de palavras, sendo
os mais comuns Word2Vec (MIKOLOV et al., 2013), GloVe (PENNINGTON;
BOJA-NOWSKI et al.,2017). Estes algoritmos utilizam diversas características diferentes das palavras para realizar a vetorização, incluindo o contexto em que a palavra se encontra, a quantidade de vezes que uma palavra aparece nos textos, e até a mor-fologia das palavras; isto pode resultar em resultados distintos entre os algoritmos, sendo o uso destes variável de acordo com o problema em questão. Os algoritmos podem classicar as palavras processadas em vetores de diversos tamanhos e po-dem ser aplicados a conjuntos de textos enormes, sendo possível encontrar bancos de palavras vetorizadas treinados nestes algoritmos em várias línguas, incluindo o português.
Na Figura 1, é exibido um exemplo simplicado do processo de vetorização,
com as características das palavras sendo classicadas em vetores de 26 unidades, cada uma representando uma letra do alfabeto. Neste caso, cada palavra do texto de entrada foi classicada de acordo com a quantidade ocorrências de cada letra nesta. Palavra A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Universidade 1 0 0 2 2 0 0 0 2 0 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0 0 Federal 1 0 0 1 2 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 Do 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 Rio 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 Grande 1 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 Norte 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 Vetorizador "Universidade Federal do Rio Grande do Norte" Texto
Figura 1 Vetorização de palavras.
2.3.2 N-gramas
Processar uma frase por completo é problemático, pois podem haver diver-sas formas de se dizer uma mesma coisa, tornando necessário que esta frase seja dividida em partes. Naturalmente, pensa-se em analisar as palavras que compõem cada frase, e classicar de acordo com a semelhança de palavras.
Porém, ao trabalhar textos, palavra por palavra, corre-se o risco de perder o contexto em que a palavra está inserida. Frases que são formadas com conjunto próximo ou igual de palavras, mas que possuem signicados distintos, tenderiam a ser classicadas como iguais num processamento assim.
Para resolver este problema, há um conceito em PLN chamado de n-gramas. Os n-gramas são sequências de conjuntos de palavras, de tamanho especicado pelo desenvolvedor, que representam a frase original através de pedaços da mesma. Deste forma, não se deixa a análise restrita a frases completas, e ainda são man-tidos contextos mínimos, mas que são sucientes para identicar as diferenças
(JURAFSKY; MARTIN, 2018).
Na Tabela1, pode-se observar duas frases de sentido oposto, mas formadas
pelo mesmo conjunto de palavras. Ao quebrar a frase em palavras e agrupar as palavras vizinhas, é possível obter informações capazes de distinguir o sentido dos conjuntos de palavras mesmo desconhecendo por completo a ordem das frases originais.
Frase "Ele foi bem porque não foi
mal" "Ele não foi bem porque foimal"
Trigramas
(n = 3) (Ele foi bem), (foi bem por-que), (bem porque não), (por-que não foi), (não foi mal)
(Ele não foi), (não foi bem), (foi bem porque), (bem porque foi), (porque foi mal)
Bigramas
(n = 2) (Ele foi), (foi bem), (bem por-que), (porque não), (não foi), (foi mal)
(Ele não), (não foi), (foi bem), (bem porque), (porque foi), (foi mal)
Tabela 1 Exemplo de n-gramas.
Os n-gramas podem ser utilizados para diversas tarefas em PLN. O valor de n costuma estar entre 3 e 5, e também podem ser usados mais de um tamanho de n-gramas para o processamento em uma aplicação.
2.3.3 Reconhecimento de entidades
Reconhecimento de entidades nomeadas, ou somente reconhecimento de entidades, é um importante passo no processo de extração de informações de um texto, e geralmente o primeiro passo. Este reconhecimento visa a identicação, através de técnicas de PLN, de nomes especícos, previamente determinados e
Para realizar o reconhecimento de entidades, geralmente são utilizados ar-quivos de textos contendo diversos exemplos de uso de nomes de entidades. Estes exemplos devem ser todos previamente marcados de acordo com um padrão de-nido pelo desenvolvedor do reconhecedor utilizado.
Na Tabela 2 é possível visualizar um mesmo texto em dois formatos: com
e sem a marcação de entidades.
Após a Campanha Nacional de Vacinação, que terminou no última semana, 10,2 milhões de crianças menores de cinco anos foram imuniza-das contra sarampo e poliomielite. Com isso, o governo federal informou que o índice de co-bertura do público-alvo chegou a 91,3%.
Após a Campanha Nacional de Vacina-ção, que terminou no última semana, <start:número> 10,2 milhões <end> de crianças menores de <start:idade> cinco anos <end> foram imunizadas con-tra <start:doença> sarampo <end> e <start:doença> poliomielite <end>. Com isso, o <start:organização> governo federal <end> informou que o índice de cobertura do público-alvo chegou a <start:número> 91,3% <end>.
Texto sem marcação Texto com marcação
Fonte: http://www.brasil.gov.br/
Tabela 2 Exemplo de marcação de entidades em texto.
O sistema é alimentado por estes exemplos marcados e, quando encontra em outro texto um padrão muito próximo daquele dos exemplos, passa a reconhecer as entidades em textos, sempre as atribuindo a um tipo de entidade.
2.3.4 Classicação de intenção
O problema de classicação é um dos mais tradicionais na inteligência arti-cial. Este problema consiste em possibilitar um computador separar algo (textos, imagens, áudios) em categorias distintas. Atualmente, as técnicas de aprendizagem de máquina, que serão introduzidas no próximo capítulo, são vastamente utilizados para isso.
Para o problema do processamento de linguagem e dos chatbots, o foco está no entendimento do signicado de uma frase, ou seja, a intenção do usuário ao escrever um texto ou uma mensagem.
Soluções para a classicação de intenções em geral utilizam um banco de dados contendo possíveis formas de se comunicar uma determinada vontade do usuário, bem como a classicação de cada forma. Pode haver uma quantidade enorme de variações, sendo uma necessidade dos classicadores modernos a capa-cidade de aceitar estas variações.
Na Tabela 3 são apresentados exemplos de como frases poderiam ser
clas-sicadas como intenções em um chatbot. Neste caso, são três exemplos de frases classicados como saudação e outros três como clima.
Tipo de intenção Mensagem do usuário
Saudação Boa tarde.
Saudação Olá!
Saudação Fala!!
Clima Como tá o clima hoje?
Clima Hoje chove?
Clima Quero saber se vai fazer sol.
Tabela 3 Exemplo simples de variações de intenções.
A classicação tem vital importância para um bot, sendo ela a responsável por direcionar a resposta dada ao usuário. Em geral, a resposta do sistema de um chatbot é denida através da combinação entre a classicação do texto e as entidades reconhecidas.
3 Redes de aprendizado profundo
3.1 Aprendizagem de máquina
Aprendizagem de máquina é um conjunto de métodos capaz de automati-camente detectar padrões em um conjunto de dados, podendo estes padrões ser utilizados para realizar classicação ou predição em novas entradas de dados.
A aprendizagem de máquina é dividida tradicionalmente em três tipos
dis-tintos: supervisionada, não-supervisionada, e por reforço (MURPHY, 2012).
• Supervisionada: são aplicadas técnicas que recebem dados de forma que
estejam separados uma matriz de valores de entrada X e um vetor unidimen-sional de saída y. As técnicas associam os valores de entrada ao respectivo valor de saída e modelam um sistema (ou uma função) capaz de prever a saída para um valor desconhecido. Exemplos de técnicas de aprendizagem supervisionada: Regressão linear, árvores de decisão e máquinas de vetores de suporte.
• Não-supervisionada: são aplicadas técnicas de aprendizagem a uma
ma-triz de entrada X, sem a necessidade de qualquer outra entrada de dados. As técnicas tem por objetivo associar os dados de entrada de forma a en-contrar uma relação entre eles. Exemplos de técnicas de aprendizagem não-supervisionada: K-Médias e DBSCAN.
• Por reforço: Na aprendizagem por reforço, o objetivo é fazer com que o
pro-grama encontre uma solução ótima para uma determinada tarefa através do processo de tentativa e erro. Nesta são dadas premiações ao programa caso ele conclua o objetivo preestabelecido e são utilizadas métricas de avaliação para determinar qual é a melhor solução.
Quanto ao propósito da aprendizagem, ainda é possível distinguir dois tipos diferentes de aprendizagem supervisionada:
• Classicação: a técnica implementada terá como objetivo denir, dentre um número nito de rótulos predenidos no processamento, a qual destes rótulos os valores de entrada pertencem. Por exemplo: dada a imagem de uma folha, classicar a qual espécie de planta esta pertence.
• Regressão: uma espécie de classicação com rótulos innitos. Neste são
utilizados os valores de entrada da situação atual para denir um valor des-conhecido, dado um conjunto de treinamento que possua estes mesmo va-lores, inclusive aquele que é desconhecido na entrada. Por exemplo: dadas informações sobre uma pessoa, denir a sua provável idade.
No problema dos chatbots abordado neste trabalho é compreensível armar que ele será um problema de classicação, uma vez que as intenções e entidades
a serem identicadas, como será visto no Capítulo 4, são nitas e denidas por
quem projeta o sistema.
Estas técnicas modernas de aprendizagem de máquina tiveram um grande impacto sobre o PLN, transformando as formas de se realizar algumas das técnicas mencionadas no capítulo anterior, tornando-as mais rápidas e ecazes e possibili-tando a popularização destes métodos.
3.1.1 Métodos de avaliação
Nos problemas de aprendizagem de máquina - em especial será discutido aqui o caso da classicação - há métodos que são utilizados para avaliar se a técnica aplicada está tendo um desempenho satisfatório. Na classicação, é comum
se utilizar quatro métricas: acurácia, precisão, recall e F1 (JURAFSKY; MARTIN,
2018).
Antes de aplicar os cálculos que determinam estas pontuações, é uma boa prática nos testes de aprendizagem de máquina a separação dos dados em dois conjuntos: os dados de treino e os dados de teste. O conjunto de dados de teste é formado por uma fração do conjunto de dados, normalmente entre um quinto (20%)
e um terço (∼33%) deste, e esta fração deve ser composta por dados diferentes
a garantir que o sistema não esteja funcionando apenas para casos especícos de conjuntos de treino.
Uma vez que o sistema tenha sido treinado, ele é alimentado com todos os dados do conjunto de teste, classicando-os com base no treino dos demais dados. Os resultados desta classicação são então comparados com os resultados esperados e divididos em quatro tipos distintos:
• Positivo verdadeiro (PV): são positivos verdadeiros os resultados que
deveriam ser classicados como sendo da classe c e foram classicados como tal.
• Negativo verdadeiro (NV): são negativos verdadeiros os resultados que
deveriam ser classicados como não sendo da classe c e foram classicados como tal.
• Falso positivo (FP): são falsos positivos os resultados que deveriam ser
classicados como não sendo da classe c e foram classicados como sendo de c.
• Falso negativo (FN): são falsos negativos os resultados que deveriam ser
classicados como sendo da classe c e foram classicados como não sendo de c.
A partir destas classicações de resultados, pode-se nalmente calcular o valor das métricas citadas anteriormente:
Acurácia: é a mais simples das métricas. Basicamente, divide-se os valores clas-sicados corretamente pelo conjunto total dos dados.
Acur´acia = P V + N V
P V + N V + F P + F N
Precisão: a precisão foca exclusivamente nos valores classicados como positivos pelo sistema, expondo quantos destes são realmente positivos.
P recis˜ao = P V
Recall: o recall foca nos valores que são verdadeiramente positivos, determinando a fração destes que foi classicada corretamente.
Recall = P V
P V + F N
F1: a pontuação F1 é uma média harmônica entre as métricas de precisão e recall,
F1 =
2 · P recis˜ao · Recall
P recis˜ao + Recall
Ou nos mesmo termos utilizados nas outras métricas:
F1 = 2
2 · P V + F P + F N
É importante destacar que a pontuação F1 é uma versão da pontuação Fβ,
em que β = 1. Nesta caso, precisão e recall são tratadas com o mesmo peso. Para tratar o recall com maior peso, utiliza-se β > 1, enquanto β < 1 valoriza mais a
precisão. A pontuação Fβ é dada por:
Fβ = (1 + β2) ·
β2· P recis˜ao · Recall
P recis˜ao + Recall
3.1.2 Aprendizagem profunda
A aprendizagem profunda (do inglês "deep learning") é um termo mais recente na aprendizagem de máquina. Ela é um subcampo desta, formado por algoritmos modernos de redes neurais articiais. O termo profunda vem des-tes algoritmos de redes neurais que podem ter um vasto número de camadas de atuação.
3.2 Redes neurais
Redes neurais são sistemas que se tornaram muito populares em tempos recentes com o crescente uso de aprendizagem de máquina. O nome destes sis-temas, mais corretamente chamados de redes neurais articiais (RNA), vem das redes neurais biológicas, formadas pelas interconexões dos neurônios, isto porque
o nascimento das RNA é associado à tentativa de cientistas de traduzir o cérebro
humano em um circuito lógico (KRIESEL, 2007).
A origem das redes neurais articiais é tipicamente associada ao modelo lógico-matemático desenvolvido por Warren McCulloch e Walter Pitts, em 1943
(MCCULLOCH; PITTS, 1943). Neste modelo, os autores, na busca de
compre-ender o funcionamento cerebral, desenvolveram o neurônio lógico, uma espécie de simplicação binária de um neurônio biológico. O artigo de McCulloch e Pitts ti-nha como área de origem o campo da neurociência, mas por algumas razões, a principal delas a binariedade na abordagem do neurônio, acabou por ser ignorada neste. Entretanto, o artigo se tornou extremamente valioso para os campos da computação e da matemática na metade do século XX, sendo o artigo conside-rado o fundador do campo matemático de Teoria dos Autômatos; e inuenciando o matemático John von Neumann, criador da Arquitetura de von Neumann.
3.2.1 Redes neurais articiais
A rede neural moderna é uma rede formada por pequenas unidades compu-tacionais, onde cada unidade recebe um conjunto de valores reais como entrada, realiza algum tipo de processo computacional neste conjunto e produz uma saída
única (JURAFSKY; MARTIN,2018).
3.2.1.1 Neurônios viés e1 e2 en p1 p2 pn
Σ
f
... ... ativação SaídaAs unidades computacionais da rede neural são denominadas neurônios. De forma geral, o que o neurônio realiza é a soma ponderada de suas entradas, somadas também a um valor adicional, chamado viés. Sendo z a soma ponderada,
v o viés, pn o peso para o valor na posição n e xn o próprio valor na posição n, o
processo corresponde à equação:
z = v +Xpixi (3.1)
Considerando p e x como dois vetores, o que é coerente com suas descrições
acima, é possível representar a equação (3.1) com o uso de um produto escalar:
z = p · x + v (3.2)
As unidades da rede neural, entretanto, não repassam à camada seguinte os valores de z. A saída da unidade é denida com o uso de uma função de ativação. Esta é uma função não-linear, aplicada aos valores de z para obter uma saída padrão. Sendo y a saída da unidade, a função de ativação é dada por:
y = f (z) (3.3)
Na Figura 2 é apresentado o modelo simplicado do neurônio articial,
contendo a sequência de operações representada pelas equações (3.2) e (3.3).
3.2.1.2 Funções de ativação
Uma função de ativação, como já mencionado, é uma função não-linear que atua na saída do neurônio articial. A utilidade e necessidade das funções de ativação está na busca pela padronização das saídas em cada neurônio da rede. Cada camada de neurônios busca denir uma função a partir de seus pesos e do viés, mas é necessário que a saída denida por este neurônio forneça alguma informação ao sistema. No problema da classicação, por exemplo, a saída do neurônio pode dizer se sua entrada pertence a uma classe, ou então o quanto ela pertence à classe. No primeiro caso, tem-se uma resposta binária, no segundo, uma resposta analógica.
Portanto, utiliza-se estas funções de ativação para moldar a saída de modo a melhorar a percepção do sistema. As funções de ativação mais populares em
redes neurais são as funções sigmoide, tanh (tangente hiperbólica) e ReLU (NAIR;
HINTON, 2010). Esta última, ReLU - unidade linear reticada - possui uma série
de versões alternativas bastante utilizadas, como Leaky ReLU (MAAS; HANNUN;
NG,2013), PReLU (HE et al.,2015), RReLU (XU et al.,2015) e ELU (CLEVERT;
UNTERTHINER; HOCHREITER, 2015).
As funções sigmoide e tanh são funções próximas, sendo a tanh um sigmoide redimensionado. Ambas as funções mantém a saída dentro de um intervalo nito, sigmoide entre -1 e 1 e tanh entre 0 e 1. Isto evita valores muito grandes de ativação que eventualmente possam quebrar o funcionamento do sistema. Para isso, utilizam-se da divisão e da função exponencial:
sigmoide : σ(x) = 1
1 + e−x (3.4)
tanh(x) = 2
1 + e−2x − 1 (3.5)
E a relação entre as duas é dada por:
tanh(x) = 2σ(2x) − 1 (3.6)
A função ReLU é a mais simples das três, e a mais utilizada em redes neurais. ReLU é uma função denida por partes: para os valores de x inferiores ou iguais a zero, ela tem saída sempre igual a zero; já para os valores de x maiores que zero, a saída segue uma função linear linear.
ReLU (x) 0 x ≤ 0 x x > 0 (3.7)
A ReLU é, portanto, não-saturada, ou seja, os seus valores altos em nenhum momento convergem a algum valor, ao contrário das funções sigmoide e tanh. A perda de segurança ao permitir que os resultados positivos variem indenidamente
é compensada por uma distribuição mais esparsa de saídas, que permite um fun-cionalmente mais elmente analógico do que nos modelos com saturação, e assim guardando melhor as distâncias entre os dados distantes da origem. Os valores de saída 0 permitem ao sistema menos ativação (valores válidos de saída, 6= 0), o que torna mais leve o processamento da rede. Isto somado à computação simples de uma função linear, faz do ReLU mais computacionalmente ecaz que os demais.
A maioria das versões alternativas da ReLU modica somente a parte em que x ≤ 0, devido a problemas que uma derivada de valor zero pode trazer na aplicação do método do gradiente, utilizado pela rede para encontrar os melho-res parâmetros para o sistema. Na função Leaky ReLU, por exemplo, os valomelho-res negativos também são lineares, mas multiplicados por um fator 0, 01. Na ReLU paramétrica (PReLU ), este fator é uma constante α denida pelo desenvolvedor da rede.
3.2.1.3 Otimizadores e método do gradiente
A rede neural também possui otimizadores, funções que buscam melhorar as mudanças em parâmetros no treinamento. O método do gradiente minibatch é um algoritmo de otimização que tem grande importância no aprendizado de máquina. Ele utiliza a lógica do método do gradiente para vários subconjuntos de dados (batches ou minibatches) com o objetivo de otimizar a função de saída obtida no treinamento. Quando este possui minibatch = 1, pode ser chamado de método do
gradiente estocástico ou SGD (Stochastic Gradient Descent) (JURAFSKY;
MAR-TIN, 2018).
No método do gradiente se procura encontrar um mínimo local que reduza a função de perda (ou de erro), método interno da rede neural que mensura o quão distante ela está do resultado ótimo esperado. Para isto, utiliza-se uma função gradiente para encontrar no espaço n-dimensional que rodeia o estado atual uma nova aproximação de pesos e parâmetros que reduza mais esta função de perda.
O método minibatch é uma forma de método do gradiente que realiza o procedimento em uma parte dos dados de cada vez. Ao não aplicar o método a todos os dados, o método minibatch permite uma maior velocidade no processo
ao reduzir os custos computacionais quando se trabalha com conjuntos de dados muito grandes.
Através de alterações ao método do gradiente, surgiram diversos tipos de otimizadores utilizados atualmente em projetos de redes neurais. Alguns exemplos
de otimizadores são: Adam (KINGMA; BA,2014), Adamax (KINGMA; BA,2014),
Adadelta (ZEILER, 2012), Adagrad (DUCHI; HAZAN; SINGER, 2011), Nesterov
(NESTEROV,1983), Nadam (DOZAT,2016), RMSProp (TIELEMAN; HINTON,
2012) e até o próprio SGD.
3.2.1.4 Camadas
Cada neurônio pertence a uma camada da rede neural, separadas pela sua ordem na sequência do processamento. A maior parte das unidades da rede forma a chamada camada oculta, responsável pela maior parte do processo da rede. Sendo as demais responsáveis pela camada de saída. As RNAs são organizadas conforme
apresentado na gura 3. Camadas ocultas A B C ? ? Y ? ? Entrada Saída(s)
Figura 3 Modelo simplicado de uma rede neural.
A camada de entrada consiste basicamente daquilo que alimenta a rede. As camadas ocultas consistem em conjuntos de unidades intermediárias que pro-cessam as suas entradas para alimentar a camada seguinte. A camada de saída é
responsável pelo processamento nal da rede, onde a informação obtida nas cama-das ocultas é traduzida em uma saída compreensível.
3.3 Redes convolucionais
Redes convolucionais (CNN), ou redes neurais convolucionais, são um tipo de rede neural especializado em processamento de dados em formato matricial ou vetorial. O diferencial desta rede é resultado da substituição de operações mais comuns em outros tipos de redes neurais, como a multiplicação, pela convolução. As CNN são amplamente utilizadas em aplicações práticas, sendo especialmente populares no processamento de imagens.
Em alguns tipos de técnicas de processamento de dados buscam ou exigem uma ordem especíca para o funcionamento correto. Em PLN (Processamento de Linguagem Natural), por exemplo, pode ser estritamente necessário que as palavras estejam numa determina ordem para serem entendidas corretamente. Em detecção de imagens isso não ocorre, espera encontrar algo numa imagem (pessoa, animal ou objeto) independentemente de onde ele se encontra. Nestes casos, as redes convolucionais funcionam de forma a extrair as principais características de várias partes da imagem, e através destas características determinar onde deve estar o objeto procurado.
Por meio de técnicas de pré-processamento de palavras, como os n-gramas, é possível utilizar as redes convolucionais para algumas aplicações de PLN. Dessa forma, é possível buscar características importantes num texto vetorizado e com isso utilizar uma CNN para classicação de intenções em textos, e este método tem obtido resultados relevantes em pesquisas recentes, conforme apontado por .
3.3.1 Convolução
Para compreender o que se passa nas redes convolucionais e como elas se diferenciam dentre as redes neurais, é preciso detalhar como funciona a convolução. A convolução é uma operação matemática formal entre duas funções. Ela gera como saída uma terceira função, que representa uma modelagem da primeira
função (x) pela segunda (w). A convolução é denida formalmente por:
s(t) = Z
x(a)w(t − a)da (3.8)
E o operador convolucional pode ser representado por um asterisco (∗), podendo a fórmula acima ser escrita como:
s(t) = (x ∗ w)(t) (3.9)
É importante notar que o argumento w na equação acima é chamado, pela terminologia das redes neurais e convolucionais, de kernel, ou ltro. Refere-se à saída s(t) como mapa de características.
Quando se trabalha com valores discretos, é possível substituir a integral
presente na equação (3.8) por um somatório:
s(t) = ∞ X
a=−∞
x(a)w(t − a)da (3.10)
E no caso de se trabalhar com duas dimensões, incluem-se dois somatórios para percorrer todo o espaço discreto nos dois sentidos.
S(i, j) =X
m X
n
I(m, n)K(i − m, j − n) (3.11)
Finalmente, a convolução bidimensional e discreta pode ser tratada como
uma simples operação entre matrizes, conforme descrito na gura 4, onde uma
matriz de entrada 3x3 é convolucionada por uma matriz kernel 2x2, resultando numa saída 2x2 em que cada posição corresponde a uma soma de produtos entre .
1 4 7 2 8 5 3 6 9 1 0 -1 2 7 9 13 15 a d g b h e c f i w x y z
w*a + x*b + y*d + z*e w*d + x*e + y*g + z*h
w*b + x*c + y*e + z*f w*e + x*f + y*h + z*i
Entrada Kernel Saída
Entrada Kernel Saída
Figura 4 Convolução simples.
3.3.2 Pooling
Após ser realizada a convolução sobre as características do texto, a próxima etapa de uma rede convolucional é chamada de pooling. Nesta etapa, uma função é responsável por receber as saídas dos processos de convolução e combiná-las em um único vetor capaz de expressar as principais características do texto.
A função de pooling possui algumas variações, sendo uma abordagem co-mum utilizar uma função que guarda os valores máximos de cada vetor de dados de entrada.
3.3.3 Arquitetura geral
Desta forma, podemos descrever o sistema de uma rede convolucional com pelo menos duas camadas ocultas: uma camada de convolução e uma camada de pooling. Além delas, uma camada de saída que aplique as operações necessárias, como descartes e a função nal de ativação.
Quando se trabalha com PLN, entretanto, é necessário vetorizar as entradas do processamento, uma vez que um texto ou string recebida de um usuário não possui o formato vetorial necessário para uma convolução. Além disso, para obter um resultado satisfatório, que leve em conta algum contexto existente no texto,
usa-se a técnica das n-gramas, quebrando o texto não somente em palavras, mas em grupos de palavras.
São as vetorizações destes grupos que sofrerão o processo de convolução. Assim, pode-se descrever uma possível rede convolucional pelo modelo descrito na
Figura 5. Quando é a minha c11 c12 c13 c1n c21 c22 c23 c2n c31 c32 c33 c3n c41 c42 c43 c4n f f f f Pooling max m? próxima prova c51 c52 c53 c5n f c61 c62 c63 c6n f conv m1 conv conv conv m2 m3 m4
*
*
*
*
Figura 5 Exemplo de uma rede convolucional simples em PLN.
Como pode ser visto na 5, as saídas das convoluções com o kernel passarão
pela função de ativação, antes de irem ao pooling. Observa-se também que a saída do pooling é unitária, mas isto não é necessário, podendo esta saída variar
indeni-damente de tamanho. Além disso, como será observado noCapítulo 4, na descrição
da arquitetura utilizada neste trabalho, podem ser utilizadas várias camadas de convolução diferentes, sendo as saídas destas unidas após o pooling. Com mais ca-madas, o sistema tem uma maior riqueza de dados para realizar sua previsão, e, salvo casos de sobreajuste, deve obter melhores resultados.
É interessante mencionar também ao observar a Figura 5 que, ao utilizar
janelas de convolução em mais de uma linha da matriz de texto ao mesmo tempo, a rede convolucional aplica implicitamente o conceito de n-grama, uma vez que o processamento está inicialmente analisando contextos reduzidos da frase.
4 Desenvolvimento do chatbot
4.1 Projeto
Este projeto consiste em um software de dois módulos distintos: um módulo administrativo (ou administrador) e um processador. Estes módulos funcionam se-parados, mas utilizam dados produzidos pelo outro para realizar suas tarefas. E essa ponte entre os dois é permitida pelo banco de dados interno da aplicação. Módulo administrativo: responsável por permitir a manipulação do banco de dados interno da aplicação, de forma a permitir a adição e remoção de intenções, entidades ou outras variáveis menos relevantes. Além disso, permite a visualização das mensagens e o julgamento sobre como o assistente classicou aquelas mensa-gens.
Módulo processador: a parte responsável por aplicar todas as técnicas de apren-dizagem de máquina, incluindo treinar os dados - guardados no banco de dados interno - e classicá-los conforme chegam novas mensagens. Ele também ca res-ponsável por realizar comunicações com a API de Sistemas da UFRN, utilizando-se dela para responder algumas das perguntas do usuário.
Banco de dados: parte essencial do chatbot. Nele estarão contidas todas as infor-mações necessárias para a realização do treinamento de reconhecimento de texto pelo processador, bem como todas as informações a serem trabalhadas pelo admi-nistrador.
A Figura6apresenta um diagrama de caso de uso do chatbot, no qual estão
apontados os agentes que interagem no funcionamento do bot, assim como suas responsabilidades neste funcionamento. Neste caso, o usuário envia mensagens ao bot; o processador extrai as entidades identicadas no texto e identica as inten-ções, tudo com suporte de consultas ao banco de dados; e o administrador observa todo este processo, julgando os resultados e realizando alterações nas intenções e entidades caso necessário.
INTERAÇÃO COM O CHATBOT Troca mensagens Gerencia entidades Gerencia intenções Extrai entidades Identifica intenção Consulta entidades Consulta intenções << include >> << include >> << include >> Julga resultado do processamento Adiciona mensagem ao banco de dados << include >> Processador Administrador Usuário << include >> << extend >> << extend >> << include >>
Figura 6 Caso de uso do chatbot
4.2 Ferramentas
Diversas ferramentas foram utilizadas para o desenvolvimento deste pro-jeto. Algumas destas foram escolhidas em função do padrão utilizado no ambiente de desenvolvimento a Superintendência de Informática da UFRN (SINFO) e outras foram escolhidas após pesquisas e avaliações realizadas. Abaixo estão lis-tadas e brevemente introduzidas as principais ferramentas utilizadas no projeto: linguagem, softwares e principais bibliotecas.
Java
Java é uma linguagem de programação de propósito geral que tem como conceito principal a orientação a objetos. Derivada da linguagem C, ela foi iniciada em 1991 por James Gosling, Mike Sheridan e Patrick Naughton, e hoje é considerada juntamente à própria linguagem C e à C++, uma das mais populares linguagens
de programação (BYOUS, 1998;ORACLE, 2015).
Todo o projeto deste assistente virtual tem como base a linguagem Java, isto por-que, além de terem sido encontradas ferramentas de licença livre adequadas para o desenvolvimento do projeto - as quais serão mencionadas a seguir - também foi levado em consideração que os demais sistemas desenvolvidos e/ou em desenvolvi-mento na SINFO a utilizavam.
Spring
Spring é um web framework que permite a criação de modelos compreensíveis de programação e conguração. Ele foi criado por Rod Johnson e teve sua primeira
versão publicada em 2002. (JOHNSON,2006;PITOVAL,2018) No contexto deste
projeto, o Spring é utilizado para estruturar todo o funcionamento do módulo administrativo, facilitando a comunicação com o banco de dados.
Thymeleaf
Thymeleaf é um software de código aberto criado por Daniel Fernández, ele é uma ferramenta para desenvolvimento/conguração de templates para Java. Pos-sui total integração com o Spring Framework e tem capacidade para processar
os formatos XML, XHTML, CSS, Javascript e HTML (THYMELEAF, 2018). O
Thymeleaf é utilizado no projeto dentro do código HTML das páginas do módulo administrativo, com o objetivo exibir as consultas e permitir a manipulação dos dados exibidos.
Apache OpenNLP
Apache OpenNLP é uma biblioteca Java da Apache que possui algumas
ferra-mentas relacionadas ao PLN (APACHE FOUNDATION,2018). Neste projeto, foi
utilizado o módulo nameFinder da biblioteca para realizar a extração de entidades, técnica que permite a identicação de palavras-chave no texto.
Deeplearning4j
Deeplearning4j, ou DL4J, é uma biblioteca Java de código aberto lançada em 2014 pela Skymind, que desde 2017 faz parte da Eclipse Foundation. DL4J per-mite ao usuário projetar seu próprio modelo de redes de aprendizado profunda (SKYMIND, 2018). Neste projeto, o DL4J foi utilizado para arquitetar uma rede neural convolucional, que é utilizada para realizar a identicação das intenções nas mensagens recebidas pelo bot.
API de Sistemas da UFRN
A API de Sistemas da UFRN é uma interface de programação de aplicação que tem por objetivo permitir aos seus usuários o acesso aos dados referentes à UFRN e
aos seus funcionários e alunos, mediante identicação e autorização prévia (SINFO,
2018). É através da API que é possível ao chatbot obter informações associadas a
um usuário especíco e às suas turmas. PostgreSQL & pgAdmin
O banco de dados interno da aplicação foi construído no pgAdmin, que é uma
fer-ramenta de gerenciamento de bancos de dados PostgreSQL (PGADMIN,2018). O
PostgreSQL é um sistema de bancos de dados objeto-relacionais (POSTGRESQL,
2018). Os bancos de dados em PostgreSQL são um dos padrões utilizados pela
SINFO.
4.3 Funcionamento
4.3.1 Administrador
O módulo administrador trabalha com o banco de dados interno da aplica-ção. Para isto, este módulo é composto por conjuntos de páginas web, em HTML, cada um representando uma tabela existente no banco de dados. As páginas de cada conjunto tem por objetivo criar, editar, exibir ou listar. Para o funcionamento adequado destas páginas, são criadas quatro classes Java para cada conjunto,
se-guindo a lógica do framework Spring utilizado: Model, Repository, Service e Con-troller.
Neste módulo é possível preparar os arquivos para treino, tanto da rede neural, quanto do reconhecedor de intenções. Também é possível visualizar as mensagens recebidas pelo bot e corrigir a intenção identicada, caso a mensagem tenha sido classicada erradamente. Além disso, pode-se adicionar palavras-chave que, se identicadas na mensagem enviada por um usuário, esta receberá um peso maior, ganhando prioridade de visualização.
Todas as entradas salvas neste módulo e que serão encaminhadas para a rede neural são em formato de texto. Cada intenção é salva como um bloco único de texto, contendo diversas formas diferentes do usuário transmitir esta intenção, e cada entidade é adicionada individualmente e marcada com seu tipo.
4.3.2 Processador
O módulo processador se responsabiliza pela parte de conversação com o usuário, ele é capaz de receber a entrada (mensagem), utilizar as técnicas de inteli-gência articial para extrair da entrada as informações necessárias, e então utilizar estas informações para decidir o tipo de resposta que dará ao usuário e também sua formulação.
Inicia-se o módulo pelos treinamentos do reconhecedor de entidades e da rede. Primeiramente, é realizado o treinamento da rede neural, que recebe os dados de todas as intenções existentes no banco de dados, linha por linha. Em seguida, o reconhecedor de entidades é treinado com padrões de entrada pré-denidos em código, que utilizam os dados das entidades e sinônimos salvos no banco de dados
para gerar textos marcados como os vistos na seção2.3.3. Com estes dois treinados,
o bot está apto a receber as mensagens dos usuários, cando a espera delas. Uma vez que uma mensagem é enviada, o chatbot verica se há algum assunto pendente, ou seja, se o usuário está respondendo algum questionamento feito pelo próprio programa. Caso haja, a resposta é encaminhada à função de continuação, que é responsável por dar continuidade ao uxo de conversa em curso. Caso não haja, é vericado em seguida se há alguma marcação (tag) no início do
texto recebido e, se houver, o bot considerará isso como um comando e a mensagem será encaminhada à função responsável por eles. Caso também não haja marcação, o texto será nalmente tratado pelo reconhecedor de entidades e passará pela rede neural, onde será classicado e então encaminhado à função seletora geral.
Usuário envia mensagem
Sim Há assuntopendente? Não
Há marcação inicial?
Trata continuação Sim Não
Chama função da marcação
Realiza classificação da mensagem
Figura 7 Fluxograma do funcionamento da função principal.
As funções seletoras são separadas em três tipos: de continuação, de marca-ção e geral. Estas funções possuem o objetivo simples de encaminhar a mensagem à sua função de resposta correta. A função seletora geral utiliza a intenção iden-ticada pela rede neural para selecionar a função especíca correta, enviando à função também as entidades identicadas. A função de marcação seleciona exclu-sivamente pela marcação inicial identicada, passando à função de resposta o texto subsequente. A função de continuação tem por objetivo permitir um uxo de con-versa entre o chatbot e o usuário, permitindo ao bot realizar questionamentos ao usuário em caso de informações incompletas ou até mesmo permitir uma interação ao estilo de preenchimento de formulário para o caso de algumas tarefas mais complexas.
Finalmente, as funções de resposta são as responsáveis em montar a resposta ao usuário, utilizando-se dos parâmetros passados pela função seletora e/ou de
acessos à API de Sistemas. Uma vez montada, a resposta é retornada à função principal, que responde ao usuário.
A Figura 8 é uma representação esquemática do procedimento descrito
acima, incluindo também a relação com o aplicativo de mensagens externo uti-lizado pelo usuário. Na gura é possível ver que toda interação deverá iniciar no usuário e encerrar no aplicativo, com a função principal, descrita no início desta seção, sendo a responsável por realizar a comunicação direta.
FUNÇÃO SELETORA
PRINCIPAL
Geral
de Marcação
de Continuação RESPOSTA FUNÇÃO
APLICATIVO DE MENSAGENS
USUÁRIO
CHATBOT
EXTERNO Variáveis de estado
RESPOSTA
S S
Banco de dados
API
Figura 8 Representação do funcionamento do módulo processador.
4.4 A rede convolucional
A rede neural convolucional foi construída com o auxílio a biblioteca De-eplearning4j e foi projetada para funcionar como um classicador de intenções.
O modelo inicial projetado foi inspirado em Kim (2014), que realizou testes de
diferentes modelos de CNNs, e obteve resultados que defendem a universalidade dos modelos de palavras vetorizadas pré-treinados. Isto é, que programas que não possuem dados sucientes para criar modelos de vetores de palavras robustos po-dem utilizar modelos externos, como os disponibilizados por Google ou Wikipédia, sem perdas signicativas.
pro-jeto, nela é possível observar que a rede possui várias camadas convolucionais pa-ralelas, cada uma destas associada à camada de pooling, e uma camada de saída, que aplica os processos de descarte e a função de ativação Softmax. As camadas paralelas operam com um kernel e uma quantidade de n-gramas diferentes cada uma. A primeira camada usa trigramas, a segunda quadrigramas e a terceira quin-quegramas. As saídas destas camadas de convolução se unem para formar os ma-pas de características, que guardam as informações descobertas pelas convoluções. Na penúltima camada (pooling), os valores máximos destes mapas são ltrados e enviados à camada nal, onde a função Softmax é responsável por calcular a probabilidade para cada intenção.
Convolução 5xn Convolução 4xn Convolução 3xn
Entrada
Pooling
max softmaxSaída
o restaurante universitário vai abrir de que horas Resultado
Figura 9 Rede convolucional para a classicação.
As demais características da rede desenvolvida foram deixadas como en-trada da função, de modo que esta pudesse ser testada em diversas congurações diferentes, a m de encontrar a situação mais próxima da ótima para os objetivos deste trabalho.
4.4.1 Teste de hiperparâmetros
Para poder encontrar a conguração mais próxima de um funcionamento ideal foi criada uma rotina de testes que aleatoriamente testava diversas combina-ções possíveis de hiperparâmetros. Foram salvas as estatísticas dos testes destas
congurações a cada época testada e com o auxílio de alguns scripts foi analisado o comportamento destas variações.
Quando alguma conguração aparecia como um possível resultado ótimo, esta era testada em uma nova rotina de testes, que utiliza exemplos de mensagens recebidas para testar a margem de certeza que a rede possui quando classica. Isto porque mesmo que uma conguração possua uma maior acurácia no âmbito geral, esta pode errar muito em casos especícos, tornando alguma intenção muito difícil de ser identicada. Dessa forma, o que se busca é uma função que possui uma boa taxa de acerto para cada intenção e que também identique esta intenção com uma boa certeza (≥ 50%).
A rede neural sempre terá uma saída que corresponde a um vetor de ta-manho n, sendo n o número de classicações (intenções) existentes, mesmo que a mensagem do usuário se rera a algo que não corresponde a nenhuma das inten-ções. Esta saída é, portanto, importante para o comportamento do bot, já que ela revela o quanto o bot pode conar na classicação da rede. Uma intenção identi-cada com uma certeza muito baixa possui uma probabilidade maior da classicação estar errada, e duas certezas altas porém próximas demonstram uma dúvida no sistema, independentemente de qual das duas tem maior probabilidade.
I % A 34 B 33 C 33 I % A 50 B 49 C 1 I % A 50 B 25 C 25 I % A 80 B 10 C 10 S1 S2 S3 S4
Figura 10 Exemplo de probabilidades de intenções na classicação.
Na Figura 10, há um pequeno exemplo de como o classicador poderia
prever uma intenção, considerando três intenções ctícias A, B e C. O classicador determinará a probabilidade da mensagem recebida ser uma das três intenções de forma que a soma das suas probabilidades seja sempre de 100%. Nos testes gerais de
hiperparâmetros, aqueles que avaliam a conguração do sistema, todos os exemplos acima seriam classicados igualmente, e considerando que todos sejam exemplos de intenção A, seriam todos classicados como corretos.
Observa-se, porém, como existe uma diferença na certeza do classicador. No primeiro caso (S1), a probabilidade é quase a mesma para as três intenções, com a probabilidade de não-A sendo, inclusive, muito alta (66%). No segundo caso, por mais que a probabilidade de A seja de 50%, dentro do limite desejado no projeto, a diferença para B é de apenas 1%, não havendo uma margem de certeza segura na avaliação do classicador sobre a intenção escolhida. Nos exemplos S3 e
S4já se pode ver uma diferença bem mais signicante na probabilidade da função
ser A em relação às demais.
No bot, os casos S1 e S2 devem resultar em alguma mensagem de erro (Ex.: "Não entendi, poderia escrever de outro modo?"), já os casos S3 e S4 resultariam em respostas esperadas para a intenção A.
5 Resultados
5.1 Hiperparâmetros
Para denir os hiperparâmetros a serem utilizados foram realizados os pro-cedimentos mencionados no capítulo anterior. Inicialmente foram testadas diversas combinações aleatórias e aquelas que conseguiam resultados melhores pontuações, eram testadas mais a fundo com mensagens-teste para obter a margem de certeza. A maior parte das funções de maior aproveitamento foi descartada rapida-mente por confundir facilrapida-mente alguns casos mais próximos de intenções. Outras foram descartadas por depender demais de uma quantidade muito grande de exem-plos para a identicação adequada de qualquer intenção. Ao nal, foi adotada a seguinte conguração:
Função de ativação Leaky ReLU Otimizador Adamax Tamanho do batch 16 Taxa de aprendizado 0,1
Tal conguração foi adotada por obter uma ótima pontuação geral, pos-suir boa margem de certeza e funcionar com tamanhos pequenos de exemplos de intenção. Apesar disso, nada garante que esta seja a melhor conguração para o problema de reconhecimento de intenções. Para garantir então que não fosse escolhida uma conguração muito distante do ótimo, foram comparados os resul-tados obtidos por cada conguração e foram comparadas as funções de ativação e otimização.
Figura 11 Comparação de funções de ativação no bot.
Na Figura 11, pode-se observar a comparação dos resultados das funções
de ativação testadas. Nela é possível ver que a Leaky ReLU escolhida é de fato a que obtém o melhor resultado geral, apresentando pontuação F1 consistentemente superior às demais funções a partir da terceira época de treinamento.
Na comparação de otimizadores foram levadas em consideração apenas as combinações com a função de ativação Leaky ReLU. Os resultados para os
otimiza-dores testados são apresentados na Figura 12. Nela, observa-se que houve grande
proximidade entre os resultados, com cinco funções obtendo pontuação F1 média superior a 0, 95 da quinta à décima época. Ainda assim, a função Adamax escolhida se encontra entre os dois melhores resultados em todas as épocas.
Os resultados do teste, portanto, foram favoráveis quanto à escolha desta conguração para a identicação das intenções no módulo processador.
5.2 Administrador
Mensagens
Na seção de mensagens do administrador é possível visualizar todas as men-sagens recebidas pelo bot bem como julgar se cada uma foi classicada
correta-mente. Esta visualização é apresentada na Figura13, em que a intenção é marcada
com uma chave (livro, neste caso). Se o administrador pressionar o botão conr-mar, os dados de treino da intenção livro serão incrementados com a mensagem observada. O administrador também pode corrigir a intenção, incrementando uma outra e assim ajudando o chatbot a classicá-la corretamente no futuro.
Entidades
Na seção de entidade, pode-se observar os diferentes tipos de entidades, como cursos, componentes ou unidades; e também podem ser vistas as entidades
para cada tipo. Na Figura 14 pode ser observada uma lista de componentes para
serem identicados. Enquanto na Figura 15 é possível observar as características
da entidades, em especial a lista de sinônimos, ou seja, as diferentes formas que essa entidade pode ser chamada.
Figura 14 Visualização de tipo de entidade do chatbot
Figura 15 Visualização de entidade do chatbot
Intenções
As páginas de intenções interferem diretamente na rede neural. Cada inten-ção adicionada é uma classe a mais a ser identicada pela rede, e os dados recebidos pela rede estão todos lá para serem editados. Estes dados estão representados na
Figura 16 em Variações. É possível adicionar respostas-padrão para cada inten-ção na parte Respostas no nal da página. Quando uma inteninten-ção é conrmada ou corrigida na seção de mensagens, é exatamente no campo de variações que ela será adicionada.
Figura 16 Visualização de intenção do chatbot
5.3 Processador
O teste do processador é feito por meio da plataforma em que o chatbot está inserido. Aqui estão apresentadas em sequência algumas demonstrações do assistente identicando textos de diferentes características enviados pelo usuário.
Os primeiros exemplos, na Figura 17, são de funções que utilizam somente
o identicador de intenções (a rede convolucional). À esquerda, pode-se ver um exemplo de uma resposta-padrão, em que a intenção busca diretamente do banco de dados a resposta já pronta. À direita, vê-se exemplos de respostas em que os dados são coletados na API e modicados para serem apresentados ao usuário.
Figura 17 Interação com o bot.
Na Figura 18, pode-se ver algumas respostas a mensagens em que existem
entidades. Neste caso, as entidades são identicadas e é feita uma busca no banco de dados para saber qual o signicado destas entidades. No exemplo, Engcomp equivale a Engenharia de Computação e ECT equivale à Escola de Ciências e Tecnologia. São enviados os nomes completos nas respostas para que, caso haja uma identicação incorreta, esta seja facilmente vericada pelo usuário.
Na seguinte, Figura19, há um exemplo de uma função com e sem entidade
identicada. Observa-se como as entidades funcionam como um ltro na busca de notícias de turma, com o chatbot respondendo genericamente a última notícia entre todas as turmas quando uma especíca não é encontrada.
Figura 18 Interação com o bot com entidades identicadas.
Figura 19 Interação com o bot com mesma intenção m.
Há também a possibilidade de realização de uxos de conversa (utilizando as funções de continuação) para permitir ao bot a realização de tarefas mais complexas
de se entender em apenas uma sentença. Na Figura 20, vê-se uma consulta a livros
no acervo do SISBI (Sistema de Bibliotecas da UFRN). O usuário requisitou uma busca e o bot respondeu à requisição realizando duas perguntas, uma para saber o