it-swarm.com.de

Warum wird LISP für AI verwendet?

Ich habe LISP gelernt, um meinen Horizont zu erweitern, weil ich gehört habe, dass es in der KI-Programmierung verwendet wird. Nach einigen Recherchen habe ich noch keine AI-Beispiele oder etwas in der Sprache gefunden, das die Neigung zu AI erhöht.

Wurde LISP in der Vergangenheit verwendet, weil es verfügbar war, oder fehlt mir etwas?

182
Cristián Romo

LISP wurde bis Ende der 1980er Jahre in der KI verwendet. In den 80er Jahren wurde Common LISP jedoch als "KI-Sprache" in der Geschäftswelt überverkauft. die Gegenreaktion zwang die meisten KI-Programmierer für einige Jahre zu C++. Heutzutage werden Prototypen in der Regel in einer jüngeren dynamischen Sprache (Perl, Python, Ruby usw.) geschrieben und erfolgreiche Forschungsprojekte werden in der Regel in C oder C++ (manchmal Java) implementiert.

Wenn Sie neugierig auf die 70er Jahre sind ... nun, ich war nicht da. Ich denke jedoch, dass LISP in der KI-Forschung aus drei Gründen erfolgreich war (in der Reihenfolge der Wichtigkeit):

  1. LISP ist ein hervorragendes Werkzeug für das Prototyping. Es war das Beste für eine sehr lange Zeit. LISP ist immer noch gut darin, ein Problem anzugehen, dessen Lösung Sie noch nicht wissen. Diese Beschreibung kennzeichnet AI perfekt.
  2. LISP unterstützt auch die symbolische Programmierung. Die alte KI war auch symbolisch. Auch diesbezüglich war es lange Zeit einzigartig.
  3. LISP ist sehr mächtig. Die Code-/Datenunterscheidung ist schwächer, so dass sie fühlt sich an erweiterbarer ist als andere Sprachen, da Ihre Funktionen und Makros wie das eingebaute Zeug aussehen.

Ich habe nicht Peter Norvigs altes AI-Buch , aber es soll eine gute Möglichkeit sein, das Programmieren von AI-Algorithmen in LISP zu erlernen.

Haftungsausschluss: Ich bin ein Student in Computerlinguistik. Ich kenne das Teilgebiet der Verarbeitung natürlicher Sprache viel besser als die anderen. Vielleicht wird LISP eher in anderen Unterfeldern verwendet.

121

LISP wird für AI verwendet, da es die Implementierung von Software unterstützt, die sehr gut mit Symbolen rechnet. Symbole, symbolische Ausdrücke und der Umgang mit ihnen bilden den Kern von LISP.

Typische KI-Bereiche für das Rechnen mit Symbolen waren/sind: Computeralgebra, Theorembeweis, Planungssysteme, Diagnose, Umschreibungssysteme, Wissensrepräsentation und Argumentation, Logiksprachen, maschinelle Übersetzung, Expertensysteme und mehr.

Es ist dann nicht verwunderlich, dass viele berühmte KI-Anwendungen in diesen Domänen in LISP geschrieben wurden:

  • Macsyma als erstes großes Computeralgebrasystem.
  • ACL2 als weit verbreiteter Theorembeweiser, zum Beispiel von AMD.
  • Dart als Logistikplaner im ersten Golfkrieg vom US-Militär eingesetzt. Allein diese LISP-Anwendung soll sich für alle damaligen US-amerikanischen Investitionen in die KI-Forschung ausgezahlt haben.
  • SPIKE, die Planungs- und Planungsanwendung für das Hubble-Weltraumteleskop. Wird auch von mehreren anderen großen Teleskopen verwendet.
  • CYC, eines der größten geschriebenen Softwaresysteme. Repräsentation und Argumentation im Bereich des menschlichen gesunden Menschenverstands.
  • METAL, eines der ersten kommerziell genutzten natürlichen Übersetzungssysteme.
  • American Express 'Authorizer's Assistant, der Kreditkartentransaktionen überprüft.

In diesen Bereichen gibt es Tausende von Anwendungen, die in LISP geschrieben sind. Sehr häufig ist dabei, dass sie spezielle Fähigkeiten im Bereich der symbolischen Verarbeitung benötigen. Man implementiert spezielle Sprachen, die spezielle Interpreter/Compiler in diesen Domänen haben, zusätzlich zu LISP. Mit LISP kann man Darstellungen für symbolische Daten und Programme erstellen und alle Arten von Maschinen implementieren, um diese Ausdrücke zu manipulieren (mathematische Formeln, logische Formeln, Pläne, ...).

(Beachten Sie, dass viele andere Allzweck-Programmiersprachen auch in AI verwendet werden. Ich habe versucht zu beantworten, warum besonders LISP in AI verwendet wird.)

60
Rainer Joswig

Ein Grund dafür ist, dass Sie die Sprache mit Konstrukten erweitern können, die für Ihre Domain spezifisch sind, sodass sie effektiv eine domänenspezifische Sprache ist. Diese Technik ist unglaublich leistungsfähig, da Sie damit über das Thema nachdenken können problem Sie lösen, anstatt Bits zu mischen.

22
dsm

