Question

J’ai appris à Lisp à élargir mes horizons car j’ai entendu dire qu’il est utilisé dans la programmation en IA. Après quelques recherches, il me reste à trouver des exemples d’IA ou quelque chose dans le langage qui le rendrait plus enclin à le faire.

Lisp a-t-il déjà été utilisé parce qu'il était disponible ou y a-t-il quelque chose qui me manque?

Était-ce utile?

La solution

Lisp était utilisé dans l’intelligence artificielle jusqu’à la fin des années 1980. Dans les années 80, cependant, 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 s'effectue généralement en C ou C ++ (parfois en Java).

Si vous êtes curieux des années 70, 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 depuis très longtemps. Lisp réussit toujours à 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 longtemps.
  3. Lisp est très puissant. La distinction code / données est plus faible, donc il se sent plus extensible que d’autres langages car vos fonctions et vos macros ressemblent au matériel intégré.

Je ne dispose pas du vieux livre sur l'IA de Peter Norvig , mais il est censé être un bon moyen de 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.

Autres conseils

Lisp est utilisé pour l’intelligence artificielle car il prend en charge l’implémentation de logiciels qui calculent très bien les symboles. Les symboles, les expressions symboliques et l’informatique sont au cœur de Lisp.

Les domaines de l’intelligence artificielle pour l’informatique symbolique é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 connues dans ces domaines aient été écrites en Lisp:

  • Macsyma, premier système de calcul algébrique de grande taille.
  • 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 aurait à elle seule 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'annonceur d'American Express, qui vérifie les transactions par carte de crédit.

Il existe des milliers d’applications dans ces domaines écrites en Lisp. Le plus souvent, c’est qu’ils ont besoin de capacités spéciales dans le domaine du traitement symbolique. On implémente des langages spéciaux qui ont des interprètes / compilateurs spéciaux dans ces domaines en plus de 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 d'usage général sont également utilisés dans l'intelligence artificielle. J'ai essayé de vous expliquer pourquoi Lisp est notamment utilisé dans l'intelligence artificielle.)

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 au 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 remaniement des bits.

J'ai toujours pensé que, étant un langage fonctionnel, il ne faisait 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 toute autre donnée.

Le code auto-vérifiant et auto-modifiable pourrait donc être facilement écrit.

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 la résolution de problèmes difficiles, pas seulement l'IA.

Pourquoi cela est-il: les macros, les fonctions génériques et une introspection riche permettent un code concis et une introduction facile des abstractions de domaine & # 8212; c'est un langage que vous pouvez rendre plus puissant. Pour beaucoup de problèmes, c'est inutile et cela entraîne des coûts, mais pour d'autres problèmes, il faut de l'énergie pour progresser.

Je pense qu'il 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 sont gênantes si 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 AI était essentiellement du code de recherche. Lisp est un excellent langage pour la programmation exploratoire, pour la mise en œuvre d’algorithmes difficiles, pour le code auto-modifiant 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 langages tout en générant un code plus efficace que la plupart des langages. Je peux généralement obtenir des performances avec un facteur de +/- 2 de la vitesse dit de c ++, mais je peux implémenter 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 un sujet qui s’écarte du sujet. Je pense que le code de l'intelligence artificielle a été écrit en langage commun pendant un certain temps, car il s'agit d'une approche puissante du code de recherche. Il l'est toujours; Toutefois, à mesure que les algorithmes de l'IA devenaient mieux compris et explorés, ils étaient beaucoup plus faciles à enseigner et à utiliser, de sorte qu'ils apparaissaient 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.

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

à l’époque, étant capable de 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 des concepts.

Je pense que vous avez raison: Lisp était un outil pratique pour pirater des objets. 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 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 AI de production (ni même pour le prototypage), mais je préférerais de beaucoup utiliser 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 est inspirée de la comparaison suivante entre lisp et python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

Je me souviens avoir entendu dire que, étant un langage fonctionnel, Lisp était un très bon choix pour l'implémentation d'algorithmes récursifs. Il est essentiel de pouvoir retrouver 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é Lisp.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top