¿Por qué se usa Lisp para la IA? [cerrado]

185

He estado aprendiendo a Lisp a expandir mis horizontes porque he oído que se usa en la programación de IA. Después de explorar un poco, todavía tengo que encontrar ejemplos de IA o algo en el lenguaje que lo haga más inclinado hacia él.

¿Se usó Lisp en el pasado porque estaba disponible, o hay algo que me falta?

Cristián Romo
fuente
55
> ... No asuma que Lisp solo es útil para Animación y Gráficos,> AI, Bioinformática, B2B y Comercio Electrónico, Minería de Datos, EDA / Semiconductores> aplicaciones, Sistemas Expertos, Finanzas, Agentes Inteligentes, Conocimiento> Gestión, CAD Mecánico , Modelado y Simulación, Lenguaje Natural,> Optimización, Investigación, Análisis de Riesgos, Programación, Telecomunicaciones, y Autoría Web simplemente porque estas son las únicas cosas que> sucedieron en la lista. --Kent Pitman
Avi
2
No pensé que Lisp solo sea útil para la IA, solo me pregunto por qué se usa para ello.
Cristián Romo
Reformularía la pregunta como "¿qué características de un lenguaje son necesarias para una IA difícil?" Esta es una pregunta válida y útil, y el resultado será que solo Lisp Forth y el ensamblador tienen lo necesario para hacer una IA difícil.
Albert van der Horst

Respuestas:

126

Lisp fue utilizado en IA hasta finales de la década de 1980. Sin embargo, en los años 80, Common Lisp fue sobrevendido al mundo de los negocios como el "lenguaje AI"; La reacción forzada obligó a la mayoría de los programadores de IA a C ++ durante unos años. En la actualidad, los prototipos generalmente se escriben en un lenguaje dinámico más joven (Perl, Python, Ruby, etc.) y las implementaciones de investigaciones exitosas generalmente se realizan en C o C ++ (a veces Java).

Si tienes curiosidad por los años 70 ... bueno, yo no estaba allí. Pero creo que Lisp tuvo éxito en la investigación de IA por tres razones (en orden de importancia):

  1. Lisp es una excelente herramienta de creación de prototipos. Fue lo mejor durante mucho tiempo. Lisp sigue siendo excelente para abordar un problema que aún no sabe cómo resolver. Esa descripción caracteriza a la IA perfectamente.
  2. Lisp admite bien la programación simbólica. La vieja IA también era simbólica. También fue único en este sentido durante mucho tiempo.
  3. Lisp es muy poderoso. La distinción código / datos es más débil, por lo que se siente más extensible que otros lenguajes porque sus funciones y macros se parecen a las cosas integradas.

No tengo el viejo libro de IA de Peter Norvig , pero se supone que es una buena forma de aprender a programar algoritmos de IA en Lisp.

Descargo de responsabilidad: soy un estudiante graduado en lingüística computacional. Conozco el subcampo del procesamiento del lenguaje natural mucho mejor que los otros campos. Quizás Lisp se usa más en otros subcampos.

Nathan Shively-Sanders
fuente
33
Lisp definitivamente sigue vivo y pateando en el mundo de Machine Learning / ILP
HasaniH el
13
Tuve un curso de pregrado en IA enseñado en C. Tuve un curso de posgrado en IA enseñado del libro de Norvig. El libro en C se centró en algoritmos y estructuras de IA. El libro de Norvig decía: "aprendamos LISP mientras leemos sobre la historia de la IA". En mi opinión, una completa pérdida de tiempo.
San Jacinto
77
Una razón por la que todos parecen perderse es que John McCarthy escribió Lisp y fue un informático muy influyente, específicamente en el campo de la IA. Naturalmente, gran parte de su trabajo se implementó en Lisp y, por lo tanto, Lisp se afianzó.
cha0site
2
Common Lisp nunca tuvo la intención de ser el lenguaje AI , fue creado para ser utilizado en la industria. Para la investigación, generalmente se usa Scheme. Y nunca, nunca juzgues un idioma por su edad, simplemente no es proporcional a la frescura, y viceversa. C es viejo pero genial, entonces, ¿por qué importa la edad de Lisp?
Luka Ramishvili
1
No es cierto que Lisp FUE usado para IA hasta finales de la década de 1980. En el año 2016, el MIT sigue siendo una institución bastante reconocida en el campo de la IA. El libro de texto recomendado para el curso de robótica de pregrado del MIT es Artificial Intelligence by Patrick Henry Winston. En la segunda edición, los capítulos de programación de ese libro se ramificaron en su propio libro sincronizado Lisp. Como su nombre lo indica, la programación es enteramente en Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R
61

Lisp se usa para IA porque admite la implementación de software que computa muy bien con símbolos. Los símbolos, las expresiones simbólicas y la computación con ellos están en el centro de Lisp.

Las áreas típicas de IA para la computación con símbolos fueron / son: álgebra computacional, prueba de teoremas, sistemas de planificación, diagnóstico, sistemas de reescritura, representación y razonamiento de conocimientos, lenguajes lógicos, traducción automática, sistemas expertos y más.

