SISTEMA WEB INTERATIVO E ADAPTATIVO DE RESPOSTA AUTOMÁTICA

Tamanho: px
Começar a partir da página:

Download "SISTEMA WEB INTERATIVO E ADAPTATIVO DE RESPOSTA AUTOMÁTICA"

Transcrição

1 SISTEMA WEB INTERATIVO E ADAPTATIVO DE RESPOSTA AUTOMÁTICA Felipe Borda Carregosa Projeto de Graduação apresentado ao Curso de Engenharia Eletrônica e de Computação da Escola Politécnica, Universidade Federal do Rio de Janeiro, como parte dos requisitos necessários à obtenção do título de Engenheiro. Orientador: Heraldo Luis Silveira de Almeida Rio de Janeiro Agosto de 2014

2

3 UNIVERSIDADE FEDERAL DO RIO DE JANEIRO Escola Politécnica Departamento de Eletrônica e de Computação Centro de Tecnologia, bloco H, sala H-217, Cidade Universitária Rio de Janeiro RJ CEP Este exemplar é de propriedade da Universidade Federal do Rio de Janeiro, que poderá incluí-lo em base de dados, armazenar em computador, microfilmar ou adotar qualquer forma de arquivamento. É permitida a menção, reprodução parcial ou integral e a transmissão entre bibliotecas deste trabalho, sem modificação de seu texto, em qualquer meio que esteja ou venha a ser fixado, para pesquisa acadêmica, comentários e citações, desde que sem finalidade comercial e que seja feita a referência bibliográfica completa. Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es). iii

4 AGRADECIMENTO Agradeço à minha família, que me suportou, todos os professores e funcionários da UFRJ e aos pesquisadores da área de Inteligência Artificial por criarem e evoluírem a área que eu amo. iv

5 RESUMO O projeto implementa um sistema web de respostas automáticas em ruby on rails e jruby. O sistema recebe a entrada do usuário em linguagem natural (inglês), analisa o texto, detecta a intenção do usuário, executa a função e prepara uma resposta apropriada. A análise da entrada é realizada através de técnicas de extração de informação e reconhecimento de entidade nomeada, além de comparações com o histórico de entradas do usuário. Um controlador de diálogo é implementado para permitir na mesma interface a entrada de feedback do usuário e a adaptação dinâmica do sistema buscando reduzir erros futuros. Palavras-chave: ruby on rails, question-answering, nlp, named-entity recognition, dialog systems v

6 ABSTRACT This project implements a web based question-answering system in ruby on rails and jruby. The system receives an user input in natural language (English), parses the text, detects the intentions of the user, executes the function and prepare an appropriate response. The analysis of the input is performed by techniques of both information retrieval and named entity recognition, and comparisons with the history of inputs from the user. A dialogue controller is implemented to allow, in the same interface, the entry of user feedback and the dynamic adaptation of the system seeking the reduction of future errors. Key-words: ruby on rails, question-answering, nlp, named-entity recognition, dialog systems vi

7 SIGLAS DFA Deterministic Finite Automaton HMM Hidden Markov Model NER Named-entity Recognition NFA Nondeterministic Finite Automaton NLP Natural Language Processing PoS Part-of-speech QA Question Answering Regex Regular Expressions TF-IDF Term Frequency-Inverse Document Frequency UFRJ Universidade Federal do Rio de Janeiro VSM Vector Space Model vii

8 Sumário 1 Introdução Tema Delimitação Justificativa Objetivos Metodologia Descrição Contexto História da interação homem x máquina com linguagem natural As origens O primeiro chatterbot: ELIZA O aprendizado de máquina De chatterbots para sistemas de resposta e diálogos A Linguagem Línguas naturais e artificiais Representação formal da linguagem A hierarquia das gramáticas Linguagem formal x Língua natural Outras representações de textos Saco de Palavras O modelo n-gram viii

9 2.3 - O Processamento de Linguagem Natural Desafios No nível de palavras No nível de coleções de palavras Ferramentas Software Base Linguagem de Programação: Jruby Infraestrutura: Ruby on Rails e PostgreSQL Bibliotecas Centrais Apache OpenNLP e Stanford CoreNLP A base de treino: Inglês x Português Outras bibliotecas Implementação Extração de palavras-chaves Entidades com forma regular (números, datas, porcentagens, dinheiro e s) Entidades que requerem normalização (datas) Entidades não regulares (nomes próprios de pessoas, organizações e lugares) Reconhecimento de entidade nomeada (NER) O OpenNLP NER Palavras-chave fixas (verbos ou palavras denotando o comando) ix

10 Algoritmos de radicalização (stemming) Validador Classificador Comparação de textos: Entrada e Histórico de Entradas Ranking O feedback do usuário (Controlador de Diálogo) O controle de diálogo Detecção de tipo de mensagem Aprimorando o classificador Síntese de saída Tratando comandos com efeitos secundários Resultados Preparo do sistema Instalação do sistema básico Configuração Rodando a aplicação Análise Considerações Iniciais Desempenho Qualidade Teste da execução de comandos Teste do fluxo de diálogo Conclusões 58 x

11 5.1 - Avaliação do projeto Propostas de melhorias do projeto Bibliografia 60 A Regras do OpenNLP NER 63 B Etiquetas do OpenNLP POS tagger 65 xi

12 Lista de Figuras Derivação de uma frase na gramática apresentadal Hierarquia de Chomsky para gramáticas Módulos do sistema Estados e transições do controlador de diálogo Módulos finais do sistema xii

13 Lista de Tabelas 4.1 Frase apropriadamente etiquetada Exemplo de mudanças de estados em uma conversa Tipos de mensagem na aplicação Tratamento de efeitos secundários xiii

14 Capítulo 1 Introdução 1.1 Tema O objetivo do projeto é a criação de um sistema adaptativo de resposta automática, focado na realização de tarefas pré-programadas para o usuário a partir de entradas não estruturadas em linguagem natural. Na perspectiva do usuário, deseja-se criar uma secretária virtual que executa pedidos em inglês natural. A vantagem de um sistema de resposta automática é a facilidade de uso já que usuários não precisam se adaptar ao sistema, e sim o sistema se adapta ao usuário, requerendo então mínimo treinamento. O sistema é desenvolvido também como uma aplicação web, se aproveitando da ubiquidade da internet para prover serviços a usuário de forma simples e sempre presente. A área de pesquisa ligada à implementação desse sistema é um ramo da Inteligência Artificial conhecida como Question Answering (QA), que une ferramentas das áreas de Processamento de Linguagem Natural (NLP Natural Language Processing) e Recuperação de Informação (IR Information Retrieval). 1.2 Delimitação Embora o objetivo não seja a construção de um produto completo para o mercado, em particular devido às restrições de recursos para se produzir a base de treino dedicada, o foco é o usuário final de computadores, smartphones e tablets que deseja uma forma simples e rápida de comandar a execução de tarefas do dia a dia. A língua da aplicação implementada é restrita ao Inglês, requerindo considerável modificação no código e nas ferramentas para permitir outras línguas como o Português. O 1

15 relatório é válido para ambas as línguas no entanto. 1.3 Justificativa No momento, essa área recebe investimento de diversos grupos e grandes empresas, especialmente focado em smartphones e integrados a sistemas de reconhecimento e síntese de voz, permitindo aos usuários pesquisar e acessar diversas funções do dispositivo e online sem ter de navegar por múltiplos menus e ter de acessar o teclado. Exemplos famosos são o Apple SIRI [1], o Google Now [2], o Microsoft Cortana [3] e o Samsung S Voice [4]. Projetos envolvendo puramente entrada de texto também existem, incluindo o Wolfram Alpha [5], um sistema de resposta na área de matemática e lógica desenvolvida pela Wolfram Research. Embora seja uma área com forte investimento, como envolve problemas não resolvidos da computação, especialmente na área de processamento de linguagem natural, a área ainda está aberta para desenvolvimento de novas técnicas e abordagens que melhorem a robustez e qualidade do sistema em diversas áreas, como na interpretação dos comandos, na escolha das respostas, na síntese do texto da resposta e ainda em métodos mais interativos que permitiriam estabelecer um diálogo entre o usuário e o sistema. 1.4 Objetivos O foco do projeto é primeiro construir um sistema de resposta básico e funcional, e então pesquisar formas de aprimorar a qualidade dos resultados. Isso envolve decisões quanto às técnicas a serem utilizadas, considerando tanto o desempenho quanto a usabilidade. Serão integradas bibliotecas de pontas na área de processamento de linguagem natural, junto com o desenvolvimento da interface web, infra-estrutura com o banco de dados e um modelo de configuração que procura reduzir a necessidade de editar o código para adicionar novas funcionalidades. O projeto não abordará, no entanto, os módulos referentes a reconhecimento e síntese de voz, embora o projeto possa ser estendido para tal funcionalidade. 2

16 1.5 Metodologia O projeto envolve inicialmente o estudando das ferramentas e métodos de implementações relacionados, em particular nas áreas de processamento de linguagem natural e de sistemas de resposta automática, seguido pela decisão quanto a quais deles podem ser aplicados para melhorar a qualidade das respostas. Os testes serão focados nos aspectos funcionais, embora serão delimitados os aspectos relevantes a serem testado em nível de produção. 1.6 Descrição O capítulo 2 cobre o contexto histórico dos sistemas de respostas automáticas, a teoria básica da língua e da gramática, incluindo formas de modelagem que serão utilizadas, e um resumo das áreas estudadas pelo processamento de linguagem natural com as ferramentas que serão utilizadas. O capítulo 3 discute a linguagem de programação, o framework web, as bibliotecas e as bases de dados utilizados neste projeto. A implementação do sistema propriamente dito, junto com a explicação do funcionamento de cada biblioteca utilizada, é o assunto do capítulo 4. Como instalar, executar e os testes do sistemas são apresentados no capítulo 5. O capítulo 6 é a conclusão do projeto. 3

17 Capítulo 2 Contexto 2.1 História da interação homem x máquina com linguagem natural As origens A idéia de uma máquina capaz de replicar a capacidade de diálogo humana em muito precede a concepção do primeiro computador. O filósofo do século XVII René Descartes já havia feito a suposição de que [...] pode-se muito bem imaginar uma máquina que seja feita de tal modo que articule palavras, e até que articule algumas a respeito das ações corporais que causem alguma mudança em seus órgãos [6]. Descartes, no entanto não acreditava que seria possível construir uma máquina com uma disposição específica para lidar com todas as ocasiões da vida, como permite a razão humana, e, portanto a máquina [...] ainda que fizesse coisas tão bem, ou talvez melhor do que qualquer um de nós, falhariam inevitavelmente em algumas outras, pelas quais se descobriria que não agem pelo conhecimento, mas apenas pela distribuição ordenada de seus órgãos [6]. Com a invenção dos computadores, os cientistas finalmente tiveram acesso a uma ferramenta supostamente capaz de implementar tal máquina. Baseado em pesquisas na área da neurociência, que indicavam que coleções de células simples eram capazes de gerar o pensamento, no início da década de 50 Marvin Minsky e Dead Edmonds projetaram o primeiro computador de rede neural, simulando uma rede de 40 neurônios [7]. Esse e outros projetos, junto com o artigo de 1950 de Alan Turing Computing Machinery and Intelligence [8] foram a base do nascimento da área da Inteligência Artificial. Alan Turing fez a mesma pergunta que Descartes já havia se deparado: Podem máquinas pensar?, e refraseou como Podem máquinas fazer aquilo que nós, seres pensantes, somos capazes de fazer?. A partir daí propôs o que ficou conhecido como Teste de Turing, em que se uma máquina fosse capaz de responder adequadamente um conjunto de perguntas de um juri, convencendo a maioria de que era de fato um ser humano, essa máquina seria dita 4

18 inteligente O primeiro chatterbot: ELIZA As primeiras tentativas na área de reconhecimento de linguagem foram programas baseado em reconhecimentos de padrões e símbolos, associando, via regras prescritas, uma determinada entrada ao modelo de resposta adequado. O primeiro e um dos mais famosos exemplos foi criado por Joseph Weizenbaum em 1960 no MIT e chamado ELIZA, um chatterbot que simulava as respostas de um psicoterapeuta fictício. O sistema era alimentado por regras da forma: key: can decomp: * can you * reasmb: You believe I can (2) don't you? reasmb: goto what reasmb: You want me to be able to (2). reasmb: Perhaps you would like to be able to (2) yourself. decomp: * can i * reasmb: Whether or not you can (2) depends on you more than me. reasmb: Do you want to be able to (2)? reasmb: Perhaps you don't want to (2). reasmb: goto what Essa regra detecta a palavra-chave can, e tenta casar com os padrões can you ou can i, e mapeando o que vem antes para '(1)' e o que vem depois para '(2)'. Para cada padrão, múltiplas possíveis respostas podem ser usadas. A entrada Eliza, can you fly? poderia então gerar a resposta You believe I can fly don't you?. Um exemplo de diálogo [9]: > Hello. My name is Eliza. How may I help you? * Eliza, can you talk? > Perhaps you would like to be able to talk? 5

19 * I do talk > OK... "Eliza, can I talk". Tell me more. * You can't really talk. > We were discussing you, not me. * Ok, I can talk. > Tell me more... * I'm talking to you. > Do you believe it is normal to be talking to me? * Yes > I see. Naturalmente um sistema dessa forma não é capaz de manter um diálogo simples, muito menos passar no Teste de Turing. Mais importante, o sistema não é robusto no sentido que é absolutamente incapaz de lidar com entradas não previstas pelo criador das regras. Em outras palavras, o desenvolvedor tem de considerar todas as entradas possíveis, o que seria um sistema extremamente complexo de se criar e modificar. Por fim, as regras teriam de ser reescritas sempre que mudar o domínio da aplicação, e inclusive totalmente reescritas para poderem suportar outra língua O aprendizado de máquina Modelos baseadas em manipulação simbólica nunca obtiveram o sucesso que cientistas das décadas de 60 e 70 prometeram, e depois da euforia inicial acabada, a área evoluiu para sistemas que utilizavam o que se chama aprendizado de máquina. Eram algoritmos capazes de adaptar à entrada de uma forma que regras fixas não eram capazes, como árvores de decisão, redes neurais, evolução de máquina (algoritmos genéticos). No entanto um novo muro se apresentava. Os recursos computacionais da época não eram capazes de lidar com a complexidade assintótica dos algoritmos para a solução de qualquer problema não trivial. Além disso, os algoritmos disponíveis não eram escaláveis para o reconhecimento de padrões mais complexos. Por exemplo, redes neurais não foram capazes de tal tarefa até a introdução de um modelo de múltiplas camadas com aprendizado por retropropragação no final dos anos 80. 6

