Wie programmiere ich einen Chatbot für Börsenkurse?

Posted on Posted in Text Analytics

Vor ungefähr 50 Jahren wurde das erste intelligente Computerprogramm vorgestellt. Hierbei handelte es sich um einen einfachen Chatbot, der hauptsächlich mit Gegenfragen antwortete um den Benutzer zum Weitermachen zu bewegen. Wirkliche Intelligenz war natürlich nicht vorhanden. Es zeigte aber bereits, wie die Kommunikation zwischen Computer und Mensch aussehen kann. Seitdem hat sich natürlich vieles verändert. Der heute wohl bekannteste Chatbot heißt Siri und befindet sich auf dem Apple iPhone. Aber auch heute ist das Erstellen eines eigenen Chatbots noch relativ komplex. Vor allem, wenn dieser jede Menge verschiedene Frage beantworten sollen. Im nachfolgenden Artikel zeigen wir dir wie du einen einfachen Chatbot bauen kannst, der dir den aktuellen Börsenkurs eines Unternehmens aufzeigt. Dabei besteht die Schwierigkeit zunächst darin, das Unternehmen in einem Satz zu erkennen und anschließend auf ein Börsensymbol abzubilden. Mit dem Börsensymbol kannst du über eine API den aktuellen Kurs abfragen und diese Information ausgeben.

Hinweis: Dieser Beitrag beschreibt das grundsätzliche Vorgehen für den Bau eines Chatbots. Den kompletten Code des Chatbots findest du auf Github.

pexels-photo

Daten sammeln

Zunächst solltest du dir einige Beispielfragen überlegen, die ein Benutzer deinem Chatbot stellen kann. Das hilft dir zum einen dabei das Problem besser zu verstehen und zeigt dir zum anderen wie gut dein Bot bereits funktioniert. Natürlich kannst du die Beispiele immer wieder nutzen, um deinen aktuellen Stand während der Entwicklung zu testen. Am besten erweiterst du deine Beispiele auch mit Beispielen von anderen Personen. Dazu kannst du entweder Kollegen fragen oder bei Twitter nach Fragen suchen, die Wörter wie Aktie, Aktienkurs oder ähnliches enthalten. Bei der Entwicklung deines Chatbots könntest du beispielsweise folgende Fragen verwenden:

  • Daimler Aktie: Wohin klettert der Aktienkurs?
  • Wie steht es eigentlich um den Aktienkurs von Puma?
  • Hat schon jemand ermittelt, welche Auswirkungen diese Ankündigung auf den Aktienkurs von Twitter haben wird?
  • Warum hat der Aktienkurs von Heliad eigentlich so einen dermaßen Abstand zum Substanzwert?
  • Hat verafake eigentlich eine Auswirkung auf den Aktienkurs von der RTL Group?
  • Hat mal jemand den aktuellen Twitter Aktienkurs für mich?
  • Oh eine Apple-Keynote. Geht jetzt der Aktienkurs wieder hoch?
  • Mal was anderes, wie steht der Aktienkurs für Rosen?
  • Trump gegen Apple – was bedeutet das für den Aktienkurs?
  • Wetten der Aktienkurs von Samsung bricht ein? Das war zu wenig. VR is not ready for primetime yet.
  • Ist der Kurs von AAPL nach der WEKO-Ankündigung bereits um 10% gefallen?
  • Bleibt die BMW Aktie stabil?
  • Was ist eigentlich mit der Aktie von Funkwerk los?
  • Tesla präsentiert neuen SUV! Die Zahlen sprechen für sich. Was macht das mit dem Kurs der Aktie?
  • Sinkt der Kurs der Baidu-Aktie weiter?
  • Seit Ende Juli fällt der Kurs der Apple-Aktie. Ist das nur ein Zwischentief?
  • Deutsche Börse Aktie: Jetzt wieder kaufen?
  • Was macht der Dax?
  • Hat gerade jemand die Börse im Blick und weiß, wie teuer guter Rat im Moment so ist?
  • Wie hat sich der Aktienkurs von Google in den letzten Monaten entwickelt?
  • Zeige mit den Aktienkurs von Google.
  • Zeige mit den Aktienkurs von Siemens vom letzten Jahr bis heute.
  • Lufthansa fliegt wieder Türkei an: Was macht die Aktie?
  • Nach Putschversuch: Aktie der Turkish Airlines bricht ein.

