Mit Hilfe der Beschreibungssprache AIML lernen sogenannte Chatbots, in menschlicher Sprache zu kommunizieren. Interpreter für diese Sprache existieren auch für Linux zuhauf.
So mancher Science-Fiction-Fan mag sich an das Szenario erinnern, das Stanley Kubrick in beklemmender Weise in seinem berühmten Werk “2001 – Odyssey im Weltraum” von 1969 darbot: Ein nahezu allmächtiger Computer, der die menschliche Sprache beherrscht, leitet eine Expedition in den Weltraum. Die Astronauten spielen mit dem Superhirn Schach, reden mit ihm über Gott und die Welt und überlassen alle administrativen Vorgänge in dem Raumschiff seinem allumfassenden Intellekt.
Mehr als drei Jahrzehnte später fällt die Realität im Gegensatz zu dieser optimistischen Vision eher bescheiden aus: Eine Maschine, die einem jeden Wunsch von den Augen abliest, bleibt für die geplagten Anwender bunter graphischer Oberflächen lediglich ein Wunschtraum. Das Verarbeiten von natürlicher Sprache durch Computerprogramme ist aber bereits seit den fünfziger Jahren ein Gebiet intensiver Forschung in der Informatik.
Verblüffende Ergebnisse erzielt dabei unter anderem das Projekt Alice [1]. Hinter diesem Acronym, das für Artificial Linguistic Internet Computer Entity steht, verbirgt sich ein vom amerikanischen Wissenschaftler Dr. Richard Wallace entwickelter Chatbot, der nach einem einfachen Modell arbeitet: Der Benutzer gibt einen Satz ein, das Programm geht ihn Wort für Wort durch und hangelt sich bei Suche nach dessen Sinn durch eine interne, netzartig aufgebaute Datenbank (siehe Abbildung 1). Trifft das Program auf ein Eintrag, der alle Wörter der Eingabe in der richtigen Reihenfolge enthält, so gibt es die entsprechende vordefinierte Antwort aus.
Hallo Alice
Die Idee von Alice begann Mitte der neunziger Jahre und nahm über zehn Jahre in Anspruch. Das ist hauptsächlich darauf zurückzuführen, dass das Gehirn dieses Programms aus über 40?000 sogenannter Patterns besteht, die jeweils eine oder auch mehrere mögliche Benutzereingaben abdecken. Beim alljährlich stattfindenen Loebner Prize Contest[6], bei dem eine Jury das Programm sucht, das sich einem Menschen am ähnlichsten verhält, stellte Alice seine Fähigkeiten schon mehrfach unter Beweis.
Surfen Sie mit ihrem Webbrowser auf die Alice-Homepage [1], klicken Sie auf den Link Chat With Alice und probieren Sie es einfach mal aus: Ihre auf englisch formulierte Eingabe erwidert Alice mit einer mal mehr, mal weniger sinnvollen Antwort. Alice ist durchaus in der Lage, sich Dinge wie Ihren Namen zu merken und kontextbezogene Antworten zu geben.
Beschreibungssprache
Ihren Charakter und ihr Wissen holen die Chatbots aus einer Datenbank in der XML-konformen Sprache namens AIML (Artificial Intelligence Markup Language). Die Struktur der Sprache erschließt sich ganz einfach. So erschaffen Sie Ihre eigenen virtuellen Persönlichkeiten von Grund auf neu (siehe Kasten “AIML-Grundlagen in Kürze”). Das Programmieren selber nimmt aber aus naheliegenden Gründen sehr viel Zeit in Anspruch.
Da die viele AIML-Dateien aber unter der freien GPL stehen, dürfen Sie diese problemlos als Grundlage für einen eigenen Chatbot hernehmen. Laden Sie sich dazu einfach unter [2] oder von der Heft-CD den entsprechenden AIML-Satz herunter, und bearbeiten Sie die Dateien mit einem Texteditor ihrer Wahl oder auch mit einem speziellem XML-Editor.
QAIML benutzen
Um Ihren neuen Sprachroboter regelmäßig zu testen, lohnt sich die Installation eines virtuellen Gesprächspartners auf dem heimischen PC, kurz: Sie brauchen einen AIML-Interpreter. Dieses Programm legt die in AIML formulierten Sprachbrocken in Datenstrukturen im Arbeitsspeicher ab und reagiert auf Benutzereingaben mit der vordefinierten Antwort.
Unter [1] finden sich diverse Kandidaten zum Download, die jeweils einen unterschiedlichen Funktionsumfang mitbringen. Wollen Sie den Chatbot offline testen und keinen eigenen Webserver aufbauen, bietet sich Qaiml (Program Q) an, dass Sie im Web [3] oder von der Heft-CD beziehen. Es stellt eine Qt-basierte Oberfläche bereit und glänzt durch einfachen Aufbau (Abbildung 2).

