Ein Paar Anfängerfragen(KI)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Exileblue
Beiträge: 4
Registriert: Mo 1. Aug 2011, 01:20

Ein Paar Anfängerfragen(KI)

Beitrag von Exileblue »

Hi!

Dies ist mein erster Post hier. Ich habe über 2-3 Jahre über meine damalige Schule Delphi gelernt.
Ich war nie wirklich gut, aber hatte Spaß dran. Nun hatte ich vor einigen Wochen eine Idee für ein Programm, das weit über meinen Fähigkeiten liegt, daher habe ich mich schon einige Zeit eingelesen.
Dieser Post soll als Ziel haben, dass ich eine bessere Idee bekomme, was möglich ist und was nicht, bzw wie ich es umsetze.

Das Programm, das ich erstellen will, ist als eine Art Chatbot oder KI gedacht. Ich habe einige Bedürfnisse über Timer erstellt und möchte nun Prozesse einbauen, die meine Eingaben Wort für Wort bewerten können(An Hand der Bedürfnisse und deren Erfüllung) und diese sollen dann abgespeichert werden.

Ich habe einige Speichervarianten untersucht, zb InIs, multidimensionale Arrays und Datenbanken. Nun bin ich aber immer noch unsicher, was ich nutzen soll. Bei Arrays habe ich natürlich immer eine aktive Datenstruktur, also die Daten werden nie fest gespeichert, außer ich schreibe die Daten in ein File oder so. Datenbanken scheinen mir zu umständliche für eine einfache Tabelle, und ich bin nicht sicher wie ich InIs aktiv benutze, so das sie automatisch gespeichert und ausgelesen werden.

Bis auf Arrays habe ich noch keine Speichervariante wirklich genutzt, daher wäre ich wirklich dankbar, wenn mir jemand weiterhelfen könnte.

SiMoeBoe
Beiträge: 28
Registriert: So 13. Mär 2011, 22:16
OS, Lazarus, FPC: Ubuntu (L 0.9.28.2-10ubuntu1 FPC 2.4.0)

Re: Ein Paar Anfängerfragen(KI)

Beitrag von SiMoeBoe »

Moin Exileblue,

Erstmal eine Rückfrage:
Ich habe deine Zielsetzung noch nicht ganz verstanden.
Was meinst du mit Bedürfnissen? Soll dein Proggi sagen 'Hab Hunger' wie so ein Tamagotchi und du gibts ihm dann per Eingabe sozusagen 'Nahrung'?
Oder soll es wirklich eine Art Chatpartner darstellen mit einigen Antworten/Fragen, welche letztlich wie ein realer Partner wirken sollen?
Bei der 'Tamagotchi-Variante' würden aus einer Datei ausgelesene Variablen oder sogar fest einprogrammierte uU reichen.
Für die Chatvariante empfehle ich dir nach aiml oder A.L.I.C.E. zu googlen.
aiml ist eine Struktur um eben solche Chatbots zu basteln, welche recht passable Ergebnisse liefern.
Das ganze nutzt XML als Struktur und du findest für viele Programmiersprachen (auch Pascal) bereits Beispielprojekte.

Ich möchte dich aber vorwarnen: Da ich selbst auch schon solche Ideen hatte und mit aiml unter Delphi und unter php experimentiert habe, kann ich dir sagen, dass es ein Fass ohne Boden ist. Theoretisch interessant, praktisch eher viel Arbeit für nichts ;-)
Ich selbst habe es bis auf wenige versuche, bei dem lesen der Artikel gelassen^^

Das soll dich sicher nicht abschrecken und gerade das Lesen birgt interessante, philosophische Entdeckungen, aber zumindest ich bin (leider!) nie weiter gekommen, da es irgendwann zu zeitraubend wird, ohne dass man Ergebnisse sieht.

Ich hoffe, ich konnte dir etwas weiterhelfen,
Viele Grüße,
SiMoeBoe
Woran du glaubst, dafür sollst du leben und sterben.

