web-dev-qa-db-fra.com

Pourquoi le LISP est-il utilisé pour l'IA?

J'ai appris à utiliser LISP pour élargir mes horizons, car j'ai entendu dire qu'il était utilisé dans la programmation en intelligence artificielle. Après avoir fait quelques recherches, je n’ai pas encore trouvé d’exemples d’IA ni d’autres éléments du langage qui le rendraient plus enclin à le faire.

Le LISP était-il utilisé par le passé parce qu'il était disponible ou y a-t-il quelque chose qui me manque?

182
Cristián Romo

Le LISP était utilisé dans l'IA jusqu'à la fin des années 1980. Cependant, dans les années 80, Common LISP était survendu dans le monde des affaires en tant que "langage de l'IA"; la réaction a forcé la plupart des programmeurs d'intelligence artificielle à utiliser C++ pendant quelques années. De nos jours, les prototypes sont généralement écrits dans un langage dynamique plus récent (Perl, Python, Ruby, etc.) et la mise en œuvre de recherches réussies est généralement en C ou C++ (parfois en Java).

Si vous êtes curieux à propos des années 70 ... eh bien, je n'étais pas là. Mais je pense que le LISP a été un succès 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 efficace 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. Vieille IA était aussi symbolique. C'était également unique à cet égard pendant une longue période.
  3. LISP est très puissant. La distinction code/données étant plus faible, il a le sentiment plus extensible que d’autres langages car vos fonctions et vos macros ressemblent au matériel intégré.

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

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

121

LISP est utilisé pour l'intelligence artificielle car il prend en charge la mise en œuvre d'un logiciel qui calcule très bien avec les symboles. Les symboles, les expressions symboliques et l'informatique avec ceux-ci sont au cœur du LISP.

Les domaines d’intelligence artificielle typiques de l’informatique par symboles étaient/sont: calcul formel, démonstration de théorèmes, systèmes de planification, diagnostic, systèmes de réécriture, représentation et raisonnement des connaissances, langages logiques, traduction automatique, systèmes experts, etc.

Il n’est donc pas surprenant que de nombreuses applications d’IA renommées dans ces domaines aient été écrites en LISP:

  • Macsyma en tant que premier grand système de calcul algébrique.
  • ACL2 en tant que prouveur de théorèmes largement utilisé, utilisé par exemple par AMD.
  • Dart en tant que planificateur logistique utilisé par l'armée américaine lors de la première guerre du Golfe. Cette application LISP à elle seule aurait remboursé tous les investissements américains dans la recherche sur l'IA à ce moment-là.
  • SPIKE, l'application de planification et de planification 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 sens commun humain.
  • METAL, l’un des premiers systèmes de traduction en langage naturel utilisés commercialement.
  • Assistant de l’autorisateur d’American Express, qui contrôle les transactions par carte de crédit.

Des milliers d'applications dans ces domaines sont écrites dans LISP. Le plus souvent, c’est qu’ils ont besoin de capacités spéciales dans le domaine du traitement symbolique. L'un implémente des langages spéciaux dotés d'interprètes/compilateurs spéciaux dans ces domaines, en plus du LISP. LISP permet de créer des représentations pour des données et des programmes symboliques et peut implémenter toutes sortes de machines pour manipuler ces expressions (formules mathématiques, formules logiques, plans, ...).

(Notez que de nombreux autres langages de programmation à usage général sont également utilisés dans l'IA. J'ai essayé de vous expliquer pourquoi LISP est surtout utilisé dans l'IA.)

60
Rainer Joswig

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

22
dsm

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

Ainsi, le code auto-vérifiant et auto-modifiable pourrait être écrit facilement.

12
aib

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

Les macros, les fonctions génériques et la riche introspection permettent un code concis et une introduction facile des abstractions de domaine. C'est un langage que vous pouvez rendre plus puissant. Pour beaucoup de problèmes, c'est inutile et cela a ses propres coûts, mais pour d'autres problèmes, il faut de l'énergie pour progresser.

8
Rich

Je pense que c'est faux de penser à cela uniquement en termes d'IA. Des choses comme l'IA en hiver et les effets commerciaux sur le LISP commun gênent si vous demandez pourquoi il était 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 d'intelligence artificielle était essentiellement un code de recherche. LISP est un excellent langage pour la programmation exploratoire, pour la mise en œuvre d'algorithmes difficiles, pour le code auto-modificateur et souvent modifié. En d'autres termes, pour le code de recherche.

J'utilise aujourd'hui LISP pour certains de mes codes de recherche (mathématiques, traitement du signal), car il est plus flexible et puissant que la plupart des langues, tout en générant un code plus efficace que la plupart des langues. Je peux généralement obtenir des performances avec un facteur de +/- 2 de la vitesse dit de c ++, mais je peux mettre en œuvre des choses beaucoup plus rapidement et gérer une complexité qui me prendrait beaucoup plus de temps que si j’utilisais c ++, Java, c #.

C'est errer hors sujet cependant. Je pense que le code AI a été écrit principalement en LISP pendant un certain temps parce que c'est une approche puissante du code de recherche. Il l'est toujours; mais à mesure que les algorithmes de l'IA devenaient mieux compris et explorés, certaines parties étaient beaucoup plus faciles à enseigner et à utiliser; ils apparaissaient donc dans les langues de l'année dans les cours de premier cycle. À partir de là, le problème est de savoir ce que les gens savent déjà, quelles bibliothèques sont disponibles et ce qui fonctionne bien pour les grands groupes.

7
simon

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

à l'époque, le fait de pouvoir les transformer en toutes sortes d'objets composites et de nouvelles choses telles que le passage de messages et le polimorphisme en faisaient le langage de choix; pas spécifiquement pour l'IA, mais pour de grandes tâches complexes. surtout quand ils expérimentaient avec des concepts.

6
Javier

Je me souviens avoir entendu dire qu'en tant que langage fonctionnel, LISP était un très bon choix pour l'implémentation d'algorithmes récursifs. Il est essentiel de pouvoir repérer un arbre et de revenir en arrière si l’on prend en compte les processus de prise de décision (parcours) et le résultat final (noeud feuille).

Cela m’a été rapporté lors d’un cours d’IA à l’université où nous avons étudié le LISP.

4
mlambie

Je pense que vous avez raison: LISP était un outil pratique pour pirater les choses. Cela est dû au fait qu’il n’a pas fait beaucoup de distinction entre programme et données. Cela permettait aux pirates de manipuler des fonctions très facilement, tout comme des données.

Mais le LISP est assez difficile à lire pour les humains, avec ses accolades et sa non-distinction entre données et programme. Aujourd'hui, je n'utiliserai pas LISP pour aucun code d'intelligence artificielle de production (ni même pour le prototypage), mais je préférerais de beaucoup python pour les scripts.

Une autre chose à considérer est les bibliothèques/outils existants dans/liés au langage. Je ne suis pas en mesure de comparer les bibliothèques LISP avec les bibliothèques python), mais j'imagine que les bibliothèques et l'open source importent beaucoup plus qu'avant.

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

4
amit

Une réponse plus cynique pourrait être "parce qu’il a perdu une guerre politique entre le Japon et les États-Unis dans l'IA dans les années 1980". Il y a un amusement billet de blog qui spécule sur l'impact de la disparition du système informatique de cinquième génération sur Prolog .

3
Anon