Representação de conhecimento

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Wikitext.svg
Este artigo ou seção precisa ser wikificado (desde Fevereiro de 2008).
Por favor ajude a formatar este artigo de acordo com as diretrizes estabelecidas no livro de estilo.

Representação do Conhecimento é uma subárea de pesquisa em inteligência artificial.

A pesquisa na área de representação do conhecimento tenta responder diversas perguntas como:

  • Como representamos nosso conhecimento?
  • As pessoas representam conhecimento todas da mesma maneira?
  • Existe alguma forma de representar qualquer coisa?
  • Como programas inteligentes devem representar conhecimento?

Em tese, uma representação geral como a lógica de primeira ordem seria suficientemente expressiva para representar qualquer tipo de conhecimento. No entanto, problemas de eficiência, facilidade de uso e a necessidade de expressar conhecimento incerto e incompleto levaram ao desenvolvimento de diversos tipos de formalismos de representação de conhecimento, como lógica, sistemas de frames e redes semânticas.

A lógica é a base para a maioria dos formalismos de representação de conhecimento, seja de forma explícita, como nos sistemas especialistas baseados na linguagem Prolog, seja disfarçada na forma de representações específicas que podem facilmente ser interpretadas como proposições ou predicados lógicos.

No entanto, problemas de eficiência, facilidade de uso e a necessidade de expressar conhecimento incerto e incompleto levaram ao desenvolvimento de diversos tipos de formalismos de representação de conhecimento.

Cadeias semânticas[editar | editar código-fonte]

Há vários esquemas para se representar conhecimento. Dois deles, que capturam melhor o conhecimento relativo a objetos e as suas propriedades, são as cadeias semânticas e frames.

O primeiro desses esquemas, as cadeias semânticas, originou-se na psicologia como resultado da modelagem de sistemas para a memória associativa humana. Mais recentemente, vários investigadores de ciência da computação estenderam o conceito original de cadeias semânticas para facilitar a manipulação de objetos mais complexos e suas relações.

Basicamente, uma cadeia semântica é um grafo no qual os nós representam objetos (ou uma classe), e os vínculos mostram uma relação, geralmente binária, entre objetos ou classes conectadas pelo vínculo. Os nós podem ser de dois tipos: individuais ou genéricos. Os primeiros representam descrições ou afirmações relativas a uma instância individual de um objeto, enquanto os segundos são relacionados a uma classe ou categoria de objetos. As classes são pré-ordenadas em uma taxonomia, e há vínculos que representam relações binárias especiais como isa - é um (do inglês is a) - e ako - um tipo de (do inglês a kind of). O primeiro tipo de vínculo conecta um nó individual a um nó genérico e identifica um indivíduo como pertencendo a certa classe. O segundo une dois nós genéricos entre eles e mostra que determinada classe é subdivisão de outra classe.

Exemplo: Analogamente à representação lógica, o formalismo de cadeias semânticas conta com comandos de armazenamento e consulta, e pode ser acessado a partir das regras através de padrões. A cadeia semântica associada ao exemplo da cor de Clyde pode ser definida através do seguinte comando:

 > (snet-store '(color (clyde real e-um)
                     (real elefante e-um)
                     (elefante cinza e-um)
                     (clyde elefante e-um)
                     (real cinza (not . e-um))))

Observe como foi introduzido o arco negado, com a construção de um “dotted-pair” onde o primeiro elemento é o símbolo “not”. A visualização do conteúdo da base pode ser feita através do comando list:

 > (snet-list)
 ===================
 graph : color 
 ----
 node : clyde
    | * edge : e-um 
    |---|> node : elefante
    |   | * edge : e-um 
    |   |---|> node : cinza
    | * edge : e-um 
    |---|> node : real
        | * edge : (not . e-um) 
        |---|> node : cinza
        | * edge : e-um 
        |---|> node : elefante

