Existe-t-il des preuves que le lisp est réellement meilleur que les autres langues en intelligence artificielle? [fermé]

21

Il semble y avoir une croyance de longue date (principalement par les non-lispers) que le lisp est meilleur que la plupart des langues de l'IA.

D'où vient cette croyance? Et y a-t-il un fondement à cela?

Joe D
la source
4
Le titre demande: Lisp est-il meilleur que les autres langues de l'IA?. La question elle-même pose: Lisp est-il mauvais dans tout autre chose que l'IA?. Ce sont des questions très différentes (considérons le scénario 1: Lisp est la meilleure langue pour tout, et le scénario 2: Lisp est la pire langue pour tout). Vous souhaiterez peut-être modifier le titre ou le corps de la question pour clarifier la question que vous posez réellement.
Gareth McCaughan
9
Je suppose que si la réponse acceptée venait d'une machine Lisp, nous aurions la solution?
Martin Beckett
1
@Martin, bien que toute IA de base devrait être obligée de défendre son créateur ou être mise en doute de sa propre existence.
Nicole
Il s'agit d'un excellent aperçu honnête de Lisp for AI de Peter Norvig, écrit environ 10 ans après la publication de Paradigms of AI Programming. norvig.com/Lisp-retro.html
michiakig
1
@jwenting: Je pense que les points les plus importants de Norvig à propos de Java sont toujours vrais dix ans plus tard: Java n'a pas de méta-programmation et ne prend pas en charge la programmation fonctionnelle.
Kevin Cline du

Réponses:

22

L'une des principales différences entre les langages de type LISP et les autres langages est que dans les LISP, le code et les données sont la même chose. Cela permet de faire des choses comme avoir un programme à modifier certains de ses algorithmes pendant l'exécution car il "apprend" de nouvelles choses, en tant que partie native du langage.

Un autre aspect qui entre en jeu, mais pas autant, est la capacité de LISP à ajouter facilement de nouvelles sémantiques de langage via des macros. Cela permet en fait d'entrer et de définir une DSL avec laquelle votre IA fonctionne et peut évoluer, avec le potentiel pour que ce langage se développe, s'auto-corrige et évolue pendant que l'IA fonctionne.

En accord avec Quadrescence, l'historique d'utilisation des LISP va beaucoup dans le sens d'une image des LISPs qui est bonne pour l'IA. Pourquoi LISP est-il utilisé pour l'IA couvre l'histoire de manière beaucoup plus détaillée.

deterb
la source
3
Cette propriété est appelée Homoiconicity BTW.
MSalters
5

Certains des tout premiers programmes de lisp étaient des prouveurs de théorèmes, des mathématiques symboliques, le classique ELIZA, etc. ce lisp est bon pour l'IA.

La DARPA a également financé des universités pour la recherche en IA et acheté des quantités importantes de matériel à Symbolics. La pénurie de fonds a finalement conduit à ce que l'on a appelé "l'hiver de l'IA".

Enfin, les langages originaux comme Fortran (ou «langages» comme ASM) ont été utilisés principalement pour le calcul numérique. Vous avez travaillé avec des nombres et des tableaux d'entre eux. De nos jours, nous avons des symboles, ou la possibilité de créer presque n'importe quel objet que nous aimerions, dans la plupart des langues modernes.

Donc, la raison pour laquelle le lisp était meilleur pour l'IA à un moment donné n'est plus le cas. Cependant, l'idée que "le lisp est bon pour l'IA" est toujours présente.

Que lisp soit ou non un meilleur langage en raison de ses caractéristiques et de sa structure est un tout autre cas (car vraiment ce genre de chose s'applique à de nombreux autres domaines que l'IA, et conduira généralement à une guerre de flamme).

Quadrescence
la source
5
Une meilleure façon de le dire pourrait être que ceux qui sont bons en IA utilisaient justement Lisp pour cela.
1
Et ce n'est pas par hasard quand les pionniers ont commencé. Quelles autres langues pouvaient-ils choisir dans les années 50?
Bo Persson
2
@Persson: Je dirais que c'est un peu par hasard. Si PASCAL était la prochaine langue à être faite après FORTRAN, je doute que l'IA aurait décollé avec ça. LISP n'était pas seulement un "meilleur candidat" que FORTRAN, il s'est également avéré (peut-être par hasard!) Être un assez bon candidat.
Quadrescence
Vous expliquez une raison pour laquelle Lisp avait un avantage (financement), mais avez conclu que " la raison pour laquelle le lisp était meilleur pour l'IA à un moment donné n'est plus le cas".
Mark C
J'ai perdu le commentaire suivant sur lequel je travaillais, mais j'espère être de retour et terminer plus tard.
Mark C
3

