Blick hinter die Kulissen
Die sprachbasierte Fahrplan App besteht im Wesentlichen aus vier Komponenten. Die erste Komponente ist die Mobile App selber, die auf dem Smartphone installiert ist und mit welcher der User kommuniziert. Die Mobile App ist zuständig für die Spracherkennung auf User-Seite und die Beantwortung der Benutzeranfragen beziehungsweise die Anzeige der Ergebnisse, in unserem Fall die Fahrplanauskünfte. Die Transkription der Sprache geschieht mittels Googles Speech API. Die Beantwortung ist mit Androids TextToSpeech implementiert.
Die eigentliche Analyse der Benutzeranfrage, um den Abfahrts- und Ankunftsort zu bestimmen, zum Beispiel aus dem transkribierten Satz "Wann fährt der nächste Zug von Zürich nach Bern?", wird nicht von der Mobile App durchgeführt, sondern von einer zweiten Komponente, die vollständig in der Cloud betrieben wird. Für diese zweite Komponente verwenden wir zurzeit Googles Plattform API.AI. Es gibt verschiedene andere Plattformen, die eine ähnliche Funktionalität anbieten, wie zum Beispiel Watson von IBM oder LUIS von Microsoft.
Innerhalb von API.AI definiert man einen sogenannten Agenten, der die Analyse des transkribierten Textes übernimmt, das heisst die Bestimmung der Entitäten, in unserem Fall der Haltestellen. Der Agent kann so trainiert werden, dass er Entitäten in verschiedensten natürlichen Sätzen identifizieren kann. So wird beispielsweise nicht nur "Von Bern nach Zürich" korrekt erkannt, sondern auch komplexere Sätze wie "Hallo, ich muss um 19 Uhr in Zürich sein. Wann muss ich in Bern auf den Zug?". Der User soll sich nicht gezwungen fühlen, sich dem Gerät anzupassen. Ziel ist eine möglichst natürliche Konversation mit dem Smartphone.
Wenn wir den Abfahrts- und Ankunftsort bestimmt haben, sind wir bereit, die entsprechenden Fahrplaninformationen herauszufinden. Dafür verwenden wir Open Transport als weitere Komponente. Da API.AI und Open Transport nicht direkt miteinander kommunizieren können, haben wir eine dritte Komponente als Middle Layer zwischen API.AI und Open Transport eingeführt. Diese dritte Komponente ist eine Java-basierte, von uns selbst entwickelte Web-Applikation, die ebenfalls in der Cloud läuft. Zu Beginn übernahm unsere Webapplikation nur das Mapping zwischen API.AI und Open Transport und generierte die möglichst natürlichen Antworten als Text. Mittlerweile speichert sie die Konversationen und liefert zusätzliche Kontextinformationen.
Wie bereits erwähnt, ist Open Transport die vierte Komponente in unserer Architektur, welche die benötigten Routing-Informationen beziehungsweise Fahrplaninformationen liefert. Die Verwendung von Open Transport ist in unserer eigenen Webapplikation austauschbar, so dass wir bei Bedarf jederzeit auf einen alternativen Provider für Fahrplaninformationen umschalten können.
Spracherkennung und Text-to-Speech funktionieren zum Teil auch ohne Verbindung zum Internet. Für Anwendungen, welche mit anderen Diensten / Schnittstellen interagieren oder auf aktuellen Informationen beruhen, wird jedoch in der Regel eine Internetverbindung benötigt.