Meine Vermutung war schon immer, dass eine funktionale Sprache nicht zwischen Code und Daten unterscheidet. Alles, einschließlich Funktionsdefinitionen und Funktionsaufrufe, kann wie Listen behandelt und wie jedes andere Datenelement geändert werden.

Selbstüberprüfender, selbstmodifizierender Code kann also leicht geschrieben werden.

12
aib

Eine mögliche Antwort ist, dass KI eine Sammlung sehr schwerer Probleme ist und LISP eine gute Sprache zur Lösung schwerer Probleme ist, nicht nur KI.

Warum das so ist: Makros, generische Funktionen und umfassende Introspektion ermöglichen einen präzisen Code und die einfache Einführung von Domänenabstraktionen - eine Sprache, die Sie noch leistungsfähiger machen können. Bei vielen Problemen ist das unnötig und hat seine eigenen Kosten. Bei anderen Problemen wird jedoch Energie benötigt, um Fortschritte zu erzielen.

8
Rich

Ich denke, es ist falsch, nur in Bezug auf die KI darüber nachzudenken. Dinge wie der KI-Winter und kommerzielle Effekte auf das allgemeine LISP lenken ab, wenn man fragt, warum es für die KI verwendet wurde, nicht, warum es jetzt nicht oft verwendet wird ...

Wie auch immer, ich denke, es liegt daran, dass der größte Teil des KI-Codes im Wesentlichen Forschungscode war. LISP ist eine großartige Sprache für die Erkundungsprogrammierung, für die Implementierung schwieriger Algorithmen, für selbstmodifizierenden und häufig modifizierten Code. Mit anderen Worten, für Forschungscode.

Ich verwende LISP heute für einen Teil meines Forschungscodes (Mathematik, Signalverarbeitung), da es flexibler und leistungsfähiger als die meisten Sprachen ist und dennoch effizienteren Code als die meisten Sprachen generiert. Normalerweise kann ich die Leistung auf einen Faktor von +/- 2 der C++ - Geschwindigkeit bringen, aber ich kann die Dinge viel schneller implementieren und mich mit Komplexität befassen, die viel mehr Zeit in Anspruch nehmen würde, als wenn ich C++, Java, C # verwenden würde.

Das ist allerdings ein Irrweg. Ich denke, AI-Code wurde eine Zeit lang hauptsächlich in LISP geschrieben, weil es ein leistungsfähiger Ansatz für die Codeforschung ist. Es ist immer noch; Als die AI-Algorithmen besser verstanden und erforscht wurden, waren einige von ihnen viel einfacher zu unterrichten und zu verwenden, sodass sie in den Sprachen des Jahres in den Grundkursen zum Vorschein kamen. Von da an wird es eine Frage dessen, was die Leute bereits wissen, welche Bibliotheken verfügbar sind und was für große Gruppen gut funktioniert.

7
simon

Ich würde vermuten, dass ein großer Grund die Flexibilität von Listen als grundlegende Datenstruktur war.

zu dieser Zeit war es die Sprache der Wahl, in der Lage zu sein, sie in alle Arten von zusammengesetzten Objekten und neue Dinge wie Nachrichtenübergaben und Polimorphismus zu verwandeln. Nicht speziell für KI, sondern für große, komplexe Aufgaben. vor allem, wenn sie mit Konzepten experimentierten.

6
Javier

Ich erinnere mich, dass LISP als funktionale Sprache eine sehr gute Wahl für die Implementierung rekursiver Algorithmen war. Die Fähigkeit, einen Baum ausfindig zu machen und sich auf den Weg zurück zu machen, ist bei der Betrachtung der Entscheidungsprozesse (Durchquerung) und des Endergebnisses (Blattknoten) von entscheidender Bedeutung.

Dies wurde mir während eines AI-Kurses an der Universität erzählt, an der wir LISP studierten.

4
mlambie

Ich denke, Sie haben Recht: LISP war ein nützliches Werkzeug, um Dinge zu hacken. Dies liegt daran, dass nicht viel zwischen Programm und Daten unterschieden wurde. Dies ermöglichte es Hackern, Funktionen wie Daten sehr einfach zu manipulieren.

Aber LISP ist für Menschen mit seinen geschweiften Klammern und der Nichtunterscheidung zwischen Daten und Programmen ziemlich schwer zu lesen. Heutzutage verwende ich LISP nicht für Produktions-AI-Code (oder vielleicht sogar für Prototyping), sondern würde python für Skripterstellung viel bevorzugen.

Eine weitere zu berücksichtigende Sache sind die vorhandenen Bibliotheken/Tools in/in Bezug auf die Sprache. Ich bin nicht in der Lage, LISP-Bibliotheken mit python libraries zu vergleichen, aber ich vermute, dass Bibliotheken und Open Source viel wichtiger sind als zuvor.

Diese Antwort wurde durch den folgenden Vergleich zwischen LISP und Python inspiriert: http://amitp.blogspot.com/2007/04/LISP-vs-python-syntax.html

4
amit

Eine zynischere Antwort könnte lauten: "Weil sie in den 1980er Jahren einen politischen KI-Krieg zwischen Japan und den USA verloren hat." Es gibt einen Spaß Blog-Beitrag, der über die Auswirkungen des Niedergangs des Computersystems der fünften Generation auf den Prolog spekuliert .

3
Anon