20 Com os problemas acima sendo progressivamente resolvidos com o avanço dos computadores e dos conhecimentos na área, a partir da década de 90 houve um forte renascimento das técnicas de aprendizado de máquina, com forte foco em aplicações comerciais. Sistemas que reconhecem a escrita, modelos probabilísticos usados para tradução automática de texto entre línguas, câmeras capazes de reconhecer objetos e pessoas, e autômatos capazes de tomar decisão... Uma das características que se iniciou nessa fase, e que se estende até a atualidade, foi o novo foco em criar metodologias com forte base na ciência e matemática, e não mais na experimentação e na inspiração de sistemas biológicos. O foco então se voltou para as áreas de controle e estatística, produzindo novos algoritmos e implementações com resultados bastante satisfatórios, como as redes bayesianas, modelos ocultos de markov (HMM) e máquinas de vetores de suporte (SVM) De chatterbots para sistemas de respostas e diálogos Em paralelo com a evolução das ferramentas de aprendizado de máquina, foi se formando o conhecimento na área que ficou conhecida como processamento de linguagem natural. O processamento da linguagem deixou de depender exclusivamente de regras projetadas por seres humanos, já que os novos algoritmos eram capazes de inferi-las a partir de bases de textos devidamente classificadas para treino. Os novos algoritmos são menos dependentes de língua e domínio, e capazes de se adaptar a novas entradas sem interferência externa. Esses algoritmos envolvem métodos para fazer a análise morfossintática da frase, identificar as palavras-chaves que contêm o significado da mensagem como o local, o tempo, a ação, o sujeito e o objeto, além de identificar as referências semânticas como a quem se refere os pronomes ou apelidos entre outras técnicas que serão discutidas posteriormente. 2.2 A Linguagem Línguas naturais e artificiais 7

21 A ferramenta fundamental que usamos para comunicar nossas intenções com os outros é a língua. As línguas mais usadas pelos humanos são aquelas que evoluíram juntamente com cada cultura através dos séculos, e são ensinadas as novas gerações, como o Português, Inglês e o Chinês. Elas são conhecidas como línguas naturais. Essa evolução descontrolada provocou, no entanto, um grande aumento da complexidade das línguas, incluindo diversas regras e exceções, como por exemplo, verbos irregulares no Português. Além disso, as línguas naturais espelham o ambiente de uma civilização em um determinado instante. Para ser corretamente interpretada depende de que o locutor não somente conheça as regras mas também o contexto social a que pertencem. Finalmente, essas línguas foram criadas para comunicação entre pessoas, que são seres inteligentes o suficiente para, na maioria das vezes, inferir a mensagem original mesmo quando o meio pela qual é expressa é imprecisa e ambígua. Buscando evitar a complexidade e ambiguidade das línguas naturais para fins em aplicações específicas, linguistas e cientistas construíram diversas línguas artificiais. Para auxiliar a comunicação entre pessoas de diferentes nacionalidades foi criado por exemplo o Esperanto. Para especificar uma tarefa para um computador foram criadas diversas linguagens de programação como C, Java e Ruby Representação formal da linguagem Como o objetivo do trabalho é o reconhecimento de elementos da língua natural através de algoritmos, é desejável achar um modelo formal para a linguagem. Usando o português como exemplo, temos inicialmente o conjunto de palavras válidas formados por cadeias de símbolos do chamado alfabeto e um conjunto de regras que definem se uma série de palavras é uma expressão válida, a que chamamos de gramática. A gramática formalmente pode ser representada como a seguinte tupla: G = { N, Σ P, S} Onde: N é o conjunto de elementos não terminais, ou as classes referente aos agrupamentos 8

22 de palavras. Σ é o conjunto de elementos terminais, ou todas as palavras válidas na linguagem P é o conjunto de regras de produção, que relacionam palavras às suas classificações S é o elemento inicial Um exemplo simples de gramática então poderia ser definido da seguinte forma: N: {<oração>, <sujeito>, <verbo>, <objeto>, <substantivo>, <artigo>} Σ: {carro, celular, projeto, o, a, um, uma, eu, ele, você, comprou, pediu, acabei... } P: { <oração> <sujeito><verbo><objeto>, <sujeito> <pronome>/<substantivo>, <objeto> <substantivo>/<artigo><substantivo>, <substantivo> carro/celular/projeto..., <artigo> o/a/um/uma... <pronome> eu/ele/você..., <verbo> comprou/pediu/acabei... } S: <oração> De forma que a frase Eu acabei o projeto seria uma expressão válida, pois, a partir do estado inicial e aplicando as regras de produção sucessivamente: Figura 2.1: Derivação de uma frase na gramática apresentada Uma gramática é dita ambígua quando a mesma série de elementos terminais pode ser 9

23 produzida por diferentes conjuntos de regras. A língua portuguesa, como no geral para as línguas naturais, possui ambiguidades não somente no significado, mas também na própria gramática. Na oração Vi o acidente da estação [10], 'estação' quando se refere ao lugar que a ação de 'ver' foi realizada, é classificado como um adjunto adverbial, enquanto que, caso se refira ao lugar em que se ocorreu o acidente, é classificado como adjunto adnominal A hierarquia das gramáticas O linguista americano Noam Chomsky, construiu quatro classificações hierárquicas para linguagens formais de acordo com a suas regras de produção: Gramática irrestrita, ou tipo 0: As regras de produção são da forma: {(Lc)(NT)(Rc)} {cadeia de elementos terminais e não terminais}, onde Lc é o contexto à esquerda, Rc o contexto à direita e NT um elemento não terminal. Todas as gramáticas possíveis fazem parte dessa classificação. Gramática sensível ao contexto, ou tipo 1: As regras de produção são da forma: αaβ αγβ, onde A é um único elemento não terminal, α e β são cadeias de elementos terminais e não terminais) e y é uma cadeia não vazia de elementos terminais e não terminais. Sensível ao contexto significa que uma palavra pode ou não ser adequada dependendo de onde é posicionada em termos dos elementos a seu redor. Chomsky acreditava que as línguas naturais fazem parte dessa categoria, e ainda hoje não existem ferramentas capazes de perfeitamente interpretar linguagens a partir desse tipo. Gramática livre de contexto, ou tipo 2: As regras de produção são da forma: (NT) α, onde NT é um único elemento não terminal, e α uma cadeia de elementos terminais e 10

24 não terminais. Por serem simples de se interpretar por um programa, os criadores de linguagens de programação buscam gramáticas livres de contexto. A linguagem C, por exemplo, é livre de contexto se não forem utilizadas macros ou diretivas de pré-processador. Chomsky buscou sem sucesso um meio de transformar uma gramática tipo 1 em tipo 2, ou seja achar um equivalente livre de contexto para as línguas naturais. Gramática regular, ou tipo 3: As regras de produção são da forma: A α or A αb, onde A e B são um único elemento não terminal e α uma cadeia de elementos terminais. Na programação é comumente implementado através de expressões regulares (Regular Expressions), uma forma comum e simplificada de se implementar, em texto, uma máquina de estados finita não determinística. Figura 2.2: Hierarquia de Chomsky para gramáticas 11

25 2.2.3 Linguagem formal x Língua natural O nosso objetivo é extrair informações da língua natural sem o auxílio humano, de forma que precisamos desenvolver algoritmos para a tarefa. No entanto, a língua natural é extremamente complexa, ambígua e sequer entendemos como o nosso cérebro consegue interpretá-la, antes mesmo de se considerarem obstáculos para a implementação como o desempenho da execução e os limites assintóticos dos algoritmos. A importância de compreender a linguagem formal e as hierarquias de Chomsky é que todos os algoritmos voltados ao processamento de linguagem natural existentes interpretam não diretamente a língua natural, mas um modelo com um determinado grau de simplificação. Um mecanismo que extrai s de um texto em português através de expressões regulares vê a linguagem como uma gramática regular, e a mesma ferramenta não seria capaz de extrair o verdadeiro sentido de um texto que estivesse descrita no mínimo em uma gramática sensível ao contexto e ambígua. Embora essa simplificação claramente implique que parte da informação da entrada está sendo ignorada, para várias tarefas, incluindo algumas utilizadas nesse projeto, mesmo uma modelagem como uma gramática regular já produz excelentes resultados. Para outras, como a análise sintática da estrutura da frase, a mesma é considerada uma gramática livre de contexto com bons resultados em aplicações reais Outras representações de textos Saindo das modelagens mais formais das linguagens, podemos citar algumas outras modelagens muito usadas na prática por algoritmos de recuperação de informação como, por exemplo, por buscadores como o Google, tradutores automáticos, filtros de , etc Saco de Palavras 12

26 Na forma mais simples usada para extrair informação de texto, usa-se o modelo chamado saco de palavras (bag-of-words), em que se consideram os comandos como coleções de palavras, ignorando as relações entre elas, e também suas posições na frase e a estrutura gramatical em geral. Nesse modelo os textos são normalmente representados por um vetor com cada palavra encontrada e o número de vezes que ela apareceu. Embora simples, esse modelo é amplamente utilizado na prática, por exemplo, para filtros anti-spam através de filtros bayesianos ingênuos. Quando se observa não mais apenas as palavras, mas a estrutura geral da frase, passamos a utilizar as abordagens que são partes da área de processamento de linguagem natural O modelo n-gram Uma forma simples de analisar uma frase considerando também a ordem das palavras é considerá-la como uma forma de cadeia de Markov de ordem m. A cadeia de markov de ordem m é um modelo estocástico em que o estado de cada elemento da cadeia é uma função apenas dos m elementos que imediatamente o antecedem. Em termos de modelagem de linguagem, o modelo correspondente à cadeia de markov de ordem 0 é chamado de unigram e, como cada palavra é completamente independente de seu contexto, é equivalente a um modelo de saco de palavras. A probabilidade de a próxima palavra ser, por exemplo, a palavra casa seria calculada em função da frequência que a mesma palavra tenha aparecido no documento usado para o treino. A probabilidade da expressão a casa ocorrer é o produto da probabilidade de a aparecer no teste vezes a probabilidade de casa aparecer no teste, mesmo que seja intuitivo que o artigo definido feminino singular a aumente a chance de casa o seguir por eliminar, entre outros, substantivos ou masculinos ou no plural. Buscando então construir um modelo que aproxima melhor a nossa linguagem, na qual sabemos que cada elemento depende de seu contexto, podemos utilizar uma cadeia de markov de ordem 1, o modelo bigram. Utilizando novamente da expressão a casa, agora para definir a probabilidade de casa ocorrer, não só estudamos a frequência de casa ocorrer no treino, mas a frequência que casa ocorreu seguindo a. 13

27 Seguindo então, é possível observar qualquer número n de palavras anteriores utilizando o modelo n-gram (de forma que 3 palavras seria um trigram ou 3-gram, 4 palavras um 4-gram...). No entanto quanto maior a ordem, maior a probabilidade das séries de palavras nunca aparecerem na base de teste, reduzindo a eficiência do algoritmo além de, como diversos outros algoritmos de aprendizados, super especializando para a estrutura de texto utilizada no treinamento. São necessários métodos para lidar com expressões não encontradas, sendo uma solução possível a redução da ordem do n-gram para o caso de não se encontrarem as cadeias mais específicas. Uma crítica desse modelo diz respeito a incapacidade de modelar relacionamentos distantes, algo comum na gramática, visto que só a história imediata é considerada. O fato de ignorar as regras gramaticais também põe em dúvida a eficiência, em comparação a modelos que incorporam essa informação diretamente. 2.3 O Processamento da Linguagem Natural Desafios O processamento de linguagem natural é uma área que vem sendo intensamente pesquisada por 50 anos, com enormes avanços enquanto enfrentando barreiras que parecem intransponíveis para alcançar o santo graal que representa as máquinas entenderem a língua tão bem quanto uma pessoa comum. Para enfrentar o problema, os pesquisadores usaram a estratégia de dividir para conquistar e dividiram a área em inúmeras subáreas, dentro da qual Question Answering é uma com forte interesse e, de forma não incomum para a área, ela também depende de múltiplas outras subáreas. A seguir são brevemente descritos os vários desafios que estão sendo abordados No nível de palavras 14

28 a) Segmentação de palavras (Tokenization): Divisão da entrada em palavras, que embora algumas linguagens sejam mais difíceis, como chinês e japonês, em línguas como português, que usam espaçamento entre palavras, a solução é bem mais simples. Existem, porém outras situações que devem ser consideradas, como a separação da vírgula e conjuntos de palavras as quais para certas finalidades, devem ser contadas apenas como uma, como Rio de Janeiro. Ex: Entrada Segmentação de palavras é mais simples onde há espaços. Saída [ Segmentação, de, palavras, é, mais, simples, onde, há, espaços,. ] b) Radicalização (Stemming): Palavras em português sofrem mutações via múltiplas flexões gramaticais, conjugações verbais e colocações pronominais. Para conter essas variações usa-se métodos para extrair a parte que contém o sentido básico, ou seja o radical. Ex: Entrada editores, revisão, desinteresse Saída edit, revis, interess Observação: Nem todas as palavras do português são possíveis encontrar o radical utilizando as regras gerais da língua. É o caso de verbos irregulares, cuja única solução é a manutenção de uma lista com todas as formas e os radicais. c) Analise léxica/etiquetagem Morfossintática (Part-of-Speech Tagging): Em muitas aplicações é útil identificar a classe gramatical de uma palavra, como o verbo que define a ação, o sujeito da ação, o objeto e o tempo ou lugar da oração. A dificuldade principal é que a mesma palavra tem diferentes classes gramaticais dependendo do contexto, como por exemplo casa em Essa é a minha casa e Ela casa amanhã. Ex: Entrada A análise foi um sucesso Saída 15