Pode-se agora determinar toda a teoria hierárquica definida através da rede “color”, utilizando as expressões de consulta adequadas:

 > (snet-query '(color (x y e-um)))
 ([ Substituicao  : ((x . elefante) (y . cinza)) ]
  [ Substituicao  : ((x . real) (y . elefante)) ]
  [ Substituicao  : ((x . clyde) (y . elefante)) ]
  [ Substituicao  : ((x . clyde) (y . real)) ])
 > (snet-query '(color (x y (not . e-um))))
 ([ Substituicao  : ((x . real) (y . cinza)) ]
  [ Substituicao  : ((x . clyde) (y . cinza)) ])

Frames[editar | editar código-fonte]

A segunda representação de conhecimento - frames - ficou popular nos anos 70 devido ao aparecimento da teoria dos frames, que surgiu inicialmente como resultado de um artigo escrito por M. Minsky. É a forma de representar o conhecimento de um objeto através da "observação visual", ou seja, tendo uma idéia do objeto pré-definida na memória faz a comparação desta idéia, ou conjunto de idéias, com aquelas propriedades que podemos observar visualmente. Na ocasião, o uso de frames foi recomendado como básico para se entender a percepção visual, os diálogos em linguagem natural e outros conceitos complexos.

Frame é uma representação de um objeto complexo. Ele é identificado por um nome e consiste em conjunto de slots. Cada frame possui ao menos um frame hierarquicamente superior e, portanto, constitui uma base com mecanismo de herança. Um frame especial é a raiz desta hierarquia de herança.

Sistemas baseados em cadeias semânticas e sistemas baseados em frames podem ser considerados semelhantes com respeito às suas estruturas, mas diferem no que representam. Quer dizer, enquanto cadeias semânticas representam objetos simples, um sistema de frames pode representar objetos complexos.

Exemplo de frame:

Frame: Course in KB University

 MemberSlot: enrolls
    ValueClass: Student
    Cardinality.Min: 2
    Cardinality.Max: 30
 MemberSlot: taughtby
    ValueClass: (UNION GradStudent Professor)
    Cardinality.Min: 1
    Cardinality.Max: 1 

Frame: AdvCourse in KB University

 SuperClasses: Course
 MemberSlot: enrolls
    ValueClass: (INTERSECTION GradStudent (NOT Undergrad))
    Cardinality.Max: 20 

Frame: BasCourse in KB University

 SuperClasses: Course
 MemberSlot: taughtby
    ValueClass: Professor 

Frame: Professor in KB University

Frame: Student in KB University

Frame: GradStudent in KB University

 SuperClasses: Student
 MemberSlot: degree
    ValueClass: String
    Cardinality.Min: 1
    Cardinality.Max: 1 

Frame: Undergrad in KB University

 SuperClasses: Student

Redes Neurais[editar | editar código-fonte]

Paralelamente à construção de sistemas especialistas ou sistemas baseados em conhecimento, como também são denominados, a área de Inteligência Artificial (IA) também avançou em outra direção, ou seja, na área conexionista. Esta linha de ação baseia-se na crença de que o comportamento inteligente só pode ser obtido através do maciço processamento paralelo, tal qual ocorre nas conexões neurais do Sistema Nervoso Central dos seres humanos. Esta linha conexionista é implementada através da construção de sistemas baseados em redes neurais artificiais.

Resumidamente, as redes neurais artificiais podem ser descritas como modelos matemáticos que recebem um conjunto de evidências de entrada (camada de entrada), possuem várias camadas intermediárias de nós que se conectam amplamente às camadas adjacentes e, finalmente uma camada de saída que evidencia os resultados do processamento desta rede. A figura 3 a seguir, exemplifica uma rede neural artificial para o diagnóstico de Hipertensão Arterial: os nós de entrada representam os sinais, sintomas e resultados de exames que o paciente possa apresentar ao passo que os nós de saída representam os possíveis diagnósticos.

A principal característica dos sistemas conexionistas é sua capacidade de aprendizado automático, a partir de um conjunto de exemplos, também chamado conjunto de treinamento. As redes neurais artificiais são, portanto, capazes de aprender, todavia não explicam como o fizeram. Isto se deve ao fato que neste tipo de representação o conhecimento corresponde a pesos nos arcos de conexão entre os nós de entrada, intermediários e os nós de saída da rede. Desta forma, pode-se treinar um sistema conexionista para reconhecer caracteres, visualizar bordas em imagens ou, até mesmo, reconhecer voz. Os sistemas conexionistas têm sido largamente utilizados no desenvolvimento de aplicações para reconhecimento de padrões, tais como: voz, imagens, linguagem natural e identificação de arritmias no eletrocardiograma.

Outras aplicações de redes neurais:

  • Reconhecimento de voz;
  • Reconhecimento de texto (OCR);
  • Avaliação de risco de financiamento;
  • Detector de bombas;
  • Auxílio na identificação de reservas de petróleo;

Algoritmo de aprendizado supervisionado para redes de uma camada:

  rede := rede com pesos aleatórios entre [-0.5, 0.5]
  repita
        para cada e ∈ conjunto de treinamento
                  O := saída da rede para e
                  T := saída esperada para e
                  Erro := T - O
                  para i de 1 até número de saídas
                           se Erro[i] ≠ 0
                                     para j de 0 até números entradas
                                           W[i,j] := W[i,j] + á * I[j] * Erro[i]
                                                                    // á > 0, taxa de aprendizado
                                                                    // I, valores entrada, I[0]=1
                 fim tudo
  até atingir uma taxa aceitável de erro

Ver também[editar | editar código-fonte]