Pregunta

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?

¿Fue útil?

Solución

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 violenta 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 el 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 antiguo libro de IA de Peter Norvig , pero se supone que es una buena manera 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.

Otros consejos

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 informática con ellos son el núcleo 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 sorprende entonces que muchas aplicaciones de IA famosas en estos dominios se escribieran 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).

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.

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.

Entonces, el código auto-inspeccionable y auto modificable podría escribirse fácilmente.

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 las 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.

Creo que está mal pensar en esto solo en términos de IA. Cosas como el AI-invierno y los efectos comerciales en el lisp 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.

Utilizo lisp hoy 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 de inteligencia artificial se escribió principalmente en 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.

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

en ese momento, poder convertirlos en todo tipo de objetos compuestos, y cosas nuevas como mensajes pasados ??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.

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 IA de producción (o tal vez incluso 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 creo 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

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 trabajar de regreso es esencial cuando se consideran los procesos de toma de decisiones (transversal) y el resultado final (nodo de hoja).

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

Una respuesta más cínica podría ser "porque perdió una guerra política de IA entre Japón y Estados Unidos en la década de 1980". Hay una divertida publicación de blog que especula sobre el impacto de la Quinta Generación Desaparición del sistema informático en el Prolog .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top