29 [ A/Artigo Definido, análise/substantivo, foi/verbo, um/artigo Indefinido, sucesso/substantivo ] d) Reconhecimento de entidade mencionada (Named-entity Recognition): É a área do processamento de linguagem natural que pesquisa formas de identificar entidades (pessoas, organizações, lugares,...) de forma automática. Na língua portuguesa normalmente se capitaliza entidades, mas não existe garantia que a entrada seguirá essa regra. Entrada João e Maria viajaram para Rio de Janeiro no Carnaval Saída Pessoas: João, Maria Lugar: Rio de Janeiro Evento: Carnaval e) Bancos de dados léxicos: As palavras possuem relacionamentos quanto aos significados que são utilizadas constantemente durante a escrita normal. Por exemplo, Eu comi ontem um taco. A comida estava ótima.. Taco e comida têm um relacionamento que precisa ser compreendido pelo sistema para extrair que o taco estava ótimo. O banco de dados léxico mais famoso para o inglês é a WordNet [11]. Os relacionamentos usados na wordnet são Sinônimos: Usuários podem usar diversas palavras com o mesmo significado quando fizerem uma requisição ao sistema, como adicione em vez de some ; Hiperônimos e hipônimo: Definições relacionadas com a abrangência do sentido: bicho é um hiperônimo de cachorro, e escutar é um hipônimo de perceber. Merônimos e holônimos: Definição relacionada a constituição: janela é um merônimo de casa, carro é um holônimo de volante. Tropônimos: Definição de verbos que definem a mesma ação de forma diferente: falar é um tropônimo de cochichar. Acarretamento: Consequência semântica: pular acarreta se impulsionar. f) Outros: O tratamento de abreviações, acrônimos e erros ortográficos também devem ser considerados quando interpretando textos. 16

30 No nível de coleções de palavras a) Detecção de palavras compostas (Phrase detection): Em algumas situações, duas palavras válidas têm um significado completamente diferente quando juntas. Pastor alemão, quartas de final e Rio de Janeiro são casos em que estudar as palavras individualmente causaria o sistema a interpretar errado o verdadeiro significado. b) Separação de frases (Sentence boundary disambiguation): Outra tarefa importante em processamento de texto é separar frases, o que no caso do português envolve primariamente detectar o ponto (excluindo abreviações) seguido de uma palavra com letra maiúscula. c) Análise sintática (Natural Language Parsing): Continuação do processo anterior, identificando agora orações, sujeitos, verbos, objetos, complementos verbais e nominais, adjuntos adnominais e adverbiais..., e seus relacionamentos entre si. d) Resolução de correferência (Coreference Resolution): Eu fui ver o filme com o João, mas ele não gostou muito. Nesse exemplo temos duas correferências: primeiro 'ele' que se refere a João e não gostou muito se refere ao filme. Quando se busca o significado de uma frase, esse tipo de referência que pode inclusive ocorrer entre partes distantes do texto têm podem ter de ser resolvida. e) Desambiguação de palavras (Word sense disambiguation): Palavras não só tem diferentes classes gramaticais dependendo do contexto, mas também significados completamente diferentes. Por exemplo, a palavra baixo pode ser usado tanto para exprimir a intensidade do volume de um dispositivo ou o instrumento musical de mesmo nome. f) Extração da intenção do autor: O maior desafio do processamento natural de linguagem. Muitos pesquisadores acreditam que só seja possível seguramente extrair a mensagem por trás de qualquer texto não trivial através um sistema IA-completo, um sistema capaz de modelar completamente a inteligência humana e compreender todo o contexto envolvido. Para 17

31 dificultar ainda mais a situação, duas pessoas lendo o mesmo texto podem discordar de seu significado. Existem, no entanto, algoritmos que focam em sumarizar textos que conseguem algum nível de sucesso identificando quais frases são mais significativas e extraindo usando os métodos acima suas informações. g) Dependência da língua: Embora a ideia dos algoritmos possa ser aplicada para qualquer língua, a implementação costuma possuir dependências das regras de cada língua como no caso da radicalização. Mais importante, é vital uma grande base de textos, chamadas de corpora nesse contexto, pré-classificada para ser utilizada no treinamento dos algoritmos usados para o processamento de uma determinada língua. Infelizmente não existe para o português brasileiro uma base aberta aos pesquisadores e desenvolvedores comparável com outras línguas como o inglês, o que dificulta a evolução dessas ferramentas para a nossa língua. 18

32 Capítulo 3 Ferramentas 3.1 Software Base Linguagem de Programação: Jruby Ruby é uma linguagem de programação interpretada e orientada a objetos com inspiração em linguagens funcionais e utilizada primariamente para aplicações web através do framework Ruby on Rails. Por ser concisa em comparação com linguagens de mais baixo nível, permite desenvolvimento rápido, e suas bases funcionais suportam abordagens envolvendo metaprogramação, em que o desenvolvedor primeiro modela uma linguagem de domínio específico na própria linguagem e então implementa a solução de forma mais clara. A metaprogramação é uma das razões pelas quais o Ruby é utilizado, a capacidade de criar funções que não existem dinamicamente, pelo fato de que em Ruby chamar um método simplesmente significa mandar uma mensagem para o objeto correspondente, e essa mensagem pode ser interceptada e respondida sem a existência de um método tradicionalmente declarado. Isso garante flexibilidade ao sistema, podendo facilmente adicionar funcionalidade para o usuário com mínima alteração no código-fonte. Jruby é o nome da implementação da linguagem em Java, e rodando na Java Virtual Machine. A maioria das ferramentas acadêmicas e de produção em processamento de linguagem natural estão em java, como a OpenNLP e a Stanford CoreNLP e o Jruby permite acesso simples a essas bibliotecas. Ao mesmo tempo, Ruby possui uma grande biblioteca para funcionalidades relacionadas a desenvolvimento web, com foco maior na facilidade de uso, incluindo ferramentas para recuperação de informação, uma área fortemente ligada a NLP. 19

33 3.1.2 Infraestrutura: Ruby on Rails e PostgreSQL Ruby on Rails é um dos mais populares frameworks web, com foco na agilidade de desenvolvimento, através de convenções que permitem botar o site e as funcionalidades online rapidamente. O desenvolvimento ocorre com constante feedback da aplicação tanto para os desenvolvedores e designers, como para os clientes. Assim o paradigma utilizado é inspirado e voltado para as metodologias ágeis. A tecnologia foi selecionada por múltiplas razões: Organização: Rails é um framework MVC (Model-View-Controller), que separa a interface ao usuário (View), da lógica de exibição (Controller) e a manipulação de dados (Model). Rails é focado em operações CRUD (Create, Read, Update e Delete), que se referem às 4 operações básicas do banco de dados: INSERT, SELECT, UPDATE e DELETE respectivamente, e cobrem a maioria das tarefas fundamentais de web sites, como a armazenagem, a manipulação e a exibição da informação dos usuários, seus dados pessoais, compras, comentários e relacionamentos. Para a aplicação desse projeto, diversas ferramentas e técnicas não foram modeladas segundo esse paradigma de operações em banco de dados. Essas partes no entanto podem ser implementadas em classes comuns de Ruby e Java e integradas ao Rails sem dificuldade. Interface ao Usuário: Como mencionado, Rails permite a criação rápida de interfaces ao usuário e fácil integração com a lógica da aplicação sem quebrar o encapsulamento do modelo MVC. Para simplificar ainda mais se utilizam também as linguagens de markup para descrição de HTML, o HAML, e o framework CSS Bootstrap. Gerenciamento de bibliotecas: Rails permite o fácil gerenciamento, atualização e documentação de todas as bibliotecas Ruby utilizadas através das aplicações RubyGems e Bundle. Isso inclui também o servidor web que é integrado na aplicação. Objetivo da aplicação: Embora a aplicação não esteja sendo criada de forma escalável e multi-usuário inicialmente, a funcionalidade principal é servir como uma secretária virtual, capaz de entender e responder apropriadamente o usuário. Com a ubiquidade 20

34 da internet, essa plataforma é a mais apropriada para a aplicação, de forma que o usuário possa acessar do computador, do smartphone, ou do tablet de forma integrada e sempre disponível. Para suportar o armazenamento de dados da aplicação é usado o Banco de Dados livre PostgreSQL, integrado à aplicação através do mapeamento objeto-relacional do Ruby on Rails, denominado ActiveRecord. A configuração do sistema é carregada através de arquivos YAML (Yet Another Markup Language), e utilizando a funcionalidade de tarefas (tasks) do Rails. 3.2 Bibliotecas Centrais Apache OpenNLP e Stanford CoreNLP OpenNLP [12] e CoreNLP [13] são toolkits em Java que implementam as tarefas básicas relacionados ao processamento de linguagem natural, tais como a segmentação de palavras, extração de entidades nomeadas e etiquetagem morfossintática. Ambas as bibliotecas foram testadas em cada tarefa utilizada e a conclusão foi que ambas serviriam para propósitos diferentes. Ambas as bibliotecas operam criando um pipeline customizado das tarefas que se deseja realizar sobre a entrada, associando também a base de treino compilada, no caso de sistemas estatísticos, ou o conjunto de regras, no caso de sistemas tradicionais A base de treino: Inglês x Português O projeto foi desenvolvido em inglês devido à falta de modelos de treino para a língua portuguesa. Os modelos estatísticos operam com o aprendizado supervisionado de enormes bases de texto com a apropriada etiquetagem, denominados de corpora. Normalmente se estima que o mínimo conteúdo de um corpus usável seria em torno de frases se focado 21

35 no domínio da aplicação, produzindo resultados bons comparados com bases muito maiores que tentam cobrir toda a língua. A criação de um corpus envolve significativo investimento por parte do criador, e na maioria das vezes o mesmo não disponibiliza para download devido à possibilidade de ser utilizado por competidores ou pelo texto conter direitos autorais alheios (por exemplo, jornais ou livros literários). O segundo caso é o que ocorre com as bases utilizadas pelo OpenNLP e CoreNLP, em que somente é disponibilizado o modelo compilado, mas não o texto. Como considerável parte da pesquisa em processamento de uma língua depende dos corpora, o investimento por parte do governo e outras entidades na sua criação permitiria uma maior capacidade da comunidade acadêmica e do mercado de desenvolver novas tecnologias voltadas para o próprio país, sem necessitar o grande investimento de construir sua própria base de dados, que provavelmente acabará restrita em funcionalidade. Quanto à análise morfossintática, existe um excelente corpora em português chamado Projeto Floresta Sintá(c)tica [14], baseado em textos extraídos de jornais, livros e blogs contendo mais de frases etiquetadas de acordo com as devidas classes gramaticais e a estrutura das orações (que tem um formato de árvore como visto na seção 1.3.2, de onde surgiu o nome do projeto). No entanto, a ferramenta mais importante utilizada neste projeto de graduação, o reconhecimento de entidades nomeadas (NER) não é parte desses corpora, ou de qualquer outra em português que o autor deste projeto conheça. Este projeto usa bases de treino para a língua inglesa, para NER. Além disso, é utilizada a WordNet, radicalização e normalização de datas (CoreNLP SUTime [15]), sendo todos estes recursos dependentes da língua Outras bibliotecas jruby-stemmer [16]: Implementação nativa em java do porter stemming algorhithm (algoritmo de radicalização); rwordnet [17]: Interface com o banco de dados léxico WordNet; tf-idf-similarity [18]: Calcula similaridade entre textos usando modelagem de espaços vetoriais, com pesos segundo os critérios do modelo Term Frequency Inverse Document Frequency. 22

36 Capítulo 4 Implementação O sistema de resposta envolve as seguintes etapas: Extração de palavras-chaves: É a parte que envolve as técnicas de processamento de linguagem natural, buscando extrair as informações pertinentes da entrada do usuário. Validador: A função desse módulo é comparar as informações extraídas com a lista de comandos que o sistema aceita e retornar a lista de comandos possíveis. Classificador: Esse módulo é responsável por qualificar cada comando válido de acordo com a probabilidade de estar correto. Síntese da resposta: É o modulo final que executa o comando do usuário e prepara uma resposta apropriada. Controlador de diálogo: É o módulo que coordena a interatividade entre o sistema e o usuário, permitindo que o usuário possa prover feedback para o sistema. A implementação de cada um dos módulos será discutido em detalhes nesse capítulo. 4.1 Extração de palavras-chaves As entidades que serão observadas pelo sistema são datas, números, porcentagens, dinheiro, nomes próprios, , localizações, organizações e palavras-chaves fixas. Embora todas essas entidades possam ser reconhecidas através de um modelo probabilístico como o que será descrito a seguir, com uso de um corpus devidamente etiquetado, foi observado que em algumas situações um modelo tradicional pode se revelar mais eficaz. 23

37 4.1.1 Entidades com forma regular (números, datas, porcentagens, dinheiro e s) Números e s possuem um número muito grande de possibilidades, mas na maioria dos casos são escritos com uma formatação padrão, de modo que podem ser capturado com facilidade pelo computador. Considerando a string 'US$ 35.40', um sistema bigram em nível de palavra seria capaz de reconhecer como o valor do preço devido a ela seguir o elemento 'US$', desde que existam exemplos em sua base de treino. No entanto o mesmo modelo falharia em etiquetar o número '35.40' pois, como se observa nas frases Saiu o conserto e Saiu caro o conserto, o contexto nem sempre define que o que se segue será um número. A única solução para o sistema acima, sem adição de regras complementares para lidar com as diferentes exceções, seria possuir todas as possibilidades no treino, o que não costuma ser possível para entidades como números e s. Felizmente esses dois casos são moderadamente simples de interpretar porque números, embora teoricamente infinitos, são representados de forma relativamente regular e universal, como (de forma simplificada) XXX.XXX,XXX e A solução para a extração dessas informações pode ser executada de forma altamente satisfatória na criação de um conjunto de regras, normalmente na forma de expressões regulares (regex Regular Expressions). Essa solução também possui um desempenho na execução muito superior aos modelos probabilísticos e possuem resultados bastante previsíveis, de forma que além de serem mais fáceis de depurar, um usuário devidamente instruído seria capaz de inserir os dados corretos toda vez que ocorrerem erros acidentais. É claro que na prática essas regras têm desvantagens. A primeira, como já dito, é que o sistema não é tolerante a erros ortográficos em geral, ou quando usuários querem deliberadamente evitar que computadores interpretem os seus dados, como é o caso de pessoas que escrevem 'arroba' ou 'at' em vez de para evitar que o seja capturado por web crawlers que usariam a informação para spam. A segunda é que o sistema se torna mais rígido para uma determinada língua, domínio ou aplicação. O português e inglês utilizam o 24