Abbildung 2: Die Benutzeroberfläche von QAIML erlaubt eine direkte Kommunikation mit dem virtuellen Wesen.
Installation
Um das Programm aus dem Quelltext zu kompilieren, benötigen Sie daher die Entwicklerversion der Qt-Bibliothek. Unter Debian/Ubuntu heißt das entsprechende Paket libqt3-mt-dev, unter Suse und Fedora brauchen Sie qt3-devel und qt3-devel-tools. Entpacken Sie in einem Terminalfenster mit dem Befehl tar xjf QAIML1.0.tar.bz2 das Archiv. Wechseln Sie in das neu entstandene Verzeichnis mit cd QAIML1.1 und geben Sie die Befehlszeile qmake; make ein. Nach erfolgreichem Übersetzen können Sie das Programm nun durch Eingabe von ./QAIML & starten.
Im Dialogfeld, das nach dem Programmstart erscheint, wählen Sie english aus. Der Name entspricht dem Verzeichnisnamen des Unterverzeichnisses im Programmordner aiml_sets. Die Software lädt die darin liegenden AIML-Dateien in den Speicher, was einige Zeit benötigt (siehe Abbildung 3). Anschließend wartet der Bot auf Ihre Eingaben.

Abbildung 3: Das Generieren der internen Wissensdatenbank aus dem AIML-Code nimmt etwas Zeit in Anspruch.
Das Archiv von Qaiml enthält die Sets arabic, charlix sowie english. Um nun einen anderen Chatbot auszuprobieren, wechseln Sie in das Verzeichnis aiml_sets und erstellen Sie einen neuen Ordner. Dorthinein kopieren Sie nun alle neuen AIML-Dateien. Beim Neustart des Programms steht der neue Bot bereit. Sie finden entsprechende Sets auf der Heft-CD im gleichen Ordner als Zip-Datei.
Voreinstellungen
In den üblichen AIML-Sets sind nicht alle Eigenschaften und Vorlieben eines Bots fest kodiert. Vielmehr kommen hier sogenannte Bot-Predicates zum Einsatz. Ein solches Predicate arbeitet im Prinzip wie eine Variable beim Programmieren: Der Betreiber des Chatbots legt in dieser im Voraus einen Wert fest, und der Interpreter fragt ihn zur Laufzeit ab. Auf diese Weise dienen dieselben AIML-Dateien als Grundlage für mehrere Bots mit jeweils unterschiedlichen Persönlichkeiten.
Der Bot reagiert auf eine Frage wie “Was ist dein Lieblingsbetriebssystem?” also nicht etwa, indem er auf gut Glück “GNU/Linux” erwidert, sondern er fragt der Inhalt des entsprechenden Bot-Predicates ab und liefert die Zeichenkette an den Gesprächspartner aus. Mit “GNU/Linux” bedient er einen Pinguinliebhaber, genauso gut dürfte das Prodicate jedoch auch “FreeBSD” oder “OpenSolaris” enthalten.
Das Festlegen der Predicates handhaben die Interpreter unterschiedlich. Bei QAIML kommt die Datei bot.xml im Hauptverzeichnis des Programms zum Einsatz. Sie enthält – in AIML kodiert – eine Liste aller zu benutzenden Bot-Predicates mit entsprechenden Werten. Indem Sie diese Datei in einem Texteditor bearbeiten, verändern Sie die Voreinstellungen des Bots. Die einzelnen Einträge haben dabei folgenden Aufbau:
<set name="<i class="replaceable">Bot-Predicate-Name">Bot-Predicate-Wert</set>
Beispielsweise existiert in dieser Datei eine Zeile, die den Namen des Erschaffers und Betreibers des Chatbots festlegt. Tragen Sie hier Ihren Namen ein, weiß der Bot für die Zukunft, wem er seine Existenz zu verdanken hat:
<set name="master">Tuxedo T. Penguin</set>
Neben den Bot-Predicates bietet AIML die Möglichkeit, bestimmte Werte (wie zum Beispiel den Namen des Gesprächspartners, das aktuelle Thema, die im Gespräch vom Benutzer vermittelte Grundstimmung) zur Laufzeit zwischenzuspeichern. Damit diese Werte auch nach einem Neustart des Interpreters noch vorhanden sind, speichert Qaiml diese in der Datei vars.xml. Diese Datei folgt beim Format den Konventionen, die in bot.xml zum Einsatz kamen.
Ausblick
Wenn Sie ein bisschen mit ihrem Bot herumgespielt, einige Predicates verändert und vielleicht sogar ein wenig AIML-Code selbst geschrieben haben, gibt es auch die Möglichkeit, Ihren Chatbot zu veröffentlichen, um ihn zum Beispiel auf einer Homepage unterzubringen oder einfach nur Ihren Freunden zu präsentieren.
Pandorabots.com [4] bietet Ihnen hierzu einen kostenfreien Bot-Hostingdienst. Nach dem Anmelden erstellen Sie einen Bot erstellen, den Sie dann nach Belieben manipulieren oder mit eigenen AIML-Dateien füttern. Als Benutzerschnittstelle erstellen Sie eine HTML-Seite, die nach dem Upload im Internet erreichbar ist.
Listing 1
<?xml version="1.0" encoding="ISO-8859-1"?> <aiml> <category> <pattern>HALLO HERR CHATBOT</pattern> <template>Hallo. Schön, Sie zu sehen.</template> </category> <category> <pattern>HALLO *</pattern> <template>Hallo auch.</template> </category> <category> <pattern>_ BITTE</pattern> <template><srai>HALLO HERR CHATBOT</srai></template> </category> </aiml>
AIML-Grundlagen in Kürze
Die XML-basierte Sprache AIML benutzt ähnlich wie die Websprache HTML Tags zum Auszeichnen von Elementen. Alle Tags schließen in spitzen Klammern den Namen ein: <<§§I>Name des Tags<§§I>>. Jedes Tag erfordert nach dem Öffnen auch ein schließendes Tag. Dies zeigen Sie mithilfe eines Schrägstrichs vor dem Namen des Tags an: </<§§I>Name des Tags<§§I>>.
Listing 1 zeigt ein kurzes Beispiel in AIML. Die Deklaration in der ersten Zeile gilt auch bei anderen XML-Dialekten. Die Tags <aiml> und </aiml> umschließen den eigentlichen Inhalt der Datei. Dazwischen folgen eine beliebige Anzahl von Kategorie-Elementen – die kleinste Einheit in einer AIML-Datei, durch die Tags <category> und </category> abgegrenzt.
Jede Kategorie enthält genau ein Pattern (üblicherweise in Großbuchstaben), das die Benutzereingabe bestimmt, auf die der Bot reagiert, sowie ein Template, dass die passende Antwort bereitstellt. So bewirken die Zeilen 3 bis 6, dass der Bot auf die Eingabe “Hallo, Herr Chatbot” mit der freundlichen Antwort “Hallo. Schön, Sie zu sehen.” returniert. Auf Groß- und Kleinschreibung sowie Satzzeichen kommt es dabei nicht an.
Die Zeilen 8 sowie 12 zeigen, dass bei den Pattern die Wildcards * und _ erlaubt sind. Beide stehen jeweils für eine beliebige Anzahl von Wörtern außer Null. Die das Pattern der Kategorie in den Zeilen 7 bis 10 trifft also bei den Eingaben “Hallo Du” und “Hallo, wie geht es dir?”, nicht jedoch bei einem einfachen “Hallo” zu.
Der Unterschied zwischen _ und * liegt in der Priorität, nach der ein bestimmtes Pattern zum Tragen kommt: Zuerst _, dann konkrete Wörter, dann erst *. Die Eingabe “Hallo, Herr Chatbot” würde daher immer die erste Kategorie aktivieren, obwohl auch das Pattern der zweiten Kategorie passt. Im Gegensatz dazu aktiviert jede Eingabe, die ein “Bitte” am Ende hat, bedingungslos die dritte Kategorie.
Zeile 13 definiert keine spezielle Antwort für das Pattern “_ BITTE”, sondern benutzt das Tag <srai>. Das leitet die Eingabe an die erste Kategorie weiter. Der Bot verhält sich also so, als ob die Eingabe einfach “Hallo, Herr Chatbot” lautet. Das Tag <srai ermöglicht es, ein und dieselbe Antwort für unterschiedliche Eingaben zu realisieren.
Natürlich sind dies längst nicht alle Möglichkeiten, die AIML bietet. Gerade das Srai-Element eröffnet weitaus mehr Möglichkeiten, als es zunächst scheint. Wer tatsächlich Interesse daran hat, seinen eigenen Bot zu entwickeln, dem sei daher ein Online-Tutorial [5] ans Herz gelegt.
Glossar
-
Loebner Prize Contest
-
Eine jährlich durchgeführte Variante des Turing-Tests. Der Mathematiker Alan Turing schlug vor über 50 Jahren ein Verfahren vor, anhand dessen sich klären ließe, ob eine Maschine zum Denken befähigt sei: Testpersonen sollten sich sowohl mit Computern als auch mit menschlichen Wesen unterhalten. Wenn sie den Unterschied nicht bemerkten, sei das Urteil erlaubt, dass die Maschine denke.
-
Chatbot
-
Gruppe von Programmen, die auf in natürlicher Sprache verfasste Benutzereingaben mit möglichst menschenähnlichen Antworten reagiert. Alternativ existieren die Bezeichnungen Chatterbot oder einfach Bot.
-
XML
-
Extensible Markup Language. XML bezeichnet eine Familie von Sprachen zum strukturierten Ablegen von Daten in Textdateien.
Infos
[1] Alice AI Foundation: http://www.alicebot.org
[2] Fertige AIML-Sets: http://www.alicebot.org/downloads/sets.html
[3] Qaiml-Interpreter: http://sourceforge.net/projects/qaiml
[4] Online Bot-Hosting: http://www.pandorabots.com
[5] Englischsprachiges AIML-Tutorial: http://www.pandorabots.com/pandora/pics/aimless/tutorial.htm
[6] Loebner Prize: http://www.loebner.net/Prizef/loebner-prize.html





