web-dev-qa-db-fra.com

Lisp et Prolog pour l'intelligence artificielle?

Depuis que j'ai suivi un cours il y a 3 ans en A.I. Im clairement assez compétent pour poser cette question ...... je plaisante je plaisante;)

mais sérieusement, qu'en est-il de ces langues qui les rendent si populaires pour A.I. recherche. Même si A.I. la recherche est "ancienne" ... c'est probablement le chemin le plus long des 5 à 10 dernières années, semble-t-il ... Est-ce parce que les langues ont été quelque peu "conçues" autour du concept de l'IA. , ou simplement que nous n'avons rien de mieux à utiliser en ce moment?

Je pose cette question parce que je l'ai toujours trouvée assez intéressante, et je suis juste un peu curieuse. Si je me trompe complètement et qu'ils utilisent des langues différentes, j'aimerais savoir ce qu'ils utilisent. Je veux dire que je peux comprendre le prologue, en particulier avec la logique sensible/propositionnelle et la logique floue. mais je ne comprends pas "pourquoi" nous utiliserions LISP ... et même quoi d'autre A.I. les chercheurs utiliseraient pour faire de l'apprentissage automatique, etc.

Tout article/livre sur le sujet est également utile :)

34
user475353

Je ne peux pas vraiment parler à Prolog, mais voici pourquoi LISP:

  • LISP est une langue homoiconique , ce qui signifie que le code est exprimé sous la même forme ( expressions s ) que les structures de données dans la langue. c'est-à-dire que "le code est des données". Cela présente de grands avantages si vous écrivez du code qui modifie/manipule un autre code, par exemple algorithmes génétiques ou manipulation symbolique.

  • Le système de macro de LISP le rend bien adapté pour définir des DSL spécifiques au problème. La plupart des développeurs LISP "étendent le langage" pour faire ce dont ils ont besoin. Encore une fois, le fait que LISP soit homoiconique aide énormément ici.

  • Il existe un lien historique, en ce sens que LISP est devenu populaire à peu près au même moment que la plupart des premières recherches sur l'IA. Quelques faits intéressants dans ce fil .

  • LISP fonctionne plutôt bien comme langage de programmation fonctionnel. C'est un domaine assez bon pour l'IA (où vous essayez souvent de faire apprendre à la machine comment produire la sortie correcte pour une entrée donnée).

  • Point de vue subjectif: LISP semble plaire aux personnes ayant un état d'esprit mathématique, ce qui se trouve être exactement ce dont vous avez besoin pour beaucoup d'IA moderne ..... cela est possible en raison du fait que LISP est assez étroitement lié à la lambda non typée calcul

Je fais un travail d'IA/machine learning en ce moment, et j'ai choisi Clojure (un LISP moderne sur la JVM) à peu près pour les raisons ci-dessus.

30
mikera

La question a déjà été répondue pour LISP, donc je vais juste commenter Prolog.

Prolog a été conçu pour deux choses: le traitement du langage naturel et le raisonnement logique. Dans le paradigme GOFAI du début des années 1970, lorsque Prolog a été inventé, cela signifiait:

  1. construire des grammaires symboliques pour le langage naturel qui seraient utilisées pour construire des représentations logiques de phrases/énoncés;
  2. utiliser ces représentations et axiomes logiques (pas nécessairement ceux de la logique classique) pour déduire de nouveaux faits;
  3. utiliser des grammaires similaires pour traduire la représentation logique dans le langage.

Prolog est très bon dans ce domaine et est utilisé dans le ISS pour exactement une telle tâche. L'approche a cependant été discréditée, car

  1. "fuite de toutes les grammaires" : aucune grammaire ne peut intercepter toutes les règles et exceptions dans une langue;
  2. plus la grammaire est détaillée, plus la complexité (à la fois grand O et pratique) de l'analyse syntaxique est élevée;
  3. le raisonnement logique est à la fois inadéquat et inutile pour de nombreuses tâches pratiques;
  4. les approches statistiques de la PNL, c'est-à-dire le "comptage de mots", se sont révélées beaucoup plus robustes. Avec l'essor d'Internet, des ensembles de données adéquats sont disponibles pour obtenir les statistiques dont les développeurs NLP ont besoin. Dans le même temps, les coûts de mémoire et de disque ont diminué tandis que la puissance de traitement est encore relativement chère.

Ce n'est que récemment que les chercheurs en PNL ont développé des approches symboliques et statistiques combinées quelque peu pratiques, tilisant parfois Prolog . Le reste du monde utilise Java, C++ ou Python, pour lequel vous pouvez trouver plus facilement des bibliothèques, des outils et des programmeurs non-docteurs. Le fait que les E/S et l'arithmétique soient peu maniables dans Prolog n'aide pas à son acceptation.

