• Nenhum resultado encontrado

Transdutores adaptativos programáveis e sua aplicação no desenvolvimento de agentes de diálogos

N/A
N/A
Protected

Academic year: 2021

Share "Transdutores adaptativos programáveis e sua aplicação no desenvolvimento de agentes de diálogos"

Copied!
150
0
0

Texto

(1)

Programa de Pós-Graduação em Sistemas e Computação Mestrado Acadêmico em Sistemas e Computação

Transdutores Adaptativos Programáveis e sua

Aplicação no Desenvolvimento de Agentes de

Diálogos

Dissertação de Mestrado

Aluno: Hortevan Marrocos Frutuoso

Orientador: Prof. Dr. Benjamín René Callejas Bedregal

Natal-RN Dezembro de 2019

(2)

Transdutores Adaptativos Programáveis e sua

Aplicação no Desenvolvimento de Agentes de Diálogos

Dissertação de Mestrado apresentada ao Pro-grama de Pós-Graduação em Sistemas e Computação do Departamento de Informá-tica e MatemáInformá-tica Aplicada da Universidade Federal do Rio Grande do Norte como re-quisito parcial para a obtenção do grau de Mestre em Sistemas e Computação.

Linha de pesquisa:

Fundamentos da Computação

Orientador

Prof. Dr. Benjamín René Callejas Bedregal

PPgSC  Programa de Pós-Graduação em Sistemas e Computação DIMAp  Departamento de Informática e Matemática Aplicada

CCET  Centro de Ciências Exatas e da Terra UFRN  Universidade Federal do Rio Grande do Norte

Natal-RN Dezembro de 2019

(3)

Frutuoso, Hortevan Marrocos.

Transdutores adaptativos programáveis e sua aplicação no desenvolvimento de agentes de diálogos / Hortevan Marrocos Frutuoso. - 2020.

149f.: il.

Dissertação (Mestrado) - Universidade Federal do Rio Grande do Norte, Centro de Ciências Exatas e da Terra, Programa de Pós-Graduação em Sistemas e Computação. Natal, 2020.

Orientador: Benjamín René Callejas Bedregal.

1. Computação Dissertação. 2. Agentes de diálogos

-Dissertação. 3. Transdutores - -Dissertação. 4. Linguagem Natural - Dissertação. I. Bedregal, Benjamín René Callejas. II. Título.

RN/UF/CCET CDU 004

(4)
(5)
(6)

Primeiramente, a Deus, pela oportunidade que me concedeu e também por estar comigo nos momentos mais difíceis de minha vida.

A minha família, por estar sempre ao meu lado e por entender minhas ausên-cias durante a realização deste trabalho.

Ao meu professor e orientador, Prof. Dr. Benjamín René Callejas Bedregal pelo suporte e paciência no decorrer deste ciclo.

A todos os professores que fazem parte do PPgSC e que me ajudaram através de seus ensinamentos durante o curso de mestrado. Ensinamentos esses que me serviram de alicerce para a realização deste trabalho.

A toda a Diretoria de Compras da UFRN, em especial ao seu diretor, o sr. João Paulo Paiva, pelo apoio dado durante a realização deste trabalho.

Enm, a todos que direta ou indiretamente contribuíram para que este tra-balho fosse realizado.

(7)
(8)

Aplicação no Desenvolvimento de Agentes de Diálogos

Autor: Hortevan Marrocos Frutuoso Orientador(a): Prof. Dr. Benjamín René Callejas Bedregal

Resumo

O presente trabalho tem como objetivo apresentar um modelo de agente de diálogo cons-truído a partir do Transdutor Adaptativo Programável, dispositivo baseado em um Autô-mato Finito Determinístico com tecnologia adaptativa capaz de estender sua própria es-trutura de estados e regras de transições, de forma que a linguagem reconhecida pelo transdutor torna-se uma subconjunto limitado da linguagem natural, porém expansível. Este dispositivo então é utilizado para modelar um agente de diálogos capaz de rece-ber sentenças em português e reagir a estas sentenças apresentando um comportamento semanticamente compatível com a sentença passada pelo usuário, respondendo a este con-forme as denições registradas na base de conhecimento do agente. Agregando-lhe ainda a capacidade de permitir a expansão desta base de conhecimento a partir das próprias sentenças do usuário, através de uma sintaxe adequada para tal.

Palavras-chave: Agente de Diálogos, Transdutores, Linguagem Natural.

(9)

Author: Hortevan Marrocos Frutuoso Supervisor: Benjamín René Callejas Bedregal, D.Sc.

Abstract

The present work aims to present a dialog agent model built from the Programmable Adaptive Transducer, a device based on a deterministic nite automaton with adaptive technology capable of extending its own state structure and rules of transitions, so that the recognized language by the transducer becomes a limited subset of natural but ex-pandable language. This device is then used to model a dialog agent capable of receiving sentences in Portuguese and reacting to these sentences presenting a behavior semanti-cally compatible with the sentence passed by the user, responding to it according to the denitions registered in the agent's knowledge base. Adding to it the ability to allow the expansion of this knowledge base from the user's own sentences, through an appropriate syntax for such.

Keywords: Dialog Agent, Transducers, Natural Language.

(10)

1 Hierarquia de Chomsky. Fonte: Adaptado de (MENEZES, 2011) . . . p. 30

2 Exesmplo de AFD. Fonte: Autor. . . p. 33 3 Exemplo de APN que reconhece palíndromos. Fonte: (VIEIRA, 2006) . . p. 35

4 Exemplo de Máquina de Mealy. Fonte: Autor. . . p. 38 5 Exemplo de Máquina de Moore. Fonte: Autor. . . p. 38 6 Exemplo de Máquina de Moore. Fonte: Adaptado de (VIEIRA, 2006) . . p. 39

7 Exemplo de Autômato Adaptativo. Fonte: (NETO; BRAVO, 2003) . . . . p. 42

8 Funções Adaptativas A e B utilizados no exemplo da Figura 7. Fonte:

(NETO; BRAVO, 2003) . . . p. 42

9 Esquema do Processador de LNCE. Fonte: Autor. . . p. 56 10 Esquema em Blocos do TAP. Fonte: Autor. . . p. 71 11 Conguração do TAP Utilizada para Reconhecer a Sentença Calcule

<ex-pressão>. Fonte: Autor. . . p. 76 12 Esquema do Processador de LNCE. Fonte: Autor. . . p. 86 13 Conguração Inicial do TAP - Análise de Expressões. Fonte: Autor. . . p. 93 14 Conguração Inicial do TAP - Tipos Primitivos. Fonte: Autor. . . p. 94 15 Conguração Inicial do TAP - Comandos Básicos. Fonte: Autor. . . p. 95 16 Conguração Inicial do TAP - Comandos ASM. Fonte: Autor. . . p. 96 17 Conguração Inicial do TAP - Análise de Símbolos. Fonte: Autor. . . . p. 97 18 Conguração Inicial do TAP - Gerência de Pacotes. Fonte: Autor. . . . p. 98 19 VerticeCaminhoSimbolo (VCS) Gerado pelo TAP. Fonte: Autor. . . p. 99

(11)

20 Vértices gerados no TAP para Criação de Funções ou Variáveis. Fonte:

Autor. . . p. 101 21 Diagrama em Blocos da Máquina Virtual Baseada em Pilha Utilizada

pelo Agente Proposto. Fonte: Autor. . . p. 102 22 Diagrama em Blocos do Núcleo de Processamento. Fonte: Autor. . . p. 106 23 Tela Principal do Sistema. Fonte: Autor. . . p. 107 24 Sistema Respondendo à Sentença O que é empenho. Fonte: Autor. . . p. 107 25 Sistema Respondendo à Sentença Que é empenho. Fonte: Autor. . . . p. 108 26 Log Gerado pela Análise da Sentença Boa Noite. Fonte: Autor. . . p. 120 27 Log Gerado pela Denição da Sentença Bom Dia Parte 1. Fonte: Autor. p. 122 28 Log Gerado pela Denição da Sentença Bom Dia Parte 2. Fonte: Autor. p. 123 29 Escolaridade dos Participantes dos Experimentos. Fonte: Autor. . . p. 126 30 Faixa Etária dos Participantes dos Experimentos. Fonte: Autor. . . p. 126 31 Percentual de Participantes Pertencentes à DPGC/UFRN. Fonte: Autor. p. 126 32 Nível de conhecimento em tecnologias dos participantes dos

experimen-tos. Fonte: Autor. . . p. 127 33 Frequência de Uso de Agentes. Fonte: Autor. . . p. 127

(12)

1 Função de transição do AFD da Figura 2 . . . p. 33 2 Função de transição do APN da Figura 3 . . . p. 36 3 Tipos primitivos aceitos na linguagem . . . p. 60 4 Operadores utilizados em expressões lógico-aritméticas . . . p. 61 5 Alguns comandos aceitos pela linguagem proposta . . . p. 63 6 Comando utilizados para gerenciar pacotes . . . p. 67 7 Algumas micro-instruções denidas para o TAP . . . p. 73 8 Algumas saídas possíveis para a função δDE do TAP . . . p. 75

9 Pacotes inicialmente denidos para os experimentos . . . p. 113 10 Tipos primitivos aceitos na linguagem . . . p. 128 11 Quadro comparativo entre o modelo proposto e alguns outros modelos

