lisp - que - programas para crear inteligencia artificial
¿Lisp y Prolog para la Inteligencia Artificial? (6)
pero no entiendo "por qué" usaríamos Lisp ... e incluso lo que otros investigadores de IA utilizarían para hacer aprendizaje automático, etc.
Yann LeCun desarrolló Lush aka LISP Universal Shell. También se convirtió en Director de Investigación de IA en una red social recientemente.
Cualquier artículo / libro sobre el tema es útil también :)
Supongo que ya conoces la Inteligencia Artificial: un enfoque moderno. Es el libro de introducción más leído para AI en las universidades.
Ahora, desde que tomé una clase hace 3 años en AI, soy claramente lo suficientemente competente como para hacer esta pregunta ... solo bromeaba; es una broma;)
pero en serio, ¿qué hay en estos idiomas que los hacen tan populares para la investigación de IA? A pesar de que la investigación en IA es "vieja" ... probablemente haya sido la forma más larga en los últimos 5-10 años, parece ... ¿Es porque las lenguas estaban algo "diseñadas" en torno al concepto de IA, o simplemente eso? no tenemos nada realmente mejor para usar en este momento?
Pregunto esto porque siempre lo he encontrado bastante interesante, y soy un poco curioso. Si estoy completamente equivocado y usan diferentes idiomas, me encantaría saber qué es lo que usan. Quiero decir que puedo entender prolog, especialmente con la lógica de Sentient / Propositional y Fuzzy. pero no entiendo "por qué" usaríamos Lisp ... e incluso lo que otros investigadores de IA utilizarían para hacer aprendizaje automático, etc.
Cualquier artículo / libro sobre el tema es útil también :)
Hubo algunas respuestas buenas e informativas aquí, pero el punto de Lisp y Prolog ha sido extrañado, marginado o no lo suficientemente enfatizado.
Lisp y luego Prolog surgieron en una era en la que la investigación principal de la IA giraba en torno al procesamiento simbólico. Un ejemplo simple de procesamiento simbólico es cómo los humanos hacemos álgebra, cálculo o integrales a mano. Manipulamos simbólicamente las variables y las constantes para derivar relaciones equivalentes. Lisp y Prolog fueron diseñados para este propósito.
La manipulación simbólica no se implementa trivialmente en C ++ o Java porque no se diseñaron con este propósito en mente. Sin embargo, C ++, Java o lenguajes similares pueden ser lenguajes de moda en AI hoy en día porque ahora existen varias variaciones de la investigación de IA que no se ocupan del procesamiento simbólico.
Una forma de AI se ocupa del uso de métodos estadísticos como base del conocimiento, y esto requiere el uso de lenguajes mucho más simples para reducir el tiempo de cálculo. Además, muchos de los llamados sistemas de Inteligencia Artificial no son más que sistemas especializados para servir a un propósito de nicho particular. Por supuesto, estos sistemas se pueden programar mejor en un lenguaje que no sea Lisp / Prolog, y se basan menos en el "razonamiento" o la adquisición de conocimiento de sentido común y más en el procesamiento de los datos de las entradas.
Incluso Watson (que está programado en Java, C ++ y un pequeño Prolog) es posiblemente un sistema altamente especializado. Parece que Watson fue diseñado para adquirir una gran cantidad de datos que luego clasifica a través de estos hechos utilizando sofisticados algoritmos de búsqueda (aunque no estoy seguro e IBM probablemente me molestaría por decir eso). Las futuras implementaciones de AI probablemente combinarán paradigmas de IA e implementarán varios idiomas para cada parte especializada. Incluso Lisp y Prolog pueden algún día regresar.
La pregunta ya ha sido respondida para Lisp, así que solo comentaré sobre Prolog.
Prolog fue diseñado para dos cosas: procesamiento del lenguaje natural y razonamiento lógico. En el paradigma GOFAI de principios de la década de 1970, cuando se inventó Prolog, esto significaba:
- la construcción de gramáticas simbólicas para el lenguaje natural que se usarían para construir representaciones lógicas de oraciones / enunciados;
- usar estas representaciones y axiomas lógicos (no necesariamente los de lógica clásica) para inferir nuevos hechos;
- usando gramáticas similares para traducir de nuevo la representación lógica al lenguaje.
Prolog es muy bueno en esto y se usa en el ISS para tal tarea. El enfoque quedó desacreditado, porque
- "todas las gramáticas pierden" : ninguna gramática puede detectar todas las reglas y excepciones en un idioma;
- cuanto más detallada sea la gramática, mayor será la complejidad (tanto grande como práctica) de análisis sintáctico;
- el razonamiento lógico es inadecuado e innecesario para muchas tareas prácticas;
- los enfoques estadísticos para la PNL, es decir, el "conteo de palabras", han demostrado ser mucho más sólidos. Con el auge de Internet, se dispone de conjuntos de datos adecuados para obtener las estadísticas que necesitan los desarrolladores de PNL. Al mismo tiempo, los costos de memoria y disco han disminuido, mientras que la potencia de procesamiento sigue siendo relativamente cara.
Recientemente, los investigadores de la PNL han desarrollado enfoques combinados simbólico-estadísticos bastante prácticos, a veces utilizando Prolog . El resto del mundo usa Java, C ++ o Python, para los cuales puede encontrar más fácilmente bibliotecas, herramientas y programadores no doctores. El hecho de que la E / S y la aritmética sean difíciles de manejar en Prolog no ayuda a su aceptación.
Prolog ahora se limita principalmente a aplicaciones específicas de dominio que implican NLP y razonamiento de restricción, donde parece que le va bastante bien. Aun así, pocas compañías de software anunciarán con "tecnología Prolog incorporada" ya que el lenguaje tiene mala fama por no cumplir con la promesa de "facilitar la IA".
(Me gustaría agregar que soy un gran fanático de Prolog, pero incluso solo lo uso para crear prototipos).
Lisp tenía una ventaja cuando creíamos que AI era manipulación de símbolos y cosas como Ontologías. Prolog tenía una ventaja cuando creíamos que AI era lógica, y la unificación era la operación complicada. Pero ninguno de estos proporciona ninguna ventaja para ninguno de los contendientes actuales por "IA": la IA estadística trata de matrices dispersas. Las redes neuronales de todo tipo, incluido el aprendizaje profundo, se trata de océanos de nodos conectados con enlaces. Los métodos libres de modelo (muchos tipos de aprendizaje automático, métodos evolutivos, etc.) también son muy simples. La complejidad es emergente, por lo que no tiene que preocuparse por eso. Escribe una base simple que pueda aprender lo que necesita aprender. En cualquiera de estos casos, cualquier lenguaje de propósito general servirá. Incluso se pueden argumentar que la mayoría de los enfoques de redes neuronales son tan simples que C ++ sería excesivo.
Use el lenguaje que le permite contratar más fácilmente a los mejores programadores para la tarea.
Quizás sean buenas ideas para recordar las motivaciones de Prolog: Lógica para la resolución de problemas y para entender el razonamiento, humano o máquina. Este es un proyecto en curso y, aunque Prolog es uno de sus mejores resultados, no es su final. Seguimos buscando mejores idiomas para representar el conocimiento. Consulte el último libro de Bob Kowalski: cómo ser artificialmente inteligente.
Realmente no puedo hablar con Prolog, pero aquí está el por qué Lisp:
Lisp es un homoiconic , lo que significa que el código se expresa en la misma forma ( s-expressions ) que las estructuras de datos en el lenguaje. es decir, "el código es información". Esto tiene grandes ventajas si está escribiendo código que modifica / manipula otro código, por ejemplo, algoritmos genéticos o manipulación simbólica.
El macro sistema de Lisp lo hace muy adecuado para definir DSL específicos de un problema. La mayoría de los desarrolladores de Lisp efectivamente "amplían el idioma" para hacer lo que necesitan. De nuevo, el hecho de que Lisp sea homoicónico ayuda enormemente aquí.
Hay alguna conexión histórica, en que Lisp se hizo popular casi al mismo tiempo que muchas de las primeras investigaciones sobre IA. Algunos hechos interesantes en este hilo .
Lisp funciona bastante bien como un lenguaje de programación funcional. Este es un dominio bastante bueno para AI (donde a menudo solo intentas que la máquina aprenda a producir la salida correcta para una entrada determinada).
Visión subjetiva: Lisp parece atraer a las personas con una mentalidad matemática, que es exactamente lo que necesitas para una gran cantidad de IA moderna ... esto es posible debido al hecho de que Lisp está muy relacionado con la lambda sin tipo cálculo
Estoy haciendo algo de trabajo de inteligencia artificial / máquina en este momento, y elegí Clojure (un Lisp moderno en la JVM) por las razones anteriores.