desenvolvimento de um chatbot usando redes de aprendizado ... · níveis de raiva e medo , com suas...
TRANSCRIPT
Márcio Luiz Bezerra Lopes Júnior
Desenvolvimento de um Chatbot usando
redes de aprendizado profundo
Natal � RN
17 de dezembro de 2018
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çãodo Centro de Tecnologia da UniversidadeFederal do Rio Grande do Norte, comoparte 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
17 de dezembro de 2018
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, incentivo,
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 identi�car 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 con�guraçõ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 con�gurations until one was
found to have satisfactory results for every expected input.
Keywords: Customer service, deep neural networks, chatbot
Lista de ilustrações
Figura 1 � Vetorização de palavras. . . . . . . . . . . . . . . . . . . . . . . 25
Figura 2 � Modelo simpli�cado de um neurônio arti�cial. . . . . . . . . . . 33
Figura 3 � Modelo simpli�cado 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 classi�cação. . . . . . . . . . . . . . . 50
Figura 10 � Exemplo de probabilidades de intenções na classi�caçã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 identi�cadas. . . . . . . . . . 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
Figura 21 � Interação com o bot através de marcadores. . . . . . . . . . . . 60
Lista de tabelas
Tabela 1 � Exemplo de n-gramas. . . . . . . . . . . . . . . . . . . . . . . . 26
Tabela 2 � Exemplo de marcação de entidades em texto. . . . . . . . . . . 27
Tabela 3 � Exemplo simples de variações de intenções. . . . . . . . . . . . 28
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 Arti�cial
SGD Método do gradiente estocástico
SINFO Superintendência de Informática
UFRN Universidade Federal do Rio Grande do Norte
Sumário
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.2 Estrutura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2 FUNDAMENTOS DE UM CHATBOT . . . . . . . . . . . . 21
2.1 De�niçã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 Classi�caçã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 arti�ciais . . . . . . . . . . . . . . . . . . . . . . . . 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 arti�cial, 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 classi�caçã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 de�ne o que é chat-
bot e são explicadas suas principais utilidades atuais. Em seguida, são de�nidos
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.
No Capítulo 4, é detalhada a forma de organização da aplicação, separando-
a em dois módulos. São apresentadas as ferramentas utilizadas na construção da
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 é
então �nalizado no Capítulo 6, onde são feitas as considerações �nais.
2 Fundamentos de um chatbot
2.1 De�niçã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 arti�cial 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 arti�cial. 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
a�rmavam se a conversa era produzida pelo robô ou pelo humano (COLBY; HILF,
1972).
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 tests" (algo como: �testes 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 justi�car
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 no Capí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 classi�caçã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;
SOCHER; MANNING, 2014), Wang2Vec (LING et al., 2015) e FastText (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 classi�car 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 simpli�cado do processo de vetorização,
com as características das palavras sendo classi�cadas em vetores de 26 unidades,
cada uma representando uma letra do alfabeto. Neste caso, cada palavra do texto
de entrada foi classi�cada 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"UniversidadeFederal 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 classi�car 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 signi�cados distintos, tenderiam
a ser classi�cadas 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 especi�cado 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 su�cientes para identi�car as diferenças
(JURAFSKY; MARTIN, 2018).
Na Tabela 1, 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 foimal"
"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 porquefoi), (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 identi�cação,
através de técnicas de PLN, de nomes especí�cos, previamente determinados e
classi�cados, nos textos processados (JURAFSKY; MARTIN, 2018).
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, queterminou no última semana, 10,2 milhões decrianç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>. Comisso, o<start:organização> governo federal<end> informou que o índice de coberturado 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 Classi�cação de intenção
O problema de classi�caçã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 signi�cado de uma frase, ou seja, a intenção do usuário ao
escrever um texto ou uma mensagem.
Soluções para a classi�caçã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 classi�cação de cada forma. Pode haver uma quantidade
enorme de variações, sendo uma necessidade dos classi�cadores modernos a capa-
cidade de aceitar estas variações.
Na Tabela 3 são apresentados exemplos de como frases poderiam ser clas-
si�cadas como intenções em um chatbot . Neste caso, são três exemplos de frases
classi�cados como �saudação� e outros três como �clima�.
Tipo de intenção Mensagem do usuárioSaudaçã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 classi�caçã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 é de�nida através da combinação entre a classi�caçã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 classi�caçã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:
• Classi�cação: a técnica implementada terá como objetivo de�nir, dentre
um número �nito de rótulos prede�nidos no processamento, a qual destes
rótulos os valores de entrada pertencem. Por exemplo: dada a imagem de
uma folha, classi�car a qual espécie de planta esta pertence.
• Regressão: uma espécie de classi�cação com rótulos in�nitos. Neste são
utilizados os valores de entrada da situação atual para de�nir 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, de�nir a sua provável idade.
No problema dos chatbots abordado neste trabalho é compreensível a�rmar
que ele será um problema de classi�cação, uma vez que as intenções e entidades
a serem identi�cadas, como será visto no Capítulo 4, são �nitas e de�nidas 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 e�cazes 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 classi�cação - há métodos que são utilizados para avaliar se a
técnica aplicada está tendo um desempenho satisfatório. Na classi�caçã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
(amostragem aleatória) toda vez que o programa é treinado novamente, de forma
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, classi�cando-os com base no treino dos demais
dados. Os resultados desta classi�caçã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 classi�cados como sendo da classe c e foram classi�cados como
tal.
• Negativo verdadeiro (NV): são negativos verdadeiros os resultados que
deveriam ser classi�cados como não sendo da classe c e foram classi�cados
como tal.
• Falso positivo (FP): são falsos positivos os resultados que deveriam ser
classi�cados como não sendo da classe c e foram classi�cados como sendo de
c.
• Falso negativo (FN): são falsos negativos os resultados que deveriam ser
classi�cados como sendo da classe c e foram classi�cados como não sendo de
c.
A partir destas classi�caçõ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-
si�cados corretamente pelo conjunto total dos dados.
Acuracia =PV +NV
PV +NV + FP + FN
Precisão: a precisão foca exclusivamente nos valores classi�cados como positivos
pelo sistema, expondo quantos destes são realmente positivos.
Precisao =PV
PV + FP
Recall: o recall foca nos valores que são verdadeiramente positivos, determinando
a fração destes que foi classi�cada corretamente.
Recall =PV
PV + FN
F1: a pontuação F1 é uma média harmônica entre as métricas de precisão e recall,
F1 =2 · Precisao ·RecallPrecisao+Recall
Ou nos mesmo termos utilizados nas outras métricas:
F1 =2
2 · PV + FP + FN
É 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 · Precisao ·RecallPrecisao+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 arti�ciais. 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 arti�ciais (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 arti�ciais é 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
simpli�caçã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 in�uenciando
o matemático John von Neumann, criador da Arquitetura de von Neumann.
3.2.1 Redes neurais arti�ciais
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çãoSaída
Figura 2 � Modelo simpli�cado de um neurônio arti�cial.
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 +∑
pixi (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 é de�nida 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 simpli�cado do neurônio arti�cial,
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 arti�cial. 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 de�nir uma função a partir de seus pesos e
do viés, mas é necessário que a saída de�nida por este neurônio forneça alguma
informação ao sistema. No problema da classi�caçã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 reti�cada - 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 de�nida 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 inde�nidamente
é 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 e�caz que os demais.
A maioria das versões alternativas da ReLU modi�ca 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 valores
negativos também são lineares, mas multiplicados por um fator 0, 01. Na ReLU
paramétrica (PReLU ), este fator é uma constante α de�nida 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.
Camadasocultas
A
B
C
?
?
Y
?
?
Entrada Saída(s)
Figura 3 � Modelo simpli�cado 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 classi�caçã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 é de�nida formalmente por:
s(t) =
∫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) =∞∑
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) =∑m
∑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
fPooling m?
max
próxima
prova
c51 c52 c53 c5nfc61 c62 c63 c6nf
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 inde�ni-
damente de tamanho. Além disso, como será observado no Capí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 classi�cou 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 classi�cá-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 Figura 6 apresenta 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 identi�cadas no texto e identi�ca 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çõesExtrai entidades
Identifica intenção
Consulta entidades
Consulta intenções
<< include >>
<< include >>
<< include >>
Julga resultado doprocessamento 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 con�guraçã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/con�guraçã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 identi�caçã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 identi�caçã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 identi�caçã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 identi�cada, caso a mensagem
tenha sido classi�cada erradamente. Além disso, pode-se adicionar palavras-chave
que, se identi�cadas 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 arti�cial 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é-de�nidos 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ção 2.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 veri�ca 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, é veri�cado 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á classi�cado e então encaminhado à função seletora geral.
Usuário enviamensagem
Sim NãoHá assuntopendente?
Há marcação inicial?Trata continuação Sim Não
Chama função damarcação
Realiza classificaçãoda 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-
ti�cada pela rede neural para selecionar a função especí�ca correta, enviando à
função também as entidades identi�cadas. A função de marcação seleciona exclu-
sivamente pela marcação inicial identi�cada, 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 FUNÇÃORESPOSTA
APLICATIVO DEMENSAGENS
USUÁRIO
CHATBOTEXTERNOVariáveis de estado
RESPOSTA
S S
Banco dedados
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 classi�cador 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 su�cientes para criar modelos de vetores de palavras robustos po-
dem utilizar modelos externos, como os disponibilizados por Google ou Wikipédia,
sem perdas signi�cativas.
A Figura 9 apresenta a arquitetura da rede convolucional utilizada no 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
Saída softmax
o restaurante universitário
vai abrir
de que
horas
Resultado
Figura 9 � Rede convolucional para a classi�caçã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 con�guraçõ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 con�guraçã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
con�gurações a cada época testada e com o auxílio de alguns scripts foi analisado
o comportamento destas variações.
Quando alguma con�guraçã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 classi�ca. Isto
porque mesmo que uma con�guraçã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 identi�cada. Dessa forma, o que se busca é uma função que possui uma boa
taxa de acerto para cada intenção e que também identi�que 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 classi�cações (intenções) existentes, mesmo que a
mensagem do usuário se re�ra 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 con�ar na classi�cação da rede. Uma intenção identi�-
cada com uma certeza muito baixa possui uma probabilidade maior da classi�caçã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 classi�cação.
Na Figura 10, há um pequeno exemplo de como o classi�cador poderia
prever uma intenção, considerando três intenções �ctícias A, B e C. O classi�cador
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 con�guração do sistema, todos os exemplos
acima seriam classi�cados igualmente, e considerando que todos sejam exemplos
de intenção A, seriam todos classi�cados como corretos.
Observa-se, porém, como existe uma diferença na certeza do classi�cador.
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 classi�cador sobre a intenção escolhida. Nos exemplos S3 e
S4 já se pode ver uma diferença bem mais signi�cante 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 de�nir 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 facilmente alguns casos mais próximos de intenções. Outras
foram descartadas por depender demais de uma quantidade muito grande de exem-
plos para a identi�cação adequada de qualquer intenção. Ao �nal, foi adotada a
seguinte con�guração:
Função de ativação Leaky ReLU
Otimizador Adamax
Tamanho do batch 16
Taxa de aprendizado 0,1
Tal con�guraçã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 con�guração para
o problema de reconhecimento de intenções. Para garantir então que não fosse
escolhida uma con�guração muito distante do ótimo, foram comparados os resul-
tados obtidos por cada con�guraçã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.
Figura 12 � Comparação de otimizadores no bot.
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
con�guração para a identi�caçã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 classi�cada correta-
mente. Esta visualização é apresentada na Figura 13, em que a intenção é marcada
com uma chave (�livro�, neste caso). Se o administrador pressionar o botão �con�r-
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 classi�cá-la corretamente no futuro.
Figura 13 � Visualização de mensagem recebida do chatbot
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 identi�cados. 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 identi�cada 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 intenção é con�rmada
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 identi�cando textos de diferentes características enviados pelo usuário.
Os primeiros exemplos, na Figura 17, são de funções que utilizam somente
o identi�cador 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 modi�cados 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 identi�cadas e é feita uma busca no banco
de dados para saber qual o signi�cado 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 identi�cação incorreta, esta seja facilmente veri�cada pelo usuário.
Na seguinte, Figura 19, há um exemplo de uma função com e sem entidade
identi�cada. 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 identi�cadas.
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
�ltro de busca (autor, título ou assunto) e outra para saber o nome a ser procurado.
Devido ao pequeno tamanho das telas de smartphones, foram limitadas as buscas
a 10 resultados, podendo o usuário requisitar os próximos 10, até que não hajam
mais resultados.
Figura 20 � Interação com o bot em �uxo de conversa.
Finalmente, algumas consultas ao bot podem ser realizadas por meio de
marcadores. Na Figura 21 seguem alguns exemplos destas consultas.
Figura 21 � Interação com o bot através de marcadores.
6 Conclusões
O objetivo deste projeto foi desenvolver um chatbot para ser aplicado à
comunidade acadêmica da UFRN com base em técnicas modernas de aprendizado
profundo. O projeto foi desenvolvido em Java, com uma rede neural convolucio-
nal arquitetada para identi�car as intenções nas mensagens recebidas. A rede foi
projetada, testada e teve seus hiperparâmetros decididos através da avaliação de
testes aleatórios de con�gurações. Foi criada uma estrutura de edição de banco de
dados em plataforma web para adicionar, remover e editar intenções e entidades,
assim como também visualizar as mensagens enviadas pelos usuários.
Compreende-se que o objetivo do trabalho foi alcançado, uma vez que: a
rede convolucional se mostrou capaz de identi�car as intenções nas mensagens
recebidas; os sinônimos de entidades foram identi�cados; e o chatbot foi capaz de
responder corretamente às mensagens do usuário.
Referências
AMAZON. Alexa Experience Guide. 2018. Disponível em: <https://www.amazon.com/b?node=17934671011>. Acesso em: 17 de dez. de 2018. 17
APPLE. Siri. 2018. Disponível em: <https://www.apple.com/br/siri/>. Acessoem: 17 de dez. de 2018. 17
BOJANOWSKI, P. et al. Enriching word vectors with subword information.Transactions of the Association for Computational Linguistics, v. 5, p. 135�146,2017. 25
BYOUS, J. Java Technology: The Early Years. 1998. Disponível em:<https://web.archive.org/web/20050420081440/http://java.sun.com/features/1998/05/birthday.html>. Acesso em: 04 de dez. de 2018. 45
CARPENTER, R. About the Jabberwacky AI. 2018. Disponível em:<http://www.jabberwacky.com/j2about>. Acesso em: 04 de dez. de 2018. 22
CLEVERT, D.; UNTERTHINER, T.; HOCHREITER, S. Fast and accurate deepnetwork learning by exponential linear units (elus). International Conference onLearning Representations 2016, 2015. 35
COLBY, K. Arti�cial paranoia. Arti�cial Intelligence, v. 2, p. 1�25, 1971. 21
COLBY, K.; HILF, D. Can expert judges, using transcripts of teletypedpsychiatric interviews, distinguish human paranoid patients from a computersimulation of paranoid processes? 1972. 21
CREATIVE LABS, INC. Sound Blaster 1.5 - User Reference Manual. [S.l.], 1990.Disponível em: <http://ibm-pc.org/manuals/other/creative/SoundBlaster15.PDF>. 22
DOZAT, T. Incorporating nesterov momentum into adam. InternationalConference on Learning Representations 2016, 2016. 37
DUCHI, J.; HAZAN, E.; SINGER, Y. Adaptive subgradient methods for onlinelearning and stochastic optimization. Journal of Machine Learning Research,v. 12, p. 2121�2159, 2011. 37
HE, K. et al. Delving deep into recti�ers: Surpassing human-level performance onimagenet classi�cation. Proceedings of the International Conference on ComputerVision, p. 1026�1034, 2015. 35
HERNDON, C. Case Study: How Georgia State Univer-sity supports every student with personalized text messa-ging. 2017. Disponível em: <https://blog.admithub.com/case-study-how-admithub-is-freezing-summer-melt-at-georgia-state-university>.Acesso em: 17 de dez. de 2018. 17
HUSSAIN, A. Ada - Bolton College's Latest Digital Assistant. 2017. Disponívelem: <http://www.aftabhussain.com/ada.html>. Acesso em: 17 de dez. de 2018.17
JOHNSON, R. Spring Framework: The Origins of a Project anda Name. 2006. Disponível em: <https://spring.io/blog/2006/11/09/spring-framework-the-origins-of-a-project-and-a-name>. Acesso em: 04 dedez. de 2018. 45
JURAFSKY, D.; MARTIN, J. Speech and Language Processing. 3. ed. [S.l.: s.n.],2018. 26, 30, 33, 36
KIM, Y. Convolutional neural networks for sentence classi�cation. EMNLP, p.1746�1751, 2014. 49
KINGMA, D.; BA, J. Adam: A method for stochastic optimization. Proceedingsof the 3rd International Conference on Learning Representations (ICLR), 2014.37
KRIESEL, D. A Brief Introduction to Neural Networks. 2007. Disponível em:<http://www.dkriesel.com>. 33
LING, W. et al. Two/too simple adaptations of word2vec for syntax problems.In: Proceedings of the 2015 Conference of the North American Chapter of theAssociation for Computational Linguistics: Human Language Technologies. [S.l.]:Association for Computational Linguistics, 2015. p. 1299�1304. 24
MAAS, A.; HANNUN, A.; NG, A. Recti�er nonlinearities improve neural networkacoustic models. Proceedings of ICML, v. 28, 2013. 35
MCCULLOCH, W.; PITTS, W. A logical calculus of ideas immanent in nervousactivity. Bulletin of Mathematical Biophysics, v. 5, p. 127�147, 1943. 33
MICROSOFT. Cortana: Sua assistente pessoal e virtual inteligente. 2018.Disponível em: <https://www.microsoft.com/pt-br/windows/cortana>. Acessoem: 17 de dez. de 2018. 17
MIKOLOV, T. et al. E�cient estimation of word representations in vector space.CoRR, 2013. 24
MURPHY, K. Machine Learning : A probabilistic perspective. [S.l.]: MIT Press,2012. 29
NAIR, V.; HINTON, G. Recti�ed linear units improve restricted boltzmannmachines. Proceedings of ICML, v. 27, p. 807�814, 2010. 35
NESTEROV, Y. A method for unconstrained convex minimization problem withthe rate of convergence o(1/k2). Doklady AN USSR, v. 269, p. 543�547, 1983. 37
ORACLE CORPORATION. Java Language Speci�cation. 2015. Disponível em:<https://docs.oracle.com/javase/specs/jls/se8/html/jls-1.html>. Acesso em: 05de dez. de 2018. 45
PENNINGTON, J.; SOCHER, R.; MANNING, C. Glove: Global vectors for wordrepresentation. In: EMNLP. [s.n.], 2014. v. 14, p. 1532�1543. Disponível em:<https://nlp.stanford.edu/pubs/glove.pdf>. 24
PITOVAL SOFTWARE. Spring Framework Overview. 2018. Disponível em:<https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html>. Acesso em: 05 de dez. de 2018. 45
RODRIGUES, A. A history of smarterchild. 2016. Disponível em: <https://motherboard.vice.com/en_us/article/jpgpey/a-history-of-smarterchild>.Acesso em: 04 de dez. de 2018. 22
SKYMIND. Deeplearning4j. 2018. Disponível em: <https://skymind.ai/wiki/deeplearning4j>. Acesso em: 04 de dez. de 2018. 46
SUPERINTENDêNCIA DE INFORMáTICA DA UFRN. API de Sistemas daUFRN. 2018. Disponível em: <https://api.ufrn.br>. Acesso em: 04 de dez. de2018. 46
THE APACHE SOFTWARE FOUNDATION. Apache OpenNLP. 2018.Disponível em: <https://opennlp.apache.org>. Acesso em: 04 de dez. de 2018. 45
THE PGADMIN DEVELOPMENT TEAM. pgAdmin - PostgreSQL Tools. 2018.Disponível em: <https://www.pgadmin.org>. Acesso em: 04 de dez. de 2018. 46
THE POSTGRESQL GLOBAL DEVELOPMENT GROUP. PostgreSQL: TheWorld's Most Advanced Open Source Relational Database. 2018. Disponível em:<https://www.postgresql.org>. Acesso em: 04 de dez. de 2018. 46
THE THYMELEAF TEAM. Thymeleaf. 2018. Disponível em: <https://www.thymeleaf.org>. Acesso em: 04 de dez. de 2018. 45
TIELEMAN, T.; HINTON, G. Lecture 6.5: Rmsprop: Divide the gradient by arunning average of its recent magnitude. Coursera: Neural networks for machinelearning, 2012. 37
WALLACE, R. S. The anatomy of a.l.i.c.e. 2002. Disponível em: <https://web.archive.org/web/20171230101216/http://www.alicebot.org:80/anatomy.html>.22
WEIZENBAUM, J. Eliza � a computer program for the study of naturallanguage communication between man and machine. Communications of theACM, v. 9, p. 36�45, 1966. 21
XU, B. et al. Empirical evaluation of recti�ed activations in convolution network.ICML Deep Learning Workshop, 2015. 35
ZEILER, M. Adadelta: An adaptive learning rate method. CoRR, abs/1212.5701,2012. 37