program - ¿Por qué se usa Lisp para AI?
lisp syntax (10)
Creo que está mal pensar en esto en términos de AI solamente. Cosas como el AI-invierno y los efectos comerciales en el ceceo común son una distracción si estás preguntando por qué se utilizó para IA, no por qué no se usa a menudo ahora ...
De todos modos, creo que es porque la mayoría del código AI era esencialmente código de investigación. Lisp es un excelente lenguaje para la programación exploratoria, para la implementación de algoritmos difíciles, para la modificación automática y, a menudo, código modificado. En otras palabras, para el código de investigación.
Uso lisp hoy para algunos de mis códigos de investigación (matemática, procesamiento de señales) porque es más flexible y poderoso que la mayoría de los lenguajes, al mismo tiempo que genera un código más eficiente que la mayoría de los idiomas. Normalmente puedo obtener un rendimiento dentro de un factor de +/- 2 de velocidad de c ++, pero puedo implementar cosas mucho más rápido y manejar la complejidad que me llevaría mucho más tiempo que si utilizara c ++, java, c #.
Eso está vagando fuera del tema sin embargo. Creo que el código AI fue escrito principalmente con ceceo común por un tiempo porque es un enfoque poderoso para el código de investigación. Sigue siendo; pero a medida que los algoritmos de ''AI'' se entendieron y exploraron mejor, algunas partes de ellos fueron mucho más fáciles de enseñar y usar, por lo que aparecieron en los idiomas del sabor del año en cursos de pregrado. A partir de ahí, se convierte en un problema de lo que la gente ya sabe, qué bibliotecas están disponibles y qué funciona bien para grupos grandes.
He estado aprendiendo Lisp para expandir mis horizontes porque he escuchado que se usa en la programación de IA. Después de explorar un poco, todavía tengo que encontrar ejemplos de IA o cualquier cosa en el lenguaje que lo haga más inclinado a ello.
¿Se utilizó Lisp en el pasado porque estaba disponible, o hay algo que me estoy perdiendo?
Creo que tienes razón: Lisp era una herramienta útil para hackear cosas. Esto se debe a que no distinguió mucho entre el programa y los datos. Esto permitió a los piratas informáticos manipular funciones muy fácilmente, al igual que los datos.
Pero lisp es bastante difícil de leer para los humanos, con sus llaves y sin distinción entre datos y programa. Hoy, no usaré lisp para ningún código de producción de inteligencia artificial (o incluso creación de prototipos), pero preferiría Python para las secuencias de comandos.
Otra cosa a considerar es las bibliotecas / herramientas existentes en / relacionadas con el idioma. No estoy en condiciones de comparar bibliotecas de lisp con 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
Lisp fue utilizado en IA hasta finales de los años ochenta. Sin embargo, en la década de los 80, Common Lisp estaba sobrevendido en el mundo de los negocios como el "lenguaje AI"; la reacción forzó a la mayoría de los programadores de IA a C ++ durante algunos 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 en Java).
Si tienes curiosidad por los 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):
- Lisp es una excelente herramienta de creación de prototipos. Fue lo mejor durante mucho tiempo. Lisp sigue siendo excelente para resolver un problema que aún no sabes cómo resolver. Esa descripción caracteriza a AI perfectamente.
- Lisp soporta bien la programación simbólica. La vieja IA también era simbólica. También fue único a este respecto durante mucho tiempo.
- 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 forma de aprender a programar algoritmos de AI en Lisp.
Descargo de responsabilidad: soy un estudiante de posgrado 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.
Lisp se usa para AI 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 se encuentran en el núcleo de Lisp.
Las típicas áreas de IA para computar con símbolos eran / son: álgebra computacional, demostración de teoremas, sistemas de planificación, diagnóstico, sistemas de reescritura, representación y razonamiento del conocimiento, lenguajes lógicos, traducción automática, sistemas expertos y más.
Entonces no es sorprendente que muchas aplicaciones famosas de AI en estos dominios se escribieron en Lisp:
- Macsyma como el primer gran sistema de álgebra computacional.
- ACL2 como un demostrador de teoremas ampliamente utilizado, por ejemplo, utilizado por AMD.
- DART como el planificador de logística utilizado durante la primera guerra del Golfo por el ejército de los EE. UU. Se dice que esta aplicación de Lisp solo pagó por todas las inversiones estadounidenses en investigación de IA en ese momento.
- SPIKE, la aplicación de planificación y programación del Telescopio Espacial Hubble. También utilizado por varios otros telescopios grandes.
- CYC, uno de los sistemas de software más grandes escritos. Representación y razonamiento en el dominio del conocimiento del sentido común humano.
- METAL, uno de los primeros sistemas de traducción de lenguaje natural comercialmente utilizados.
- 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 ellos 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 simbólicos y programas y puede implementar todo tipo de maquinaria para manipular estas expresiones (fórmulas matemáticas, fórmulas lógicas, planes, ...).
(Tenga en cuenta que muchos otros lenguajes de programación de propósito general también se usan en AI. He intentado responder por qué especialmente Lisp se usa en IA).
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, se pueden tratar como listas y modificar como cualquier otra información.
Por lo tanto, el código autoinspección y auto modificación podría escribirse fácilmente.
Recuerdo haber oído que, al ser un lenguaje funcional, Lisp era una muy buena opción para implementar algoritmos recursivos. Ser capaz de rastrear un árbol y regresar es esencial cuando se consideran los procesos de toma de decisiones (recorrido) y el resultado final (nodo hoja).
Esto me lo dijeron durante un curso de AI en la universidad donde estudiamos Lisp.
Supongo que una gran razón fue la flexibilidad de las listas como estructura de datos básica.
en ese momento, ser capaz de convertirlos en todo tipo de objetos compuestos, y cosas nuevas como pases de mensajes y polimorfismo, lo convirtió en el lenguaje de elección; no específicamente para AI, sino para tareas grandes y complejas. especialmente cuando estaban experimentando con conceptos.
Una razón es que le permite ampliar el lenguaje con construcciones específicas para su dominio, lo que lo convierte, 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.
Una respuesta más cínica podría ser "porque perdió una guerra política de inteligencia artificial entre Japón y Estados Unidos en la década de 1980". Hay una publicación de blog divertida que especula sobre el impacto del fallecimiento del sistema informático de quinta generación en el Prolog .
Una respuesta posible es que la IA es una colección de problemas muy difíciles, y Lisp es un buen lenguaje para resolver problemas difíciles, no solo la IA.
En cuanto a por qué eso es así: las macros, las funciones genéricas y la introspección rica permiten un código conciso y una fácil introducción de las abstracciones de dominio; es un lenguaje que puede hacer más poderoso. Para muchos problemas eso es innecesario, y tiene sus propios costos, pero para otros problemas se necesita energía para avanzar.