Chatbot in PHP
Verfasst: So Nov 16, 2008 5:38 pm
Hi!
Ich hab mir vorgenommen einen Chatbot zu schreiben, der lernfähig ist.
Lernfähig in dem Sinne, dass er neue Wörter speichert und versucht eine Bewertung zu bekommen.
Das Konzept ist allerdings noch sehr unausgereift, und ich hab mehrere mögliche Wege im Kopf, ihn zu realisieren.
Ich weiß nicht genau, ob das hier das richtige Forum hierfür ist, da ich keine Probleme mit PHP (syntaxmäßig) habe, sondern mich nur umhören wollte, wie ihr einen Chatbot schreiben würdet. Könnte also auch zu Konzepten passen oder sonstwohin ^^
Das Userinterface besteht aus einem Eingabefeld, dessen Inhalt nach der Eingabe an die Datei answer.php geleitet wird. Diese wertet dann den Inhalt aus, und gibt eine Antwort zurück.
Ich hatte bereits vor einigen Jahren einen Chatbot geschrieben, der aber nur Antworten auf Fragen geben konnte, die ihm andere User bereits gegeben hatten. Kannte er die Antwort nicht, hat er einfach die Frage wiederholt, und der User hat eingegeben, was er an seiner Stelle antworten würde. Das ist natürlich lustig, aber er war weder intelligent, noch hatte er einen großen Wortschatz (600 Fragen + Antworten) und war natürlich auch sehr fehleranfällig, wenn man ein einen falschen Chatpartner gerät. (Link: http://fun.haukeluebbers.de/talk_with_dubbel/ ).
Der neue Bot soll intelligenter werden:
Er soll Eckdaten des Users (Name, Alter, evt. Wohnort) in Cookies speichern, um evt. auf sie zugreifen zu können.
Das erste Problem besteht darin, wie er den Sinn der Sätze erkennt.
Mir sind bisher zwei Möglichkeiten eingefallen:
Gehen wir von einem normalen Subjekt-Prädikat-Adjektiv Satz ("You are great") aus:
1. Der Bot erkennt, dass es drei Wörter gibt (Füllwörter wie "so" und Smileys ("xD") müssen natürlich vorher entfernt werden), und übergibt sie der Funktion three_words($string). Dieser check die einzelnen Wörter. "You" steht in der MySQL Tabelle "cb_pronouns".
Die sieht so aus: id | word | relation
id ist fortlaufend, word das Wort ("you" - alles wird zu Kleinbuchstaben umgewandelt, was allerdings die Erkennung von Nomen an Großbuchstaben verhindert, was aber (in einem Chat) auch nicht sehr zuverlässig wäre), und in relation steht (bisher) ob sich das Wort auf den Bot (1), den User (2) oder etwas anderes bezieht (3). Das Ergebnis wäre also, dass sich der Satz auf den Bot bezieht. Dann wird das zweite Wort überprüft (passt es zu "you"?), und schließlich wird das letzte Wort überprüft, ob es positiv, negativ oder neutral ist. Ist es negativ, dann wird der $bot_mood auf negativ gesetzt, er würde den User also nicht mehr so freundlich behandeln. Wie man die Antwort erstellt, wäre ein weiteres Problem, aber das werde ich später angehen.
Die 2. Möglichkeit wäre, dass der Bot nur Stichwörter überprüft ("PHP is slow, but i love it"). Wenn er hier nun "PHP" als Subjekt erkennt, und vielleicht noch "i" und "love", könnte er den Inhalt erahnen.
Der Vorteil ist, dass die zweite Methode auch bei vielen Füllwörtern, längeren Sätzen und Grammatikfehlern funktioniert, aber den Sinn nicht immer richtig verstehen wird.
Ein weiteres Problem ist die Lernfähigkeit. Ich hatte die Idee, den Bot, wenn der User eine nicht weiter verfolgbare Antwort gibt ("Hmm..."), einfach sagt "You are bored? What do you think about 'Obama'?", und dann die Antwort auswertet (also bei dem Wert Obama in der Datenbank das Rating ++ oder -- setzt. Obama müsste er dann vorher mal aufgeschnappt haben, und als nicht bekannt in eine Tabelle verschoben haben. Zusätzlich zu dieser Bewertung wollte ich auch noch Labels zu den einzelnen Wörtern erstellen. Obama würde dann z.B. noch USA zugeordnet, und der Bot wählt dann ein weiteres Wort, dass diesem Label zugeordnet ist.
Ja, das wars erstmal ^^
Wie würdet ihr einen Chatbot konstruieren (ungefähr - muss ja nicht so lang beschreiben sein wie dieser Möglichkeit)?
Ich weiß, dass es mit nicht möglich sein wird, einen perfekten Chatpartner zu programmieren, oder den besten Chatbot, aber ich will trotzdem versuchen einen einigermaßen funktionierenden zu schreiben...
Ich hab mir vorgenommen einen Chatbot zu schreiben, der lernfähig ist.
Lernfähig in dem Sinne, dass er neue Wörter speichert und versucht eine Bewertung zu bekommen.
Das Konzept ist allerdings noch sehr unausgereift, und ich hab mehrere mögliche Wege im Kopf, ihn zu realisieren.
Ich weiß nicht genau, ob das hier das richtige Forum hierfür ist, da ich keine Probleme mit PHP (syntaxmäßig) habe, sondern mich nur umhören wollte, wie ihr einen Chatbot schreiben würdet. Könnte also auch zu Konzepten passen oder sonstwohin ^^
Das Userinterface besteht aus einem Eingabefeld, dessen Inhalt nach der Eingabe an die Datei answer.php geleitet wird. Diese wertet dann den Inhalt aus, und gibt eine Antwort zurück.
Ich hatte bereits vor einigen Jahren einen Chatbot geschrieben, der aber nur Antworten auf Fragen geben konnte, die ihm andere User bereits gegeben hatten. Kannte er die Antwort nicht, hat er einfach die Frage wiederholt, und der User hat eingegeben, was er an seiner Stelle antworten würde. Das ist natürlich lustig, aber er war weder intelligent, noch hatte er einen großen Wortschatz (600 Fragen + Antworten) und war natürlich auch sehr fehleranfällig, wenn man ein einen falschen Chatpartner gerät. (Link: http://fun.haukeluebbers.de/talk_with_dubbel/ ).
Der neue Bot soll intelligenter werden:
Er soll Eckdaten des Users (Name, Alter, evt. Wohnort) in Cookies speichern, um evt. auf sie zugreifen zu können.
Das erste Problem besteht darin, wie er den Sinn der Sätze erkennt.
Mir sind bisher zwei Möglichkeiten eingefallen:
Gehen wir von einem normalen Subjekt-Prädikat-Adjektiv Satz ("You are great") aus:
1. Der Bot erkennt, dass es drei Wörter gibt (Füllwörter wie "so" und Smileys ("xD") müssen natürlich vorher entfernt werden), und übergibt sie der Funktion three_words($string). Dieser check die einzelnen Wörter. "You" steht in der MySQL Tabelle "cb_pronouns".
Die sieht so aus: id | word | relation
id ist fortlaufend, word das Wort ("you" - alles wird zu Kleinbuchstaben umgewandelt, was allerdings die Erkennung von Nomen an Großbuchstaben verhindert, was aber (in einem Chat) auch nicht sehr zuverlässig wäre), und in relation steht (bisher) ob sich das Wort auf den Bot (1), den User (2) oder etwas anderes bezieht (3). Das Ergebnis wäre also, dass sich der Satz auf den Bot bezieht. Dann wird das zweite Wort überprüft (passt es zu "you"?), und schließlich wird das letzte Wort überprüft, ob es positiv, negativ oder neutral ist. Ist es negativ, dann wird der $bot_mood auf negativ gesetzt, er würde den User also nicht mehr so freundlich behandeln. Wie man die Antwort erstellt, wäre ein weiteres Problem, aber das werde ich später angehen.
Die 2. Möglichkeit wäre, dass der Bot nur Stichwörter überprüft ("PHP is slow, but i love it"). Wenn er hier nun "PHP" als Subjekt erkennt, und vielleicht noch "i" und "love", könnte er den Inhalt erahnen.
Der Vorteil ist, dass die zweite Methode auch bei vielen Füllwörtern, längeren Sätzen und Grammatikfehlern funktioniert, aber den Sinn nicht immer richtig verstehen wird.
Ein weiteres Problem ist die Lernfähigkeit. Ich hatte die Idee, den Bot, wenn der User eine nicht weiter verfolgbare Antwort gibt ("Hmm..."), einfach sagt "You are bored? What do you think about 'Obama'?", und dann die Antwort auswertet (also bei dem Wert Obama in der Datenbank das Rating ++ oder -- setzt. Obama müsste er dann vorher mal aufgeschnappt haben, und als nicht bekannt in eine Tabelle verschoben haben. Zusätzlich zu dieser Bewertung wollte ich auch noch Labels zu den einzelnen Wörtern erstellen. Obama würde dann z.B. noch USA zugeordnet, und der Bot wählt dann ein weiteres Wort, dass diesem Label zugeordnet ist.
Ja, das wars erstmal ^^
Wie würdet ihr einen Chatbot konstruieren (ungefähr - muss ja nicht so lang beschreiben sein wie dieser Möglichkeit)?
Ich weiß, dass es mit nicht möglich sein wird, einen perfekten Chatpartner zu programmieren, oder den besten Chatbot, aber ich will trotzdem versuchen einen einigermaßen funktionierenden zu schreiben...