Problem-Definition und Analyse

Jeder Chatbot hat verschiedene Frageabsichten, die er versucht zu erkennen. Im Englischen kennt man diese Absichten unter dem Begriff Intent. Mögliche Intents sind zum Beispiel die Frage nach dem aktuellen Aktienkurs oder aber die Frage der Kursentwicklung der letzten Monate. Ignoriere bei deinem Chatbot zunächst die Tatsache, dass es mehrere Intents gibt, denn das vereinfacht das Ganze. Nimm also an es gäbe es nur einen Intent, nämlich den aktuellen Aktienkurs eines Unternehmens. Natürlich können die Fragen auch direkt Börsensymbole enthalten. Wie z.B. in der folgenden Frage: „Ist der Kurs von AAPL nach der WEKO-Ankündigung bereits um 10% gefallen?“ Aber auch Unternehmen, die eigentlich gar keine Unternehmen sind, können in den Fragen inbegriffen sein: „Mal was anderes, wie steht der Aktienkurs für Rosen?“ Wenn es sich dann, aber doch um ein „echtes“ Unternehmen handelt, ist es möglich, dass der Name von diesem aus mehreren Wörtern besteht. Wie z.B. in folgender Frage: „Nach Putschversuch: Aktie der Turkish Airlines bricht ein.“ Aber auch Mehrdeutigkeiten können in der Fragestellung enthalten sein. Ein Beispiel ist der Satz: „Wetten der Aktienkurs von Samsung bricht ein? Das war zu wenig. VR is not ready for primetime yet.“ In Kontext dieser Frage steht VR für Virtual Reality. Oftmals verwendet man die Abkürzung VR aber auch als das Börsensymbol von Validus Holdings, Ltd.

construction-work-carpenter-tools

Extraktion von Entitäten

Der erste Schritt zu deinem Chatbot besteht darin, aus einem Satz die sogenannten Entitäten zu extrahieren. In deinem Fall sind das die Unternehmensnamen. Diese Extraktion ist ein klassischer Anwendungsfall des Machine Learnings. Ziel ist es jedes Wort eines Satzes zu klassifizieren. Entweder ist das Wort ein Unternehmensname oder es ist kein Unternehmensname. Allerdings hast du in deiner Analyse bereits festgestellt, dass es auch Unternehmensnamen gibt, die aus mehreren Wörtern bestehen können, wie zum Beispiel „Turkish Airlines„. Um auch solche Fälle zu erfassen, solltest du die Klassen des Klassifizierens abändern. Anstatt des Falles, dass es nur zwei Klassen gibt (Wort ist ein Unternehmensname, Wort ist kein Unternehmensname), solltest du deinen Klassifizierer um eine Klasse erweitern (Beginn eines Unternehmensnamens (B), innerhalb eines Unternehmensnamens (I), außerhalb eines Unternehmensnamens (A)). Wie in folgenden Beispielen:

  • Bleibt/A die/A BMW/B Aktie/A stabil/A
  • Aktie/A der/A Turkish/B Airlines/I bricht/A ein/A.

Glücklicherweise brauchst du einen Klassifizierer dieser Art nicht selbst entwickeln. Für viele Sprachen, unter anderem auch Deutsch, gibt es bereits sogenannte Named Entity Recognizer (NER). Ein Named Entity Recognizer extrahiert verschiedene Entitäten aus einem Satz. Als Entitäten gelten sowohl Unternehmensnamen, als auch Personen sowie Orte. Natürlich werden alle Named Entitys auch als solche markiert. Hier ein Beispiel:

  • Max/B-Person Mustermann/I-Person arbeiten/A als/A Handwerker/A in/A Darmstadt/B-Ort.

In deinem Chatbot kannst du zum Beispiel den Named-Entity-Recognizer, der an der Stanford Universität entwickelt wurde, verwenden. Dieser unterstützt auch die deutsche Sprache. Eine Demo des NER findest du unter folgendem Link: http://nlp.stanford.edu:8080/ner/process. Um ihn mit deutschem Text zu testen, musst du bei dem Punkt „Classifier“ den deutschen Classifier auswählen. Nach ein paar Beispielen wirst du dann schnell feststellen, dass nicht alle Enitäten erfasst werden können. Bei folgendem Satz wird dein NER zum Beispiel gar keine Entitäten erkennen: „Hat mal jemand den aktuellen Twitter Aktienkurs für mich?“ Aus diesem Grund benötigst du noch weitere Methode, um die Unternehmensnamen extrahieren zu können. Für die finale Version deines Bots gibt es folgende Methoden:

Nominalphrasen: Eine Nominalphrase (NP) ist eine abgeschlossene syntaktische Einheit innerhalb eines Satzes, deren Kopf ein Nomen ist.

Präpositionalphrase: Eine Präpositionalphrase (PP) ist in der Grammatik eine abgeschlossene Wortgruppe, deren Kopf eine Präposition ist.

Part-of-Speech-Tag (POS) von Type NE: Unter Part-of-speech Tagging versteht man die Zuordnung von Wörtern und Satzzeichen eines Textes zu Wortarten. Hierzu wird sowohl die Definition des Wortes als auch der Kontext berücksichtigt. Wörter der Wortart NE (Named Entity) werden auch als Kandidaten von Unternehmensnamen berücksichtigt.

Ähnlich wie beim NER werden auch Phrasen und Part-of-Speech-Tags mit Klassifizierern erkannt. Auch hierfür gibt es bereits ein Vielzahl von fertigen Klassifizieren. Für deinen Chatbot kannst du wieder Tools von Stanford verwenden. Mit Hilfe von NER, Pharsen und POS kannst du jetzt aus jedem Satz mehrere Entitäten extrahieren. Diese Entitäten musst du anschließend zu Börsensymbolen umwandeln. Dadurch, dass du nun mehrere Entitäten für einen Satz hast, kann es vorkommen, dass du nicht mehr genau weißt, welcher Kandidat der richtige ist. Hier ein Beispiel:

Daimler Aktie: Wohin klettert der Aktienkurs?
=> Daimler Aktie (NER), der Aktienkurs (NP), Daimler (NE)

Um dieses Problem zu lösen kannst du die einzelnen Kandidaten durch Machine Learning bewerten lassen und eine Rangfolge aufstellen oder aber gleich einen spezialisieren NER programmieren, der Unternehmensnamen zuverlässig erkennt. Für beide Verfahren benötigst du allerdings jede Menge Trainingsdaten, über die du zum jetzigen Zeitpunkt noch nicht verfügst. Trotzdem wirst du relativ schnell erkennen, dass nicht jeder Kandidat zu einem Börsenkurs führt. Aus diesem Grund kannst du davon ausgehen, dass jede Menge Kandidaten verloren gehen, sobald du versuchst diese in ein Börsensymbol umzuwandeln.

Von Entitäten zu Börsensymbolen

Nachdem du alle möglichen Entitäten gefunden hast, kannst du diese nun in Börsensymbole umwandeln. Die Umwandlung kannst du aber nicht automatisch durchführen, denn hierzu benötigst du mehrere Wissensquellen. Zunächst einmal ist es hilfreich über eine möglichst vollständige Liste an Börsensymbolen mit Unternehmensnamen zu verfügen. Leider wird eine Liste in dieser Art nicht kostenfrei angeboten. Allerdings hast du die Möglichkeit mit dem Yahoo-Ticker-Symbol-Downloader circa 80 bis 90 Prozent der Liste herunterzuladen. Anschließend kannst du die Liste nehmen und daraus ein Suchindex erstellen. Für den Suchindex und das anschließende Suchen darin empfiehlt es sich Apache Lucene zu verwenden. Da die Liste der Börsenkurse mit circa 100.000 Einträgen ziemlich klein ist, kannst du den Suchindex im Hauptspeicher halten und benötigst keine komplexeren Technologien wie Elasticsearch oder Apache Solr. Das Problem an diesem Suchindex ist allerdings, dass ein Unternehmen darin mehrmals auftauchen kann, da es für jeden Handelsplatz ein eigenes Börsensymbol gibt. Für die Daimler AG gibt es z.B. die Symbole DAI.F (Frankfurt), DAI.MU (München) und DAI.SG (Stuttgart). Ein weiteres Problem besteht darin, dass mache Unternehmen unter einem anderen Namen an der Börse auftauchen. Das bekanntestes Beispiel ist Google, denn der Konzern ist mittlerweile unter dem Namen Alphabet an der Börse zu finden.