38 ponto e a vírgula de forma diferente na representação numérica, e quanto mais inteligente o sistema, por exemplo, capaz de ler números por extenso, mais inflexível se torna Entidades que requerem normalização (datas) Para simplificar, vamos separar datas em dois tipos: data absoluta e data relativa. A data absoluta é escrita da forma 25/04/2014' e suas diversas variantes, enquanto as datas relativas são sexta-feira, amanhã, ano passado, na véspera de natal e similares. Para um computador, quanto menor o contexto necessário para decodificar uma mensagem, melhor, o que torna as datas absolutas muito mais simples de se processarem. As datas absolutas, ao menos na formatação tradicional, podem ser processadas da mesma forma que entidades da seção anterior, usando expressões regulares ou simples parsers disponíveis para diversas linguagens de programação (por exemplo, strftime() para linguagem C, ou strptime para Ruby). As datas relativas podem ser detectadas por modelos probabilísticos, mas eles não seriam capazes de converter para a data absoluta correspondente. Amanhã tem um significado diferente todo dia, e um sistema que simplesmente classifique entidades não é capaz de aprender essas nuances que são desejáveis de se obter. A solução utilizada nesse caso é um conjunto de regras ainda mais complexo e elaborado ad hoc, cobrindo a maioria dos casos comuns de datas. Esse conjunto de regras está implementada na biblioteca java Stanford Temporal Tagger (SUTime), parte do toolkit de processamento de linguagem natural Stanford CoreNLP. Essa biblioteca é construída sobre um framework que associa padrões casados por expressões regulares a valores capazes de gerar a data absoluta referida. Por exemplo 'tomorrow' é convertido para a representação correspondente a 'PRESENT_TIME + 1 DAY', de modo que, dada a data de referência, seria convertida para o valor desejado. Essa biblioteca integra também outras bibliotecas que mantêm um registro de feriados e outras formas comuns de se referir a datas. Essa biblioteca está restrita à língua inglesa Entidades não regulares (nomes próprios de pessoas, organizações e lugares) 25

39 Não existem regras que definem o que é um nome de pessoa, embora certamente existam diversos indícios como inicial maiúscula, sobrenome comuns seguindo os nomes e o próprio contexto em que aparece na conversa ou texto. É bastante complicado implementar um conjunto de regras tradicionais que cubram com eficácia todos os nomes de pessoas. Uma tabela contendo todas as possibilidades seria extremamente longa, teria de ser atualizada constantemente para novos nomes, além de criar falsos positivos, como por exemplo, empresas com nomes que podem ser de pessoas (nesse caso precisaríamos de tabelas para empresas também, e lugares, e pessoas históricas, etc... e regras que decidam qual deve ser usado, o que torna essa abordagem inviável fora de contextos restritos). Para esses casos foi utilizado um modelo probabilístico de reconhecimento de entidade nomeada usando a biblioteca OpenNLP, junto com os modelos pré-treinados da biblioteca para a língua inglesa. Embora o Stanford CoreNLP tenha uma implementação de NER baseado em uma técnica mais sofisticada chamada Conditional Random Fields, a velocidade de execução e consumo de memória tornou impeditivo em uma aplicação web em jruby Reconhecimento de entidade nomeada (NER) Existem várias implementações para NER, normalmente com base em modelos de Markov. Para exemplificar o funcionamento, consideremos um modelo oculto de markov (HMM). Uma cadeia de Markov é um modelo de processo estocástico caracterizado pela falta de memória. Em uma série de variáveis aleatórias, a probabilidade de mudança de estado de uma variável para a seguinte depende exclusivamente do estado dessa variável, ignorando completamente a história que a precede. Como já foi visto, uma cadeia de Markov de primeira ordem é um bigram. A cadeia oculta de Markov adiciona a condição de que esse estado não é conhecido, mas possui certa probabilidade de emitir um conjunto de propriedades visíveis. Então o HMM é definido por três variáveis, a probabilidade π de cada estado inicial, a matriz de probabilidade A de transição de cada estado para cada estado e a matriz B de emissão da 26

40 propriedade observável para cada estado. Voltando ao problema de encontrar entidades nomeadas, a variável oculta claramente tem de ser de alguma forma a informação de qual variável é a entidade buscada e qual não é. E a propriedade observável no texto são as próprias palavras. Não esquecendo que a entidade não é necessariamente uma palavra única, por exemplo, Rio de Janeiro ou Felipe Borda Carregosa, definiremos esses estados ocultos como Other para uma palavra que não é uma entidade nomeada, Start para o início de uma entidade nomeada, e Continue até o seu término. Assim, uma frase apropriadamente etiquetada para nomes próprios ficaria da seguinte forma: Tabela 4.1 Frase apropriadamente etiquetada Felipe Borda Carregosa entregou seu projeto ao orientador Heraldo Start Continue Continue Other Other Other Other Other Start Agora, como a HMM seria capaz de criar as etiquetas corretas? A resposta são os parâmetros A, B e π e o corpora. Com uma base devidamente anotada com as 3 etiquetas acima, calculamos: 1. A probabilidade inicial π será um vetor de 3 variáveis (uma para cada etiqueta) que representa a probabilidade de a primeira palavra da frase possuir cada etiqueta, ignorando a palavra em si. Se 80% das frases nos corpora de treino começar por uma palavra etiquetada como Other, o vetor π será [0.2, 0, 0.8] para Start, Continue e Other respectivamente. Isso é porque nenhuma frase pode começar por Continue, que sempre segue um Start, então, exceto se houver erros, sua probabilidade será 0%, e Start ocorrerá nos outros 20%. 2. A matriz de transição A será uma matriz 3x3 que contém as probabilidades de que cada etiqueta ocorra seguida de cada uma das etiquetas, por exemplo, a probabilidade de que uma palavra etiquetada como Start seja seguida por uma etiquetada como Continue, ou Other seguido por outra Other e assim em diante para as 9 permutações possíveis. Claramente a probabilidade de Other ser seguida por Continue deverá ser sempre 0% de acordo com as regras. Cada linha da matriz deve somar 100%. 3. A matriz de emissão B será uma matriz 3x(números de palavras no corpus) que 27

41 contém a probabilidade de que cada palavra pertença a cada etiqueta, embora armazenada de forma inversa, como a probabilidade de que a etiqueta esteja representando cada uma das palavras existentes nos corpora. Por exemplo, em um corpus imaginário, Start pode ser 0.2% das vezes a palavra Felipe, e 0% das vezes a palavra ele, e somando as probabilidades de todas as palavras do texto classificadas como Start, obtêm-se os 100% das emissões a partir dessa etiqueta. Os valores obtidos contando o número de ocorrências de cada evento no corpus, por exemplo, cada transição entre duas etiquetas, e dividindo pelo total de eventos relevantes é o meio de gerar cada valor dessas matrizes, e são provados valores ótimos para o treinamento supervisionado da cadeia oculta. A partir das matrizes construídas, executar a avaliação acima é uma questão de achar a série de etiquetas mais prováveis que poderiam produzir cada uma das palavras do texto segundo as probabilidades encontradas, o que pode ser obtida através de um método chamado Algoritmo de Viterbi. Existem algumas considerações extras com as quais se deve lidar, como o caso de palavras no texto sendo analisado que não estavam presente nos corpora, podendo, por exemplo, estipular um valor não zero padrão para a emissão. Essa mesma técnica é usada em diversas outras áreas de processamento de linguagem natural, em particular em etiquetagem morfossintática (atribuindo as classes gramaticais como variáveis ocultas) e tradutores automáticos entre línguas O OpenNLP NER A implementação do NER utilizado pelo OpenNLP, e portanto parte desse projeto, envolve essas mesmas 3 etiquetas: Other, Start e Continue. Mas diferente de uma implementação em HMM, é utilizado um conjunto de atributos ou features que são ponderados para cada palavra para obter a etiqueta correta. São 22 features, incluindo, por exemplo: O token sendo etiquetado; O token 2 posições à direita; O token e o token à esquerda (o bigram que é analizado pela HMM descrita). 28

42 Dessa forma, o sistema considera um contexto mais amplo que a cadeia oculta de markov de primeira ordem considerando também palavras até duas posições à esquerda e a direita. Também estão presentes regras que referem às etiquetas já calculadas: A etiqueta prevista para o token 1 lugar à esquerda, ou nulo; Considera-se então o resultado das duas computações anteriores como visto na penúltima feature. Por exemplo, se a computação anterior for Start, a probabilidade de ser Continue é muito maior, enquanto que se for Other, a probabilidade é 0. Existe também uma regra referindo a como o elemento foi etiquetado anteriormente: A etiqueta atribuida para o mesmo símbolo anteriormente, ou nulo. Claramente, se um elemento foi classificado como nome anteriormente, então é mais provável que uma nova aparição tenha a mesma etiqueta. Por último existem outras características que dizem respeito a classe do símbolo, tais como: A classe do símbolo sendo etiquetado; O símbolo e a classe do símbolo dois lugares à esquerda. Essa classe mencionada envolve 13 categorias possíveis incluindo: Token contém um número e letra; Token contém um número e um hífen; Token é todo maiúsculo, várias letras; Todas as letras são maiúsculas. Essas classes mostram que o NER do OpenNLP utiliza uma abordagem híbrida entre 29

43 as abordagens probabilística e as baseadas em regras, permitindo lidar com entidades que são regulares em forma (como números, já mencionado) mas que se fossem consideradas como apenas símbolos comuns, não seriam identificados na maioria das vezes já que cada número tem a escrita ligeiramente diferente. O método usado pelo OpenNLP para o problema de: dado cada peso e feature, qual a etiqueta mais provável para determinada palavra?, é o chamado classificador de máxima entropia, que calcula a probabilidade de a palavra pertencer a determinada classe a partir do conjunto de observações. O conjunto total das regras pode ser encontrado no anexo A Palavras-chave fixas (verbos ou palavras denotando o comando) Os elementos anteriores lidavam com extrair informações úteis do texto, números, s, nomes de pessoas, mas falta uma informação básica, que é aquilo que o usuário quer que o sistema faça com essas informações, a palavra central que define o pedido. Normalmente essa palavra é um verbo como em agende a reunião às 6 horas, mas a mesma ideia pode ser transmitida por um substantivo põe no calendário a reunião das 6 horas de forma que a palavra ser o verbo não é critério suficiente. Considerando que é necessário extrair o valor semântico da palavra para atribuir a um comando, é razoável esperar que isso não é possível sem que haja alguma forma de anotação no sistema, mas, como o treino de um corpora dedicado é inviável para este projeto, isso foi feito da forma mais simples possível: é mantida uma lista com as palavras-chaves correspondentes a cada ação e essas palavras são comparadas com os elementos da frase. No entanto, ao contrário do que gostaríamos, existe uma grande variedade de formas de o usuário escrever a mesma coisa e, com um grande número de ações essa lista poderia se tornar relativamente complexa de se manter manualmente. Por essa razão foram adicionadas algumas melhorias. Primeiro a comparação não é feita diretamente entre palavras, mas entre radicais de palavras através de algoritmos de radicalização. A palavra guarda não casaria com a palavra-chave guarde, mas seus radicais guard sim. Assim são consideradas múltiplas flexões da palavra. Segundo, manter um banco de dados de sinônimos em particular é útil para não ter de 30

44 escrever todas as possibilidades para cada palavra. Para inglês esse banco de dados é a WordNet, que é usado através da biblioteca rwordnet durante a fase de configuração para carregar o banco de dados com sinônimos. A terceira melhoria é unir com a análise morfossintática da frase para reduzir casos de homógrafos. Isso é realizado através do part-of-speech tagger da OpenNLP, que funciona internamente de maneira similar ao que foi explicado para o reconhecimento de entidade nomeada porém, em vez de Start, Continue e Other, utiliza como etiquetas as próprias classes gramaticais. Essas etiquetas, para o caso utilizado, podem ser vistas no Anexo B. O esquema final utilizado foi: 1) Compara o radical da palavra na entrada com o radical das palavras-chave considerando se são verbos ou substantivo; 2) Se nenhum resultado existir, abandona a condição de considerar a etiqueta morfossintática, para compensar o fato de que essa análise muitas vezes produz resultados incorretos; 3) Se nenhum resultado existir ainda, são utilizadas os sinônimos presentes na WordNet, o que não são utilizados normalmente pois não discriminam entre significados diferentes da intenção do desenvolvedor. Os mecanismos que irão discriminar se esse comando é plausível ou não serão parte dos mecanismos descritos posteriormente em classificador e controlador de diálogo Algoritmos de radicalização (stemming) Existem diversas formas de se implementar um algoritmo de radicalização. De forma tradicional, pode-se criar um algoritmo que recebe uma palavra e sistematicamente executa regras que removem seus sufixos e prefixos, ou um algoritmo que guarde os radicais e gere as flexões, as comparando então com a palavra da qual se procura o radical. A vantagem da primeira é não requerir uma tabela que inevitavelmente não incluiria todos os casos, enquanto que a vantagem da segunda é evitar casos de understemming (não removendo sufixos suficientemente como: precisariam para precisar e não precis ) ou o oposto, 31

45 overstemming, removendo partes do radical. Ambos os casos, sendo baseado em regras, só funcionam para uma língua, embora existam também modelos estatísticos baseados em n-grams ou HMMs. O Porter Stemmer Algorithm utilizado funciona removendo sistematicamente os sufixos (não prefixos, ou seja, incorreto seria transformado em incorret e não corret ). Ele funciona através de 6 passos sucessivos com aproximadamente 60 regras de transformação da entrada, como por exemplo no primeiro passo se remove plural e sufixos -ed e -ing. Nada mais é considerado exceto a forma da palavra, então não existe tratamento de palavras homógrafas ou diferenciação do uso da palavra como verbo ou substantivo por exemplo. Existem adaptações do Porter Stemmer para as regras do português. 4.2 Validador O validador é um módulo que existe por questão de organização do código, e normalmente seria considerado uma parte do classificador. Fazendo uma analogia, quando se faz uma pesquisa no Google, existem normalmente alguns milhões de páginas que são pertinentes a sua pesquisa. Esse módulo seria o responsável por selecionar esses milhões de páginas, enquanto o classificador as ordena por relevância, de modo que a primeira página seja aquela que o sistema decide ser a mais próxima da intenção do usuário. A tarefa desse módulo é, a partir das palavras-chaves de ação, que normalmente são comuns a várias ações diferentes, e a lista de argumentos, separar todos os comandos que podem ser executados e preparar os dados apropriados para suas execuções. As considerações especiais que são analisadas são: A ordem dos argumentos importa, mas só quando faz sentido: Subtraia 5 de 9 é claramente diferente de Subtraia 9 de 5. A fase de extração de palavras-chaves produz uma estrutura que não só diz o valor do campo, mas o posicionamento da expressão na frase, início e fim, para poderem ser adequadamente ordenados. 32