Prolog est désormais principalement confiné aux applications spécifiques au domaine impliquant la PNL et le raisonnement par contraintes, où il semble plutôt bien fonctionner. Pourtant, peu de sociétés de logiciels feront de la publicité avec "construit sur la technologie Prolog", car le langage a reçu une mauvaise réputation pour ne pas avoir tenu la promesse de "rendre l'IA facile".

(Je voudrais ajouter que je suis un grand fan de Prolog, mais même je ne l'utilise que pour le prototypage.)

31
Fred Foo

LISP avait un avantage lorsque nous pensions que l'IA était une manipulation de symboles et des choses comme les ontologies. Prolog avait un avantage lorsque nous pensions l'IA comme logique, et l'unification était l'opération délicate. Mais aucun de ceux-ci ne fournit aucun avantage à aucun des prétendants actuels à "AI": l'IA statistique concerne les tableaux clairsemés. Les réseaux de neurones de toutes sortes, y compris l'apprentissage en profondeur, concernent les océans de nœuds connectés avec des liens. Les méthodes sans modèle (de nombreux types d'apprentissage automatique, méthodes évolutives, etc.) sont également très simples. La complexité est émergente, vous n'avez donc pas à vous en préoccuper. Écrivez une base simple qui peut apprendre ce dont elle a besoin pour apprendre. Dans l'un ou l'autre de ces cas, n'importe quel langage à usage général fera l'affaire. On peut même avancer que la plupart des approches du réseau neuronal sont si simples que C++ serait excessif.

Utilisez le langage qui vous permet d'embaucher le plus facilement les meilleurs programmeurs pour la tâche.

15
Monica Anderson

Il y a eu quelques bonnes réponses et informatives ici, mais le point de LISP et Prolog a été soit manqué, marginalisé ou pas suffisamment souligné.

LISP puis Prolog ont émergé à une époque où la principale recherche sur l'IA tournait autour du traitement symbolique. Un exemple simple de traitement symbolique est la façon dont nous, les humains, faisons à la main l'algèbre, le calcul ou les intégrales. Nous manipulons symboliquement les variables et les constantes pour dériver des relations équivalentes. LISP et Prolog ont été conçus à cet effet.

La manipulation symbolique n'est pas trivialement implémentée en C++ ou Java car ils n'ont pas été conçus dans ce but. Cependant C++, Java ou des langages similaires peuvent être des mots à la mode) dans l'IA de nos jours parce qu'il existe maintenant plusieurs variantes de la recherche sur l'IA qui ne traitent pas du traitement symbolique.

Une forme d'IA concerne l'utilisation de méthodes statistiques comme base de connaissances, ce qui nécessite l'utilisation de langages beaucoup plus légers pour réduire le temps de calcul. De nombreux soi-disant systèmes d'IA ne sont rien d'autre que des systèmes spécialisés pour servir un créneau particulier. Bien sûr, ces systèmes peuvent être mieux programmés dans un langage non LISP/Prolog, et reposent moins sur le "raisonnement" ou l'acquisition de connaissances de bon sens et plus sur le traitement des données à partir des entrées.

Même Watson (qui est programmé en Java, C++ et un peu Prolog) est sans doute un système hautement spécialisé. Il semble que Watson ait été conçu pour acquérir une grande quantité de faits grâce auxquels il trie ensuite ces faits à l'aide d'algorithmes de recherche sophistiqués (je ne suis pas sûr cependant et IBM m'en voudrait probablement de le dire). Les futures implémentations de l'IA combineront probablement les paradigmes de l'IA et implémenteront différents langages pour chaque partie spécialisée. Même LISP et Prolog pourraient un jour faire leur retour.

11
user922475

C'est peut-être une bonne idée de rappeler les motivations de Prolog: Logic pour la résolution de problèmes et de comprendre le raisonnement, humain ou machine. Il s'agit d'un projet en cours et même si Prolog est l'un de ses meilleurs résultats, ce n'est pas son final. Nous continuons à chercher de meilleures langues pour représenter les connaissances. Consultez le dernier livre de Bob Kowalski: comment être artificiellement intelligent.

6
Jacinto Davila

mais je ne comprends pas "pourquoi" nous utiliserions LISP ... et même quoi d'autre A.I. les chercheurs utiliseraient pour faire de l'apprentissage automatique, etc.

Yann LeCun a développé Lush aka LISP Universal Shell. Il est également devenu récemment directeur de la recherche sur l'IA dans un réseau de médias sociaux.

Tout article/livre sur le sujet est également utile :)

Je suppose que vous le savez déjà Intelligence artificielle: une approche moderne C'est le livre d'introduction le plus lu pour l'IA dans les universités.

1
user3257363