programando un sistema experto

7

Necesito programar un sistema experto que, de acuerdo con una serie de posibilidades complejas, devuelva un resultado bien definido, junto con algún tipo de diagnóstico de lo que significa ese resultado.

¿Cuál es el proceso general para definir el comportamiento de un sistema experto, desde la evaluación inicial de las condiciones hasta el código real?

    
pregunta Stefano Borini 31.01.2011 - 14:05

4 respuestas

5

No tengo experiencia en el desarrollo de sistemas expertos serios, pero he jugado con algunos algoritmos relacionados.

El teorema de Bayes es interesante para cuando su información contiene probabilidades erróneas: la probabilidad de x dada y cuando necesita la probabilidad de y dada x, básicamente.

ID3 es una forma fácil de entender para decidir qué pregunta hacer primero, para que pueda convertir una gran tabla de hechos en un árbol de decisión. Estrictamente, no creo que ID3 pueda hacer frente a una decisión exclusiva o de tipo, pero no es tan difícil de adaptar.

Básicamente, utiliza cálculos de "entropía": el promedio ponderado de la cantidad de información que obtendría si recibiera una respuesta particular, dada la probabilidad de esa respuesta (tanto para el cálculo de la información como para el peso). En una opción u otra, una respuesta muy improbable le brinda mucha información, si obtiene esa respuesta. Una vez que ponderas las respuestas, las preguntas que dan más información en promedio tienden a tener probabilidades de respuesta equilibrada. Un problema es que una pregunta con muchas respuestas (bien equilibradas) tiene más entropía que una con algunas respuestas posibles. Eso realmente funciona bien para mi cosa de envío múltiple, pero podría significar que un sistema experto real tendería a hacer preguntas incómodas primero que simples.

Utilizo una variación en el tema para una utilidad de generación de código de manejo de envío múltiple. Sí, es una exageración, pero ya tenía ese código escrito por interés, así que tenía sentido usarlo.

Lo que pasa con las múltiples funciones de envío, sin embargo, es que solo hay unos pocos "¿qué tipo de tiempo de ejecución es ese parámetro?" Preguntas a tener en cuenta. En la vida real, se supone que ID3 es un poco lento, por lo que hay muchas alternativas. Un clásico es que creo que se llama CN4.5. Sin embargo, nunca pasé el tiempo para entenderlo.

ID3 y los algoritmos de construcción de árbol de decisión similares a menudo se denominan algoritmos de "inducción de reglas". Creo que vi ID3 por primera vez en una edición antigua de PC World, donde el ejemplo fue identificar una moneda por sus propiedades (redondo o polígono, plata o bronce, etc.).

Por supuesto, los algoritmos y fragmentos de la teoría de la probabilidad, en sí mismos, no suman mucho. Incluso si conoce los algoritmos básicos, parece ser solo el primer paso para comprender cómo aplicarlos. Por ejemplo, mi asunto de envío múltiple es muy claro: la tabla de preguntas (parámetros), las respuestas (tipos de tiempo de ejecución) y las conclusiones (implementación) están completamente definidas por las reglas de la herramienta. No tengo que preocuparme por cosas como hacer demasiadas preguntas y, por lo tanto, repasar ejemplos específicos de entrenamiento en lugar de aprender principios. Y me alegro mucho de no tener ese problema subjetivo del que preocuparme.

    
respondido por el Steve314 31.01.2011 - 16:02
4

Hace mucho tiempo que no trabajo en un sistema experto. El proceso básico es conceptualmente sencillo, pero el demonio, como dicen, está en los detalles. En ese momento utilizamos el Shell del sistema experto de Java ( JESS ). Esencialmente hay dos facetas importantes de los sistemas expertos:

  • Datos (la información que está clasificando)
  • Reglas (cómo aplicar un significado a los hechos)

Un tercer concepto opcional pero útil es:

  • Pesos de relación (¿qué tan fuertes son dos hechos relacionados)

Las reglas pueden alterar los hechos y la relación / ponderación entre los hechos. El truco consiste en idear un conjunto de reglas que tengan sentido, no se contradigan entre sí y encarnan el significado de lo que creen los expertos. Esa es una tarea bastante no trivial.

Desearía tener la información bibliográfica del libro de referencia que utilizamos, pero sospecho que podría estar agotada ahora. Sin embargo, para obtener más información, puede consultar los recursos en esta página: enlace

    
respondido por el Berin Loritsch 31.01.2011 - 14:31
1

Una búsqueda en Google muestra lo siguiente, que parece contener una buena descripción:

enlace

¿Planea escribir todo el sistema experto desde cero o va a utilizar una herramienta / biblioteca de creación para el trabajo?

    
respondido por el blueberryfields 31.01.2011 - 14:12
1

La pregunta es bastante general, pero aquí hay algunas sugerencias. (Nota: diferentes campos de especialización se adaptan a diferentes enfoques.)

  1. El primer paso es obtener una idea de cómo funcionará la representación de su conocimiento. Empieza desde cero, así que recomiendo abordar un problema pequeño pero similar y crear un código para manejarlo. (En mi experiencia, no es difícil hacer eso. Puedes usar una variedad de idiomas, lo que te convenga. No tiene que ser Lisp, F # o Haskell. Lo he hecho usando idiomas OO, Javascript puede hacer un buen trabajo ...)
  2. Normalmente, luego verifico el área del problema, averiguo lo que esperamos obtener , establezca una manera de medir el éxito, asegúrese de tener suficientes datos pasados para compararlos. (¡Si no sabes a dónde vas, es muy fácil llegar!)
  3. Miraría a los expertos disponibles , hablaré con ellos, descubriré cuál es el mejor para empezar y luego trabajaré duro para conseguir al mejor tipo. Eso es típicamente difícil de hacer, está en demanda. Si no lo hace, bueno, no queme sus puentes con los otros expertos, probablemente los necesitará más adelante, si no al principio.
  4. Habla con el experto, establece lo que vas a implementar. A menudo habrá mucho para elegir. Calcula la mejor parte para abordar primero.
  5. Hable sobre el primer objetivo (/ sección) con el experto. A menudo no puede explicarlo bien, simplemente lo hace, eso puede ser un signo de experiencia real. Esto puede tomar un tiempo, ser persistente, tomar notas.
  6. Cuando tenga suficiente codifíquelo para que pueda ejecutarse con alguna IU disponible . Web, programa de escritorio lo que sea. Discutir con bastante rapidez con el experto. Mantener el impulso en marcha. Corre a través de él con él. Discútalo mientras se ejecuta, refine, corrija ...
  7. Ejecutar a través de 5. y 6 repetidamente. Hasta que hayas hecho suficientes trozos.
  8. Lo ideal es ejecutarlo con otros expertos . Eso suele ser mucho más rápido, y mejora el trabajo. Ver un ejemplo significa que no es necesario explicarlo desde lo básico tanto la segunda vez.
  9. Púllalo, despliégalo, etc.

A veces veo que se hace este tipo de cosas sin un experto. Si ese es tu caso, trataría de emular a un experto de alguna manera.

La codificación tiende a ser fácil , incluso cuando la representación del conocimiento toma variables continuas (como entradas) y da como resultado conclusiones que son más que booleanas.

    
respondido por el Mike Gale 01.02.2011 - 10:11

Lea otras preguntas en las etiquetas