46 Ao mesmo tempo o usuário não pode ser sujeito a ordenações arbitrárias: Se um comando aceita uma data e um lugar, não importa qual venha antes e depois na entrada do usuário. Argumentos podem estar contidos em outros: Procure carro com preço abaixo de 30 reais, tanto 30 e 30 reais são argumentos válidos, número e preço respectivamente. A importância de guardar tanto o início quanto o fim da expressão é garantir que argumentos contidos um no outro não possam coexistir na mesma execução de comando, embora eles possam ser considerados individualmente. O comando pode ter múltiplas combinações de argumentos: Os comandos na aplicação são sobrecarregáveis, por exemplo, o comando adicionar pode receber tanto 2 números, quanto 2 preços, ou 2 porcentagens, ou mesmo 3 ou mais números desde que esteja configurada para essas possibilidades e adequadamente implementada para cuidar de cada caso. O mesmo comando pode ser selecionado repetidamente com diferentes argumentos: Isso é uma consequência da sobrecarga do comando, e do fato de a entrada não ser estruturada. O significado disso é que o classificador deve ser capaz de decidir não somente qual comando usar, mas também com qual conjunto de argumentos. O resultado desse módulo é uma lista de comandos com argumentos selecionados, prontos para serem executados. 4.3 Classificador Uma vez que os comandos válidos foram selecionados, precisamos de uma maneira de lidar com a possibilidade comum de múltiplos comandos serem válidos. A primeira tarefa quando se fala em classificação é a escolha das características (features) relevantes para o processo. Para o usuário seria desagradável ter de corrigir o sistema toda vez que precise de 33

47 alguma informação, e um sistema robusto deveria se adaptar ao usuário em vez de forçar o usuário a se adaptar, então essas variáveis deve conter de alguma forma a entrada do usuário. Antes de um aprendizado supervisionado que forçaria ao usuário o trabalho de dizer o que está correto, vamos tentar obter a informação com base nas entradas que sabemos estar corretas. Primeiro podemos pressupor que um comando que é utilizado mais frequentemente tem uma tendência maior de ocorrer de novo, sendo então a primeira feature a frequência relativa do comando. Segundo, se olharmos a mensagem em si, poderíamos eliminar ambiguidades comparando a nova entrada com entradas passadas para cada respectivo comando. Mas antes precisaríamos definir um modo de comparar textos, diferente do que foi feito até agora, em que se buscou apenas interpretá-los individualmente Comparação de textos: Entrada e Histórico de Entradas Intuitivamente poderíamos pensar em comparar textos da mesma forma que comparamos strings, possivelmente utilizando técnicas de normalização e comparação fuzzy levando em consideração diferentes flexões das palavras e possíveis erros ortográficos. Mas um exemplo simples como Eu comi a pizza e a A pizza foi comida por mim, cujos significados das duas orações são idênticos, mostra que uma simples comparação de strings teria problemas com as inúmeras formas de escrever a mesma mensagem. A segunda abordagem mais evidente é segmentar o texto em tokens ou palavras e comparar suas frequência em ambos os textos. Esse modelo, como os demais do tipo unigram, claramente desconsidera importante informações do ordenamento das palavras no texto, mas em troca é um sistema simples que depende de uma base de dados igualmente simples para produzir bons resultados. Com maior base de dados e recursos computacionais o sistema poderia ser estendido para aceitar bigrams, trigrams em diante, aproximando gradualmente de uma gramática com contexto. Para extrair então um número que representa o grau de similaridade entre a entrada do usuário e todas as entradas passadas transformamos ambos em vetores, segundo um modelo conhecido como Vector Space Model (VSM). Para a seleção dos valores em cada vetor, pode 34

48 ser utilizado o modelo Term Frequency-Inverse Document Frequency (TF-IDF). Quando comparamos duas frases, palavras extremamente comuns como 'o', e 'que' não podem possuir o mesmo peso que as palavras que são exclusivas para determinado texto, e o modelo TF-IDF ajusta os pesos de acordo. Quanto mais raro uma palavra nos documentos como um todo, maior será o peso atribuído a ela (Inverse Document Frequency). Ao mesmo tempo quanto maior a presença dela nos textos específicos que estamos comparando, maior o valor assumido (Term Frequency). Aplicamos então o TF-IDF tanto na entrada do usuário quanto nos registros antigos combinados de cada comando válido gerando um vetor que associa cada termo com o seu respectivo peso a partir do produto de seu TF com seu IDF. Esses vetores então podem ser comparados utilizando a lei dos cossenos, de forma que quanto mais próximo o cosseno de 1, maior o grau de similaridade entre os dois textos. Outras técnicas utilizadas previamente como radicalização, wordnet para identificar sinônimos também melhorariam a robustez do algoritmo. Também é potencialmente útil a remoção completa de palavras comuns que não alteram o significado, como artigos (stopword removal), embora o TF-IDF seja capaz de lidar com elas Ranking O sistema então calcula uma fórmula a partir desses 2 fatores: 1. Frequência relativa: o número de vezes que o usuário executou a determinada função sobre todas as vezes que o usuário executou qualquer função. 2. Similaridade: O cosseno entre o vetor da entrada e o vetor de todas as entradas classificadas como o comando A fórmula usada nesse ponto foi: (similaridade + frequência relativa + 1)/3, criando um valor de a 1 que é utilizado para criar um ranking de respostas prováveis (por questão de implementação o valor 0 é reservado para comandos não aprovados pelo validador). Aquela com o ranking mais alto é selecionada e exibida ao usuário. 4.4 O feedback do usuário (Controlador do Diálogo) 35

49 Revisando o processo implementado até esse ponto (mais a execução e síntese da resposta), temos o seguinte sistema: Figura 4.1 Módulos do sistema. Como se pode observar, a única realimentação do sistema ocorre no classificador, o que oferece um feedback positivo segundo os padrões de uso do sistema pelo usuário. Esse loop tem uma falha fatal no sistema atual: ele amplifica não só os padrões do usuário, mas também os erros de classificação do sistema. Em outras palavras um erro de classificação a cada ocorrência ficaria gradativamente mais provável de ocorrer de novo. A solução consiste em ter uma forma de prevenir classificação erradas. Como a linguagem natural é ambígua, e o conhecimento atual não permite sequer modelá-la em sua real complexidade, as únicas partes do sistema que podem efetivamente dizer se uma classificação está errada são o responsável pela sua manutenção ou o próprio usuário. Embora seja possível uma abordagem baseado em um curador que analisaria o histórico e corrigiria as classificações erradas de forma ao loop favorecer as respostas corretas, vamos focar na abordagem de deixar esse trabalho para o usuário. As prioridades desse módulo têm de ser a manutenção da interface natural com o usuário, sem ser invasivo e minimamente frustrante (embora o simples fato do programa falhar já seja um ponto de frustração para a maioria dos usuários). Para obter isso, três condições serão consideradas: Evitar falsos negativos: o sistema não vai considerar os resultados falsos até o usuário intervir; Evitar erros repetidos: o sistema vai ter de dar prioridade para não repetir o erro para o mesmo usuário, simplesmente forçar o usuário a corrigir o sistema múltiplas vezes até 36

50 o feedback no classificador se adaptar para a resposta correta não é suficiente; Guiar o usuário de forma natural: O sistema interpreta comandos a partir da linguagem natural, então a correção deverá ser o mesmo com uma diferença fundamental, a correção tem no mínimo duas etapas, o comando errado e a correção. Para isso o sistema vai precisar lembrar o contexto da conversa. Passaremos agora de um sistema de respostas automáticas para um sistema interativo de perguntas e respostas que mantém uma conversa com o usuário, através da adição do módulo de controle de diálogo O controle de diálogo Uma conversa tem um contexto e a cada interação existe ou não uma transição. Vejamos uma conversa comum com objetivos simplificados: Tabela 4.2 Exemplo de mudanças de estados em uma conversa Pessoa Mensagem Objetivo Estado final A Bom dia! Iniciando conversa Aguardando confirmação de conversa por B. B Bom dia, como vai? Aceitando conversa/requisição de informação (ou simplesmente formalidade do diálogo) Aguardando resposta de A A Bem, obrigado. Resposta a requisição Conversa sem assunto A Quer ir hoje no cinema? Requisição de ação Aguardando resposta de B B Não posso, foi mal. Rejeição do pedido. Conversa sobre cinema A E viu o jogo do Brasil? Estabelecimento de um novo assunto para o diálogo Aguardando resposta de B/Conversa sobre futebol Como o diálogo com o computador será extremamente limitado, podemos prever todas as transições e estados e modelar os diálogos possíveis como uma máquina de estados. Primeiramente precisamos definir os possíveis tipos de mensagem. 37

51 Tabela 4.3 Tipos de mensagem na aplicação Entrada How much is 30 plus 40? Remember reunion friday. Add duck and bird. How are you doing machine? Okay/Thanks/Good No/Wrong/Incorrect I meant 'add' Tipo REQUEST RQ_INVALID FB_ACCEPT FB_REJECT FB_CORRECT Nós temos 5 tipos de mensagem, 3 de feedback e 2 de requisição. Dentre as de requisição, REQUEST são todas as mensagens vistas até agora, RQ_INVALID são as requisições que não são aprovadas pelo validador e o sistema não tem como interpretar. As de feedback são FB_ACCEPT que indica que o usuário aceita a resposta anterior, FB_REJECT que o usuário rejeita a mesma e FB_CORRECT é qualquer forma de o usuário corrigir o resultado anterior. Serão também definidos três estados, Correct quando a mensagem anterior foi confirmada válida pelo usuário ou ela não existe, Doubt quando ela existe e o usuário não confirmou ou rejeitou e Incorrect quando a mensagem anterior ou é inválida ou foi rejeitada. Em termos de transições, FB_ACCEPT sempre move para Correct, e RQ_INVALID e FB_REJECT (exceto quando a mensagem anterior inexiste) sempre move para Incorrect. REQUEST também sempre move para Doubt, mesmo que o estado anterior seja Incorrect, forçar o usuário a corrigir seria invasivo e, portanto contra os princípios estabelecidos. Um FB_CORRECT válido também move para Doubt já que não é garantido que a correção ou novo comando foi interpretado corretamente. O modelo acima na forma de uma máquina de estados finita determinística (DFA) fica então da seguinte forma: 38

52 Figura 4.2 Estados e transições do controlador de diálogo Segundo a teoria de máquinas de estados, ter uma saída implica que o sistema também é um transdutor, e já que a saída depende exclusivamente do estado atual e do tipo de entrada, ou seja, a saída está presente nos vértices de transição nessa configuração, é dito ser uma Máquina de Mealy. O estado atual do usuário na aplicação é guardado na forma de um campo oculto do formulário html Detecção de tipo de mensagem 39

53 A tarefa remanescente é detectar qual o tipo da mensagem, preferencialmente usando o framework já existente para detecção de REQUESTs. RQ_INVALID ocorre quando nenhum comando é possível, ou excepcionalmente quando o comando é chamado com sucesso, mas o método que a executa falha (nesse caso o método é responsável por gerar a mensagem de erro). FB_ACCEPT e FB_REJECT ocorrem quando as respectivas palavras-chave são encontradas e não existe uma REQUEST válida. Quando as palavras-chaves de FB_REJECT entre outras exclusivas são encontradas juntamente com um comando válido, o sistema etiqueta a entrada como FB_CORRECT. Se o estado atual for Incorrect também será aceito a palavra-chave referente ao comando caso os argumentos estejam corretos (eles serão enumerados na saída anterior). Em todas as outras situações a entrada será considerada como uma REQUEST comum Aprimorando o classificador A única condição que falta tratar é evitar o erro continuado, sendo preferível continuar a reusar ao máximo as ferramentas já existentes. A solução mais simples é alterar a fórmula do ranking do classificador. Reaproveitando a ferramenta de similaridade, podemos representar a similaridade da entrada com 3 vetores, o vetor de Correct, de Doubt e de Incorrect. Os dois primeiros tornam o comando mais favorável de ser escolhido, com Correct tendo peso maior comparado a Doubt, já que o segundo tem uma probabilidade maior de estar incorreta mas o usuário optou por não corrigir. Incorrect funciona ao contrário e reduz o ranking do comando, e com o maior peso absoluto, pois evitar o erro é a condição prioritária. Uma das possíveis fórmulas, criada empiricamente, que satisfazem essas restrições é: 1/8*(2*sim_correct+sim_doubt+freq_rel)+1/2*(1-sim_incorrect), onde: sim_correct é a similaridade de respostas confirmadas corretas; sim_doubt é a similaridade de respostas sem confirmação; 40

54 sim_incorrect é a similaridade de respostas rejeitadas; freq_rel: é a frequência relativa que o comando foi executado pelo usuário. 4.5 Síntese da saída Como mencionado anteriormente o controle de diálogo opera como uma Máquina de Mealy, então a saída é uma função de dois elementos: a entrada e o estado atual. No caso de uma REQUEST, a saída é gerada pelo código dos comandos de acordo com a sua funcionalidade e os argumentos recebidos. A execução de uma REQUEST é relativamente simples. Como Ruby usa chamadas de métodos baseadas em mensagens, é possível chamar qualquer método a partir de uma variável string contendo como valor o seu nome, que será criada dinamicamente a partir das informações nas configurações. É passada também a esse objeto que gerencia a execução das ações, um objeto contendo todos os argumentos necessários extraidos da entrada do usuário. Essa chamada em ruby fica então da forma executor_object.send(action,arguments), em que action é a string (na verdade um symbol, que pode ser convertido de e para strings) cujo valor é o nome do método. Por exemplo, se action tem o valor de add, então esse comando é equivalente a executor_object.add(arguments). O método que é então executado retorna dois valores, uma string que é exibida ao usuário, que pode ser a resposta a sua pergunta, a informação sobre a tarefa sendo realizada ou ainda uma mensagem de erro especializada, e o estado do sistema após a pergunta, que pode ser 'Doubt' para uma resposta comum ou Incorrect quando ocorre algum erro, como por exemplo uma divisão por zero em um método que divide dois números. Além de muito mais organizado que um conjunto de testes condicionais (if ou switch) comparando a string com o nome da ação, o real potencial desse modelo é que chamar um método inexistente não é um erro já que são simplesmente mensagens, então o objeto que a recebe é capaz de lidar nativamente com comandos que não existem. Com isso não só é possível tratar erros e construir respostas apropriadas mesmo nessas supostas exceções, mas também expandir o sistema, por exemplo, para, caso uma ação não seja implementada 41

