En el campo de la inteligencia artificial , el motor de inferencia es un componente del sistema que aplica reglas lógicas a la base de conocimiento para deducir nueva información. Los primeros motores de inferencia fueron componentes de sistemas expertos . El sistema experto típico constaba de una base de conocimientos y un motor de inferencia. La base de conocimientos almacena datos sobre el mundo. El motor de inferencia aplica reglas lógicas a la base de conocimientos y deduce nuevos conocimientos. Este proceso se repetirá ya que cada nuevo hecho en la base de conocimiento podría activar reglas adicionales en el motor de inferencia. Los motores de inferencia funcionan principalmente en uno de dos modos, ya sea de reglas especiales o hechos: encadenamiento hacia adelante y encadenamiento hacia atrás.. El encadenamiento hacia adelante comienza con los hechos conocidos y afirma nuevos hechos. El encadenamiento hacia atrás comienza con metas y funciona hacia atrás para determinar qué hechos deben afirmarse para que las metas puedan alcanzarse. [1]
Arquitectura
La lógica que utiliza un motor de inferencia se representa normalmente como reglas SI-ENTONCES. El formato general de tales reglas es SI
Un ejemplo simple de modus ponens que se usa a menudo en los libros de introducción a la lógica es "Si eres humano, entonces eres mortal". Esto se puede representar en pseudocódigo como:
Regla 1: Humano (x) => Mortal (x)
Un ejemplo trivial de cómo se usaría esta regla en un motor de inferencia es el siguiente. En el encadenamiento hacia adelante , el motor de inferencia encontraría cualquier hecho en la base de conocimiento que coincidiera con Human (x) y por cada hecho que encontrara agregaría la nueva información Mortal (x) a la base de conocimiento. Entonces, si encontrara un objeto llamado Sócrates que fuera humano, deduciría que Sócrates era mortal. En el encadenamiento hacia atrás , el sistema tendría un objetivo, por ejemplo, responder a la pregunta ¿Sócrates es mortal? Buscaría en la base de conocimientos y determinaría si Sócrates era humano y, de ser así, afirmaría que también es mortal. Sin embargo, en el encadenamiento hacia atrás, una técnica común era integrar el motor de inferencia con una interfaz de usuario. De esa manera, en lugar de simplemente automatizarse, el sistema ahora podría ser interactivo. En este ejemplo trivial, si al sistema se le diera el objetivo de responder a la pregunta de si Sócrates era mortal y aún no sabía si era humano, se generaría una ventana para plantear al usuario la pregunta "¿Es Sócrates humano?" y luego usaría esa información en consecuencia.
Esta innovación de integrar el motor de inferencia con una interfaz de usuario condujo al segundo avance temprano de los sistemas expertos: las capacidades de explicación. La representación explícita del conocimiento como reglas más que como código permitió generar explicaciones a los usuarios: tanto explicaciones en tiempo real como a posteriori. Entonces, si el sistema le pregunta al usuario "¿Es Sócrates un ser humano?", El usuario puede preguntarse por qué se le hizo esa pregunta y el sistema usaría la cadena de reglas para explicar por qué estaba tratando de determinar ese poco de conocimiento actualmente: es decir , necesita determinar si Sócrates es mortal y para hacerlo necesita determinar si es humano. Al principio, estas explicaciones no eran muy diferentes de la información de depuración estándar con la que tratan los desarrolladores al depurar cualquier sistema. Sin embargo, un área activa de investigación estaba utilizando la tecnología del lenguaje natural para hacer, comprender y generar preguntas y explicaciones utilizando lenguajes naturales en lugar de formalismos informáticos. [3]
Un motor de inferencia recorre tres pasos secuenciales: igualar reglas , seleccionar reglas y ejecutar reglas . La ejecución de las reglas a menudo dará como resultado que se agreguen nuevos hechos u objetivos a la base de conocimientos que desencadenarán la repetición del ciclo. Este ciclo continúa hasta que no se pueden igualar nuevas reglas.
En el primer paso, las reglas de coincidencia, el motor de inferencia busca todas las reglas que se activan con el contenido actual de la base de conocimientos. En el encadenamiento hacia adelante, el motor busca reglas donde el antecedente (lado izquierdo) coincida con algún hecho en la base de conocimiento. En el encadenamiento hacia atrás, el motor busca antecedentes que puedan satisfacer uno de los objetivos actuales.
En el segundo paso, seleccione las reglas, el motor de inferencia prioriza las diversas reglas que se combinaron para determinar el orden en que se ejecutarán. En el paso final, ejecute las reglas, el motor ejecuta cada regla coincidente en el orden determinado en el paso dos y luego itera de nuevo al paso uno. El ciclo continúa hasta que no se combinan nuevas reglas. [4]
Implementaciones
Los primeros motores de inferencia se centraban principalmente en el encadenamiento directo. Estos sistemas generalmente se implementaron en el lenguaje de programación Lisp . Lisp fue una plataforma frecuente para la investigación temprana de IA debido a su gran capacidad para realizar manipulación simbólica. Además, como lenguaje interpretado, ofrecía entornos de desarrollo productivos adecuados para depurar programas complejos. Una consecuencia necesaria de estos beneficios es que los programas Lisp tendían a ser más lento y menos robusto que los lenguajes compilados de la época, tales como C . Un enfoque común en estos primeros días era tomar una aplicación de sistema experto y volver a empaquetar el motor de inferencia utilizado para ese sistema como una herramienta reutilizable que otros investigadores podrían usar para el desarrollo de otros sistemas expertos. Por ejemplo, MYCIN fue uno de los primeros sistemas expertos para el diagnóstico médico y EMYCIN fue un motor de inferencia extrapolado de MYCIN y puesto a disposición de otros investigadores. [1]
A medida que los sistemas expertos pasaron de los prototipos de investigación a los sistemas desplegados, se hizo más hincapié en cuestiones como la velocidad y la solidez. Uno de los primeros y más populares motores de encadenamiento directo fue OPS5, que utilizó el algoritmo Rete para optimizar la eficiencia de la activación de reglas. Otra tecnología muy popular que se desarrolló fue el lenguaje de programación lógica Prolog . Prolog se centró principalmente en el encadenamiento hacia atrás y también presentó varias versiones comerciales y optimizaciones para la eficiencia y robustez. [5]
Como Expert Systems despertó un interés significativo en el mundo empresarial, varias empresas, muchas de ellas iniciadas o guiadas por destacados investigadores de IA crearon versiones productivas de motores de inferencia. Por ejemplo, Intellicorp fue guiado inicialmente por Edward Feigenbaum . Estos productos de motor de inferencia también se desarrollaron a menudo en Lisp al principio. Sin embargo, las demandas de plataformas más asequibles y comercialmente viables finalmente hicieron que las plataformas de computadoras personales fueran muy populares.
Ver también
Referencias
- ↑ a b Hayes-Roth, Frederick; Donald Waterman; Douglas Lenat (1983). Construyendo sistemas expertos . Addison-Wesley. ISBN 0-201-10686-8.
- ^ Feigenbaum, Edward; Avron Barr (1 de septiembre de 1986). El Manual de la Inteligencia Artificial, Volumen I . Addison-Wesley. pag. 195. ISBN 0201118114.
- ^ Barzilayt, Regina; Daryl McCullough; Owen Rambow; Jonathan DeCristofaro; Tanya Korelsky; Benoit Lavoie. "Un nuevo enfoque a las explicaciones del sistema experto" . Informe de laboratorio de la USAF en Roma .
- ^ Griffin, NL, Un motor de inferencia basado en reglas que es óptimo y VLSI implementable , Universidad de Kentucky.
- ^ Sterling, Leon; Ehud Shapiro (1986). El arte de Prolog . Cambridge, MA: MIT. ISBN 0-262-19250-0.