Künstliche Intelligenz mit C++?

TheShooter

Lt. Junior Grade
Registriert
Juni 2011
Beiträge
370
Hi,
ich frage mich schon lange, ob es möglich wäre eine Art künstliche Intelligenz zu erschaffen. Ich habe schon viele Programme geschrieben, wo eine vorgefertigte Antowort ausgegeben wird, sobald ein bestimmtes Wort in einem String erkannt wurde. So entsteht zwar der Schein einer Konversation, man ist aber extrem unflexibel, da das Programm nur auf bestimmte Fragen antworten kann, und keine Zusammenhänge erkennen kann.

Ist es irgendwie möglich einem Programm eine Art "Verständnis" beizubringen? Sodass es Sätze interpretieren kann, und selbst generierte Antworten dazu gibt, die nicht vom Programmschreiber vorgefertigt sind? Man bräuchte dazu ja eigentlich nur eine riesige Datenbank von Wörtern, und ein gewisses Verständnis des Programms. Nur habe ich keine Ahnung wie man so etwas hinbekommt. Habt ihr mit sowas Erfahrung, und eventuell mögliche Tipps?

Vielen Dank schonmal im Voraus,
TheShooter :-)
 
Wenn du einem Programm beibringen könntest den "Sinn" eines Textes zu erkennen, könntest du Millionen mit Übersetzungsprogrammen machen. Weil alle Lösungen basieren auf Datenbanken, und was in der nicht steht, erkennt der Computer nicht. Auch Verknüpfungen zwischen Wörtern, erkennt der Computer nur soweit wie es ein seiner Datenbank vorkommt.
 
Also um deine Frage zu beantworten, ja es ist möglich. Nein das wirst du aber nicht hinkriegen aus dem Grund den GaTeXx schon nannte ^^
 
Wenn du dich näher damit befassen willst, würde ich mir einmal CLIPS (C Language Integrated Production System) anschauen.
Geht dabei um eine knowledge base, rules und facts und diese anzuwenden.

Programm, dass vermutlich darauf basiert (kA mit was es geschrieben wurde)
http://en.akinator.com/

Sehr erstaunlich!
 
@-Razzer-
Ich als Laie würde sagen, dass Akinator relativ einfach ist.
der hat "einfach" Datenbanken wo dann zu jeder Person drinsteht, alter, Job... und mit verschiedenen Fragen filtert der dann aus, aber ja, es ist erstaunlich, was für (fiktive) und "unbekannte" (der Herr NVidia CEO) Leute der kennt, und wer den mit all den Daten füttert.
 
Man bräuchte nur... Eine Datenbank mit Wörtern? Du stellst dir das viel zu einfach vor. Wenn du dich mit dem Thema befassen willst, dann befasse dich mit dem Thema statt in einem Forum zu fragen, in dem sich mit hoher Wahrscheinlichkeit auch niemand ernsthaft mit dem Thema beschäftigt hat. ;)
Du kannst dich alternativ auch mit Eliza unterhalten, eine echte künstliche Intelligenz.
http://www-ai.ijs.si/eliza/eliza.html
Du kannst auch mal nach dem Stichwort "Semantische Suche" im Web suchen.
 
@-Razzer-: Akinator ist ein anderes Konzept. Das hat einfach eine Datenbank mit Fakten.

Das was der Threadersteller meint, geht zugleich in viele Richtungen. Von der Erkennung der Semantik einer Anfrage, über das selbsttändige Herausfinden von Beziehungen und und und.
Watson ist da wirklich das beste Beispiel, weil es am meisten der Bereiche abdeckt.


Die Erkennung der natürlichen Sprachen ist schon schwer genug. Also z.B. wenn ich Wolfram Alpha mit dem Satz füttere wer der Präsident der USA ist (natürlich auf englisch ;)) oder solche Abwandlungen. Aber da greift Wolfram Alpha auch nur auf fest eingespeicherte Infos zurück, trotzdem muss man auch die Anfrage erst verstehen können.
 