Examinons quelques-uns des programmes d'IA actuels: (1) Robots, par exemple voitures autonomes. Dans le grand défi DARPA, le logiciel de conduite automobile supérieur n'était pas Lisp. Il s'agissait plutôt d'un langage procédural tel que C ++ ou Java. (2) Traduction automatique du langage naturel. Lisp n'est pas utilisé à cette fin par les systèmes de production largement utilisés. (3) Jeu, p.ex. programmes d'échecs. Lisp n'est pas utilisé à cette fin par des programmes d'échecs supérieurs largement utilisés tels que Fritz.

Lisp a été inventé et développé par les laboratoires américains d'IA dans les années 1960 afin de prototyper rapidement des programmes de logique symbolique dans lesquels les structures de données Lisp natives correspondent au niveau d'abstraction symbolique requis - par exemple, les mots anglais pourraient être des symboles dans une liste, les formules logiques pourraient être facilement représentés comme des listes d'opérateurs et d'opérandes.

Mais pour les programmes de production, les avantages de l'ingénierie logicielle des langages typés statiques et d'une grande variété de bibliothèques tierces, signifie que Lisp n'est même pas pris en compte pour les grands systèmes modernes qui effectuent des tâches d'IA.


la source
2
Vous devez prendre en compte lors de la discussion des produits commerciaux (et je considère que les candidats au défi DARPA le sont, car ils ont été créés en raison de contraintes de temps et de budget) que LISP n'est pas une langue couramment connue et que les programmeurs LISP compétents sont donc difficiles à trouver et probablement cher (et / ou excentriques, pas de bons membres pour l'équipe moyenne). Ainsi, il est économiquement judicieux d'utiliser autre chose même si LISP pourrait être "meilleur" (ne pas le dire nécessairement, c'est juste que les données que vous présentez ne sont pas concluantes pour affirmer que ce n'est pas le cas).
jwenting
3
Il n'y a pas beaucoup d '«intelligence» dans ces programmes. C'est beaucoup de traitement du signal, etc. Les programmes d'échecs n'utilisent pas non plus l'IA. C'est principalement de la force brute, une recherche hautement optimisée + quelques autres trucs.
Rainer Joswig
"LISP n'est pas un atm de langue communément connu et donc les programmeurs LISP compétents sont difficiles à trouver et probablement coûteux": je viens de commencer à apprendre Common Lisp et cela ne semble pas difficile du tout. OK, pour devenir un gourou de Lisp, cela peut prendre du temps, mais je ne pense pas qu'il serait difficile de trouver des programmeurs désireux d'apprendre Lisp si on leur donne la possibilité de travailler sur des projets concrets.
Giorgio
3

@Stephen Reed l'a très bien dit. Je peux seulement ajouter que j'étais au MIT AI Lab dans les années 70. J'ai alors entendu une histoire sur l'origine de Lisp. Je ne peux pas jurer que c'est vrai, mais ça se passe comme ceci:

John McCarthy était au MIT dans les années 50, et il avait travaillé sur la démonstration des propriétés des programmes, et pour cela, il avait utilisé une syntaxe simple similaire à Lambda Calculus.

