automatisches Tagging - Lisp oder Phyton



  • Hallo

    Welche Programmiersprache ist für eine "KI - Datenbank" die sich auf evolutionärer Basis weiterenwickelt, am besten für ➡ Ubuntu geeignet ?
    Ich habe da an Common LISP ANSI oder Phyton gedacht 🕶
    Es wäre eben das Prinzip:
    Begriff eingeben -> Begriff in Wikipedia nachschlagen -> Text analysieren und nach einem einfachen Algorithmus die am häufigsten vorkommenden Substantive herausfinden.
    Dann Begriff -> Unterbegriffe verknüpfen
    Und jeden Unterbegriff nochmal mit dem Begriff verknüpfen. So entsteht eine riesige Datenbank bei dem etliche relevante Wörter (am besten mit einer Gewichtung) zusammenhängen.

    Besten Dank!



  • Das Betriebssystem ist egal, Lisp oder Python sind dabei zwei gute Ansaetze. Dabei hast du aber verschwiegen, wie dein Ansatz fuer die "KI - Datenbank" aussieht. Ich wuerde keine Neuronalen Netze oder Support Vector Machines damit programmieren wollen. Falls du mit Lisp liebaeugelst so waere Scheme vielleicht besser geeignet, standardisiert, schlanker, "schneller" und tolles Macrosystem. Dafuer werden fuer gewoehnlich nur selten vorgefertigte Sachen z.B. fuer Threads und Grafik geboten (es gibt Interpreter, die aber das auch anbieten). Dort wird Python besser sein.

    Empfehlenswert ist auch http://www.artima.com/weblogs/viewpost.jsp?thread=251474 , wenn du Python schon kannst. Ein Wort der Warnung: In Scheme (oder anderen Funktionalen Programmiersprachen) wird grundsaetzlich anders programmiert, als du es von C++, Java etc. gewohnt sein koenntest. Ein Verstaendnis fuer das Lambda-Kalkuel ist sehr von Nutzen. Haskell bietet sich auch als Alternative an.



  • knivil schrieb:

    Falls du mit Lisp liebaeugelst so waere Scheme vielleicht besser geeignet, standardisiert, schlanker, "schneller" und tolles Macrosystem.

    Standardisiert ist ANSI Common Lisp natürlich auch. Sogar mehr als in Scheme, wo nur der "schlanke" Sprachkern standardisiert ist und der Rest von jeder Implementation nach Gusto hinzugefügt wird.

    In Scheme (oder anderen Funktionalen Programmiersprachen) wird grundsaetzlich anders programmiert, als du es von C++, Java etc. gewohnt sein koenntest. Ein Verstaendnis fuer das Lambda-Kalkuel ist sehr von Nutzen. Haskell bietet sich auch als Alternative an.

    Haskell und Lisp sind so ziemlich am entgegengesetzten Ende des funktionalen Spektrums, genausogut könntest du sagen "Python ist imperativ, C bietet sich als Alternative an". Dabei ist es gar nicht die Fähigkeit zur funktionalen Programmierung, die Lisp zur KI-Sprache gemacht hat. Was nicht heißen soll, dass Haskell für die KI ungeeignet ist. Keine Ahnung, aber wenn, dann aus anderen Gründen als Lisp.



  • Ich gehe eher von Scheme aus. Und rudimentare Sprachkonstrukte als auch das Feature lazy evaluation von Haskell habe ich in Scheme schon einfach nachgebildet. Unendliche Datenstrukturen sind auch nicht problematisch. (Ja, Haskell bietet mehr, aber ich stehe erst am Anfang)

    Und zum Standard steht bei wikipedia folgendes:

    Eine echte Unterstützung von ANSI Common Lisp ist allerdings nicht vorhanden.

    There are many implementations, and the standard spells out areas in which they may validly differ.

    Wie alt diese Aussage ist oder ob sie heute noch Gueltigkeit hat, weiss ich jedoch nicht, da ich mich eher auf Scheme konzentriere.

    Fähigkeit zur funktionalen Programmierung, die Lisp zur KI-Sprache gemacht hat

    Welche denn dann? Funktionalen Programmierung und Daten als Funktionen (und umgedreht) gehoeren bei mir zusammen.



  • knivil schrieb:

    Falls du mit Lisp liebaeugelst so waere Scheme vielleicht besser geeignet, standardisiert, schlanker, "schneller" und tolles Macrosystem.

    Scheme ist auch ein Lisp. Du sprichst offensichtlich von Scheme Vs. Common Lisp.
    Allerdings ist CommonLisp auch standardisiert, viele Implementierungen sind sehr performant und ein tolles Makrosystem hat es natürlich auch.

    (Edit: Hoppla, Uralt-Tabs vom Vormittag recyceln ist keine gute Idee.)



  • knivil schrieb:

    Und rudimentare Sprachkonstrukte als auch das Feature lazy evaluation von Haskell habe ich in Scheme schon einfach nachgebildet. Unendliche Datenstrukturen sind auch nicht problematisch.

    Danke, wir alle haben SICP gelesen. Aber Scheme und Haskell sind dennoch zwei sehr unterschiedliche Sprachen.

    There are many implementations, and the standard spells out areas in which they may validly differ.

    Ist doch nicht schlimm, dass Du nicht wusstest, dass Common Lisp ANSI-standardisiert ist, Du brauchst jetzt nicht aus der Wikipedia irgendwas zusammenzitieren. 🙂

    Dass umfangreichere Standards häufig nicht vollständig umgesetzt werden, ist doch nichts ungewöhnliches. C++ ist auch standardisiert, dennoch unterstützen nur relativ wenige Compiler export. Manchmal ist sowas auch einfach ein Hinweis darauf, dass der Standard versagt hat.

    Fähigkeit zur funktionalen Programmierung, die Lisp zur KI-Sprache gemacht hat

    Welche denn dann? Funktionalen Programmierung und Daten als Funktionen (und umgedreht) gehoeren bei mir zusammen.

    Vollwertige Funktionen höherer Ordnung sind zwar ein Merkmal funktionaler Programmiersprachen, aber in Lisp gibt es keine Trennung zwischen Programmcode und Daten, das war historisch schon eine ziemlich große Sache.



  • SunTzu schrieb:

    Hallo

    Welche Programmiersprache ist für eine "KI - Datenbank" die sich auf evolutionärer Basis weiterenwickelt, am besten für ➡ Ubuntu geeignet ?
    Ich habe da an Common LISP ANSI oder Phyton gedacht 🕶
    Es wäre eben das Prinzip:
    Begriff eingeben -> Begriff in Wikipedia nachschlagen -> Text analysieren und nach einem einfachen Algorithmus die am häufigsten vorkommenden Substantive herausfinden.
    Dann Begriff -> Unterbegriffe verknüpfen
    Und jeden Unterbegriff nochmal mit dem Begriff verknüpfen. So entsteht eine riesige Datenbank bei dem etliche relevante Wörter (am besten mit einer Gewichtung) zusammenhängen.

    Besten Dank!

    Zusammenfassung: Du willst Text parsen. Und einen riesigen Graphen abspeichern, wobei die Kanten auch noch Gewichtungen haben. Das Text-Parsen sollte weder mit LISP noch mit Python schwer sein.
    Wenn du wirklich eine "riesige" DB basteln willst, wird der Arbeitsspeicher irgendwann knapp. In Python vermutlich frueher als in einem guten LISP, aber rechnen wir mal nach:

    Milchmaedchenrechnung:
    - Pro Begriff 32 Byte als Bezeichner
    - Eine Verzweigung wird als 4 Byte-Pointer abgespeichert (d.h. du kannst maximal 2^32 Begriffe indizieren). Dazu wird noch ein 4 Byte-Gewichtung abgespeichert. Macht 8 Byte pro Verzweigung. Und jeder Begriff hat ~5 Verzweigungen (was sehr wenig sind).

    Macht 72 Byte pro Begriff. D.h. bei 1 GB RAM koenntest du damit knapp 15 Million Begriffe als reine Rohdaten im RAM halten. Allerdings speichert Python Daten nicht so effizient, der RAM wird schon viel, viel frueher knapp, du wirst (zumindest laut meiner Erfahrung) bei maximal 2-5 Millionen 1 GB RAM verbrauchen nur um den Graphen zu speichern. Das spricht eher fuer LISP, das idR effizienter mit RAM umgehen kann.

    Trotzdem wirst du auch in LISP irgendwann an die RAM-Grenze stossen und dann wirst du auslagern muessen (entweder in eine DB oder die Platte). Je nach verwendetem LISP ist das DB- oder allgemein das I/O-Handling eher umstaendlich oder nicht, das spraeche dann wieder fuer Python.

    Kurzum: du kommst mit beiden Sprachen relativ gut ans Ziel. Bedenke allerdings dass Python idR wesentlich laengsamer ist als LISP und mehr RAM schluckt. Kommt also drauf an was fuer Ziele du dir gesetzt hast. Solang du nicht mehr als ~1 Million Begriffe indizieren willst, wirst du mit beiden einfach ans Ziel kommen. Und letzten Endes musst du die Daten sowieso irgendwie persistent abspeichern um den Graph irgendwie auszuwerten. Wenn du das in einer Sprachunabhaengigen Weise machst, kannst du die weitere Auswertung immer noch in einer anderen Sprache schreiben, evtl. sogar in SQL o. AE. 🙂



  • SunTzu schrieb:

    Welche Programmiersprache ist für eine "KI - Datenbank" die sich auf evolutionärer Basis weiterenwickelt, am besten für ➡ Ubuntu geeignet ?

    Ich glaub das was du vor hast ist ne Nummer zu groß für dich, wenn du noch nicht mal weißt welche Programmiersprache.



  • vermutung schrieb:

    wenn du noch nicht mal weißt welche Programmiersprache.

    vielleicht die: http://en.wikipedia.org/wiki/Prolog ?
    🙂



  • Danke für die ganzen Auskünfte 🙂

    Ich denke mit Python komme ich am besten klar!

    Gruss
    SunTzu


Anmelden zum Antworten