Ein Programm zu entwickeln, dass Sprache (= Alphabet, Wortschatz, Syntax und Semantik) analysieren kann, ist relativ einfach. Schwierig wird es, wie du schon geschrieben hast, die Semantik (Bedeutung) herauszuziehen.


Dafür gibt es bereits einige Ansätze. Die wichtigsten der letzten Jahre dürfte das semantische Netz (Wissensdatenbank) und die Ontologie (Wissensrepräsentation, Strukturen und Regeln der Wissensdarstellung) sein. Hier hat man Triple a la "Konzept A steht in Relation B zu Konzept C" (Konzept = "ein Ding", zB Haus, Mensch, Buch, Kochrezept, Emotion, etc.; Relation = Verbindung zwischen zwei "Dingen", zB lieben, wohnen_in, verwandt_sein_mit, etc.). Damit kann man so ziemlich alles mit Logik beschreiben. Und Logik kann vom Computer bestens verarbeitet werden. Problematisch sind hier aber drei Dinge:

1. Das Wissen muss mit einer Ontologie in einem semantischen Netz vorliegen. Also jemand muss sich hinsetzen und eine Wissensdatenbank aufbauen. Das ist kein Pappenstiel, das ist extrem umfangreich.

2. Niemand ist dabei perfekt, deshalb wird es widersprüchliches Wissen in der Datenbank geben. Nur, wie soll der Computer den Konflikt lösen? Dafür gibt es verschiedene Konfliktlösungsstrategien, aber es gibt nicht DIE Lösung.

3. Je nach Umfang der Ontologie kann es zu Problemen mit der Laufzeit kommen. Beispiel OWL*: Das gibt es in drei Versionen. Die erste Version "Lite" ist sehr schnell, allerdings kann man umfangreiche Konzepte nur auf umständliche Art und Weise definieren. Die zweite Version "DL" kann schon sehr viel mehr, läuft aber schon langsamer. Mit der dritten Version "Full" kann man so ziemlich alles Wissen beschreiben, aber ein Rechner packt das nicht mehr. Selbst Rechenzentren gehen hier in die Knie.


Ontologien und semantische Netze sind die Zukunft. zB wollen alle größere Konzerne, die etwas mit dem Internet zu tun haben (Google, Microsoft, Yahoo, etc.), dass die Webseitenbetreiber ihre Webseiten mit einer Ontologie nachrüsten. Dadurch werden diese Webseiten zu einem Teil einer Art Weltdatenbank, in der alles öffentliche Wissen gespeichert ist und das man komplett von überall abfragen kann.
Insbesondere Google ist daran interessiert, da deren Suchmaschine bereits mit Ontologien umgehen kann. [Link]
Nachtrag: Wikipedia beginnt bereits Faktendatenbanken zu erzeugen. Das ist bei semantischen Netzen extrem hilfreich. [Link]


*OWL ist eine der besten, wenn nicht gar DIE beste verfügbare Ontologie.

Wenn du jetzt also als erstes einen Satz in einer beliebigen Sprache in eine Ontologie umwandeln kannst und diese mit diversen verfügbaren semantischen Netzen verbindest (zB dbpedia), dann "versteht" der Computer, was der Satz bedeutet und zwar in beliebig großer Wissenstiefe. Hast du das geschafft (sollte nicht zu schwer sein), wäre der nächste Schritt eine KI zu entwickeln, die auf den Inhalt des Satzes reagiert. Das ist allerdings ein anderes Thema. Bleib erst mal bei der Konversation von einem Satz in eine Ontologie. Da fallen schon genügend Probleme an.
 
Zuletzt bearbeitet:
zudem ist es mit sprachen wie prolog - zwar nervig - aber leichter eine KI zumindest zu simulieren. sceeme würde auch gehen.