L'histoire était que l'un des étudiants diplômés voulait faire un projet (analogie, ou démonstration de théorème, ou mathématiques symboliques, je ne me souviens pas lequel) et a demandé à McCarthy quelle langue utiliser. La réponse - Fortran bien sûr. (Il n'y avait pas grand-chose d'autre, et le traitement de liste lui-même était assez bien connu à l'époque, mais uniquement en tant que packages de sous-programmes, pas en tant que langues.) Eh bien, cela a conduit à un programme qui traiterait les symboles dans les structures de liste imbriquées. Avec un moyen de les lire et de les imprimer, puis une evalfonction, et Voila '- une langue. Un langage de traitement LISt. Il a décollé de là.

Pour le type d'algorithmes que nous utilisions à cette époque (et que très peu de gens font encore), il fallait un langage capable de manipuler facilement les expressions symboliques. C'est ce que Lisp était bon. Il y a eu de nombreuses variantes du concept de base, sous différents noms, comme Prolog, Scheme, etc. etc.

L'IA signifie donc beaucoup de choses pour beaucoup de gens, et différentes langues sont bonnes pour différentes choses, mais pour les problèmes qui pourraient être décrits comme une manipulation de symboles, il est difficile de trouver une langue utile qui ne soit pas en quelque sorte issue de Lisp.

Mike Dunlavey
la source
@ Thorbjørn: Merci pour ce lien. Même si j'ai beaucoup utilisé Lisp pendant plusieurs années, je n'ai jamais accordé beaucoup d'attention à sa genèse.
Mike Dunlavey
Même si Prolog est bon en calcul symbolique, je ne dirais pas qu'il est étroitement lié à Lisp: Lisp est basé sur le calcul lambda, Prolog sur une logique de premier ordre (deux modèles différents de calcul).
Giorgio
@Giorgio: Les ancêtres et les cousins ​​de Prolog sont principalement écrits dans quoi? Zézayer. Programme de déduction de Fischer Black, Micro-Planner, etc. Pour moi, un bon livre à ce sujet est Deductive Foundations of Computer Programming .
Mike Dunlavey
"Les ancêtres et les cousins ​​de Prolog sont pour la plupart écrits dans quoi?": Ah OK, vous vouliez dire étroitement liés dans le sens où l'un était utilisé pour mettre en œuvre l'autre, pas qu'ils suivent un paradigme similaire.
Giorgio
1

Lisp présente des avantages pour les types de choses que l'on appelait l'IA - au moins les choses liées à la logique, à la recherche et à l'analyse qui étaient la plupart de l'IA jusque vers les années 90.

Un avantage majeur de Lisp est son support pour les macros - code comme données, métaprogrammation.

Le ML standard (SML) est un autre langage largement utilisé en IA, par exemple, depuis les années 80. Objective CAML et F # sont des évolutions de SML.

Un avantage majeur de la famille ML (et Haskell, etc.) est la correspondance de motifs. Ceci est probablement également disponible en Lisp, mais via une bibliothèque de métaprogrammation plutôt que intégré dans le langage. Il est également disponible dans Haskell, mais pour le moment du moins, la correspondance de modèles n'est pas courante en dehors des langages de programmation fonctionnels.

J'ai vu des affirmations selon lesquelles LISP est essentiellement un calcul lambda étendu non typé, et ML est fondamentalement un calcul lambda typé étendu. Je n'ai pas la connaissance du calcul lambda typé pour dire avec certitude.

L'IA est également devenue un sujet beaucoup plus large au fil des ans - au point qu'elle a presque complètement disparu. L'exploration de données pourrait être considérée comme un sous-domaine de l'IA. De nombreuses choses sur l'IA (OCR, reconnaissance de discours) ont presque cessé d'être de l'IA - ce ne sont que des applications, comme les autres. Et l'IA est beaucoup plus dépendante du traitement du signal et d'autres types de calcul des nombres qu'elle ne l'était autrefois.

Pour l'OCR et la reconnaissance de la parole, l'IA a toujours été dépendante du traitement du signal et du calcul des nombres. Oui, il y a des contradictions là-dedans ;-) Je ne peux pas donner le poids des choses car je ne sais pas vraiment.

Quoi qu'il en soit, en conséquence, il n'y a probablement pas un seul langage approprié pour même l'ensemble d'une application d'IA moderne - je suppose (pas de connaissance de première main) qu'il y a beaucoup de développement multilingue dans l'IA moderne. Et je peux presque garantir que vous trouverez du C et du C ++ dans certains projets, pour obtenir les performances de calcul des nombres. Je ne serais pas surpris s'il y a beaucoup de Python pour des raisons similaires - avec une bonne bibliothèque numérique, Python peut facilement gérer les tâches de calcul des nombres.

Dans l'une de ces voitures autonomes, j'imagine que le système de vision est écrit dans une langue différente (et fonctionne sur un matériel différent) du système de planification d'itinéraire.

Steve314
la source