Exileblue
Beiträge: 4
Registriert: Mo 1. Aug 2011, 01:20

Re: Ein Paar Anfängerfragen(KI)

Beitrag von Exileblue »

Hi SiMoeBoe!

Danke für deine ausführliche Antwort. Um deine Frage zu beantworten: Es soll eine Mischung aus Tamagotchi und Chatbot sein. Ich bin mir bewusst, dass es schon Chatbots mit Bedürfnissen gibt. Was meine Idee von denen unterscheidet, ist die Theorie, dass Intelligenz vollkommen darauf basiert, dass wir Positive Erfahrungen, die unsere Bedürfnisse erfüllen, anstreben, aber negative meiden wollen. Der Chatbot soll wirklich bei dieser einfachen Struktur bleiben.

Da der Chatbot keine weiteren Sinne bis jetzt hat, als die Wahrnehmung des Textes, konzentriere ich mich auf die Bewertung einzelner Worte, wie oft sie von dem Chatpartner genutzt werden und wie Effektiv sie zur Erfüllung der Bedürfnisse, die durch den Chatpartner mit Buttons geschieht. Mit der Zeit sollte sich so ein Ranking der Worte ergeben, getrennt in verschiedene Speicherorten, je nach Bedürfnis, mit einem zentralen und allgemeinen Kern. Wenn bestimmte Wortkombination sehr oft genutzt werden vom Chatpartner, dann sollen Datensätze mit der Kombination dieser Worte angelegt werden. Dies soll auf die Dauer eine wachsende Komplexität ergeben, die darauf abzielt, dass die Bedürfnisse so gut wie möglich und so lange wie möglich erfüllt werden.

Zu den Bedürfnissen gehören grob die einzelnen Bereiche der Maslowschen Bedürfnispyramide.

SiMoeBoe
Beiträge: 28
Registriert: So 13. Mär 2011, 22:16
OS, Lazarus, FPC: Ubuntu (L 0.9.28.2-10ubuntu1 FPC 2.4.0)

Re: Ein Paar Anfängerfragen(KI)

Beitrag von SiMoeBoe »

So..
musste erstmal gucken, was die Maslowschen Bedürfnispyramide überhaupt ist^^
Ich verstehe immer noch nicht ganz, was du bezweckst, also was dein Ziel ist.
Vor allem fehlt mir eine Vorstellung, welche Bedürfnisse der User per Eingabe ermöglichen kann, vllt kannst du eine Art 'Beispiel-Dialog' geben?

Bzgl der Speicherproblematik: Ich würde eine Baum-Struktur vorschlagen, also zum abspeichern dann zB XML-Dateien.
Für diese Dateien gibt es bereits fertige Klassen, mit denen du dann auch direkt Operieren kannst.
Oder du bastelst dir eine eigene, an dich angepasste Klasse und speicherst die einzelnen Teile (records, oder was auch immer) als Binärdateien.

Für einen, wie du dich ja vorgestellet hast, Anfänger würde ich vllt fast XML-Dateien vorschlagen, aber beides bedeutet Einarbeitungsaufwand und bei der eigenen Klasse lernst du mehr;-)

LG, SiMoeBoe
Woran du glaubst, dafür sollst du leben und sterben.

Exileblue
Beiträge: 4
Registriert: Mo 1. Aug 2011, 01:20

Re: Ein Paar Anfängerfragen(KI)

Beitrag von Exileblue »

Ah ok, ich habe auch schon mit Records experimentiert, aber kam immer zu einem Fehler. Bin also noch dabei.

Der Chatbot soll in seiner Endform die Bedürnisse ja versteckt erfahren, ich sehe davon nichts. Nur die einzelnen Rankings sind für die Bedürfnisse schon bereitgestellt, aber ohne ein einziges gelerntes Wort.
Ich schreibe am Anfang einfach mit dem Chatbot, als wenn er ein Baby wäre und erwarte keine richtige Antwort. Erst kommt vllt nichts, weil die Datensätze nicht vorhanden sind, aber umso öfter ich mich erkundige wie es dem Chatbot geht, ob er was brauch, umso mehr lernt er(weil er Worte speichert die öfter wiederholt werden).