dann musst du auch eine riesige wissenbasis schaffen, da gibt es interessante ansätze die auf wikipedia basieren.
dort werden bergriffe in kategorien zusammengefasst und dann ein unglaublich riesiger baum erstellt. dort basiert das "verstehen" dann darauf zu gucken in welchen kategorien ein begriff fällt und so ein abstraktes bild zu erstellen. z.b. das Baum eine pflanze ist, aus holz besteht etc. ohne das der computer die begriffe pflanze und holz genuer kennt, weiß er grob was ein baum ist und kann auf entsprechende fragen reagieren.
keine richtige intelligenz, nur intelligentes verhalten.
 
Ohne Common Sense Logic ist KI-Programmierung ziemlich für den Eimer, und genau da hakts noch derbe. Im Endeffekt läuft es aber immer darauf hinaus, dass du dich mit dem Ergebnis einer solchen Programmierung noch schwerer unterhalten kannst als mit einem Asperger-Patienten.
Beispiel: Sage einer Person oder Maschine, die keine Common Sense - Logik beherrscht, dass in einem Kaff abends um 7 die Bürgersteige hochgeklappt werden. Wie wird diese Intelligenz reagieren? Was genau wird sie verstehen?

Oder anders: Es gibt Kalbsdöner, Schafsdöner, Hähnchendöner... was ist dann ein Kinderdöner (und warum ist er billiger)? Gehst du nur nach der Struktur der Bezeichnungen kommst du auf einen ziemlich grausigen Schluss. Hier muss eine Intelligenz, sei sie künstlich oder natürlich, den Sprung schaffen zwischen völlig unzusammenhängenden Daten: Es gibt Kinderdöner (der billiger ist als andere). Es ist, außer im Märchen, nicht üblich, Kinder zu essen.
 
@Mercsen
Was du da beschreibst ist ein semantisches Netz. ;)
Wikipedia eignet sich so direkt nicht als Wissensdatenbank. Die meisten Informationen auf der Seite sind nicht direkt maschinenlesbar, das ist ein Problem.

@thecain
Künstliche neuronale Netze eignen sich für das Verstehen einer Sprache nicht wirklich. KNNs sind wunderbare Mustererkennungssysteme, aber das war es mehr oder weniger auch schon. Es kann keine Schlüsse ziehen und damit kein neues Wissen aus vorhandenem generieren. Zudem kann man ab einer gewissen Komplexität nicht mehr nachvollziehen, was es da eigentlich macht: Tausenden Neuronen sind unüberblickbar!
Und dann wäre da noch das Problem, die benötigte Struktur und die Zahl der Neuronen zu bestimmen. Dafür gibt es nicht mal eine Faustregel - das muss man ausprobieren (zeitintensiv)! Und schließlich muss ein KNN noch lernen lassen, d. h. jemand muss Trainingsdaten vorbereiten und das in rauen Mengen.

Ich kann mir vorstellen, mit einem KNN herauszufinden, welche Struktur ein Satz hat (Grammatik usw.). Ebenso kann es falsch geschriebene Wörter erkennen. Mehr ist aber nicht drin.

@Daaron
Da liegst du vollkommen richtig. Wie ich schon geschrieben habe, mit einer Ontologie und einem semantischen Netz gibt es dafür einen Ansatzpunkt. Dort würde man einen Kinderdöner so beschreiben:
unbenannt-png.288828

Wenn jetzt jemand Kinderdöner sagt, dann weiß der Computer, dass das ein kleiner Döner ist, dass dieser wiederum ein Lebensmittel ist und dann dieses von Menschen benötigt wird.
Ebenso kann der Computer den Schluss ziehen, dass Döner und damit auch der Kinderdöner von Menschen benötigt wird.

So eine Graphendatenbank ist schon genial. Und was der Computer da erst mal für Schlüsse daraus ziehen kann. :love:

Die Frage ist jetzt, was man mit unbekannten Konzepten macht. So ein semantisches Netz ist nicht intelligent. Eine Ontologie ist es schon, aber sie ist nicht lernfähig. Wer eine lernfähige Ontologie hinbekommt, der müsste nach dieser Erfindung wohl nicht mehr arbeiten gehen.
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    21,1 KB · Aufrufe: 2.891
Zuletzt bearbeitet:
Eben, du kannst nicht alles nötige Wissen vorher einprogrammieren. Eine KI muss aus sich selbst heraus lernfähig sein, sonst ist sie nur ein besseres Lexikon.
 
Green Mamba schrieb:
Du kannst dich alternativ auch mit Eliza unterhalten, eine echte künstliche Intelligenz.

Also Eliza ist wohl ein schlechter Witz. Hab schn nach 2 Minuten erkannt, dass da keine Intelligenz dahintersteckt. Immer dieselben Antworten.
 
Wenn ich so überlege: Wenn man eine description logic mit Wahrscheinlichkeitswerten kombiniert, kann könnte man über jene Wahrscheinlichkeiten unbekannte Konzepte an bekannte Konzepte ankoppeln.
Dazu muss aber an den unbekannten Konzepten ein paar Eigenschaften dran hängen, über die ein Vergleich mit bekannten Konzepten erfolgen kann.


Beispiel:
Döner = is_a(Lebensmittel) AND has_size(mittel) AND costs(RANGE(2.00, 4.00))
Kinderdöner = is_a(Lebensmittel) AND has_size(klein) AND costs(RANGE(2.00, 3.00))

Die ersten beiden Eigenschaften bzw. Konzepte sind gleich: Beides sind Lebensmittel. 100% Ähnlichkeit.
Die zweite Eigenschaft ist bei jedem anders. 0% Ähnlichkeit.
Bei der dritten überschneiden sie sich. Hier könnte ein Algorithmus sagen, das zweite ist eine Untermenge des ersten. -> 50% Ähnlichkeit

Je nachdem, was man jetzt für eine Funktion zum Zusammenrechnen der Ähnlichkeiten nimmt, käme zB heraus, dass sich Döner und Kinderdöner zu 50% ähnlich sind. Wenn das der größte Ähnlichkeitswert unter den bekannten Konzepten ist, dann wird das Konzept Kinderdöner mit der Relation resembling(0.5) an das Konzept Döner gesetzt.

Das nächste Mal, wenn dann jemand von einem Döner spricht, weiß der Computer, dass zu 50% auch ein Kinderdöner gemeint sein kann.

Das wirft allerdings noch eine Reihe von Fragen auf (was ist wenn mehrere Konzepte ähnlich sind: zB Döner und Big Döner zu je 50%? Oder was ist wenn kein Konzept ähnlich ist?).


Da müsste man sich mal die Arbeit meines Profs. anschauen. Der hat so etwas schon mal untersucht: http://uai.sis.pitt.edu/papers/94/p311-heinsohn.pdf
 
Zuletzt bearbeitet:
Du hast bei all dem aber immer noch den interessantesten Aspekt verpasst.
Lammdöner ist aus Lammfleisch
Kalbsdöner ist aus Kalbsfleisch
Hähnchendöner ist aus Hähnchenfleisch
Halloumidöner ist aus Halloumikäse
Kinderdöner ist aus ?

Wenn du hier mit dem Prinzip der Ähnlichkeit herangehst und als Vorlage sagst: Erste Hälfte des Wortes ist der Rohstoff, 2. Hälfte ist der Typ des Produkts (so wie bei Gummiball, Lederball, Schaumstoffball,...).

Das Wichtigste wäre, einer KI beizubringen, dass sie nicht alles wörtlich nehmen muss. Die Fähigkeit "um die Ecke" zu denken macht Intelligenz aus. Sudokus lösen zu können macht keine Intelligenz aus. Aus "Brauche ich heute einen Schirm?" auf eine Wetteranfrage zu schließen macht auch keine Intelligenz aus, wenn vorher jemand alle möglichen Fragestellungen einprogrammiert hat.
 
Zurück
Oben