55 localmente, construir uma url a partir do nome da ação de forma que novas funcionalidades podem ser adicionas de forma completamente dinâmica e independente do desenvolvedor através de Web Services. Para os outros casos de tipo de entrada e estados que não se qualificam como REQUEST podem-se configurar múltiplas respostas, uma das quais é sorteada para ser exibida. São permitidas múltiplas respostas na mesma situação para evitar que a saída do sistema seja muito repetitiva, diminuindo a ilusão de um diálogo na visão do usuário. Em alguns casos, que há informações extras a serem exibidas que só serão conhecidas no tempo de execução, a resposta configurada possuirá um código que será substituído pelo controlador de diálogo antes de apresentar ao usuário, no caso a substring (*) Tratando comandos com efeitos secundários Um aspecto final, mas fundamental à aplicação, diz respeito às tarefas que possuem algum efeito secundário, por exemplo, mandar um ou marcar uma reunião na agenda. Isso é diferente de fazer uma simples pergunta ao sistema, ou pesquisas em geral, em que todo o método é focado na criação da resposta ao usuário sem produzir nenhum efeito global permanente ou semi-permanente. A forma de lidar com elas é implementada sobre dois elementos já explicados, o modelo de troca de mensagens da linguagem ruby e o mecanismo de feedback do usuário. No caso de , seria inconveniente ao usuário que a tarefa seja realizada imediatamente quando o sistema pode interpretar sua intenção incorretamente ou ele próprio pode errar os dados. Nesses casos em que a função não pode ser desfeita após realizada, a saída da função original deve ser um pedido de confirmação com os dados. Nesse ponto entra o sistema de mensagens do ruby, quando o usuário responde com um FB_ACCEPT, são recuperados os argumentos do comando anterior e é chamada uma nova função que é o nome original da ação com o prefixo accept, que como só será executada quando o sistema definir um comando como Correct via feedback, pode, com maior segurança, realizar tarefas que não podem ser desfeitas. O segundo caso, marcar um evento em um calendário, é algo que pode ser facilmente desfeito, então exigir confirmação ao usuário toda vez só tornaria o diálogo 42

56 desnecessariamente longo e redundante. Nesses casos é mantida a filosofia anterior da aplicação em que comandos duvidosos são considerados corretos até o usuário rejeitá-las. Quando o usuário responde com um comando do tipo FB_REJECT, é chamada uma função com o nome original da ação prefixada de reject, com o objetivo de desfazer as mudanças que o comando original produziu. Existe ainda uma terceira situação, quando o usuário responde com um comando do tipo FB_CORRECT, em que é chamada uma função prefixada por correct, que recebe duas ações com suas listas de argumentos, e as usa para desfazer a original e executar a nova. Quando um método que não existe é chamado em um objeto ruby, quem responde é um método especial que pode ser sobrescrito pelo programador chamado method_missing(method_name, *args). Quando um método que se inicia por accept ou reject é chamado no código, mas não existe no objeto, method_missing é chamado e emula essas funções, mas apenas produz a resposta padrão para o tipo de entrada usado, como definido na seção anterior. Ou seja, quando uma ação não tem esses métodos implementados, normalmente por não ter efeitos secundários e, portanto, nada para confirmar ou desfazer, FB_ACCEPT e FB_REJECT só realizarão suas tarefas padrões: a seleção de uma mensagem do controlador de diálogo e o aprendizado do classificador. Quando a entrada for do tipo FB_CORRECT e não houver um método correspondente correct mas houver um método reject para o comando antigo, method_missing executará primeiro o FB_REJECT com os dados antigos que se quer desfazer, e então o novo comando do usuário como uma REQUEST comum. Em resumo: Tabela 4.4 Tratamento de efeitos secundários accept ação reject ação correct ação Funcionalidade Não existe Não existe Não existe Ação sem efeito secundário. Existe Não existe Não existe Ação que requer confirmação via FB_ACCEPT para ser executada. Não existe Existe Opcional Ação que possui efeito secundário que pode ser desfeito pelo usuário via FB_REJECT ou FB_CORRECT. 43

57 A versão final do sistema fica então da seguinte forma: Figura 4.3 Módulos finais do sistema. 44

58 Capítulo 5 Resultados 5.1 Preparo do sistema Instalação do sistema básico Uma vez instalado o postgresql, a máquina virtual java e jruby é preciso instalar todas as bibliotecas utilizadas pelo sistema, o que é realizado executando os seguintes comando na raiz da aplicação (onde existe um arquivo chamado Gemfile): $ jruby -S gem install bundler $ jruby -S bundle install Isso instala todas as bibliotecas utilizadas pelo jruby. As bibliotecas java OpenNLP e CoreNLP, se não presentes, devem ser descompactadas em lib/apache-nlp, lib/stanford-corenlp respectivamente. Os modelos utilizados, baixados em [19] ou treinados segundo a documentação do OpenNLP, devem ser copiados para lib/nlp_models. O banco de dados é chamado jruby_projeto e utiliza um usuário chamado dsl_agenda com senha 123, o que pode ser configurado em config/database.yml. Uma vez com acesso ao banco de dados, construir o schema da aplicação é realizado através do comando: $ jruby -S rake db:migrate Configuração O sistema tem alguns arquivos de configuração importantes que não são partes de uma 45

59 aplicação rails: 1) config/default_commands.yml: Mantém a lista de comandos que o sistema suporta com seus argumentos e palavras-chaves. Tem o formato a seguir: sum: arguments: number number keywords: verbs: [sum, add] nouns: [sum, addition] Esta configuração precisa ser consistente com a implementação em app/models/commands.rb : def sum(result) # implementação do comando return {:output => "The result of the sum is #{sum}", :status => 'Doubt'} end def accept sum(result) # implementação da resposta à confirmação (ilustrativo, soma não tem efeito secundário) return {:output => "Yes, that sum was correct!", :status => 'Correct'} end 2) config/regex_rules.yml: Mantém a lista de regras (na forma de expressões regulares) de entidades regulares analisadas durante a fase de extração de palavras-chaves. Novas regras podem ser adicionadas livremente, mas a remoção, caso usada por algum comando acima, faria com que esse comando nunca passasse no validador. Exemplo: - currency: - '[-+]?r\$[0-9]+([\.,][0-9]{2})?' 3) config/state_keywords: Mantém a lista de palavras-chaves associadas com as 3 transições 46

60 de feedback do controlador de diálogo: FB_REJECT, FB_ACCEPT e FB_CORRECT. FB_ACCEPT: verbs: [accept, confirm] nouns: [correct, perfect, right, ok, positive, 'true', 'yes'] FB_REJECT: verbs: [reject] nouns: [incorrect, not, wrong, negative, 'false','no'] FB_CORRECT: verbs: [fix] nouns: [meant, mean] Note que as palavras 'yes', 'no', 'true' e 'false' estão entre aspas, isso é para evitar que o interpretador de YAML as detecte como valor booleano em vez de strings. 4) config/dialog_state_machine.yml: Mantém as informações de controle da máquina de estados de diálogo e a lista de frases utilizadas, como a sequência (*) denotando onde o sistema pode inserir mensagens específicas. Doubt: FB_ACCEPT: next_state: Correct output: - Thanks for the feedback. What's your next command? - I'm happy to help. What's your next command? FB_REJECT: next_state: Incorrect output: - I'm sorry. (*) comando é: Após qualquer modificação das configurações, para carregar no banco de dados, o $ jruby -S rake internal_resouces:generate Rodando a aplicação 47

61 Para executar a aplicação em :3000 (localhost porta 3000) com o servidor web Trinidad instalado através do Gemfile, usa-se o comando: $ jruby -S rails s trinidad --binding Na primeira execução pode aparecer a mensagem de erro: OpenSSL::Cipher::CipherError: Illegal key size: possibly you need to install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for your JRE, implicando que é necessário instalar os arquivos de política irrestrita de chave criptográfica do site da Oracle. Elas são encontradas em: E devem ser copiadas para o diretório: $JAVA_HOME/jre/lib/security. 5.2 Análise Considerações iniciais Desempenho O projeto foi implementado como uma aplicação web, situação em que o uso de mais memória e de mais cpu implica em maiores custos em servidores reais e virtuais de maior porte, e possui muito menor potencial de escalabilidade quando mais e mais usuários utilizam a funcionalidade do site em paralelo. O consumo de memória é uma consideração particularmente séria, considerando que modelos usados para o processamento de linguagem natural, incluindo os utilizados no projeto, ocupam centenas de megabytes cada e são carregadas inteiramente na memória pelas ferramentas, de modo que o consumo de memória cresce exponencialmente em função do n-gram utilizado. Alguns algoritmos como a implementação Conditional Random Field da 48

62 Stanford CoreNLP para NER ultrapassam a alocação de memória padrão da máquina virtual java utilizada, sendo inviáveis para aplicação. Para melhor uso da memória, em vez de modelos extensos considerando todos os vocábulos da língua, seria interessante o uso de um corpora de treinamento inteiramente focado no domínio usado e nas entradas que os usuários criariam, além da adaptação dos algoritmos para usar ferramentas como cache e o banco de dados em vez das estruturas de dados carregadas na memória. Quanto ao tempo da respostas, algumas medidas que devem ser feita: Taxa de respostas: O número de respostas que o sistema pode processar, normalmente medido em queries por segundo (QPS) Popularidade versus tempo: Quanto tempo cada resposta toma para ser gerada, em média, pela frequência da resposta. Importante para encontrar as queries que o sistema gasta mais tempo executando, as respostas muito usadas, mas lentas. Tempo médio da resposta: Quanto tempo a resposta leva para ser processada, é importante que seja baixo especialmente após alcançar a escala em que o usuário não mais percebe a operação como instantânea. Estatísticas de cache: Esse projeto não implementa cache, mas em uma aplicação real seria necessária uma forma mais veloz de responder as perguntas mais comuns Qualidade Naturalmente a relevância de uma resposta é algo subjetivo. A mesma pesquisa no Google pode apresentar sites úteis para um usuário e inúteis para outro. Apesar disso, especialistas da área precisam de ferramentas para medir a qualidade do sistema, e então criaram as seguintes definições: Precisão: O número de resultados relevantes dentro dos itens apresentados ao usuário. Se um buscador apresenta 20 sites para a query na primeira página e apenas 10 são considerados relevantes por ele, então a precisão da busca foi de 50%. 49

63 No caso da aplicação deste projeto só existe uma resposta retornada para o usuário, então a princípio precisão ou é 100% ou 0% para uma determinada resposta, ou seja, ou interpreta corretamente a intenção do autor ou falha. No entanto nada impede de estudar o conjunto de N comandos com maior ranking. De fato aplicações como o Google Now exibem múltiplas respostas diferentes ao mesmo tempo, o que não só aumenta a chance de estar correto como pode permitir um feedback mais rápido para o usuário ao clicar na correta. Para o caso desta aplicação, tal adaptação, embora possível, reduz o foco no diálogo puramente textual, que melhor permite extensão para controle direto por voz, e também ao contrário do Google Now cujo foco é em pesquisa, este projeto foca em realizar tarefas em geral, o que causa uma mudança no ambiente e, então, não é conveniente simplesmente executar múltiplas, corretas e incorretas, em paralelo. Recall: A porcentagem de resultados relevantes selecionados dentro de todos os resultados possíveis. Para o caso do buscador, o recall de 100% seria se em todos os possíveis milhões de páginas apareçam todas as páginas relevantes no index, ou seja se o buscador simplesmente apresentar todas as páginas do index então o recall é garantidamente 100%. No caso dessa aplicação seria considerado todos os comandos encontrados como válidos no módulo do validador. A melhora do recall envolve técnicas que melhoram a detecção de palavras-chave como radicalização e uso de sinônimos, uso de corpora de treino para reconhecimento de entidade nomeada mais extensos e próximos do domínio, e ainda técnicas para lidar por exemplo com erros ortográficos. 50

64 F-measure (ou F-score): é o teste de acurácia envolvendo tanto a precisão quanto o recall, sendo calculado através da média harmônica das duas grandezas. Quanto mais acurada uma resposta, mais próximo esse valor será de 1. Maximizar essa função significa melhorar a qualidade geral do sistema de reconhecer a intenção do usuário. Os testes devem ser realizados, idealmente, múltiplas vezes por diferentes pessoas, em particular que sejam o mais próximo possível do usuário final em termos de conhecimentos, e usar os resultados para continuamente melhorar a qualidade do sistema Teste da execução de comandos O primeiro teste envolve um comando não ambíguo tentando utilizar o comando sum number number : Entrada: Give me the sum of the numbers 3 and 5 Saída: The result of the sum is Depuração do módulo de extração de palavras: Segmentação de palavras: ["Give", "me", "the", "sum", "of", "the", "numbers", "3", "and", "5"] Análise Morfossintática: Give/VB me/prp the/dt sum/nn of/in the/dt numbers/nns 3/CD and/cc 5/CD 51

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

Leia mais

Além da correção ortográfica nos editores de textos livres

Além da correção ortográfica nos editores de textos livres Além da correção ortográfica nos editores de textos livres William D. Colen M. Silva (colen@users.sourceforge.net) Eng. Computação pela Escola Politécnica da USP (2006) Mestrando Ciência da Computação

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

Nathalie Portugal Vargas

Nathalie Portugal Vargas Nathalie Portugal Vargas 1 Introdução Trabalhos Relacionados Recuperação da Informação com redes ART1 Mineração de Dados com Redes SOM RNA na extração da Informação Filtragem de Informação com Redes Hopfield

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

Engenharia de Software

Engenharia de Software CENTRO UNIVERSITÁRIO NOVE DE JULHO Profº. Edson T. França edson.franca@uninove.br Software Sistemas Conjunto de elementos, entre os quais haja alguma relação Disposição das partes ou dos elementos de um

Leia mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3

Leia mais

Pós-Graduação em Engenharia Elétrica Inteligência Artificial

Pós-Graduação em Engenharia Elétrica Inteligência Artificial Pós-Graduação em Engenharia Elétrica Inteligência Artificial João Marques Salomão Rodrigo Varejão Andreão Inteligência Artificial Definição (Fonte: AAAI ): "the scientific understanding of the mechanisms

Leia mais

Edições Edge do SAP InfiniteInsight Visão geral Viabilizando insights preditivos apenas com cliques de mouse, sem códigos de computador

Edições Edge do SAP InfiniteInsight Visão geral Viabilizando insights preditivos apenas com cliques de mouse, sem códigos de computador Soluções de análise da SAP Edições Edge do SAP InfiniteInsight Visão geral Viabilizando insights preditivos apenas com cliques de mouse, sem códigos de computador Índice 3 Um caso para análise preditiva