No es de extrañar que muchas aplicaciones de IA famosas en estos dominios se hayan escrito en Lisp:

  • Macsyma como el primer gran sistema de álgebra computacional.
  • ACL2 como un probador de teoremas ampliamente utilizado, por ejemplo, utilizado por AMD.
  • DART como el planificador logístico utilizado durante la primera guerra del Golfo por el ejército estadounidense. Se dice que esta aplicación Lisp por sí sola ha pagado todas las inversiones estadounidenses en investigación de IA en ese momento.
  • SPIKE, la aplicación de planificación y programación para el telescopio espacial Hubble. También utilizado por varios otros telescopios grandes.
  • CYC, uno de los mayores sistemas de software escritos. Representación y razonamiento en el dominio del conocimiento humano del sentido común.
  • METAL, uno de los primeros sistemas de traducción de lenguaje natural utilizados comercialmente.
  • Asistente del autorizador de American Express, que verifica las transacciones con tarjeta de crédito.

Hay miles de aplicaciones en estas áreas que están escritas en Lisp. Muy común para aquellos es que necesitan capacidades especiales en el área del procesamiento simbólico. Uno implementa lenguajes especiales que tienen intérpretes / compiladores especiales en estos dominios además de Lisp. Lisp permite crear representaciones para datos y programas simbólicos y puede implementar todo tipo de maquinaria para manipular estas expresiones (fórmulas matemáticas, fórmulas lógicas, planes, ...).

(Tenga en cuenta que también se usan muchos otros lenguajes de programación de propósito general en AI. He intentado responder por qué especialmente Lisp se usa en AI).

