Algoritmos y Estructuras de Datos Compiladores e Intérpretes Herramientas Lenguaje de programación
!Prog C/C++
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Redes y Computación Distribuida Sistemas Operativos

Sistemas Basados en Conocimiento

[date: 02-01-2025] [last modification: 08-01-2025]
[words: 1911] [reading time: 9min] [size: 27464 bytes]

Los Sistemas Basados en Conocimiento, simulan el razonamiento de un humano experto para resolver problemas complejos en dominios especializados. Emplean conocimiento explícito y reglas predefinidas, aplicadas mediante motores de inferencia. Discutiremos su razonamiento lógico, redes semánticas y métodos explicativos, ofreciendo soluciones precisas en áreas donde los algoritmos tradicionales no son viables.

Definición

Sistema Basado en Conocimiento
Un Sistema Basado en Conocimiento, también llamados Sistemas Expertos, son unos sistemas que simulan el razonamiento y toma de decisiones de un humano experto.

Se utilizan:

De ahí nace la ingeniería del conocimiento: expertos que se encargan de gestionar y ordenar el conocimiento.

A la hora de diseñar estos sistemas:

Comparativas

Sistemas basados en conocimientoBúsqueda en espacio de estados
Base de conocimientoEstados de representación del problema y heurísticas
Método de razonamientoAlgoritmo de búqueda
Hechos conocidosEstado inicial
Hechos inferidosEstados explorados y el estado actual
Respuesta a una consultaEstado solución
HechosConocimiento
Específicos del problemaGenerales del dominio
DinámicosRelativamente estáticos
Aumenta durante la resoluciónEn general no varía
Necesidad de almacenamiento y recuperación eficienteNecesidad de razonamiento eficiente
Precisos y ciertosPuede ser impreciso e incierto
Programación convencionalSistemas expertos
Programación imperativaProgramación declarativa
Modificación por reprogramaciónModificación de la Base de Conocimiento
Solución algorítmicaSolución por razonamiento basado en conocimiento
Normalmente precisa y cierta (óptima)Imprecisa y con grados de certeza
Ejecución guiada por el flujo del códigoEjecución guiada por el motor de inferencia

Funcionamiento

Base de hechos
Conocimiento que sabe el sistema sobre el caso que está considerando, dentro de la tipología de problemas para el que está diseñado.

En la base de hechos se puede almacenar:

Base de conocimiento
Conocimiento previo y posiblemente útil para la resolución de problemas. Están íntimamente ligados al domino específico.
Mecanismo de razonamiento
Aplica el conocimiento a los hechos para obtener una solución. También se le puede llamar motor de inferencia.
Estructura de un sistema experto

Estructura de un sistema experto

Sistemas basados en reglas

La base de conocimiento está formada por reglas de producción que tienen la siguiente forma:

SI situación ENTONCES acción

Razonamiento

Aunque las reglas son:

pueden existir relaciones entre ellas. Por ejemplo, si una regla concluye algo de la parte de condición de la otra, ambas estarán relacionadas. Estas dependencias se pueden representar mediante un grafo de razonamiento.

Se usa un arco entre varios ejes para indicar un $\land$ (y lógico). Si el arco no aparece, quiere decir que se trata de un $\lor$ (o lógico).

Conjunto conflicto
Conjunto de todas las reglas que se pueden ejecutar en un determinado momento.
Encadenamiento hacia delante

«De los síntomas obtener un diagnóstico»

  1. Se parte de los hechos de la memoria de trabajo
  2. Se emparejan los hechos con los antecedentes de las reglas
  3. Se aplican las reglas hasta se llega al objetivo o no se puede seguir
  4. Aplicación de criterios de selección de las reglas aplicables dentro del conjunto conflicto.

Principio de refracción: no se ejecuta reiteradamente una misma regla, aunque se cumpla.

Encadenamiento hacia atrás

«Del diagnóstico, obtener los síntomas»

Esta es más eficiente porque implica explorar menos ramas.

Estas formas son los métodos usuales para sistematizar el razonamiento automático sobre las reglas:

Pseudocódigo

Método básico de razonamiento:

BH = hechos_iniciales
BC: BaseConocimiento
while not condFinal(BH) or not accionParada():
    conjunto_conflicto = equiparar(BC, BH)
    regla = resolver(conjunto_conflicto)
    nuevos_hechos = aplicar(regla, BH)
    BH += nuevos_hechos

