• Nenhum resultado encontrado

Desenvolvimento de um Chatbot usando redes de aprendizado profundo

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento de um Chatbot usando redes de aprendizado profundo"

Copied!
68
0
0

Texto

(1)

Márcio Luiz Bezerra Lopes Júnior

Desenvolvimento de um Chatbot usando

redes de aprendizado profundo

Natal  RN

(2)
(3)

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

(4)
(5)

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.

(6)
(7)

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

(8)
(9)

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.

(10)
(11)

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

(12)
(13)

Lista de tabelas

Tabela 1  Exemplo de n-gramas. . . 26

Tabela 2  Exemplo de marcação de entidades em texto. . . 27

(14)
(15)

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

(16)
(17)

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 . . . 23

2.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

(18)

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

(19)

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.

(20)

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

(21)

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 é

(22)
(23)

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,

(24)

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

(25)

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

(26)

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;

(27)

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.

(28)

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

(29)

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.

(30)

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.

(31)

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:

(32)

• 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

(33)

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

(34)

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

(35)

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ída

(36)

As 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.

(37)

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

(38)

é 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

(39)

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 é

(40)

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

(41)

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 .

(42)

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,

(43)

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.

(44)
(45)

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.

(46)

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

(47)

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.

(48)

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,

(49)

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

(50)

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

(51)

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.

(52)

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  

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

(53)

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

(54)

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.

(55)

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.

(56)

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.

(57)

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.

(58)

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

(59)

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.

(60)

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.

(61)

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

Referências

Documentos relacionados