Rainer Joswig
fuente
10
Sí, históricamente la IA era más sobre computación simbólica que cualquier otra cosa. El " invierno de la IA " en los años 80 probablemente fue más una crisis de IA simbólica : en ese momento hubo un resurgimiento del interés por los métodos sub-simbólicos (redes neuronales, aprendizaje automático, etc.). Las implementaciones de Lisp solían ser bastante débiles en informática numérica. No sé si mejoraron en este frente.
MaD70
2
@ MaD70: el invierno de la IA en los años 80 fue sobre la IA en general. El ejército detuvo gran parte de la financiación y la IA falló principalmente en el mercado comercial. Incluso las cosas de la red neuronal que existían en ese momento. Si uno ve esa IA como 'nuevos métodos de desarrollo de software' (usando reglas, lógica, redes neuronales, recolección de basura, ...), eso también falló. Gran parte de eso ni siquiera se usa / me gusta hoy en día.
Rainer Joswig
Mi impresión en ese momento y en retrospectiva fue / es diferente: recuerdo claramente el resurgimiento del interés, tanto en la investigación como en el mercado (incluso hubo procesadores neuronales dedicados), en métodos sub-simbólicos en la segunda mitad de los años 80 / principios de los 90, después de décadas de ostracismo (vea mi respuesta, donde menciono la influencia de las críticas de Minsky & Papert a los perceptrones: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70
1
La IA simbólica falló, en mi opinión, por el hardware de la época (no lo suficientemente potente / barato) Y porque ese fuerte contraste entre los campos simbólicos y sub-simbólicos impidió cualquier sinergia. Wrt "incluso ampliamente utilizado / me gusta hoy": sospecho que algunas de las técnicas desarrolladas en IA (en ambos campos) son mucho más en uso de lo que uno puede pensar (no más promocionado, afortunadamente).
MaD70
Solo un ejemplo: a finales de los años 90, algunos de mis conocidos me preguntaron sobre la viabilidad de un proyecto para el control de calidad en el campo textil. Fuera de mi cabeza, mencioné las redes neuronales como un enfoque prometedor para tal problema de discriminación (esencialmente clasificación de imágenes). Con solo esa sugerencia, en algunas semanas encontraron un software ya desarrollado, utilizando redes neuronales, y adquirieron sus derechos de distribución, mucho más sensatos que embarcarse en un proyecto que involucra investigación y desarrollo.
MaD70
22

Una razón es que le permite extender el lenguaje con construcciones específicas para su dominio, convirtiéndolo, efectivamente, en un lenguaje específico de dominio. Esta técnica es increíblemente poderosa, ya que le permite razonar sobre el problema que está resolviendo, en lugar de barajar bits.

dsm
fuente
¿Puede proporcionar o vincular a un ejemplo de esto?
DuckMaestro
9
@DuckMaestro: en unos 30 minutos de trabajo macro esta semana, implementé una versión con errores ad-hoc de SQL Select. Va así: (consulta SELECT * FROM dataset WHERE expr).
Paul Nathan
Incrustar un solucionador de álgebra en Lisp youtube.com/… Incrustar un lenguaje de circuito en Lisp youtube.com/… Incrustar Lisp en Lisp youtube.com/… Incrustar Prolog en Lisp - Solo mira la serie completa
aoeu256
youtube.com/watch?v=SLcZXbyGC3E <- Este es bueno
aoeu256
12

Mi suposición siempre ha sido que, al ser un lenguaje funcional, no diferencia entre código y datos. Todo, incluidas las definiciones de funciones y las llamadas a funciones, pueden tratarse como listas y modificarse como cualquier otro dato.

Por lo tanto, el código de auto-inspección y auto-modificación podría escribirse fácilmente.

aib
fuente
10
Eso no es porque sea funcional. Prolog tiene la misma propiedad: todo es un "término" y los términos son datos y también código. (Prolog es un lenguaje de programación lógico y también se usa mucho para la IA)
Hugh Allen
El término elegante para esto se llama Homoiconicidad - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen
9

Una posible respuesta es que AI es una colección de problemas muy difíciles, y Lisp es un buen lenguaje para resolver problemas difíciles, no solo AI.

En cuanto a por qué es así: las macros, las funciones genéricas y la rica introspección permiten un código conciso y una fácil introducción de abstracciones de dominio: es un lenguaje que puede hacer más potente. Para muchos problemas eso es innecesario, y tiene sus propios costos, pero para otros problemas se necesita potencia para avanzar.

Rico
fuente
7

Creo que está mal pensar en esto solo en términos de IA. Cosas como el AI-invierno y los efectos comerciales en el ceceo común son una distracción si se pregunta por qué se usó para la IA, no por qué no se usa con frecuencia ahora ...

De todos modos, creo que es porque la mayoría del código de IA era esencialmente código de investigación. Lisp es un gran lenguaje para la programación exploratoria, para implementar algoritmos difíciles, para auto modificarse y código a menudo modificado. En otras palabras, para el código de investigación.

Hoy uso lisp para algunos de mis códigos de investigación (matemática, procesamiento de señales) porque es más flexible y potente que la mayoría de los idiomas, pero sigue generando un código más eficiente que la mayoría de los idiomas. Por lo general, puedo obtener un rendimiento dentro de un factor de +/- 2 de, digamos, la velocidad de c ++, pero puedo implementar cosas mucho más rápido y lidiar con la complejidad que me llevaría mucho más tiempo que si usara c ++, java, c #.

Sin embargo, eso se está desviando del tema. Creo que el código AI se escribió principalmente en el lenguaje común durante un tiempo porque es un enfoque poderoso para el código de investigación. Sigue siendo; pero a medida que los algoritmos de `` IA '' se entendieron y exploraron mejor, partes de ellos fueron mucho más fáciles de enseñar y usar, por lo que aparecieron en idiomas de sabor del año en los cursos de pregrado. A partir de ahí, se convierte en una cuestión de lo que la gente ya sabe, qué bibliotecas están disponibles y qué funciona bien para grupos grandes.

Simón
fuente
6

Supongo que una gran razón fue la flexibilidad de las listas como una estructura básica de datos.

en ese momento, ser capaz de convertirlos en todo tipo de objetos compuestos y cosas nuevas como pasajes de mensajes y polimorfismo, lo convirtió en el lenguaje de elección; no específicamente para IA, sino para tareas grandes y complejas. especialmente cuando estaban experimentando con conceptos.

Javier
fuente
4

Creo que tienes razón: Lisp fue una herramienta útil para hackear cosas. Esto se debe a que no distingue mucho entre programa y datos. Esto permitió a los piratas informáticos manipular funciones muy fácilmente, al igual que los datos.

Pero el lisp es bastante difícil de leer para los humanos, con sus llaves y su no distinción entre datos y programa. Hoy, no usaré lisp para ningún código de AI de producción (o tal vez incluso para la creación de prototipos), pero preferiría Python para las secuencias de comandos.

Otra cosa a considerar son las bibliotecas / herramientas existentes en / relacionadas con el idioma. No estoy en condiciones de comparar las bibliotecas de lisp con las bibliotecas de python, pero supongo que las bibliotecas y el código abierto importan mucho más ahora que antes.

Esta respuesta se inspiró en la siguiente comparación entre lisp y python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

amit
fuente
2
Personalmente, encuentro que Lisp es más fácil de leer que la mayoría de los idiomas, y solo lo aprendí hace unas semanas. Python es especialmente limpio en comparación con la mayoría de los lenguajes, sí, pero si compara lisp con algo como C ++, es mucho más limpio y fácil de leer. En mi experiencia de todos modos.
Zeusoflightning125
4

Recuerdo haber escuchado que, al ser un lenguaje funcional, Lisp era una muy buena opción para implementar algoritmos recursivos. Poder rastrear un árbol y regresar puede ser esencial cuando se consideran los procesos de toma de decisiones (transversal) y el resultado final (nodo hoja).

Esto me lo dijeron durante un curso de IA en la universidad donde estudiamos Lisp.

mlambie
fuente
1
Las macros en Lisp son más poderosas que cualquier otra cosa, permitiéndole implementar OOP en solo 50 líneas de código Lisp y REPL le permite editar su programa mientras aún se está ejecutando ... Solo Lisp puede editar su propio código fuente fácilmente ...
aoeu256