Encadenamiento hacia delante:

def raz_delante(hechos_iniciales: Hecho[], meta, BC: BaseConocimiento) -> éxito | fracaso:
    BH = hechos_iniciales
    conjunto_conflicto = extrae_cualquier_regla(BC)

    while meta not in BH and not empty(conjunto_conflicto):
        conjunto_conflicto = equiparar(antecedentes(BC), BH)
        if not empty(conjunto_conflicto):
            regla = resolver(conjunto_conflicto)
            nuevos_hechos = aplicar(regla, BH)
            BH += nuevos_hechos

    if meta in BH:
        return 'éxito'
    else:
        return 'fracaso'

Encadenamiento hacia atrás:

def raz_atras(hechos_iniciales: Hecho[], BC: BaseConocimiento) -> éxito | fracaso:
    BH = hechos_iniciales

    if verificar(meta, BH, BC):
        return 'éxito'
    else:
        return 'fracaso'

Verificación de reglas:

def verificar(meta: Hecho, BH: BaseHechos, BC: BaseConocimiento) -> bool:
    if meta in BH:
        return True

    verificado = False
    conjunto_conflicto = equiparar(consecuentes(BC), meta)
    while not empty(conjunto_conflicto) and not verificado:
        regla = resolver(conjunto_conflicto)
        conjunto_conflicto -= regla

        nuevas_metas = extraer_antecedentes(regla)
        verificado = True

        while not empty(nuevas_metas) and verificado:
            meta = seleccionar_meta(nuevas_metas)
            nuevas_metas -= meta

            verificado = verificar(meta, BH)
            if verificado:
                BH += meta

    return verificado

Lógicas

Hipótesis de símbolos físicos
Nuestro cerebro es una máquina capaz de interpretar conceptos abstractos (símbolos) con un significado construido de forma colectiva a través de la historia y la propia experiencia del individuo.

Los lenguajes naturales son una representación simbólica de información, una herramienta no solo para la comunicación de ideas, sino también para el propio pensamiento.

Y a partir de esta hipótesis, también podemos decir que las máquinas también pueden hacer lo mismo: representar información mediante símbolos, manipularlos para realizar razonamientos y así poder resolver problemas.

Si embargo, no sabemos como computar el lenguaje natural, por lo que se elaboran lenguajes más sencillos que sí lo sean. Las reglas vistas antes son una forma de hacerlo. Y las lógicas son otra.

Lógica
En este contexto, podemos decir que una lógica es una matematización de los procesos de representación de conocimiento y razonamiento.

Una lógica representa de manera formal las relaciones existentes entre conceptos, objetos, propiedades, valores… Las reglas, por otro lado, se manejan de un modo mucho más laxo.

Cuando los sistemas expertos empezaron a tener éxito, se propuso combinar ambos métodos. Sin embargo la lógica proposicional tiene una mala calidad de representación, y se procedió a idear otros tipos que la ampliasen:

Lógica proposicional

$$ \begin{array}{l} p \to q \\ p \\ \hline q \\[0.5em] \text{Modus Ponens} \end{array} \mkern30mu \begin{array}{l} p \to q \\ \lnot q \\ \hline \lnot p \\[0.5em] \text{Modus Tollens} \end{array} $$

Algunas formas de razonamiento:

Lógica de predicados

$$ \forall x \forall y \forall z \quad \text{esPadre}(x, y) \land \text{esPadre}(y, z) \to \text{esAbuelo}(x, z) $$

El conocimiento se representa en forma de reglas cuantificadas de forma universal.

Redes semánticas

La información se relaciona entre sí, de forma que hay procesos de recuperación más eficientes y razonamiento sobre las redes.

Permite la herencia de propiedades (creación de subcategorías), lo que es útil para hacer generalizaciones. Ya no es necesario representar todo el comportamiento; sino que conjuntos, sus subconjuntos y sus relaciones se disponen de mecanismos de representación mucho más ricos.

Ejemplo sencillo de una red semántica

Ejemplo sencillo de una red semántica

Anterior: Búsqueda en Espacios de Estados Volver a Algoritmos y Estructuras de Datos Siguiente: Sistemas Conexionistas