Um diese Probleme zu lösen, kannst du als weitere Wissenquelle noch Wikidata verwenden. Bei Wikidata handelt es sich um eine Sammlung von Objekten, die aus beliebig vielen Aussagen und Behauptungen bestehen. Ein Objekt stellt in deinem Fall ein Unternehmen dar. Für das Unternehmen werden auch Aussagen über das Börsensymbol getroffen. Über die Wikidata-API kannst du nach Objekten suchen und dir dann das Börsensymbol ausgeben lassen. Das funktioniert für bekannte Unternehmen ziemlich gut. Für kleinere Firmen wird aber in den meisten Fällen leider kein Objekt oder Börsensymbol gefunden. Eine Kombination der beiden oben genannten Methoden führt häufig zu einem richtigen Börsensymbol. Aber Vorsicht: gerade bei weniger bekannten Unternehmen kann es sich dabei dennoch um eine Falschaussage handeln.

marketing-man-person-communication

Abfrage von Aktienkursen und Ausgabe des Textes

Nachdem du den Unternehmensnamen im Text identifiziert und die in ein Börsensymbol umgewandelt hast, beginnt nun der einfache Teil: Mithilfe des Börsensymbol kannst du nun über die Yahoo Finance API die Aktienkurse abrufen und anschließend einen Ausgabetext generieren. Am besten machst du das nur, wenn du dir wirklich sicher bist, dass du auch ein gutes Börsensymbol gefunden hast. Sollte das nicht der Fall sein, frag besser noch einmal nach welches Börsensymbol der Nutzer meint. Für den Fall, dass kein Börsensymbol vorhanden ist, ist es am besten, wenn du sagst, dass kein Unternehmen identifiziert werden konnte. Bei einem möglichen Produktbetrieb empfehlen wir dir die Antworten vorher immer noch einmal durch einen Menschen zu überprüfen, um sicherzustellen, dass sie auch stimmen. Damit kannst du dir auch eine größere Datenbasis aufbauen und weitere Verbesserungen an deinem Chatbot vornehmen.

Analyse der finalen Ausgabe

Daimler Aktie: Wohin klettert der Aktienkurs?
Der Kurs von Daimler (DAI.F) beträgt aktuell: 59.515 EUR
Wie steht es eigentlich um den Aktienkurs von Puma?
Der Kurs von Puma (PUM.F) beträgt aktuell: 220.079 EUR.
Hat schon jemand ermittelt welche Auswirkungen diese Ankündigung auf den Aktienkurs von Twitter haben wird?
Der Kurs von Twitter (TWTR) beträgt aktuell: 18.75 USD.
Warum hat der Aktienkurs von Heliad eigentlich so einen dermaßen großen Abstand zum Substanzwert?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: HPBK.MU (Heliad)?
Hat verafake eigentlich eine Auswirkung auf den Aktienkurs von der RTL Group?
Der Kurs der RTL Group (RRTL.F) beträgt aktuell: 75.37 EUR.
Hat mal jemand den aktuellen Twitter Aktienkurs für mich?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: TWR.DU (Twitter Aktienkurs)?
Oh eine Apple-Keynote. Geht jetzt der Aktienkurs wieder hoch?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: APC.HM (Apple-Keynote)?
Mal was anderes, wie steht der Aktienkurs für Rosen?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: MNK (Mal), ROI.F (Rosen)?
Trump gegen Apple – was bedeutet das für den Aktienkurs?
Der Kurs von Apple (AAPL) beträgt aktuell: 100.33 USD.
Wetten, dass der Aktienkurs von Samsung ein bricht? Das war zu wenig. VR is not ready for primetime yet.
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: SSNLF (Samsung), VRX (VR)?
Ist der Kurs von AAPL nach der WEKO-Ankündigung bereits um 10% gefallen?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: AAPL (AAPL), CDNL (%)?
Bleibt die BMW Aktie stabil?
Der Kurs von BMW (BMW.F) beträgt aktuell: 75.38 EUR.
Was ist eigentlich mit der Aktie von Funkwerk los?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: SIEGY (Aktie), FEW.SG (Funkwerk)?
Tesla präsentiert den neuen SUV! Die Zahlen sprechen für sich. Was macht das mit dem Kurs der Aktie?
Der Kurs von Tesla (TSLA) beträgt aktuell: 230.00 USD.
Sinkt der Kurs der Baidu-Aktie weiter?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: BIDU (Baidu-Aktie)?
Seit Ende Juli fällt der Kurs der Apple-Aktie. Ist das nur ein Zwischentief?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: APC.HM (Apple-Aktie)?
Deutsche Börse Aktie: Jetzt wieder kaufen?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: DWNI.DU (Deutsche Börse Aktie)?
Was macht der Dax?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: DXR (Dax)?
Hat gerade jemand die Börse im Blick und weiß, wie teuer guter Rat im Moment so ist?
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: RATE (Rat), MNTA (Moment)?
Wie hat sich der Aktienkurs von Google in den letzten Monaten entwickelt?
Der Kurs von Google (GOOG) beträgt aktuell: 742.27 USD.
Zeige mit den Aktienkurs von Google.
Der Kurs von Google (GOOG) beträgt aktuell: 742.27 USD.
Zeige mit den Aktienkurs von Siemens vom letzten Jahr bis heute.
Der Kurs von Siemens (SIE.F) beträgt aktuell: 94.997 EUR.
Lufthansa fliegt wieder die Türkei an: Was macht die Aktie?
Der Kurs von Lufthansa (LHA.F) beträgt aktuell: 10.257 EUR.
Nach Putschversuch: Aktie der Turkish Airlines bricht ein
Ich bin mir nicht sicher was du meinst? Meinst du eins hiervon: SIEGY (Aktie), AAL (Airlines), TKF (Turkish Airlines)?

