Pourquoi Lisp est-il utilisé pour l'IA? [fermé]

185

J'ai appris Lisp pour élargir mes horizons parce que j'ai entendu dire qu'il était utilisé dans la programmation d'IA. Après avoir exploré, je n'ai pas encore trouvé d'exemples d'IA ou quoi que ce soit dans le langage qui le rendrait plus enclin à le faire.

Lisp a-t-il été utilisé dans le passé parce qu'il était disponible, ou y a-t-il quelque chose qui me manque?

Cristián Romo
la source
5
>… Veuillez ne pas supposer que Lisp n'est utile que pour l'animation et les graphiques,> AI, bioinformatique, B2B et commerce électronique, exploration de données, EDA / Semiconductor> applications, systèmes experts, finance, agents intelligents, connaissances> gestion, CAO mécanique , Modélisation et Simulation, Langage Naturel,> Optimisation, Recherche, Analyse des Risques, Planification, Télécom et Web> Création simplement parce que ce sont les seules choses auxquelles ils sont arrivés. --Kent Pitman
Avi
2
Je ne pensais pas que Lisp n'était utile que pour l'IA, je me demande simplement pourquoi il est utilisé pour cela.
Cristián Romo
Je reformulerais la question comme suit: «Quelles caractéristiques d'un langage sont nécessaires pour une IA dure?» C'est une question valable et utile, et le résultat sera que seuls Lisp Forth et l'assembleur ont ce qu'il faut pour faire une IA dure.
Albert van der Horst

Réponses:

126

Lisp était utilisé en IA jusqu'à la fin des années 1980. Dans les années 80, cependant, Common Lisp a été survendu au monde des affaires sous le nom de "langage IA"; le contrecoup a forcé la plupart des programmeurs d'IA à utiliser C ++ pendant quelques années. De nos jours, les prototypes sont généralement écrits dans un langage dynamique plus jeune (Perl, Python, Ruby, etc.) et les implémentations de recherches réussies sont généralement en C ou C ++ (parfois Java).

