Telegram Bot – Hirn ist aus
In einem früheren Post hatte ich ja schon über den Telegram Bot als Interface für die Heimautomatisierung geschrieben und die Idee, nicht-Kommandos über einen ChatBot zu bearbeiten. Die Idee ist inzwischen etwas weiter gedacht und erheblich komplexer geworden.
Projekt: Telegram Bot
Kontakt: Boris Dirnfeldner
Link: – eigenes Projekt –
Grundsätzlich wäre es (auch für andere Projektideen) schön, wenn man sich mit dem Gerätenetzwerk unterhalten könnte ohne eine Reihe von Kommandos lernen zu müssen. Die aktuellen Assistenten von Google und Amazon sind da schon recht weit, aber aus einer Reihe von Gründen uninteressant:
- Die Dinger sind Datenkraken. Ich lege überhaupt keinen Wert darauf das diese Firmen in diesem Bereich Daten sammeln, auch wenn die Lösungen wirklich gut sind und weitestgehend (für Private) kostenlos
- Der Lerneffekt ist nahe Null. Die Arbeit reduziert sich auf Integration und geringe Anpassungen. Damit kann ich dann zwar genau das was die Umgebung liefert, habe aber darüber hinaus keinerlei Hintergrundwissen aufgebaut
- Die Optionen zur Anpassung sind gering. Der Kern ist bereits erheblich zu komplex und in vielen Teilen auch nicht zugänglich. Sich da reinzufuchsen und zu lernen ist praktisch nicht möglich. Das Argument gilt natürlich auch bei anderen Frameworks, aber dort ist häufig die Architektur viel klarer dokumentiert, man kommt an alles ran und kann sich in die interessanten Aspekte einarbeiten
- Erhebliche Teile der Lösungen sind auf die Server der Betreiber ausgelagert. Eine lokale Lösung ohne Internet-Verbindung ist faktisch unmöglich zu realisieren (versucht mal Alexa ohne Internet zu betreiben!).
- Wenn man sich etwas mit den Assistenten beschäftigt hat, stellt man fest das die Dinger zwar inzwischen recht viele Funktionen haben (gerade mit den zusätzlichen Skills von Dritten), aber letztendlich recht eingeschränkt im Verständnis sind. Eigentlich lernt man als Benutzer die erforderliche Sprachstruktur der Assistenten. Natürliche Sprache ohne Schlagworte oder fehlende Disziplin beim Aufbau der Kommandos führen zu unterhaltsamen, aber nicht richtigen Reaktionen.
Allerdings sind Aufweckwörter bei Assistenten, die alles auf Drittserver übertragen, eigentlich eine sehr gute Idee.
Damit sind diese Assistenten für mich uninteressant und werden auch weitestgehend vermieden (zumindest als Plattform). In einzelnen Geräten sind die Dinger auch bei mir drin, einfach weil in der Konsequenz manche Gerätegattungen (z.B. Smart TV) einfach zu begrenzt sind. In den Eigenbauten aber nicht.
Als einen ersten Versuch habe ich einen einfachen ChatBot aufgesetzt (ChatterBot). Das Teil ist in Python implementiert und recht intuitiv einzurichten. Die Anbindung an Telegram wie vermutet kein echtes Problem und schnell erledigt.
Trainiert wird das System über Konversation (online oder aufgezeichnet), das von System auf Frage-Antwort Szenarien umgesetzt wird und nach Wahrscheinlichkeit dann ausgegeben wird.
Die Lösung erlaubt auch sehr komfortabel die Einrichtung von einfacher, programmierter Logik (über Logikadaptern).
Man kann damit in relativ kurzer Zeit schon Gespräche mit dem System führen und mit entsprechendem Trainingsmaterial sicher auch relativ plausibel kommunizieren. Allerdings ist es auch offensichtlich das dieses System keine Ahnung vom Inhalt der Texte hat und einfach nur plappert was passt (oder auch nicht). Ebenso fehlt eine Merkfähigkeit und Kontext ist praktisch nicht existent. Damit kann kein Gespräch über das Niveau von billigsten Smalltalk durchgehalten werden. Auch ist die Basislogik für englische Sprache aufgebaut und ohne Überarbeitung mit deutschen Texten deutlich schwächer.
Also braucht das System Hirn, und damit wird das alles sehr komplex und in weiten Teilen erst mal theoretisch.
Nach einiger Recherche im Netz bin ich auf den Begriff NLP (Natural Language Processing) gestoßen. Mit dieser Technik kann das System eine Art von Verständnis über den eingegeben Text erhalten und mit den Strukturinformationen dann z.B. den Kontext erkennen. Das ganze Gebiet ist mit Sicherheit umfangreich genug für jahrzehntelanges Studium und rumprobieren.
In der Praxis gibt es hier schon eine ganze Reihe von Frameworks die viel der Theorie in Code umgesetzt haben (und es weiter tun). Ein interessanter Vertreter hier ist spaCy. Auch hier kann man sich lange spielen, aber auch das soll erstmal nicht Ziel sein.
Eigentlich will ich ja ein transparentes System, das diese Theorien bereits implementiert hat und mir die Option gibt daraus Nutzen zu ziehen und anhand von praktischer Anwendung zu lernen (oder zu versagen beim Versuch).
Weitere Recherche zeigte mir, das auch hier bereits Lösungen geschaffen wurden, die den Ansatz bereits recht weit getrieben haben. Ein für mich sehr interessanter Kandidat hierzu ist sicher Rasa. Die Firma dahinter baut intelligente Chatbots, hat aber erhebliche Teile des Frameworks als Open Source im Netz zur Verfügung gestellt.
Es beinhaltet als Logik neben spaCy auch andere Ansätze und Strategien, die je nach Bedarf und Implementierungsstrategie eingesetzt werden können (oder auch nicht). Das System besteht aus mehreren Komponenten und bietet ein umfassendes Framework für genau diese Problemstellung. Leider ist es auch entsprechend Komplex und damit auch nicht mehr in einem Abend zusammengebastelt. Für das Thema ist das aber auch unmöglich, und die Dokumentation ist schon recht ordentlich.
Fazit:
Mit einer einfachen Lösung wird hier gar nichts erreicht werden. Auch sehr gutes Training auf einen Bot ohne Intelligenz wird letztendlich ein „Eliza“ erzeugen ohne Sachverstand. Und das hat dann auch keinen Mehrwert zum jetzigen Kommando-Bot.
Obgleich geringe Prio, wird das Thema weiter verfolgt und wahrscheinlich mal ein Prototyp mit Rasa aufgebaut. Je nach Aufwand kann das System ja dann weiter über die Zeit trainiert und verbessert werden, aber das ist erstmal noch Zukunftsgeschichte.
„Es kann keinen Flug geben ohne vorangegangene Träume vom Fliegen“ (Stanislaw Lem).