Bei der Analyse der Ergebnisse kannst du festzustellen, dass es bei einigen Beispielen schon ganz gut funktioniert hat. Bei anderen hingegen ist sich der Algorithmus noch unschlüssig welcher Aktienkurs gemeint ist. Dabei treten aber auch etwas kuriose Vorschläge auf. Bei dem Satz: „Hat gerade jemand die Börse im Blick und weiß, wie teuer guter Rat im Moment so ist?“ werden die Entitäten „Rat“ und „Moment“ extrahieren und zu Börsensymbolen umgewandelt (RATE und MNTA). Das hat natürlich auch damit zu tun, dass verschiedene Börsenunternehmen aus der ganzen Welt vorhanden sind, deren Namen ziemlich ähnlich zu deutschen Nomen sind, die normalerweise keinen Unternehmensnamen repräsentieren. Weitere Probleme treten auch bei Wörtern mit Bindestrichen, wie „Baidu-Aktie“ oder „Apple-Keynote“, auf. Die hier eingesetzen Tools sehen „Baidu-Aktie“ als ein Wort. Das macht das Finden des richtigen Börsenkurses schwieriger. Positiv ist, wenn der Wert eines Aktienkurses aufgegeben wird, es sich dabei auch immer um den Aktienkurs des gefragten Unternehmens handelt.

pexels-photo-28462

Zusammenfassung und Ausblick

Mit Hilfe dieses Artikels bist du also in der Lage einen Chatbot, mit schon vorhanden Machine Learning Komponenten, zu entwickeln. Dabei stoßt du auf einige Probleme, die bei fast jeder Chatbot-Entwicklung auftreten. Schwierigere Konflikte, wie das Erkennen von Intents, lässt du dabei außen vor. Für die Entwicklung eines leistungsfähigeren Chatbots bist du auf eine viel größere Anzahl von Beispielfragen und -antworten angewiesen, denn nur damit kannst du die Qualität der Ausgaben deutlich verbessern. Ein Vorgehen zu solch einem Datensatz wäre, den Bot zunächst mit Menschen zu betreiben. Im Anschluss kannst du dann einen Bot entwickeln, der dem Menschen Antwortvorschläge macht, die er nur noch akzeptieren muss. Ist die Akzeptanz-Rate hoch genug, kann der Bot vollautomatisch im Produktionsbetrieb eingesetzt werden.

Du möchten mehr über die Möglichkeiten von Machine Learning erfahren? Mit unseren Workshops geben wir dir einen Überblick und zeigen welche Besonderheiten bei der Durchführung von Machine Learning-Projekten zu beachten sind. Mehr Informationen