Si vous êtes curieux des années 70 ... eh bien, je n'étais pas là. Mais je pense que Lisp a réussi dans la recherche sur l'IA pour trois raisons (par ordre d'importance):

  1. Lisp est un excellent outil de prototypage. C'était le meilleur pendant très longtemps. Lisp est toujours excellent pour résoudre un problème que vous ne savez pas encore résoudre. Cette description caractérise parfaitement l'IA.
  2. Lisp supporte bien la programmation symbolique. L'ancienne IA était également symbolique. C'était aussi unique à cet égard pendant longtemps.
  3. Lisp est très puissant. La distinction code / données est plus faible, donc elle semble plus extensible que les autres langages car vos fonctions et macros ressemblent à des éléments intégrés.

Je n'ai pas l'ancien livre de Peter Norvig sur l'IA , mais c'est censé être un bon moyen d'apprendre à programmer des algorithmes d'IA en Lisp.

Avertissement: Je suis un étudiant diplômé en linguistique computationnelle. Je connais bien mieux le sous-domaine du traitement du langage naturel que les autres domaines. Peut-être que Lisp est plus utilisé dans d'autres sous-champs.

Nathan Shively-Sanders
la source
33
Lisp est définitivement toujours en vie dans le monde de l'apprentissage automatique / ILP
HasaniH
13
J'avais un cours de premier cycle en IA enseigné en C. J'avais un cours de deuxième cycle en IA enseigné à partir du livre de Norvig. Le livre en C était axé sur les algorithmes et les structures de l'IA. Le livre de Norvig ressemblait à: "apprenons LISP pendant que nous lisons l'histoire de l'IA." À mon avis, une perte de temps totale.
San Jacinto
7
L'une des raisons pour lesquelles tout le monde semble manquer est que John McCarthy a écrit Lisp et était un informaticien très influent, en particulier dans le domaine de l'IA. Naturellement, une grande partie de son travail a été implémentée en Lisp, et Lisp a donc pris pied.
cha0site
2
Common Lisp n'a jamais été conçu pour être le langage de l'IA , il a été créé pour être utilisé dans l'industrie. Pour la recherche, Scheme est généralement utilisé. Et ne jugez jamais une langue en fonction de son âge - elle n'est tout simplement pas proportionnelle à la fraîcheur, et vice versa. C est vieux mais cool, alors pourquoi l'âge de Lisp est-il important?
Luka Ramishvili
1
Je ne suis pas sûr que Lisp était utilisé pour l'IA jusqu'à la fin des années 1980. En 2016, le MIT reste une institution assez réputée dans le domaine de l'IA. Le manuel recommandé pour le cours de robotique de premier cycle du MIT est Artificial Intelligence by Patrick Henry Winston. À la deuxième édition, les chapitres de programmation de ce livre se sont ramifiés dans leur propre livre synchronisé - Lisp. Comme son nom l'indique, la programmation est entièrement en Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R
61

Lisp est utilisé pour l'IA car il prend en charge l'implémentation de logiciels qui calculent très bien avec des symboles. Les symboles, les expressions symboliques et le calcul avec ceux-ci sont au cœur de Lisp.

Les domaines typiques de l'IA pour le calcul avec des symboles étaient / sont: l'algèbre informatique, la démonstration de théorèmes, les systèmes de planification, le diagnostic, les systèmes de réécriture, la représentation et le raisonnement des connaissances, les langages logiques, la traduction automatique, les systèmes experts, etc.

Il n'est donc pas surprenant que de nombreuses applications IA célèbres dans ces domaines aient été écrites en Lisp:

  • Macsyma comme premier grand système d'algèbre informatique.
  • ACL2 comme prouveur de théorème largement utilisé, par exemple utilisé par AMD.
  • DART comme planificateur logistique utilisé pendant la première guerre du Golfe par l'armée américaine. Cette application Lisp à elle seule aurait remboursé tous les investissements américains dans la recherche sur l'IA à l'époque.
  • SPIKE, l'application de planification et d'ordonnancement du télescope spatial Hubble. Également utilisé par plusieurs autres grands télescopes.
  • CYC, l'un des plus grands systèmes logiciels écrits. Représentation et raisonnement dans le domaine de la connaissance du bon sens humain.
  • METAL, l'un des premiers systèmes de traduction en langage naturel commercialisés.
  • Assistant d'autorisation d'American Express, qui vérifie les transactions par carte de crédit.

Il existe des milliers d'applications dans ces domaines qui sont écrites en Lisp. Ils ont souvent besoin de capacités spéciales dans le domaine du traitement symbolique. On implémente des langages spéciaux qui ont des interpréteurs / compilateurs spéciaux dans ces domaines en plus de Lisp. Lisp permet de créer des représentations pour des données symboliques et des programmes et peut implémenter toutes sortes de machines pour manipuler ces expressions (formules mathématiques, formules logiques, plans, ...).

(Notez que beaucoup d'autres langages de programmation à usage général sont également utilisés dans l'IA. J'ai essayé de répondre pourquoi, en particulier, Lisp est utilisé dans l'IA.)

Rainer Joswig
la source
10
Oui, historiquement, l'IA était plus une question de calcul symbolique qu'autre chose. «L' hiver de l'IA » dans les années 80 était probablement plus une crise de l' IA symbolique - à cette époque, il y avait un regain d'intérêt pour les méthodes sous-symboliques (réseaux de neurones, apprentissage automatique, etc.). Les implémentations Lisp étaient généralement assez faibles en calcul numérique. Je ne sais pas s'ils se sont améliorés sur ce front.
MaD70
2
@ MaD70: l'hiver de l'IA dans les années 80 concernait l'IA en général. L'armée a arrêté une grande partie du financement et l'IA a échoué la plupart du temps sur le marché commercial. Même les trucs du réseau neuronal qui existaient à l'époque. Si l'on considère cette IA comme de `` nouvelles méthodes de développement logiciel '' (utilisant des règles, une logique, des réseaux de neurones, un ramasse-miettes, ...) - cela a également échoué. Une grande partie de cela n'est même pas largement utilisée / appréciée aujourd'hui.
Rainer Joswig
Mon impression à l'époque et rétrospectivement était / est différente: je me souviens clairement d'un regain d'intérêt, tant pour la recherche que pour le marché (il y avait même des processeurs neuronaux dédiés), pour les méthodes sous-symboliques dans la seconde moitié des années 80 / début des années 90, après des décennies d'ostracisme (voir ma réponse, où je mentionne l'influence des critiques de Minsky & Papert sur les perceptrons: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70
1
L'IA symbolique a échoué, OMI, à cause du matériel de l'époque (pas assez puissant / assez bon marché) ET parce qu'un tel contraste entre les camps symbolique et sous-symbolique empêchait toute synergie. Wrt "même largement utilisé / aimé aujourd'hui": je soupçonne que certaines des techniques développées en IA (dans les deux camps) sont beaucoup plus utilisées qu'on ne peut le penser (pas plus hyped, heureusement).
MaD70
Juste un exemple: à la fin des années 90, certaines de mes connaissances m'ont interrogé sur la faisabilité d'un projet de contrôle qualité dans le domaine textile. Du haut de ma tête, j'ai mentionné les réseaux de neurones comme une approche prometteuse pour un tel problème de discrimination (essentiellement la classification d'images). Avec une telle suggestion, ils ont trouvé en quelques semaines un logiciel déjà développé, utilisant des réseaux de neurones, et ils ont acquis ses droits de distribution - beaucoup plus judicieux que de se lancer dans un projet impliquant la R&D.
MaD70 du
22

Une des raisons est qu'il vous permet d'étendre le langage avec des constructions spécifiques à votre domaine, ce qui en fait, effectivement, un langage spécifique à un domaine. Cette technique est incroyablement puissante car elle vous permet de raisonner sur le problème que vous résolvez, plutôt que sur le mélange de bits.

dsm
la source
Pouvez-vous donner un exemple de ceci ou en donner un lien?
DuckMaestro
9
@DuckMaestro: En environ 30 minutes de travail macro cette semaine, j'ai implémenté une version boguée ad hoc de SQL Select. Cela va comme ceci: (requête SELECT * FROM dataset WHERE expr).
Paul Nathan
Intégration d'un solveur d'algèbre dans Lisp youtube.com/... Intégration d'un langage de circuit dans Lisp youtube.com/... Embarquement de Lisp dans Lisp youtube.com/... Embarquer Prolog dans Lisp - Il suffit de regarder toute la série
aoeu256
youtube.com/watch?v=SLcZXbyGC3E <- Celui-ci est bon
aoeu256
12

Ma conjecture a toujours été que, étant un langage fonctionnel, il ne fait pas la différence entre le code et les données. Tout, y compris les définitions de fonction et les appels de fonction, peut être traité comme des listes et modifié comme n'importe quel autre élément de données.

Ainsi, un code auto-inspecté et modifiable peut être écrit facilement.

aib
la source
10
Ce n'est pas parce que c'est fonctionnel. Prolog a la même propriété - tout est un «terme» et les termes sont des données aussi bien que du code. (Prolog est un langage de programmation logique et également beaucoup utilisé pour l'IA)
Hugh Allen
Le terme sophistiqué pour cela s'appelle Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen
9

Une réponse possible est que l'IA est un ensemble de problèmes très difficiles, et Lisp est un bon langage pour résoudre des problèmes difficiles, pas seulement l'IA.

Quant à savoir pourquoi: les macros, les fonctions génériques et l'introspection riche permettent un code concis et une introduction facile des abstractions de domaine - c'est un langage que vous pouvez rendre plus puissant. Pour de nombreux problèmes, ce n'est pas nécessaire, et cela a ses propres coûts, mais pour d'autres problèmes, il faut de l'énergie pour progresser.

Riches
la source
7

Je pense qu'il est faux de penser à cela en termes d'IA uniquement. Des choses comme l'IA-hiver et les effets commerciaux sur le lisp commun sont dérangeantes si vous vous demandez pourquoi il a été utilisé pour l'IA, pas pourquoi il n'est pas souvent utilisé maintenant ...

Quoi qu'il en soit, je pense que c'est parce que la plupart du code de l'IA était essentiellement du code de recherche. Lisp est un excellent langage pour la programmation exploratoire, pour l'implémentation d'algorithmes difficiles, pour le code auto-modifiable et souvent modifié. En d'autres termes, pour le code de recherche.

J'utilise lisp aujourd'hui pour certains de mes codes de recherche (mathématiques, traitement du signal) car il est plus flexible et puissant que la plupart des langages tout en générant un code plus efficace que la plupart des langages. Je peux généralement obtenir des performances dans un facteur de +/- 2 de la vitesse par exemple c ++, mais je peux implémenter les choses beaucoup plus rapidement et gérer une complexité qui me prendrait beaucoup plus de temps que si j'utilisais c ++, java, c #.

Mais cela ne fait pas partie du sujet. Je pense que le code AI a été principalement écrit en lisp commun pendant un certain temps, car il s'agit d'une approche puissante pour la recherche de code. C'est toujours le cas; mais au fur et à mesure que les algorithmes de l'IA devenaient mieux compris et explorés, certaines d'entre elles étaient beaucoup plus faciles à enseigner et à utiliser, de sorte qu'ils se présentaient dans les langues de l'année dans les cours de premier cycle. À partir de là, il devient une question de ce que les gens savent déjà, quelles bibliothèques sont disponibles et ce qui fonctionne bien pour les grands groupes.

Simon
la source
6

Je suppose que l'une des principales raisons était la flexibilité des listes en tant que structure de données de base.

à l'époque, être capable de les transformer en toutes sortes d'objets composites, et de nouvelles choses comme passages de messages et polimorphisme, en a fait le langage de choix; pas spécifiquement pour l'IA, mais pour les tâches importantes et complexes. surtout lorsqu'ils expérimentaient des concepts.

Javier
la source
4

Je pense que vous avez raison: Lisp était un outil pratique pour pirater les choses. C'est parce qu'il ne distinguait pas beaucoup le programme et les données. Cela a permis aux pirates de manipuler des fonctions très facilement, tout comme les données.

Mais lisp est assez difficile à lire pour les humains, avec ses accolades et la non-distinction entre les données et le programme. Aujourd'hui, je n'utiliserai lisp pour aucun code d'IA de production (ou peut-être même pour le prototypage) mais préférerais de loin python pour les scripts.

Une autre chose à considérer est les bibliothèques / outils existants dans / liés à la langue. Je ne suis pas en mesure de comparer les bibliothèques lisp avec les bibliothèques python, mais je suppose que les bibliothèques et l'open source importent beaucoup plus qu'auparavant.

Cette réponse a été inspirée par la comparaison suivante entre lisp et python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

amit
la source
2
Personnellement, je trouve Lisp plus facile à lire que la plupart des langues, et je l'ai appris il y a seulement quelques semaines. Python est particulièrement propre par rapport à la plupart des langages, oui, mais si vous comparez lisp à quelque chose comme C ++, il est beaucoup plus propre et plus facile à lire. Dans mon expérience en tout cas.
Zeusoflightning125
4

Je me souviens avoir entendu que, étant un langage fonctionnel, Lisp était un très bon choix pour implémenter des algorithmes récursifs. Être capable de traquer un arbre et de revenir en arrière est essentiel lorsque l'on considère les processus de prise de décision (traversée) et le résultat final (nœud feuille).

Cela m'a été dit lors d'un cours d'IA à l'université où nous avons étudié Lisp.

mlambie
la source
1
Les macros en Lisp sont plus puissantes que toute autre chose, vous permettant d'implémenter la POO en seulement 50 lignes de code Lisp et le REPL vous permet d'éditer votre programme alors qu'il est toujours en cours d'exécution ... Seul Lisp peut éditer son propre code source facilement ...
aoeu256