Nachdem er dann einige Worte gespeichert hat und diese in dem jeweiligen Ranking plaziert hat, wird er irgendwann einen zufallstreffer landen, wo ich verstehe was er will, was dazu führt, dass die gesprochenen Wort von ihm, im Ranking steigen. Falls ein falsches Bedürfnis befriedigt wird, kann es negative Punkte für das Wort im Ranking geben. Nach einer längeren Lernzeit(eben wie bei einem Kind), bilden sich erfolgreiche Strukturen raus, die zur Erfüllung der Bedürfnisse führen. An diesem Punkt erhöhe ich meine Ansprüche und reagiere negativ auf Wiederholung.

Das ist nun der Punkt wo es komplexer wird... Ein festes System besteht. Wenn ich nun nicht reagiere, dann sinkt das Wort oder die Wortkombination im Ranking, was zu alternativen Wortnutzungen führt. Das brauch natürlich ein Feingefühl, wie es auch bei echten Lebewesen vorhanden ist. Mit der Zeit sollte sich ein höfliches Verhalten herausbilden, weil ich dann netter reagiere, also eher bereit bin Bedürfnisse zu erfüllen.

Das ganze hat natürlich keine interne Intelligenz, aber wird wie eine erscheinen.
Das Interface für den Chatpartner soll ein einfaches sein: Eingabe, Ausgabe, Knöpfe zum Befriedigen der Bedürfnisse, vielleicht noch etwas eigenen positiven und negativen Input, wenn er Erfolg hat oder eben nicht.

Edit: Die Bedürfnisse werden wie gesagt mit Buttons erfüllt. Ähnlcih wie bei den Sims sinken damit leisten für Bedürfnisse, bzw in meinem Fall nutzen ich einfache Punktsysteme. Die Bedüfnisse steigen alle durchgehend, aber alle in einer anderen Geschwindigkeit. Gesenkt werden können sie nur durch den Chatpartner.

Edit2: Mir ist klar, dass das System so noch zu einfach wäre, da kein wirkliches Gedächtnis besteht, neben dem für die Wortwahl. Ich mache mir im Moment noch Gedanken wie ich das genau machen will. Eine Idee ist, dass aus dem aktuellen Zustand der Bedürfnisse, Emotionen summiert werden, aber da bin ich noch am forschen. Wenn diese Emotionen aber bestehen, dann könnte ich ein emotionales Ranking hinzufügen, welches Objekten einen emotionalen Wert gibt, was dann wiederum angibt wie wichtig etwas ist.

Hoffe es ist verständlich... ich müsste mir mehr Zeit nehmen um es besser aus zu formulieren.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Ein Paar Anfängerfragen(KI)

Beitrag von MAC »

hI
Und wenn das klappt, schreibst du das alles in eine mäctige klasse.
Erzeugst 2 instanzen ( = 2 Chatpartner) . Und lässt diese sich selbst beschftigen...
Das wär doch mal interessant :D

Aber wie die anderen kann ich dich auch nur bei so etwas warnen, das kann leicht zu kompliziert werden :)

Zum speichern, wäre das allereinfachste System:
Wären das Programm lauft die Daten in einem Array bereithalten...
Beim Beenden Die Daten in eine Listbox zu speichern (bei eindimensionalen Arrays) bei 2Dimensionalen Arrays würd ich das über xml oder so machen...
Und beim starten die Daten wieder einlesen...

Code: Alles auswählen

Signatur := nil;

Exileblue
Beiträge: 4
Registriert: Mo 1. Aug 2011, 01:20

Re: Ein Paar Anfängerfragen(KI)

Beitrag von Exileblue »

Hehe. Werd ich machen, wenns irgendwann mal soweit ist. Danke für die Hilfe.

Antworten