conhecidos . . . p. 134 12 Opcodes da Máquina Virtual Baseado em Pilha . . . p. 144 13 Opcodes da Máquina Virtual Baseado em Pilha - Continuação . . . p. 145 14 Opcodes da Máquina Virtual Baseado em Pilha - Continuação . . . p. 146 15 Opcodes da Máquina Virtual Baseado em Pilha - Continuação . . . p. 147 16 Lista de opcodes de uso interno ao agente . . . p. 148

(13)

1 Micro-código retornado em V0.in . . . p. 79

2 Micro-código retornado em V0.out . . . p. 79

3 Micro-código retornado em V2.in . . . p. 79

4 Micro-código retornado em V2.out . . . p. 79

5 Micro-código retornado em V3.in . . . p. 80

6 Micro-código retornado em V3.out . . . p. 80

7 Micro-código retornado em V100.in . . . p. 80

8 Micro-código retornado em V100.out . . . p. 81

9 Micro-código retornado em V101.in . . . p. 81

10 Micro-código retornado em V101.out . . . p. 81

11 Saída gerada pela análise da sentença Calcule 2+3 . . . p. 81 12 Pseudocódigo para processar sentenças em LNC . . . p. 86 13 Função analisarSentença(Fita : Lista de Tokens) da classe TAP . . . p. 87 14 Função buscaEstadoFinal() . . . p. 88 15 Função TentaTransição() . . . p. 89 16 Função FazTransição() . . . p. 90 17 Função executarMicroCodigo() . . . p. 90

(14)

AA - Autômatos Adaptativos

AFD - Autômato Finito Determinístico

AIML - Artcial Inteligence Markup Language APD - Autômatos com Pilha Determinísticos APN - Autômatos com Pilha Não Determinístico ARP - Ata de Registro de Preços

CNL - Controlled Natural Language CNN - Convolutional Neural Network

DOD - Documento de Ociliazaçao de Demanda

DPGC - Divisão de Planejamento e Gerenciamento de Compras HTML - Hypertext Markup Language

LA - Linguagens Adaptativas

LLC - Linguagens Livre de Contexto LN - Linguagem Natural

LNC - Linguagem Natural Controlada MLP - MultiLayer Perceptron

NLTK - Natural Language Toolkit NF - Nota Fiscal

PLN - Processamento de Linguagem Natural

PLNC - Processamento de Linguagem Natural Controlada RI - Recuperação de Informação

(15)

SSH - Secure Shell

SVM - Support Vector Machine

TAP - Transdutor Adaptativo Programável

UASG - Unidades Administrativas de Serviços Gerais UFRN - Universidade Federal do Rio Grande do Norte W3C - World Wide Web Consortium

XML - Extensible Markup Language

(16)

1 Introdução p. 19 1.1 Motivação . . . p. 21 1.2 Objetivos . . . p. 22 1.3 Ações Realizadas . . . p. 22 1.4 Estrutura do Trabalho . . . p. 23 2 Conceitos Preliminares p. 25 2.1 Interação Homem-Máquina . . . p. 26 2.2 Linguagem Natural . . . p. 28 2.3 Linguagem Formal . . . p. 29 2.4 Máquinas de Estados Finitos . . . p. 30 2.4.1 Autômatos Reconhecedores . . . p. 30 2.4.1.1 Autômato Finito Determinístico - AFD . . . p. 31 2.4.1.2 Autômatos com Pilha Não Determinísticos - APN . . . p. 33 2.4.2 Transdutores . . . p. 37 2.4.2.1 Máquina de Mealy . . . p. 37 2.4.2.2 Máquina de Moore . . . p. 38 2.4.2.3 Transdutor PushDown . . . p. 39 2.4.3 Autômatos Adaptativos . . . p. 40 2.5 Processamento de Linguagem Natural . . . p. 42 2.6 Processamento de Linguagem Natural Controlada . . . p. 43 2.7 Aplicações Baseadas em Diálogos . . . p. 45

(17)

2.7.1 Chatbot . . . p. 45 2.7.2 Agentes de Conversação Orientado a Tarefas . . . p. 46

3 Análise Textual no PLN - Trabalhos Relacionados p. 49 3.1 Abordagem Clássica - Máquinas de Estados Finito no PLN . . . p. 50 3.2 Técnicas de AM Aplicadas à Análise de Textos . . . p. 51 3.3 Recuperação da Informação e Resposta a Perguntas . . . p. 52 3.4 Chatbots e Agentes de Diálogos . . . p. 53

4 Modelo Proposto p. 55

4.1 O Agente de Diálogo . . . p. 57 4.2 A Linguagem Proposta para o Agente . . . p. 58 4.2.1 Sentenças de Consulta . . . p. 59 4.2.2 Expressão Lógico-Aritméticas . . . p. 60 4.2.2.1 Tipos de Expressões . . . p. 60 4.2.2.2 Operadores Lógico-Aritméticos . . . p. 61 4.2.2.3 Precedência dos Operadores Lógico-Aritméticos . . . . p. 61 4.2.3 Comandos . . . p. 62 4.2.4 Blocos de Comandos . . . p. 63 4.2.5 Declaração de Variáveis . . . p. 64 4.2.6 Gerências de Pacotes . . . p. 66 4.2.7 Sentenças de Denição . . . p. 67 4.2.8 Sentenças de Denição com Parâmetros . . . p. 68 4.2.9 Chamada a Outras Sentenças . . . p. 69 4.2.10 Chamadas Direta em Opcodes da Máquina Alvo . . . p. 70 4.3 Transdutor Adaptativo Programável - TAP . . . p. 70 4.3.1 Comparação entre o Autômato Adaptativo e o TAP . . . p. 82

(18)

4.4 Algumas Considerações Acerca do Modelo Proposto . . . p. 83

5 Agente de Diálogo Baseado no TAP p. 85 5.1 Diagrama do Agente . . . p. 85 5.2 Tokenizador . . . p. 86 5.3 TAP . . . p. 87 5.3.1 Conguração Inicial do TAP . . . p. 92 5.3.2 Conguração de Expansão da LNC . . . p. 99 5.3.3 Finalização da Geração de Código . . . p. 102 5.4 A Máquina Virtual . . . p. 102 5.4.1 Lista Circular de Processos . . . p. 102 5.4.2 Clock . . . p. 103 5.4.3 Entrada e Saída . . . p. 103 5.4.4 Unidade de Controle . . . p. 103 5.4.5 Núcleo de Processamento . . . p. 105 5.4.6 Cabeçalho de Código Executável . . . p. 105 5.5 O WebService . . . p. 105 5.6 O Sistema em Funcionamento . . . p. 106 5.7 Problemas Encontrados . . . p. 108 5.7.1 Resolução de Nomes de Sentenças . . . p. 110 5.8 Considerações Finais sobre o Modelo Proposto . . . p. 110

6 Testes, Resultados e Validação do Modelo p. 112 6.1 Preparação da Base de Conhecimento . . . p. 112 6.1.1 O Pacote Sistema . . . p. 113 6.1.2 O Pacote Diálogos . . . p. 115 6.1.3 O Pacote DPGC . . . p. 117

(19)

6.2 Análise dos Indicadores Internos . . . p. 119 6.3 Análise dos Indicadores Externos . . . p. 125 6.3.1 Coleta dos Dados . . . p. 125 6.3.2 Análise dos Dados Obtidos . . . p. 128 6.4 Avaliação dos Resultados . . . p. 130 6.4.1 Pontos Positivos . . . p. 131 6.4.2 Pontos Negativos . . . p. 132 6.5 Comparação com Outros Modelos . . . p. 133 6.6 Sugestões Obtidas a partir dos Usuários . . . p. 135

7 Considerações Finais p. 137

7.1 Trabalhos Futuros . . . p. 138

Referências p. 140

Apêndice A -- Opcodes da Máquina Virtual Baseada em Pilha p. 144

(20)

*

(21)

1 Introdução

A sociedade moderna lida todos os dias com uma grande quantidade de informações. A era da informação - como é chamado o momento atual - tem como regra áurea a ideia de que conhecimento é poder. Ou seja, o poder de um indivíduo ou nação está diretamente relacionado à quantidade de informações que ele detém. Nesse contexto, computadores são ferramentas extremamente úteis no gerenciamento dessas informações. Através de softwa-res especícos, sesoftwa-res humanos passam aos computadosoftwa-res instruções sobre como processar dados e extrair deles informações úteis. E uma vez ensinados, os computadores realizam tal processamento com extrema rapidez. Contudo, existe uma grande distância entre as linguagens utilizadas pelos seres humanos e computadores. Enquanto os computadores utilizam uma linguagem numérica formada sobre um alfabeto composto por 0 e 1, os seres humanos utilizam uma linguagem natural.

Lancaster (2003) arma que linguagem natural é aquela que surge no discurso co-mum. Trata-se portanto de uma linguagem espontânea que os seres humanos utilizam para se comunicar entre si. E embora existam regras gramaticais que descrevem como se comunicar corretamente, elas são altamente complexas e não estritas o suciente; ao ponto de permitir a construção de frases sem sentido ou com o sentido interpretado dentro do campo da subjetividade humana. Por outro lado, gramáticas podem ser denidas de forma a gerar linguagens com uma sintaxe rigorosamente denida, de forma que dada uma sentença qualquer, para saber se tal sentença pertence a esta linguagem, basta vericar se as regras gramaticais da linguagem podem ser utilizas para formar tal sentença. Lingua-gens assim denidas são chamadas de linguaLingua-gens formais (ROSEN, 2010). Grosseiramente,