Leia mais

REQUIREMENTS TRACEABILITY MATRIX: AUTOMATIC GENERATION AND VISUALIZATION

REQUIREMENTS TRACEABILITY MATRIX: AUTOMATIC GENERATION AND VISUALIZATION REQUIREMENTS TRACEABILITY MATRIX: AUTOMATIC GENERATION AND VISUALIZATION Seminário da disciplina Engenharia de Requisitos Aluno: Eliaquim Lima Sá Neto (elsn@cin.ufpe.br) Autores 2 Sandra Fabbri Professora

Leia mais

Descrição Formal de Linguagens -Sumário - Descrição Formal de Linguagens. -Overview- -Overview- - Fundamentos das Linguagens de Programação -

Descrição Formal de Linguagens -Sumário - Descrição Formal de Linguagens. -Overview- -Overview- - Fundamentos das Linguagens de Programação - Descrição Formal de Linguagens Linguagens de Programação Ciência da Computação DIN UEM CTC Prof. Jucimar Aula 4 Descrição Formal de Linguagens -Sumário - 1. Fundamentos de Linguagens de Programação 2.

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Conceitos básicos de algoritmos

Universidade Federal de Uberlândia Faculdade de Computação. Conceitos básicos de algoritmos Universidade Federal de Uberlândia Faculdade de Computação Conceitos básicos de algoritmos Prof. Renato Pimentel 1 Computação Dados Informações vindas de usuários ou de outras máquinas; Processamento transformação

Leia mais

LEVANTAMENTO DE REQUISITOS SEGUNDO O MÉTODO VOLERE

LEVANTAMENTO DE REQUISITOS SEGUNDO O MÉTODO VOLERE LEVANTAMENTO DE REQUISITOS SEGUNDO O MÉTODO VOLERE RESUMO Fazer um bom levantamento e especificação de requisitos é algo primordial para quem trabalha com desenvolvimento de sistemas. Esse levantamento

Leia mais

Práticas Leitoras & Produção de Textos Acadêmicos

Práticas Leitoras & Produção de Textos Acadêmicos Práticas Leitoras & Produção de Textos Acadêmicos Práticas Leitoras & Produção de Textos Acadêmicos Módulo 1 A Linguagem Acadêmica Prof. Walace de Almeida Rodrigues 1 IFMG Campus Formiga Prof. Walace de

Leia mais

2 Auto-sintonia de Bancos de Dados e Agentes de Software

2 Auto-sintonia de Bancos de Dados e Agentes de Software 2 Auto-sintonia de Bancos de Dados e Agentes de Software A uso da abordagem de agentes de software 1 pode trazer benefícios a áreas de aplicação em que é necessário construir sistemas autônomos, ou seja,

Leia mais

Introdução à Inteligência Artificial (Capítulo 1 - Russell) Inteligência Artificial. Professor: Rosalvo Ferreira de Oliveira Neto

Introdução à Inteligência Artificial (Capítulo 1 - Russell) Inteligência Artificial. Professor: Rosalvo Ferreira de Oliveira Neto Introdução à Inteligência Artificial (Capítulo 1 - Russell) Inteligência Artificial Professor: Rosalvo Ferreira de Oliveira Neto Estrutura 1. Definições 2. Áreas de Apoio para IA 3. Sub-Áreas da IA 4.

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Programas e Programação