a principal diferença entre linguagens formais e naturais, do ponto de vista sintático, é que a primeira é completamente descrita por um conjunto nito e rigoroso de regras que permitem que qualquer cadeia de símbolos possa ser vericada de forma inequívoca se é ou não uma palavra pertencente à linguagem (VIEIRA, 2006). Assim, linguagens formais

possuem regras estritas para descrever a sua sintaxe. Por exemplo, 2*(3+3)=7 mesmo se-manticamente errada, é uma expressão matemática correta. Já 2*(3+3 =12 é sem sentido

(22)

matematicamente, ou seja é uma expressão matemática incorreta, mal escrita.

Computadores podem ser programados para reconhecer determinado tipo de lingua-gem formal e executar os comandos apropriados de forma a apresentar uma resposta semanticamente compatível com as sentenças aceitas por tal linguagem. Para que isto seja possível, ao menos dois passos são necessários. O primeiro deles é vericar se a sen-tença informada pertence à linguagem alvo. Ou seja, o computador deverá vericar se a sintaxe da sentença obedece ao conjunto de regras gramaticais da linguagem alvo. Este processo é chamado de análise sintática. Após esta análise, o próximo passo é a análise semântica. Esta verica se o conteúdo da sentença faz sentido dentro de um determi-nado contexto. Aho, Sethi e Ullman (1995) armam que para uma análise sintática bem sucedida é desejável que a gramática seja denida de forma que cada sentença possua no máximo um árvore gramatical. Ou seja, as regras gramaticais utilizadas para gerar tal sentença devem levar à no máximo um estado nal possível. Partindo da raiz e descendo na árvore gramatical até o estado nal, ao atingir-se este estado, pode-se armar que ele encerra um sentido único para aquela sentença. Em outras palavas, para que o compu-tador possa processar uma linguagem formal, esta deve se isenta de ambiguidade ou ao menos mantê-la sob um rígido controle, de forma a ter-se um único estado nal (AHO; SETHI; ULLMAN, 1995),(VIEIRA, 2006).

Se processar linguagens formais é relativamente simples, o mesmo não pode ser dito das linguagens naturais. Rosen (2010) arma que não parece ser possível especicar todas as regras de sintaxe para uma linguagem natural. E se parece difícil realizar uma análise sintática na linguagem natural, o problema torna-se ainda maior ao se tentar a análise semântica. Seres humanos utilizam diversos elementos externos à denição formal de uma linguagem para dar sentido à sentenças. Por exemplo, sentenças utilizadas em um diálogo podem ter signicados tão diferentes quanto variam o tempo, espaço e o conhecimento de mundo dos interlocutores. Esses elementos externos formam um contexto altamente complexo que diculta a correta interpretação da frase, de forma que uma mesma sen-tença pode apresentar vários signicados diferentes. De modo similar, sensen-tenças diferentes podem apresentar o mesmo signicado semântico. Partindo deste raciocínio, infere-se que para se analisar corretamente uma sentença em linguagem natural, deve-se analisar o contexto desta sentença. E para tal, é necessário uma certa inteligência. Alan Turing, em seu famoso Teste de Turing, propôs que uma máquina seria inteligente se fosse capaz de se passar por um ser humano a ponto de um interlocutor humano não saber se estava conversando com uma máquina ou com outro ser humano (ZILIO, 2009). Para que isto

(23)

também detectar mudanças de contexto, fazer retomadas a contextos passados, extrair informações a parir das sentenças e utilizar tais informações para processar novas senten-ças. E apesar da humanidade ter presenciado grandes avanços na Inteligência Articial nos últimos anos, o nível de inteligência necessário para reconhecer plenamente a lingua-gem natural ainda não foi atingido. Partindo deste raciocínio, infere-se que processar a linguagem natural está longe de ser uma tarefa trivial.

Durante as últimas décadas, diversas abordagens sobre o processamento de lingua-gens formais e naturais surgiram. Ambas seguiram rumos diferentes. As lingualingua-gens for-mais evoluíram principalmente através das linguagens de programação. Ao passos que o Processamento das Linguagem Naturais (PLN) utilizou abordagens mais voltadas para o uso das tecnologias de inteligência articial. Um exemplo de uso desta tecnologia são os chamados agentes de diálogos. Um agente de diálogo é um software cuja função é -a p-artir de um-a sentenç-a inform-ad-a pelo usuário - execut-ar os com-andos -adequ-ados de forma a apresentar uma resposta satisfatória ao usuário.

Agentes de diálogos modernos, como a Google Assistente, por exemplo; são capazes de reconhecer um subconjunto limitado da linguagem natural. Em geral, este subconjunto é escolhido de forma a denir um contexto bem delimitado, onde cada sentença levará a execução de comandos pré-determinados pelo desenvolvedor do software. Assim, dentro deste contexto bem delimitado, pode-se armar que um agente é capaz de responder a sentenças passadas em linguagem natural.

1.1 Motivação

Agentes reconhecem um subconjunto da linguagem natural. Em geral, esta linguagem não é denida formalmente como uma linguagem formal. Basicamente, possuem um di-cionário de palavras e reconhecem as sentenças através do casamento de padrões, usando máquinas de estado nitos para criar um uxo de sentenças, de forma a manter alguma lógica na comunicação com o usuário (JURAFSKY; MARTIN, 2018). E por não

apresen-tarem o mesmo formalismo de uma linguagem de programação, em geral, também não reconhecem expressões lógico-aritméticas ou estruturas de repetição. O que resulta em outro grande problema: somente é possível denir novas sentenças através de alteração no código fonte do agente - via programação.

Para que um agente seja capaz de aprender novas sentenças e também aprender como respondê-las adequadamente em tempo de execução, faz-se necessário que o agente receba

(24)

a sentença e o algoritmo que produza a resposta correta. Não apenas recebê-los, mas também associá-los um ao outro, de forma que o agente seja capaz de executar este novo algoritmo toda vez que receber aquela sentença. Para que isto seja possível, a linguagem reconhecida pelo agente deve possuir uma sintaxe que permita esta associação sentença-algoritmo. Assim, a linguagem reconhecida pelo agente deve aceitar sentenças pertencentes a um subconjunto da linguagem natural, sentenças que permitam especicar algoritmos e também uma sintaxe capaz de associar uma sentença a um algoritmo. Na atualidade, as linguagens mais utilizadas para descrever algoritmos são as linguagens formais, devido a relativa facilidade com que são processáveis por computadores.

Até o presente momento, não foi encontrado na literatura nenhum agente capaz de aprender novos conhecimentos em tempo de execução - a partir de sentenças do próprio usuário. Diante disto, a ausência de uma tecnologia que permitisse o desenvolvimento de agentes de diálogos com essa capacidade passou a ser o foco da presente pesquisa.

1.2 Objetivos

O objetivo geral do presente trabalho foi desenvolver o protótipo de um agente de diálogos multi-contexto com capacidade de expansão da própria base de conhecimento em tempo de execução.

Como objetivos especícos:

• Modelar uma linguagem inicial a ser reconhecida pelo agente usando com sintaxe que permita sua própria expansão;

• Modelar um dispositivo capaz de reconhecer esta linguagem, traduzindo para um código executável;

• Modelar uma máquina simples capaz de executar o código gerado pelo dispositivo;

1.3 Ações Realizadas

Inicialmente, foi modelada uma linguagem bastante simples para ser utilizada pelo agente. O dispositivo reconhecedor desta linguagem foi uma Máquina de Moore. O expe-rimento realizado nesta primeira etapa está descrito no artigo Processamento de Lingua-gem Natural Controlada utilizando uma Máquina de Moore, publicado por Frutuoso e

(25)

Bedregal (2018). No entanto, a medida que novos recursos foram adicionados a linguagem - em especial uma sintaxe que conferiu à linguagem propriedades adaptativas, observou-se que a Máquina de Moore não tinha poder computacional suciente para reconhecer tal linguagem. Partindo desta limitação, foi realizada uma extensa pesquisa bibliográca em busca de dispositivos reunissem as características necessárias ao agente. Essa pesquisa resultou na criação de um novo dispositivo para processar a linguagem: o Transdutor Adaptativo Programável (TAP). Este dispositivo tornou-se o principal componente utili-zado para criar um protótipo do Agente de Diálogos proposto.

Como resultado deste trabalho, foi desenvolvido um agente de diálogos com objetivo de ser utilizado como ferramenta de armazenamento e gestão do conhecimento referente às rotinas de trabalho da Divisão de Planejamento e Gerenciamento de Compras - divisão vinculada à Diretoria de Compras da UFRN (DPGC/Diretoria de Compras/UFRN). O agente foi treinado para responder a questões em três contextos diferentes:

• Sentenças de conguração interna do agente;

• Sentenças genéricas que permitissem simular pequenos diálogos, com o objetivo de tornar o agente mais amigável;

• Sentenças especícas acerca do contexto de trabalho da DPGC;

Para testar o modelo, foram feitas dois experimentos. O primeiro tinha como objetivo coletar dados internos do TAP, tendo como objetivo observar o comportamento interno dos componentes e também medir a eciência e a ecácia do modelo. O segundo experi-mento consistiu em uma série de entrevistas com usuários a m de capturar as impressões externas de utilização do sistema em todos os seus contextos. Ao nal, o modelo proposto mostrou-se útil para ser utilizado como ferramenta de gestão do conhecimento, sendo ca-paz de responder a perguntas dos usuários acerca do conteúdo armazenado em sua base de dados.

1.4 Estrutura do Trabalho

Esta trabalho está organizado com a seguinte estrutura: No Capítulo 1 é apresentada a introdução deste trabalho; com o objetivo e a motivação do mesmo. No Capítulo 2, serão abordados os conceitos relacionados a este trabalho, tais como: Linguagem Natural, Linguagens Formais e os dispositivos utilizados para o reconhecimento destas linguagens

(26)

(Autômatos e Transdutores). Será também apresentado o conceito de Linguagem Natu-ral Controlada. No Capítulo 3 será feito um breve relato dos trabalhos relacionados ao tema desta dissertação. No Capítulo 4 será apresentada a proposta de um algoritmo que implementa um agente de conversação fazendo uso de um transdutor programável que utiliza a tecnologia adaptativa para, a partir de sentenças em linguagem natural, detectar a intenção do usuário e executar o código mais adequado para responder satisfatoriamente a frase informada, expandindo sua base de conhecimento conforme o teor semântico da sentença. O Capítulo 5 descreve a implementação do agente proposto no capítulo 4. O Capítulo 6 descreve o experimento realizado para testear o agente. Por m, o Capítulo 7 encerra apresentando as considerações nais acerca deste trabalho, bem como sugestões de trabalhos futuros.

(27)

2 Conceitos Preliminares

Comunicar, a grosso modo, é a habilidade de passar informação de um indivíduo para outro. Embora na natureza diversos animais possuam a habilidade de trocar informações, de longe o homem é o ser vivo que melhor conseguiu explorar esta habilidade. Ele se apri-morou tanto nisso que não limitou-se a utilizar apenas a voz mas também diversos outros elementos internos e externos para tal. Máquinas foram criadas, tecnologias desenvolvidas e com o avanço do conhecimento cientíco, a habilidade de comunicação rompeu antigas fronteiras, permitindo assim que comunicação a longas distâncias pudessem ser realiza-das. E os computadores têm um papel especial em todo este avanço. Através da internet, computadores trocam informações com uma velocidade tal que dois pontos quaisquer do globo - por mais distantes que estejam um do outro - parecem estar próximos. Mas eles não estão limitados a apenas facilitarem o acesso à comunicação. Computadores dedicados ao redor do mundo são programados para armazenar, gerenciar e transformar informa-ções, descobrindo novas informações a partir de conhecimentos previamente adquiridos, tornando-se uma fonte de armazenamento da informação. E graças à evolução da Inteli-gência Articial, esse conhecimento armazenado pode ser passado a outros computadores e também aos seres humanos que podem realizar consultas e receber resposta desses com-putadores. Partindo deste ponto de vista, pode-se considerar que os computadores hoje são mais que meros canais de comunicação - são verdadeiros agentes capazes de atender e responder a demandas de usuários. Embora tenha-se visto um grande avanço na interação homem-máquina, existe ainda uma grande distância entre ambos: a linguagem. Compu-tadores usam linguagem de máquina ao passo que seres humanos utilizam a linguagem natural. Para diminuir este hiato, diversas técnicas foram desenvolvidas com o intuito de aproximar a linguagem dos computadores da linguagem humana. Entre elas, pode-se citar o uso das linguagens formais e as técnicas de processamento de linguagem natural.

O objetivo deste capítulo é apresentar os conceitos teóricos necessários ao entendi-mento deste trabalho. Inicialmente, na Seção 2.1 será apresentado um breve histórico da interação homem-computador. Em 2.2 será apresentado o conceito de Linguagem Natural

(28)

e em 2.3 o conceito de Linguagem Formal. Na Seção 2.4 serão apresentadas as Máquinas de Estados Finitos como dispositivos computacionais utilizados para o processamento de linguagens formais. As seções 2.5 e 2.6 tratarão acerca dos métodos de Processamento de Linguagem Natural e Linguagem Natural Controlada respectivamente. Por m, a Seção 2.7 nalizará esta capítulo com uma breve sobre aplicações baseadas em diálogos. A saber: Chatbots e Agentes de Diálogos.

2.1 Interação Homem-Máquina

Nos primórdios da computação, o uso dos computadores limitava-se a auxiliar os seres humanos na realização de cálculos longos e difíceis. O computador era basicamente uma máquina de calcular gigante. Programas eram escritos e entregues ao computador e este simplesmente executava as instruções conforme denidas nos códigos de sua programação. A humanidade porém sempre sonhou com o computador como uma máquina capaz de dialogar com o ser humano de uma forma mais próxima à comunicação natural. Fato esse bem notado em algumas obras de cção cientíca, como por exemplo o lme 2001: Uma odisseia no Espaço, onde o computador HAL 9000 falava com os personagens humanos como se fosse outro ser humano. Embora esta tecnologia ainda não esteja disponível na forma como é apresentada nas obras de cção, houve grandes avanços na maneira como os seres humanos e máquinas interagem entre si. As máquinas digitais modernas são capazes de receber comandos especícos de voz, texto, tátil, entre tantos outros; interpretar a solicitação do usuário, realizar consultas em bases de conhecimento e assim responder a tais comandos conforme solicitado. Utilizar um computador deixou de ser uma tarefa altamente especializada para se tornar algo bastante simples. Tão simples como se o usuário simplesmente dialogasse com o computador e este atendesse a suas demandas sem que fosse necessário um alto nível de conhecimento por parte do usuário. Porém, nem sempre foi assim.

A comunicação com os primeiros computadores era muito precária. O ENIAC - o primeiro computador programável do mundo - era programado através da troca de cabos e ativação/desativação de chaves manuais para controlar o uxo da informações dentro da máquina. Ele reconhecia uma linguagem numérica formada por 0's e 1's (código binário) onde o 0 desligava um circuito e o 1 ativava tal circuito. A combinação dos circuitos que estavam ligados num dado instante de tempo determinava que ação seria executada pela máquina naquele momento. Um conjunto de ações formava então um programa. Essa linguagem numérica era passada ao computador através de uma série de cartões

(29)

perfurados onde a ausência e presença de furos determinavam quais circuitos estariam ligados e por sua vez, as ações a serem executadas. A linguagem formada a partir dessa combinação de dígitos binários cou conhecida como linguagem de máquina.

Atualmente, de uma forma bem mais elegante, a linguagem de máquina ainda é uti-lizada nos computadores. Cada processador possui um conjunto de instruções ordenadas numericamente onde cada instrução faz com que o processador execute uma tarefa sim-ples como somar dados ou comparar dados. Um programa então é uma série de instruções codicadas em linguagem de máquina. A m de evitar o uso de números, os fabricantes de hardware disponibilizam um compilador que reconhece uma linguagem de baixo nível chamada de Linguagem de Montagem ou Assembler. Trata-se de uma linguagem mnemô-nica1 bastante simples, onde cada mnemônico refere-se a uma instrução em linguagem de

máquina. Embora utilizar assembler seja bem melhor do que a programação por cabos ou cartões perfurados, a linguagem de montagem está muito distante da linguagem humana. Grosso modo, pode-se armar que programar um computador é ensina-lo a realizar determinada tarefa através da inserção de uma sequência de instruções em linguagem de máquina internamente na memória do computador para que este possa executá-las. Obviamente, ninguém hoje em dia programa um computador diretamente em linguagem de máquina. Diversas linguagens de programação foram desenvolvidas para tal. Basica-mente, uma linguagem de programação é uma linguagem reconhecida por um software chamado compilador, que reconhece sentenças nesta linguagem e as converte em lingua-gem de máquina para um computador especíco. Linguagens de montalingua-gem são linguagens de programação bastante primitivas e por isto classicadas como linguagens de baixo ní-vel. Existem hoje diversas linguagens utilizadas para passar instruções ao computador de uma forma mais intuitiva para o ser humano. São chamadas de linguagens de alto nível. As linguagens de programação de alto nível possuem um conjunto de palavras ou ex-pressões pré-denidas que permitem ao usuário passar para o computador quais os passos (instruções) necessários para se executar determinado procedimento. Quando comparadas com as linguagens de montagem, linguagens de alto nível, tais como Java, por exemplo; estão bem mais próximas da linguagem humana. Porém, mesmo elas, ainda são muito distantes da linguagem natural. Uma linguagem de programação possui estruturas bem denidas e regras rígidas que devem ser obedecidas - caso contrário, o software que lê as

1O termo mnemônica refere-se a um conjunto de técnicas utilizadas para memorização. No caso

espe-cíco, são linguagens onde os comandos são pequenos agrupamentos de caracteres que formam sentenças textuais que lembram as ação que eles executam. Por exemplo: Na linguagem Assembler reconhecida pelos processadores fabricados pela Intel, o comando ADD r1, r2 lembra que; ao conteúdo do registrador r1 será somado o valor contido em r2.

(30)

instruções passadas pelo usuário não conseguirá compilar - isto é - traduzir as instruções daquela linguagem para a linguagem que os computadores usam (linguagem de máquina). Por possuírem todo um formalismo em sua denição, as linguagens de programação são classicadas como Linguagens Formais. Enquanto a linguagem humana é chamada de Linguagem Natural.

2.2 Linguagem Natural

Lancaster (2003) dene a linguagem natural como aquela usada no discurso comum. Trata-se de uma linguagem espontânea e altamente ambígua. Sua principal característica é o fato de que ela não possui uma denição formal. De forma geral, ela possui uma gramática com regras que variam de língua para língua, especicando como os símbolos do alfabeto (que podem ser palavras) podem car melhor associados, a m de denir como frases poderão estar dentro de uma norma culta ou simplesmente para denir o uso correto da língua. No entanto, mesmo que essas regras não sejam plenamente obedecidas, sentenças mal-formadas podem ainda ser consideradas como linguagem natural. Senten-ças em linguagem natural nem sempre possuem um signicado exato. Uma sentença em linguagem natural pode ter seu signicado alterado por diversas fatores externos, uma vez que não são os símbolos do alfabeto os únicos elementos utilizados para dar signicado as sentenças. Gestos, emoções e até mesmo o conhecimento de mundo dos interlocutores formam um contexto no qual uma única expressão pode resultar em vários signicados diferentes. Ou ainda duas sentenças compostas por símbolos diferentes podem possuir o mesmo signicado semântico, dentro de determinado contexto. Isso faz da linguagem na-tural uma linguagem altamente ambígua. E essa alta ambiguidade é que lhe confere um alto grau de liberdade na comunicação. Todavia, tal liberdade gera uma grande diculdade no seu processamento por computadores.

Computadores são máquinas lógicas. Quando devidamente programados podem re-alizar cálculos com extrema rapidez. Porém, esses cálculos se dão no nível sintático. O computador recebe cadeias de símbolos, as processa e retorna outras cadeias de símbolos. O signicado dessas cadeias de símbolos (semântica) é realizado por agentes externos. Desta forma, o fundamental então é ter-se uma forma adequada de representar as in-formações que se deseja processar. Ou seja, uma linguagem. Os tipos de linguagens que computadores processam são conhecidos como linguagens formais. Recebem este nome em razão de poderem ser formal e rigorosamente descritas. Entretanto, pela denição de Lancaster, sabe-se que a linguagem natural é espontânea e portanto não há como deni-la

(31)

plenamente de forma rigorosa (é possível extrair um subconjunto da linguagem natural e então deni-lo formalmente. Este subconjunto passa a ser chamado de Linguagem Natural Controlada e será tratado na Seção 2.6).

Com o advento da Teoria das Linguagens Formais, ainda nos primórdios da computa-ção, pesquisadores tiveram a ideia de utilizar as linguagens formais no contexto da ciência da computação, como forma de passar conhecimento para às máquinas.

2.3 Linguagem Formal

Linguagem Formal é uma linguagem criada a partir de um conjunto bem denidos de regras de sintaxe (ROSEN, 2010). Toda linguagem formal possui uma denição

mate-mática bem precisa, de forma que é possível calcular se determinada sentença pertence ou não àquela linguagem. Uma linguagem formal é denida a partir de um alfabeto e uma gramática. O alfabeto é um conjunto de símbolos que suportam essa linguagem. A gramática por sua vez é um conjunto de regras de produção que denem como os símbolos pertencentes ao alfabeto podem ser combinados a m de gerar as sentenças aceitas pela linguagem. Assim, conhecendo-se o alfabeto e a gramática, dada uma sentença qualquer, torna-se possível descobrir se esta sentença pertence ou não àquela linguagem.

Existem diversos tipos de linguagens formais. Chomsky deniu um modelo que classi-ca as diversas linguagens formais de acordo com a sua complexidade. Este modelo cou conhecido como Hierarquia de Chomsky. Na Figura 1 pode ser vista a classicação original da Hierarquia de Chomsky. Como é possível ver, a classe menos abrangente de linguagens é a classe Tipo 3 (Linguagens Regulares). Ao passo que a classe mais abrangente é a classe Tipo 0 (Linguagens Recursivamente Enumeráveis). As linguagens Tipo 2 ou Linguagens Livre de Contexto (LLC) tem um importância especial na computação, uma vez que esta classe de linguagens permite sentenças com expressões bloco-estruturadas e com hierar-quia entre símbolos. Muitas das linguagens de programação conhecidas como Pascal, C, ou Java são linguagens Tipo 2. Mais informações sobre a Hierarquia de Chomsky e as classes de linguagens podem ser obtidas em (MENEZES, 2011) (BEDREGAL; ACIÓLY; LYRA, 2010).

Ao projetar uma linguagem de programação, o projetista/desenvolvedor da linguagem dene matematicamente os símbolos (alfabeto) e a gramática (regras de produção). Uma vez feitas essas denições, inicia-se o projeto do compilador (ou tradutor). Mais infor-mações sobre compiladores e como eles funcionam podem ser obtidas em (AHO; SETHI; ULLMAN, 1995). Longe do escopo deste trabalho explicar como isso é feito, este autor

(32)

Figura 1: Hierarquia de Chomsky. Fonte: Adaptado de (MENEZES, 2011)

limita-se a dizer que uma importante etapa da compilação é resolver o seguinte problema: a sentença ou programa passado pelo usuário da linguagem realmente faz parte desta lin-guagem? Para responder a esta pergunta, existem na Teoria da Computação dispositivos capazes de vericar se uma determinada sentença pertence ou não a determinada lin-guagem. Estes dispositivos são chamados de Máquinas de Estado-Finito ou simplesmente Autômatos.

2.4 Máquinas de Estados Finitos

Máquinas de Estados Finitos ou Autômatos são modelos computacionais abstratos da Teoria da Computação capazes de reconhecer ou processar linguagens formais. Vi-eira (2006) arma que existem basicamente dois tipos de autômatos: os reconhecedores e os transdutores. Os reconhecedores são máquinas que, para uma dada sentença de en-trada, apresentam apenas duas saídas possíveis: sentença aceita ou sentença rejeitada. Já os transdutores possuem entradas e saídas independentes. Ou seja, dão como saídas cadeias pertencentes a outra linguagem formal. A seguir será apresentados alguns tipos de autômatos reconhecedores e transdutores.

2.4.1 Autômatos Reconhecedores

Como já foi dito, autômatos reconhecedores são autômatos que apresentam apenas duas saídas possíveis: cadeia aceita ou cadeia recusada. O conjunto das cadeias

(33)

acei-tas é uma linguagem formal, e nesse caso dizemos que o autômato aceita ou reconhece essa linguagem. Para este trabalho serão abordados apenas os seguintes autômatos re-conhecedores: o Autômato Finito Determinístico (AFD) e o Autômato com Pilha Não Determinístico (APN).

2.4.1.1 Autômato Finito Determinístico - AFD

O AFD é o tipo mais simples de autômato. Ele é capaz de reconhecer linguagens per-tencentes à classe Tipo 3 da Hierarquia de Chomsky - as Linguagens Regulares. Ele é composto basicamente por uma ta nita, uma unidade de controle e uma função de tran-sição (BEDREGAL; ACIÓLY; LYRA, 2010), (MENEZES, 2011). A ta é uma lista de símbolos

pertencentes a um determinado alfabeto Σ. A unidade de controle é composta por um conjunto Q de estados, sendo q0 o estado inicial. Um subconjunto F de Q contém os

esta-dos nais ou de aceitação. Os demais elementos de Q são estaesta-dos intermediários. A função de transição é denida como uma função total ou parcial, que recebe como parâmetros o estado atual e o elemento lido na ta, retornando qual o próximo estado a ser visitado. Função parcial é uma relação onde cada elemento do conjunto domínio está relacionado a no máximo um elemento do contra-domínio. Ou seja, podem existir elementos do do-mínio que não estão relacionados com qualquer elemento do contra-dodo-mínio. Já a função total é uma relação onde cada elemento do domínio se relaciona a um único elemento do contra-domínio (MENEZES, 2011). Para este trabalho, as funções de transição serão sempre funções parciais. Neste caso, nos autômatos apresentados neste trabalho poderão existir estados que somente farão transição para alguns símbolos determinados e qualquer outro símbolo aplicado que não estes levará a uma condição de erro e posterior recusa da sentença informada.

A denição formal de um AFD é mostrada a seguir:

M = (Σ, Q, δ, q0, F )

Onde:

Σ é um alfabeto de símbolos de entrada Q é o conjunto nito de estados possíveis δ : Q × Σ → Q é a função parcial de transição

q0 ∈ Q é o estado inicial

(34)

O principio de funcionamento de um AFD é bastante simples. Inicialmente a ta innita é dividida em células que são preenchidas com os símbolos que compõem a cadeia a ser analisada - um símbolo em cada célula e as células que sobrarem cam em branco. A cabeça de leitura da ta marca o símbolo que será lido a cada estado visitado do autômato. O primeiro estado a ser visitado é o estado inicial q0 e o primeiro elemento

a ser lido na ta é o elemento mais à esquerda. A cada transição realizada a cabeça de leitura da ta avança para a célula imediatamente à direita da posição atual da cabeça na ta. A cada estado visitado, a função de transição é chamada para retornar qual será o próximo estado a ser visitado. A função de transição recebe como entrada o estado atual e o elemento lido na ta. Enquanto houver elementos na ta, são feitas transições. Se em algum momento não for possível fazer uma transição - ou seja, a função de transição retornar como próximo estado o estado nulo - o processamento é encerrado e a sentença é recusada. Dizer que uma sentença foi recusada signica que ela não pertence à linguagem reconhecida pelo autômato. Quando tiver lido todos os símbolos da ta, verica-se se o estado atual é um estado nal. Caso seja um estado nal, a sentença armazenada na ta é uma sentença aceita e portanto uma sentença válida da linguagem. Caso contrário, a sentença não pertence à linguagem.

Uma forma gráca muito utilizada para representar autômatos é através da visua-lização de grafos dirigidos rotulados onde os vértices representam os estados de Q. O estado inicial é mostrado como um estado com uma seta sem origem do lado esquerdo e os estados nais como vértices com um círculo no interior. As transições são representa-das por setas (ou arestas) saindo do estado origem e chegando ao estado destino. Cada aresta é rotulada com o símbolo que aciona essa transição. Assim, a função de transição é gracamente representada pela união de todas as arestas exibidas. Na Figura 2 está representado gracamente um autômato que reconhece a linguagem composta por duas sentenças: Que horas são? e Que dia é hoje?. O alfabeto desta linguagem é composto pelos símbolos (Que, horas, são, dia, é, hoje e ?). As regras de produção são:

S → 'que'A

A → 'horassão?'|'diaéhoje?'

O estado inicial q0 é o ponto de partida. Os estados q5 e q8 são estados nais. Já

q1, q2, q3, q4, q6 e q7 são estados intermediários.

(35)

Figura 2: Exesmplo de AFD. Fonte: Autor.

Esdado Atual Símbolo lido na ta Estado destino

q0 que q1 q1 horas q2 q1 dia q3 q2 são q4 q3 é q6 q4 ? q5 q6 hoje q7 q7 ? q8

Tabela 1: Função de transição do AFD da Figura 2

Inicialmente, o estado atual é o estado inicial q0. Observando a Figura 2, vê-se que

a partir de q0, o primeiro símbolo lido na ta deve obrigatoriamente ser a palavra que.

Qualquer símbolo diferente deste conduzirá o AFD a uma condição de erro. Supondo que o primeiro elemento lido seja que, será feita transição para o estado q1 - conforme denido

na Tabela 1. Agora, o estado atual é q1. Uma vez em q1, o próximo símbolo da ta pode

ser os símbolos horas ou dia. Um símbolo diferente destes dois símbolos irá provocar a recusa da sentença lida. Assim, a cada símbolo lido, um novo estado será alcançado de acordo com as regras denidas na função de transição. Quando o conteúdo da ta acabar, se o estado atual for um estado nal - no caso, q5 ou q8 - a sentença informada terá sido

aceita pelo AFD. Caso contrário, a sentença será recusada.

2.4.1.2 Autômatos com Pilha Não Determinísticos - APN

Linguagens regulares caracterizam-se basicamente por apresentar em suas regras de produção denições de como as cadeias de símbolos podem ser montadas. Tais lingua-gens, por serem muito simples, não necessitam de um dispositivo muito potente para reconhecê-las. Existem porém linguagens mais sosticadas, como as linguagens Tipo 2

(36)

- as Linguagens Livres de Contexto. Estas caracterizam-se por possuir expressões que podem exigir contagem. Como por exemplo uma linguagem que reconhece frases que contenham iguais números de parenteses abertos e fechados - típico de expressões lógico-aritméticas. Para checar se as quantidades são iguais, faz-se necessário contar os parêntesis e armazenar este valor em algum lugar. Logo, o autômato que as reconhece deve ter me-mória.

Autômatos com pilha são autômatos similares a um AFD, porém diferindo deste por fazer uso de uma memória extra: uma pilha (BEDREGAL; ACIÓLY; LYRA, 2010). Mais

avançados que os AFDs eles são capazes de reconhecer todas as linguagens reconhecidas pelo AFD e também outras para as quais não existem AFD capazes de reconhecer, como por exemplo a linguagem dos palíndromos 2 sobre um alfabeto com pelo menos dois

símbolos.

Menezes (2011) arma que existem duas denições universalmente aceitas para o autômatos com pilha. A primeira denição considera que inicialmente a pilha está vazia e o autômato para ao atingir um estado nal. Na segunda denição, não existem estados nais. A pilha contém um símbolo inicial e o autômato para quando a pilha estiver vazia. Ambas as denições são equivalentes. Existe ainda na literatura menção a uma terceira denição onde a pilha inicia vazia e o autômato somente para quando chegar a um estado nal e a pilha estiver vazia.

Autômatos com pilha podem ser Determinísticos ou Não-Determinísticos. Autômatos com Pilha Determinísticos (APD) são aqueles onde para cada combinação tripla (estado, simbolo lido na ta, topo da pilha) existe no máximo um estado destino possível. Os APN, por sua vez, ao fazerem uso do não-determinismo, podem ter mais de um estado destino para a mesma regra de transição. APN's podem ainda fazer transições para novo estados sem que nenhum símbolo seja lido na ta de entrada. Transições assim são chamadas de transições lambda ou simplesmente λ-transição.

A classe de linguagens aceita ou reconhecidas pelo APN são conhecidas como Lingua-gens Livres de Contexto (LLC). A denição formal de um APN é mostrada a seguir:

M = (Σ, Q, δ, I, F, V )

Onde:

2palíndromos são palavras, frases ou qualquer sequência de símbolos cuja leitura feita tanto da direita

para a esquerda quanto da esquerda para direita revelam a mesma sequência de símbolos. Por exemplo: ovo, reviver, abbcbba.

(37)

Σ, Q e F são como em AFD's

I ⊂ Q é o conjunto de estados iniciais

V é o alfabeto auxiliar ou alfabeto da pilha

δ a função parcial de transição (Q × (Σ ∪ {λ}) × (V ∪ {λ})) → D onde D é constituído dos subconjuntos nitos de Q × V∗

Ao contrário do AFD, cuja função de transição retorna um único elemento de Q; a função de transição do APN retorna um subconjunto de possíveis estados destinos. Cada um desses possíveis estados deve ser testado. Para isso, o APN se utiliza de várias pilhas uma para cada caminho possível de ser realizado no grafo representativo do APN -descartando todas aqueles que levam a estados inválidos, conforme a denição adotada para o APN.

Para entender o funcionamento de um APN, considere o autômato representado pelo grafo da Figura 3.

Figura 3: Exemplo de APN que reconhece palíndromos. Fonte: (VIEIRA, 2006) O alfabeto de entrada do autômato da Figura 3 é composto por {0,1}. Os estados são q0 e q1. Sendo q1 o estado nal. As regras de transição são expressas da forma x, y/z,

onde: x ∈ Σ representa o símbolo lido na ta, y ∈ V representa o símbolo contido no topo da pilha e z ∈ V é o símbolo que será escrito na ta. Quando x ou y forem λ, signica que uma transição será feita sem que nenhum elemento seja lido na ta ou na pilha, respectivamente. Uma transição deste tipo é chamada de λ-transição. Quando z for igual à λ, o elemento do topo da pilha será excluído. A função de transição do APN da Figura 3 pode ser vista na Tabela 2:

(38)

Número Regra de Transição 1 0, λ/0 2 1, λ/1 3 0, 0/λ 4 1, 1/λ 5 λ, λ/λ 6 0, λ/λ 7 1, λ/λ

Tabela 2: Função de transição do APN da Figura 3

Voltando ao exemplo, percebe-se que estando no estado inicial q0, existem três

possi-bilidades: A primeira delas é de serem acionadas as regras 1 ou 2 e neste caso o elemento lido na ta será colocado na pilha. A segunda possibilidade é de serem acionadas as regras 6 e 7, de forma que será feita uma transição para o estado q1 sem que nenhuma alteração

seja feita na pilha. Por m, a terceira possibilidade é que seja feita uma transição imedi-ata para q1 sem que nenhuma alteração seja feita na ta e na pilha. Uma vez em q1 as

únicas regras que podem ser executadas são as regras 3 ou 4 e essas regras simplesmente desempilham todos os elementos da pilha. Se considerar que este autômato está denido para terminar somente quando estiver em um estado nal e com a pilha vazia, todas os caminhos possíveis de serem percorridos por uma sentença de entrada qualquer irão falhar exceto um: aquele onde a sequência passada possua um único símbolo (regra 5) ou possa ser dividida ao meio de forma tal que a primeira metade dela seja empilhada em q0 e

a outra metade seja desempilhados em q1, encerrando neste estado e deixando a pilha

vazia. E para que isto aconteça, as duas metades precisam ser inversas entre si. Em outras palavras, este APN reconhece palíndromos.

Finalizando este subtópico, os APNs são mais poderosos que os APDs, no sentido que aceitam qualquer linguagem aceita por um APD e algumas outras para as quais não existe um APD capaz de as reconhecer (como a linguagem dos palíndromos, que não pode ser reconhecida por APDs) (BEDREGAL; ACIÓLY; LYRA, 2010). No entanto, devido ao teste que faz das várias transições possíveis, APNs fazem um uso intenso do poder computacional e da memória. Assim, embora mais poderosos, são menos ecientes que os APDs.

(39)

2.4.2 Transdutores

Vieira (2006) dene transdutores como autômatos com saída. Ou seja, são autômatos aos quais foi acrescentado uma ou mais tas de saída. Ao contrário de um autômato comum que possui apenas duas saídas possíveis; os transdutores podem oferecer como saída sentenças pertencentes a uma linguagem diferente da linguagem de entrada. Assim, os transdutores são utilizados para, dado uma linguagem de entrada L1, gerar como saída

uma outra sentença pertencente à linguagem L2. Neste trabalho serão apresentados os

transdutores chamados de Máquinas de Mealy, Máquinas de Moore e os transdutores PushDown.

2.4.2.1 Máquina de Mealy

Uma máquina de Mealy é um autômato nito com saída onde um símbolo de saída esta associado a cada transição realizada. (VIEIRA, 2006). É assim chamada por ter sido

inicialmente estudada pelo pesquisador G. H. Mealy (ROSEN, 2010). Seu funcionamento

é semelhante ao de um AFD. Diferindo no fato de que existe uma ta de saída que é escrita a cada transição realizada. Não é permitido voltar posições na ta de saída. Sendo que ao terminar o reconhecimento da expressão de entrada, a ta de saída conterá uma sentença escrita correspondente às denições da função de saída δs. A denição formal de

uma Máquina de Mealy é apresentada a seguir:

M = (Σ, Q, δ, q0, F, ∆, δs)

Onde:

(Σ, Q, δ, q0, F ) é um AFD

∆ é o alfabeto de símbolos de saída δs : Q × Σ → ∆ é a função parcial de saída

Considerando que as funções de transição utilizadas neste trabalho são funções parciais denidas para um subconjunto de Q × Σ, a função de saída δs possui como restrição o

fato de que ela deve estar denida para o mesmo subconjunto Q × Σ utilizado por δ. Ou seja, δ e δs devem ter o mesmo domínio.

Um exemplo de Máquina de Mealy pode ser visto na Figura 4.

As transição são representadas por x/y. Onde x ∈ Σ representa o símbolo lido na ta e y ∈ ∆ o símbolo escrito na ta de saída. O reconhecimento de sentenças é feito segundo

(40)

Figura 4: Exemplo de Máquina de Mealy. Fonte: Autor.

mesmo princípio utilizado em um AFD. A única diferença aqui é que em cada transição realizada y será escrito na ta de saída. No caso da Figura 4, esta simples Máquina de Mealy é utilizada para traduzir a expressão em inglês How are you? para a sentença em português Como está você?.

2.4.2.2 Máquina de Moore

A Máquina de Moore é um transdutor onde um símbolo de saída está associado a cada estado do autômato. Portanto, trata-se de um AFD que possui como saída uma sentença obtida pela concatenação das palavras de saída de cada estado visitado durante a análise de uma sentença. A denição formal de uma Máquina de Moore é dada pela 7-upla:

M = (Σ, Q, δ, q0, F, ∆, δs)

Onde:

(Σ, Q, δ, q0, F ) é um AFD

∆ é o alfabeto de símbolos de saída

δs : Q → ∆∗ é a função de saída, onde ∆∗ é o conjunto de todas as sentenças formadas

a partir de símbolos de ∆

Um exemplo de Máquina de Moore pode ser visto na Figura 5.

Figura 5: Exemplo de Máquina de Moore. Fonte: Autor.

A função de saída δs retorna uma sentença composta por um ou mais símbolos de ∆

para cada estado alcançado. Os estados são representadas por x/y. Onde x representa o estado e y é a sentença de saída pertencente a ∆∗. A sentença de saída y é escrita na

ta de saída ao atingir o estado x. O reconhecimento de sentenças é feito utilizando o mesmo princípio do AFD. A exemplo da Máquina de Mealy mostrada no tópico anterior, o transdutor da Figura 5 mostra uma Máquina de Moore utilizada para traduzir a expressão em inglês How are you? para a sentença em português Como está você?.

(41)

2.4.2.3 Transdutor PushDown

As Máquinas de Mealy e de Moore são transdutores construídos a partir de um AFD. No entanto transdutores podem ser construídas a partir de qualquer autômato. Basta acrescentar em sua denição formal um ou mais alfabetos de saída e as respectivas funções de saída. Assim, apesar de a principal função de um transdutor ser gerar uma linguagem de saída Ls a partir de uma linguagem de entrada Le, ele herda do autômato no qual

foi baseado a capacidade de aceitar a linguagem reconhecida por este autômato (Le). As

Máquinas de Mealy e de Moore, por exemplo, somente são capazes de traduzir linguagens regulares. Pois o autômato utilizado como bases para ambas é o AFD, que por denição re-conhece linguagens regulares. Caso seja necessário rere-conhecer linguagens mais complexas como as LLC por exemplo, pode-se acrescentar uma pilha ao transdutor. Um Transdutor construído a partir de autômatos com pilha como APs e APNs é chamado de Transdu-tor PushDown ou simplesmente transduTransdu-tor com pilha (ALLAUZEN; RILEY, 2012). Como

exemplo, segue-se a denição formal de um transdutor pushdown construído a partir de um APN.

M = (Σ, Q, δ, I, F, V, ∆, δs)

Onde:

(Σ, Q, δ, I, F, V ) é um APN

∆ é o alfabeto de símbolos de saída

δs : Q → ∆∗ é a função de saída, onde ∆∗ é o conjunto de todas as palavras formadas

a partir de símbolos de ∆

Um exemplo de transdutor pushdown pode ser visto na Figura 6.

Figura 6: Exemplo de Máquina de Moore. Fonte: Adaptado de (VIEIRA, 2006)

O funcionamento é semelhante ao funcionamento do APN, deferindo apenas no fun-cionamento das transições. A transição é na forma x,y/z|k, onde x ∈ Σ é o elemento lido na ta, y ∈ V é o elemento lido no topo da pilha, z ∈ V é o elemento a ser escrito

(42)

na pilha e k ∈ ∆ é o elemento a ser escrito na ta de saída. No exemplo da Figura 6, o transdutor recebe como entrada uma sentença e se esta tiver igual quantidade de 0's e 1's, a ta de saída conterá uma versão invertida da sentença de entrada. Por exemplo, se a sentença de entrada for 0011 a sentença de saída será 1100.

2.4.3 Autômatos Adaptativos

Autômatos Adaptativos (AA) são autômatos que mudam constantemente a sua es-trutura, conforme a função adaptativa associada às regras de transição denidas (NETO,

1994). Basicamente trata-se de um autômato comum que faz uso de técnicas adaptativas. Em (NETO, 1994), (NETO; BRAVO, 2003), os autores apresentam a denição do AA como

um conjunto de máquinas de estado nito <ε0, ..., εm>, onde ε0 é a conguração inicial do

autômato, εm a conguração nal e εj é a máquina obtida após j transições sucessivas,

com 0 ≤ j ≤ m.

As transições apresentam-se sob a forma (q, w, F) onde q é o estado atual, w é o elemento lido na ta e F é a função adaptativa a ser executada caso essa transição seja realizada - podendo F ser chamada antes ou após o consumo do símbolo da ta. A con-guração atual do AA é alterada após cada transição realizada, conforme as denições da função adaptativa F. Dado a máquina atual εj-1, após uma transição, a função adaptativa

F irá transformar tal máquina no autômato εj - que passa a ser a nova conguração do

autômato. O conjunto de máquinas do autômato então é composto pela união de todas as máquinas geradas durante as transições realizadas na análise da cadeia de entrada, sendo a última conguração a mais atual. Na visualização em forma de grafo, usa-se uma aresta saindo do estado origem e dirigindo-se até o estado destino, com o rótulo w,F junto à aresta: onde w é o símbolo lido na ta e F a função adaptativa. O caractere · antes da função sinaliza que a mesma é chamada após o consumo de w. Ao passo que se · vier após a função, signica que a mesma é executada antes do consumo do símbolo.

A função adaptativa é composta por um conjunto de ações adaptativas capazes de inserir ou excluir estados e transições. Cada vez que uma transição é realizada, a função adaptativa F é executada e as ações adaptativas que a compõem fazem alterações na estrutura do autômato. Uma ação adaptativa é denida por um símbolo indicador do tipo da ação (+,-,?) e um padrão de transição no formato (q,w) → qd, onde q é o estado

origem da transição, w é o símbolo lido na ta e qd é o estado destino. Por exemplo,

+(q,w) → qd indica que será inserida a transição de q em qd após ler na ta o símbolo

(43)

Neto e Bravo (2003) armam que existem basicamente três tipos de ações adaptativas. São elas:

1. Ações de inspeção: São ações iniciadas por ? e cuja nalidade é vericar a existência de alguma transição conforme o padrão de transição;

2. Ações de eliminação: São ações iniciadas por um sinal de - cuja nalidade é eliminar do autômato todas as transições coincidentes com o padrão de transição;

3. Ações de inserção: São ações iniciadas por um sinal de + e cuja nalidade é inserir no autômato as transições conforme o padrão de transição constante na ação adaptativa;

O fato de o AA ter sua estrutura alterada de forma dinâmica tona-o adequado para lidar com Linguagens Adaptativas (LA). LA's são linguagens que possuem a característica de modicar controladamente a sua gramática, segundo o paradigma adaptativo. Em (NETO, 1994) o autor apresenta o AA como dispositivo capaz de reconhecer linguagens

dependentes ou sensíveis ao contexto. A gramática geradora deste tipo de linguagem se caracteriza pelo fato de que em suas regras de produção, o lado esquerdo da expressão pode ser uma combinação de variáveis e símbolos terminais ou não-terminais (MENEZES, 2011), gerando uma espécie de contexto para a expressão. Assim, o AA torna-se útil para reconhecer linguagens onde possa existir hierarquia entre os símbolos do alfabeto de entrada. Em (NETO; FEITAS, 2007), o autor utiliza LA's como linguagem de programação

capaz de gerar programas auto-modicáveis em tempo de execução.

Em (NETO; BRAVO, 2003), os autores apresentam um exemplo de AA usado para

implementar um sistema de recomendação 3. O AA apresentado no trabalho citado está

reproduzido na Figura 7. Na Figura 7a, observa-se a conguração inicial da máquina, onde o único estado válido é o estado q0, pois não existe nenhuma transição para os estados

nais q1 e q2. A transição r1, A(r1)· partindo de q0 indica que neste estado, lendo r1 da

ta, deverá ser executada a função adaptativa A, com parâmetro r1. O símbolo · após a

função indica que a mesma será executada antes de consumido o símbolo lido na ta r1.

A transição r2, A(r2)· pode ser interpretada de forma similar. O alfabeto de entrada Σ é

composto pelos símbolos (α, pizza, chips), onde pizza é r1 e chips é r2. α é um símbolo

delimitador escolhido pelos autores e r1 e r2 pertencem ao conjunto dos recursos R. Os

estados nais qr1 e qr2 estão relacionados a esses recursos. Ao ser aplicado o símbolo de

3Sistema de Recomendação é um tipo de sistema utilizado para selecionar itens de forma personalizada

(44)

entrada r1, é executada a função adaptativa A(r1) e o AA tem sua forma alterada para

a mostrada em 7b. Após a execução da função e seguindo a regra de transição denida em 7b, o estado atual passa a ser o estado nal qr1. Aplicando-se agora o símbolo de

entrada r2, a função A(r2) é executada, fazendo o autômato assumir a forma mostrada

em 7c. Como a entrada r2 ainda não foi consumida, a função B(qr1 , τ(r1, r2), τ(r2, r1))

é executada e uma transição é realizada para qr2. As funções A e B podem ser vistas na

Figura 8.

Figura 7: Exemplo de Autômato Adaptativo. Fonte: (NETO; BRAVO, 2003)

Figura 8: Funções Adaptativas A e B utilizados no exemplo da Figura 7. Fonte: (NETO; BRAVO, 2003)

2.5 Processamento de Linguagem Natural

Linguagens formais foram sem dúvida alguma um grande avanço na comunicação com os computadores. Sem o uso das linguagens de programação, provavelmente os sistemas de

(45)

hoje ainda estariam sendo desenvolvidos de forma bem rudimentar. Mas embora existam hoje linguagens de programação de alto nível bastante intuitivas, elas continuam sendo linguagens formais, ao passo que o ser humano utiliza a linguagem natural. A solução óbvia para melhorar a interação entre o homem e as máquinas é fazer as máquinas re-conhecerem a linguagem natural. O grande problema é que, por não ser possível denir formalmente (de forma plena) a linguagem natural, é impossível utilizar autômatos para reconhecê-la. Assim, novas técnicas precisaram ser desenvolvidas para que fosse possível ao computador reconhecer parcialmente a linguagem humana. É nesse contexto que surge o Processamento de Linguagem Natural (PLN) como uma área da inteligência articial que combina diversas técnicas, ferramentas e métodos computacionais (como aprendizado de máquina, computação evolutiva, inferência estatística) junto à linguística aplicada; com o objetivo de tornar possível a compreensão e processamento assistido por computador de informações expressas em linguagem humana para determinadas tarefas, tais como tradução automática, sistemas de diálogo interativo, análise de opinião, etc. O PLN é dividido em varias subáreas. Rosa (2011) arma que existem basicamente cinco maneiras de se efetuar o PLN. São elas: por casamento de padrões, baseadas em gramáticas, análise semântica, baseadas em conhecimento e por redes neurais. Jurafsky e Martin (2008) citam como exemplos de uso do PLN: reconhecimento de fala, síntese de voz, reconhecimento de locutor, análise de texto, serviços de tradução, entre outros. Neste trabalho será tratado apenas a subárea do PLN chamada de análise de texto.

2.6 Processamento de Linguagem Natural Controlada

A Tese de Church-Turing arma que toda função que é naturalmente considerada computável pode ser computada através de uma Máquina de Turing. Embora não se possa provar formalmente, até o presente momento não se conhece outro modelo compu-tacional mais poderoso que a Máquina de Turing. Ela é capaz de reconhecer linguagens pertencentes ao conjunto mais abrangente da Hierarquia de Chomsky: O conjunto Tipo 0 ou conjunto das Linguagens Recursivamente Enumeráveis (BEDREGAL; ACIÓLY; LYRA,

2010) (MENEZES, 2011). Entretanto, uma Linguagem Natural (LN) não é uma linguagem

formal. Ela surge de forma espontânea e não através de denições matemáticas precisas, o que a coloca fora da Hierarquia de Chomsky. Por outro lado, criando-se um alfabeto onde os símbolos são palavras de um idioma qualquer e denindo-se corretamente as regras de produção, pode-se criar um conjunto de sentenças em LN até mesmo usando modelos simples como o das linguagens regulares - que pertencem à Hierarquia de Chomsky. Jäger

(46)

e Rogers (2012) armam que durante décadas pesquisadores debateram sobre a possível localização da LN dentro do modelo de Chomsky. Porém, o resultado nal foi inconclu-sivo. O fato é que, até o presente momento, o mais poderoso modelo computacional não foi capaz de reconhecer completamente a LN. No entanto, em (HIGGINBOTHAM, 1987),

provou-se que a LN inglês não é uma linguagem livre de contexto. Uma discussão mais detalhada sobre a LN e a Hierarquia de Chomsky pode ser vista em (KORNAI, 1985),

(JÄGER; ROGERS, 2012). Apesar de aparentemente não ser possível reconhecer

completa-mente uma LN, ao separar-se um subconjunto dela, composto por algumas palavras da LN e frases escolhidas de forma controlada, obtêm-se uma linguagem mais simples, no nível das linguagens regulares - que é a classe de linguagens menos abrangentes da Hie-rarquia de Chomsky. Esse subconjunto da LN assim obtido forma uma nova linguagem à qual dá-se o nome de Linguagem Natural Controlada (LNC).

Kuhn e Schwitter (2008) denem Linguagem Natural Controlada (LNC) como um subconjunto da linguagem natural que foi reduzido de forma a diminuir a ambiguidade e a complexidade da LN. Em trabalhos mais recentes, o mesmo autor elenca alguns cri-térios para se denir uma LNC: Um desses cricri-térios é que ela seja baseada em uma LN. Porém limitada em relação a essa linguagem base. Ela preserva a maior parte das propri-edades da linguagem base, de forma que é facilmente compreensível por falantes desta. E principalmente, ela é uma linguagem projetada. Ou seja, ela possui regras que denem como frases podem ser formadas (KUHN, 2014). Com todos os critérios acima denidos,

no mesmo trabalho o autor arma que uma LNC não é uma linguagem natural (pois foi construída, ao passo que linguagens naturais surgem espontaneamente) e também não é uma linguagem formal (pois deve ser intuitivamente interpretada por qualquer falante da linguagem base). Um dos objetivos do trabalho citado, é localizar a posição das LNC's em relação as LN's e as linguagens formais. Com relação a esta localização, o autor faz a seguinte declaração:

The development of this scheme originated from the insight that CNLs can be conceptually located somewhere in the gray area between natural languages on the one end and formal languages on the other. Generally, CNLs are more formal than natural languages but more natural than formal ones. For instance, a natural language such as English is very expressive, but complex and impre-cise. A formal language such as propositional logic, in contrast, is very simple and precise, but at the same time unnatural and inexpressive. A formal lan-guage such as propositional logic, in contrast, is very simple and precise, but at the same time unnatural and inexpressive. CNLs must be somewhere in the middle, but where exactly? (KUHN, 2014)

Referências

Documentos relacionados

Considerando a importância dos tratores agrícolas e características dos seus rodados pneumáticos em desenvolver força de tração e flutuação no solo, o presente trabalho

A simple experimental arrangement consisting of a mechanical system of colliding balls and an electrical circuit containing a crystal oscillator and an electronic counter is used

Atualmente os currículos em ensino de ciências sinalizam que os conteúdos difundidos em sala de aula devem proporcionar ao educando o desenvolvimento de competências e habilidades

a) política nacional de desenvolvimento do turismo; b) promoção e divulgação do turismo nacional, no país e no exterior; c) estímulo às iniciativas públicas e privadas de

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Para preparar a pimenta branca, as espigas são colhidas quando os frutos apresentam a coloração amarelada ou vermelha. As espigas são colocadas em sacos de plástico trançado sem