Leia mais

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010 Construção de Compiladores Prof. Raimundo Santos Moura (http://www.ufpi.br/rsm) Construção de Compiladores Livro-Texto: AHO, Alfred V.; ULLMAN, Jeffrey D.; SETHI, R. Compiladores: princípios, técnicas

Leia mais

LISTA DE EXERCÍCIOS. Mede a capacidade de comunicação de computadores e dispositivos. Operam em diferentes plataformas de hardware

LISTA DE EXERCÍCIOS. Mede a capacidade de comunicação de computadores e dispositivos. Operam em diferentes plataformas de hardware 1. A nova infra-estrutura de tecnologia de informação Conectividade Mede a capacidade de comunicação de computadores e dispositivos Sistemas abertos Sistemas de software Operam em diferentes plataformas

Leia mais

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm.

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm. Autor José Jesse Gonçalves Graduado em Licenciatura em Matemática pela Universidade Estadual de São Paulo - UNESP, de Presidente Prudente (1995), com especialização em Análise de Sistemas (1999) e mestrado

Leia mais

Aprendizagem de Máquina

Aprendizagem de Máquina Aprendizagem de Máquina Professor: Rosalvo Ferreira de Oliveira Neto Disciplina: Inteligência Artificial Tópicos 1. Definições 2. Tipos de aprendizagem 3. Paradigmas de aprendizagem 4. Modos de aprendizagem

Leia mais

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br Programas e Linguagens Para executar uma tarefa

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Administração de Banco de Dados

Administração de Banco de Dados Administração de Banco de Dados Professora conteudista: Cida Atum Sumário Administração de Banco de Dados Unidade I 1 INTRODUÇÃO A BANCO DE DADOS...1 1.1 Histórico...1 1.2 Definições...2 1.3 Importância

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

INDICE 3.APLICAÇÕES QUE PODEM SER DESENVOLVIDAS COM O USO DO SAXES

INDICE 3.APLICAÇÕES QUE PODEM SER DESENVOLVIDAS COM O USO DO SAXES w w w. i d e a l o g i c. c o m. b r INDICE 1.APRESENTAÇÃO 2.ESPECIFICAÇÃO DOS RECURSOS DO SOFTWARE SAXES 2.1. Funcionalidades comuns a outras ferramentas similares 2.2. Funcionalidades próprias do software

Leia mais

Roteiro 2 Conceitos Gerais

Roteiro 2 Conceitos Gerais Roteiro 2 Conceitos Gerais Objetivos: UC Projeto de Banco de Dados Explorar conceitos gerais de bancos de dados; o Arquitetura de bancos de dados: esquemas, categorias de modelos de dados, linguagens e

Leia mais

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração Desenvolvimento em PHP usando Frameworks Elton Luís Minetto Agenda Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração Ambiente Web É o ambiente formado

Leia mais

Expressive Talking Heads: Um Estudo de Fala e Expressão Facial em Personagens Virtuais

Expressive Talking Heads: Um Estudo de Fala e Expressão Facial em Personagens Virtuais Expressive Talking Heads: Um Estudo de Fala e Expressão Facial em Personagens Virtuais Paula Salgado Lucena, Marcelo Gattass, Luiz Velho Departamento de Informática Pontifícia Universidade Católica do

Leia mais

RECONHECIMENTO DE PADRÕES RECONHECIMENTO DE VOZ

RECONHECIMENTO DE PADRÕES RECONHECIMENTO DE VOZ RECONHECIMENTO DE PADRÕES RECONHECIMENTO DE VOZ O ESQUEMA DE CLASSIFICAÇÃO É GERALMENTE BASEADO NA DISPONIBILIDADE DE UM CONJUNTO DE PADRÕES QUE FORAM ANTERIORMENTE CLASSIFICADOS, O "CONJUNTO DE TREINAMENTO";

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro

Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro Desenvolvimento em PHP usando Frameworks Elton Luís Minetto Agenda Ambiente Web PHP Problemas Frameworks CakePHP Symfony Zend Framework Prado CodeIgniter Demonstração O livro Ambiente Web É o ambiente

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

Classes Funcionais 21

Classes Funcionais 21 Classes Funcionais 21 3 Classes Funcionais Em todo trabalho de classificação funcional é necessário determinar quais serão as classes funcionais utilizadas. Esta divisão não se propõe a ser extensiva,

Leia mais

3 Ferramentas de busca

3 Ferramentas de busca 3 Ferramentas de busca A Internet se transformou em um vasto repositório de informações. Podemos encontrar sites sobre qualquer assunto, de futebol a religião. O difícil, porém é conseguir encontrar a

Leia mais

Inglesar.com.br Aprender Inglês Sem Estudar Gramática

Inglesar.com.br Aprender Inglês Sem Estudar Gramática 1 Sumário Introdução...04 O segredo Revelado...04 Outra maneira de estudar Inglês...05 Parte 1...06 Parte 2...07 Parte 3...08 Por que NÃO estudar Gramática...09 Aprender Gramática Aprender Inglês...09

Leia mais

EMENTAS DO CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

EMENTAS DO CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS EMENTAS DO CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS INTRODUÇÃO À COMPUTAÇÃO 60 h 1º Evolução histórica dos computadores. Aspectos de hardware: conceitos básicos de CPU, memórias,

Leia mais

Algoritmos e Programação I

Algoritmos e Programação I Algoritmos e Programação I Introdução a Computação Prof. Fernando Maia da Mota mota.fernandomaia@gmail.com CPCX/UFMS Fernando Maia da Mota 1 Computadores são dispositivos que só sabem fazer um tipo de

Leia mais

Introdução à Simulação

Introdução à Simulação Introdução à Simulação O que é simulação? Wikipedia: Simulação é a imitação de alguma coisa real ou processo. O ato de simular algo geralmente consiste em representar certas características e/ou comportamentos

Leia mais

Integração de Dados na Web. Ana Carolina Salgado Bernadette Lóscio

Integração de Dados na Web. Ana Carolina Salgado Bernadette Lóscio Integração de Dados na Web Ana Carolina Salgado Bernadette Lóscio Conteúdo Introdução Integração de Informações Consultando a Web Introdução Motivação Web e BD Arquitetura na Web Introdução Evolução da

Leia mais

Otimização de Recuperação de Informação usando Algoritmos Genéticos

Otimização de Recuperação de Informação usando Algoritmos Genéticos Otimização de Recuperação de Informação usando Algoritmos Genéticos Neide de Oliveira Gomes, M. Sc., nog@inpi.gov.br Prof. Marco Aurélio C. Pacheco, PhD Programa de Doutorado na área de Métodos de Apoio

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA DATA MINING EM VÍDEOS

UNIVERSIDADE FEDERAL DE SANTA CATARINA GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA DATA MINING EM VÍDEOS UNIVERSIDADE FEDERAL DE SANTA CATARINA GRADUAÇÃO EM SISTEMAS DE INFORMAÇÃO DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA DATA MINING EM VÍDEOS VINICIUS DA SILVEIRA SEGALIN FLORIANÓPOLIS OUTUBRO/2013 Sumário

Leia mais

4 Conversor EDTV Raw. 4.1 Arquitetura

4 Conversor EDTV Raw. 4.1 Arquitetura 4 Conversor EDTV Raw O conversor EDTV Raw é o programa que lê um documento escrito no perfil NCL EDTV e gera um documento Raw equivalente, i.e. que define a mesma apresentação. Este capítulo, apresenta

Leia mais

Interpretador AIML alimentado com tags HTML5

Interpretador AIML alimentado com tags HTML5 2º Congresso de Pesquisa Científica : Inovação, Ética e Sustentabilidade Interpretador AIML alimentado com tags HTML5 Rafael Luiz de Macedo (Ciência da Computação - UNIVEM - Marília/SP) Email: rafaelldemacedo@gmail.com

Leia mais

Atividade 11. Caça ao Tesouro Autômatos de Estados Finitos

Atividade 11. Caça ao Tesouro Autômatos de Estados Finitos Atividade 11 Caça ao Tesouro Autômatos de Estados Finitos Sumário Freqüentemente programas de computador precisam processar uma seqüência de símbolos como letras ou palavras em um documento, ou até mesmo

Leia mais

PROJETO DE REDES www.projetoderedes.com.br

PROJETO DE REDES www.projetoderedes.com.br PROJETO DE REDES www.projetoderedes.com.br Centro Universitário de Volta Redonda - UniFOA Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Modelando Novas Palavras

Modelando Novas Palavras Modelando Novas Palavras Introdução Modelando palavras fora do vocabulário (OOV Out Of- Vocabulary) Formulação Probabilística Métodos independentes do Domínio Conhecendo unidades de subpalavras OOV Modelos

Leia mais

PROF. DR. PAULO ROBERTO SCHROEDER DE SOUZA

PROF. DR. PAULO ROBERTO SCHROEDER DE SOUZA Inteligência Artificial CONCEITOS PROF. DR. PAULO ROBERTO SCHROEDER DE SOUZA O que é Inteligência Artificial O que é Inteligência Artificial? É a ciência e engenharia de projetar/construir máquinas inteligentes,

Leia mais

Programação Elementar de Computadores Jurandy Soares

Programação Elementar de Computadores Jurandy Soares Programação Elementar de Computadores Jurandy Soares Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos

Leia mais

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES 1 BRANCO; Guido Aparecido Junior, 2 TAMAE, Rodrigo Yoshio 1-Discente do Curso Sistemas de Informação FAEG/Garça 2-Docente do Curso Sistemas

Leia mais

O que queremos. Processamento Estatístico da Linguagem Natural. Parsing Morfológico. Regras Simples. Adicionando palavras. Regras Derivacionais

O que queremos. Processamento Estatístico da Linguagem Natural. Parsing Morfológico. Regras Simples. Adicionando palavras. Regras Derivacionais Processamento Estatístico da Linguagem Natural Aula 5 Professora Bianca (Sala 302 Bloco E) bianca@ic.uff.br http://www.ic.uff.br/~bianca/peln/ O que queremos Algo que faça automaticamente um mapeamento

Leia mais

Linguagens de programação

Linguagens de programação Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s

Leia mais

Capítulo 1. Linguagens e processadores

Capítulo 1. Linguagens e processadores Capítulo 1. 1. Linguagens 1.1. Definição Definição : Uma linguagem L sobre um alfabeto, também designado com frequência por vocabulário, V, é um conjunto de frases, em que cada frase é uma sequência de

Leia mais

Apostila de. Renan Teruo Carneiro Wilson Kazuo Mizutani. 12 de agosto de 2013

Apostila de. Renan Teruo Carneiro Wilson Kazuo Mizutani. 12 de agosto de 2013 Apostila de Infográficos Renan Teruo Carneiro Wilson Kazuo Mizutani 12 de agosto de 2013 Copyright (C) 2013 USPGameDev Escrito por: Renan Teruo Carneiro (imano ob at uspgamedev.org) Wilson Kazuo Mizutani

Leia mais

Algumas propriedades dos objetos:

Algumas propriedades dos objetos: Orientação a Objetos Vivemos num mundo de objetos. Esses objetos existem na natureza, nas entidades feitas pelo homem, nos negócios e nos produtos que usamos. Eles podem ser categorizados, descritos, organizados,

Leia mais

3 Metodologia de Previsão de Padrões de Falha

3 Metodologia de Previsão de Padrões de Falha 3 Metodologia de Previsão de Padrões de Falha Antes da ocorrência de uma falha em um equipamento, ele entra em um regime de operação diferente do regime nominal, como descrito em [8-11]. Para detectar

Leia mais

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2 Estrutura de Repetição. Ex. 2 A ESTRUTURA Enquanto faça{} É MELHOR UTILIZADA PARA SITUAÇÕES ONDE O TESTE DE CONDIÇÃO (V OU F) PRECISA SER VERIFICADO NO INÍCIO DA ESTRUTURA DE REPETIÇÃO.

Leia mais

SISTEMAS INTELIGENTES DE APOIO À DECISÃO

SISTEMAS INTELIGENTES DE APOIO À DECISÃO SISTEMAS INTELIGENTES DE APOIO À DECISÃO As organizações estão ampliando significativamente suas tentativas para auxiliar a inteligência e a produtividade de seus trabalhadores do conhecimento com ferramentas

Leia mais

Módulo 6: Inteligência Artificial

Módulo 6: Inteligência Artificial Módulo 6: Inteligência Artificial Assuntos: 6.1. Aplicações da IA 6.2. Sistemas Especialistas 6.1. Aplicações da Inteligência Artificial As organizações estão ampliando significativamente suas tentativas

Leia mais

IC Inteligência Computacional Redes Neurais. Redes Neurais

IC Inteligência Computacional Redes Neurais. Redes Neurais Universidade Federal do Rio de Janeiro PÓS-GRADUAÇÃO / 2008-2 IC Inteligência Computacional Redes Neurais www.labic.nce.ufrj.br Antonio G. Thomé thome@nce.ufrj.br Redes Neurais São modelos computacionais

Leia mais

O PROJETO DE PESQUISA. Prof. Angelo Augusto Frozza, M.Sc. http://about.me/tilfrozza

O PROJETO DE PESQUISA. Prof. Angelo Augusto Frozza, M.Sc. http://about.me/tilfrozza O PROJETO DE PESQUISA Prof. Angelo Augusto Frozza, M.Sc. http://about.me/tilfrozza ROTEIRO Escolher um tema de pesquisa Por onde começar? Ler para aprender Estrutura do Projeto de Pesquisa A Definição

Leia mais

Tecnologia da Informação. Prof. Esp. Lucas Cruz

Tecnologia da Informação. Prof. Esp. Lucas Cruz Tecnologia da Informação Prof. Esp. Lucas Cruz Componentes da Infraestrutura de TI Software A utilização comercial da informática nas empresas iniciou-se por volta dos anos 1960. O software era um item

Leia mais

Laboratório 4 Validação do Formulário

Laboratório 4 Validação do Formulário Laboratório 4 Validação do Formulário Introdução Agora que já definimos os nossos documentos usando xhtml e já os embelezámos através da utilização das CSS, está na hora de validar a informação que o utilizador

Leia mais

Injeção de SQL - Detecção de evasão

Injeção de SQL - Detecção de evasão Injeção de SQL - Detecção de evasão Resumo A detecção dos ataques de injeção de SQL era feita inicialmente com o uso de técnicas de reconhecimento de padrões, verificados contra assinaturas e palavraschave

Leia mais

Recuperação de Imagens na Web Baseada em Informações Textuais

Recuperação de Imagens na Web Baseada em Informações Textuais Recuperação de Imagens na Web Baseada em Informações Textuais André Ribeiro da Silva Mário Celso Candian Lobato Universidade Federal de Minas Gerais Departamento de Ciência da Computação {arsilva,mlobato}@dcc.ufmg.br

Leia mais

COMPILADORES E INTERPRETADORES

COMPILADORES E INTERPRETADORES Aula 16 Arquitetura de Computadores 12/11/2007 Universidade do Contestado UnC/Mafra Curso Sistemas de Informação Prof. Carlos Guerber COMPILADORES E INTERPRETADORES Um compilador transforma o código fonte

Leia mais

Padrões de Contagem de Pontos de Função

Padrões de Contagem de Pontos de Função Padrões de Contagem de Pontos de Função Contexto Versão: 1.0.0 Objetivo O propósito deste documento é apresentar os padrões estabelecidos para utilização da técnica de Análise de Pontos de Função no ambiente

Leia mais

Basicão de Estatística no EXCEL

Basicão de Estatística no EXCEL Basicão de Estatística no EXCEL Bertolo, Luiz A. Agosto 2008 2 I. Introdução II. Ferramentas III. Planilha de dados 3.1 Introdução 3.2 Formatação de células 3.3 Inserir ou excluir linhas e colunas 3.4

Leia mais

ShoeSystem 1.0 Sistema para loja de calçados

ShoeSystem 1.0 Sistema para loja de calçados Artigo apresentado ao UNIS, como parte dos requisitos para obtenção do título de tecnólogo em Análise e Desenvolvimento de Sistemas 1 ShoeSystem 1.0 Sistema para loja de calçados André Luis dos Reis Revair,

Leia mais

Reuso. Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior

Reuso. Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior Reuso Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior Reutilização de Software Na maioria das áreas de engenharia de software, sistemas são desenvolvidos

Leia mais

Metodos de Programação

Metodos de Programação Metodos de Programação Métodos de Programação Introdução Informática, Computador, Algoritmo Informática: Ciência do processamento da informação Computador: Máquina que serve para processar informação Algoritmo:

Leia mais

Suporte à Engenharia Reversa para o ambiente SEA

Suporte à Engenharia Reversa para o ambiente SEA Otavio Pereira Suporte à Engenharia Reversa para o ambiente SEA Orientador: Ricardo Pereira e Silva Universidade Federal de Santa Catarina - UFSC Departamento de Informática e Estatística - INE Florianópolis

Leia mais

Introdução às Linguagens de Programação

Introdução às Linguagens de Programação Introdução às Linguagens de Programação Histórico de Linguagens de Programação O computador não faz nada sozinho Precisamos informar, de forma clara, como ele deve executar as tarefas Ou seja, o computador

Leia mais

FERRAMENTAS PARA DESENVOLVIMENTO EM C#

FERRAMENTAS PARA DESENVOLVIMENTO EM C# FERRAMENTAS PARA DESENVOLVIMENTO EM C# Camila Sanches Navarro 1,2, Wyllian Fressatti 2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil sanchesnavarro@gmail.com wyllian@unipar.br Resumo. Este artigo

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

FAT32 ou NTFS, qual o melhor?

FAT32 ou NTFS, qual o melhor? FAT32 ou NTFS, qual o melhor? Entenda quais as principais diferenças entre eles e qual a melhor escolha O que é um sistema de arquivos? O conceito mais importante sobre este assunto, sem sombra de dúvidas,

Leia mais

Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29

Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29 Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29 ActionScript_30_01.indd 2 5/11/2010 08:29:34 Aprendendo uma nova linguagem... ActionScript é uma linguagem e, como um novo idioma ou a linguagem

Leia mais

Manual do Cantor. Alexander Rieder Tradução: Marcus Gama

Manual do Cantor. Alexander Rieder Tradução: Marcus Gama Alexander Rieder Tradução: Marcus Gama 2 Conteúdo 1 Introdução 5 2 Usando o Cantor 6 2.1 Recursos do Cantor..................................... 6 2.2 As infraestruturas do Cantor...............................

Leia mais

Microsoft Excel 2003

Microsoft Excel 2003 Associação Educacional Dom Bosco Faculdades de Engenharia de Resende Microsoft Excel 2003 Professores: Eduardo Arbex Mônica Mara Tathiana da Silva Resende 2010 INICIANDO O EXCEL Para abrir o programa Excel,

Leia mais

Pesquisa Operacional

Pesquisa Operacional GOVERNO DO ESTADO DO PARÁ UNIVERSIDADE DO ESTADO DO PARÁ CENTRO DE CIÊNCIAS NATURAIS E TECNOLOGIA DEPARTAMENTO DE ENGENHARIA Pesquisa Operacional Tópico 4 Simulação Rosana Cavalcante de Oliveira, Msc rosanacavalcante@gmail.com

Leia mais

Levantamento de Requisitos.

Levantamento de Requisitos. FACULDADES INTEGRADAS MATO-GROSSENSES DE CIÊNCIAS SOCIAIS E HUMANAS RESUMO Levantamento de Requisitos. Leandro Cícero da Silva Mello. Prof. Jeanine Ferrazza Meyer Metodologia e Técnica de Pesquisa- Levantamento

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

Introdução. Capítulo 1

Introdução. Capítulo 1 Capítulo 1 Introdução Em computação, muitos problemas são resolvidos por meio da escrita de um algoritmo que especifica, passo a passo, como resolver um problema. No entanto, não é fácil escrever um programa

Leia mais

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma Roteiro: Conceitos básicos de algoritmo, linguagem, processador de linguagem e ambiente de programação; Aspectos fundamentais da organização e do funcionamento de um computador; Construções básicas de

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

Leia mais

Aula 2: RIA - Aplicações Ricas para Internet Fonte: Plano de Aula Oficial da Disciplina

Aula 2: RIA - Aplicações Ricas para Internet Fonte: Plano de Aula Oficial da Disciplina Programação para Internet Rica 1 Aula 2: RIA - Aplicações Ricas para Internet Fonte: Plano de Aula Oficial da Disciplina Objetivo: Identificar as principais características de uma Aplicação Internet Rica.

Leia mais

Inteligência Artificial

Inteligência Artificial Inteligência Artificial As organizações estão ampliando significativamente suas tentativas para auxiliar a inteligência e a produtividade de seus trabalhadores do conhecimento com ferramentas e técnicas

Leia mais

Analysing sociolinguistic variation, de autoria de Sali Tagliamonte (University

Analysing sociolinguistic variation, de autoria de Sali Tagliamonte (University Cadernos de Letras da UFF Dossiê: Difusão da língua portuguesa, n o 39, p. 321-328, 2009 321 ANALYSING SOCIOLINGUISTIC VARIATION, SALI TAGLIAMONTE (2006) Por Humberto Soares da Silva Analysing sociolinguistic

Leia mais

SEO PARA INICIANTES Como otimizar um blog Guia passo a passo para fazer o seu blog otimizado e indexado corretamente!

SEO PARA INICIANTES Como otimizar um blog Guia passo a passo para fazer o seu blog otimizado e indexado corretamente! 1 SEO PARA INICIANTES Como otimizar um blog Guia passo a passo para fazer o seu blog otimizado e indexado corretamente! Fórmula Hotmart - www.formulahotmart.com 2 Este ebook pertence: Claudio J. Bueno

Leia mais

5 Detalhes da Implementação

5 Detalhes da Implementação Detalhes da Implementação 101 5 Detalhes da Implementação Neste capítulo descreveremos detalhes da implementação do Explorator que foi desenvolvido usando o paradigma MVC 45 e o paradigma de CoC 46 (Convention

Leia mais

Lição 1 Introdução à programação de computadores

Lição 1 Introdução à programação de computadores Lição Introdução à programação de computadores Introdução à Programação I Objetivos Ao final desta lição, o estudante será capaz de: Identificar os diferentes componentes de um computador Conhecer linguagens

Leia mais

Documento de Arquitetura

Documento de Arquitetura Documento de Arquitetura A2MEPonto - SISTEMA DE PONTO ELETRÔNICO A2MEPonto - SISTEMA DE PONTO ELETRÔNICO #1 Pág. 1 de 11 HISTÓRICO DE REVISÕES Data Versão Descrição Autor 28/10/2010 1 Elaboração do documento

Leia mais

Conteúdo Programático de PHP

Conteúdo Programático de PHP Conteúdo Programático de PHP 1 Por que PHP? No mercado atual existem diversas tecnologias especializadas na integração de banco de dados com a WEB, sendo o PHP a linguagem que mais se desenvolve, tendo

Leia mais

BANCO DE DADOS E BUSINESS INTELIGENCE. C/H: 20 horas (20/02, 25/02, 27/02, 04/03, 06/03)

BANCO DE DADOS E BUSINESS INTELIGENCE. C/H: 20 horas (20/02, 25/02, 27/02, 04/03, 06/03) MBA em Gestão de TI MÓDULO: BANCO DE DADOS E BUSINESS INTELIGENCE C/H: 20 horas (20/02, 25/02, 27/02, 04/03, 06/03) PROFESSOR: Edison Andrade Martins Morais prof@edison.eti.br http://www.edison.eti.br

Leia mais

Introdução ao OpenUP (Open Unified Process)

Introdução ao OpenUP (Open Unified Process) Introdução ao OpenUP (Open Unified Process) Diferentes projetos têm diferentes necessidades de processos. Fatores típicos ditam as necessidades de um processo mais formal ou ágil, como o tamanho da equipe

Leia mais

Utilização de Hipermídia para Criação de Help: Estudo de Caso Software para Auxílio no Ensino de Linguagens Regulares

Utilização de Hipermídia para Criação de Help: Estudo de Caso Software para Auxílio no Ensino de Linguagens Regulares Utilização de Hipermídia para Criação de Help: Estudo de Caso Software para Auxílio no Ensino de Linguagens Regulares Juliana Leontina da Silva 1, Frederico Coelho 1 1 Departamento de Ciência da Computação

Leia mais

MANUAL E DICAS ASSISTENTE VIRTUAL (AV) ADS DIGITAL (WWW.ADSDIGITAL.COM.BR) VERSÃO DO ASSISTENTE VIRTUAL: 1.3.1 POR

MANUAL E DICAS ASSISTENTE VIRTUAL (AV) ADS DIGITAL (WWW.ADSDIGITAL.COM.BR) VERSÃO DO ASSISTENTE VIRTUAL: 1.3.1 POR MANUAL E DICAS DO ASSISTENTE VIRTUAL (AV) POR ADS DIGITAL (WWW.ADSDIGITAL.COM.BR) VERSÃO DO ASSISTENTE VIRTUAL: 1.3.1 ÍNDICE Introdução...3 Requisitos e Restrições do Assistente...3 Diferenças da Versão

Leia mais

Universidade Federal de Santa Catarina. Text Mining. Data Mining INE5644

Universidade Federal de Santa Catarina. Text Mining. Data Mining INE5644 Universidade Federal de Santa Catarina Text Mining Data Mining INE5644 Augusto Fredigo Hack Luis Felipe Nunes Matheus Hoffmann Silva Thiago Thalison Firmino de Lima Florianópolis, 19 de outrubro de 2013

Leia mais