W(AI)NACHTEN as a Service: Brief ans Christkind
Weihnachten steht vor der Tür - und in einem (nicht ganz ernst gemeinten) Blog zeige ich Ihnen, wie künstliche Intelligenz zum Gelingen des Festes beitragen kann.
Azure Cognitive Services
Die Azure Cognitive Services stellen in Form von über 20 REST-Services “AI as a Service” zur Verfügung. Mittels API-Aufruf können Sie Bildinhalte verstehen, Sprache erkennen oder Gesichter identifizieren.
Die Services unterteilen sich in angelernte Modelle (zB OCR Recognition oder Computer Vision) und durch eigene Testdaten anpassbare Modelle (zB Custom Vision oder Language Understanding).
Die Abrechnung erfolgt in einem “Pay per use”-Modus: Sie haben keine fixen Kosten und zahlen pro Transaktion. Um loslegen zu können, benötigen Sie lediglich einen Azure-Account.
Brief ans Christkind
In Österreich bringt traditionell das Christkind die Geschenke - und um die Chancen zu steigern, dass am 24. Dezember die richtigen Packerl unter dem Christbaum liegen, schreiben die Kinder jedes Jahr einen Brief voller Wünsche.
Um dem Christkind bei seiner Arbeit zu helfen, entwickeln wir eine Handschrift-Erkennung und versuchen, den eigentlichen Wunsch automatisiert zu erkennen.
Text Recognition
Im ersten Schritt müssen wir den Text lesen können. OCR-Erkennung ist an sich nichts Neues, dass aber auch Handschriften erkannt werden, ist durchaus beeindruckend.
Melden Sie sich im Azure Portal an und erstellen Sie eine neue Resource vom Typ Computer Vision. Die ersten 10.000 Transaktionen pro Monat sind kostenlos, wenn Sie mit Ihren Wünschen entsprechend haushalten, sollten Sie damit durchkommen ;-)
In der Registerkarte Keys finden Sie dann zwei Keys, beide können zur Authentifizierung gegenüber dem Service verwendet werden.
In der Registerkarte Overview (oder im Quick start) finden Sie den Endpoint Ihres Services. Dieser ist abhängig vom ausgewählten Rechenzentrum - in meinem Fall zum Beispiel https://westeurope.api.cognitive.microsoft.com/
.
Sie sind nur mehr einen REST-Call vom Ergebnis entfernt, nützen Sie beispielsweise Postman zum Testen.
Achtung: Der mode-Parameter “Handwritten” ist case-sensitiv. Ganz kann sich Microsoft noch nicht von seiner Vergangenheit lossagen ;-)
POST
https://westeurope.api.cognitive.microsoft.com/vision/v2.0/recognizeText?mode=Handwritten
Headers:
Ocp-Apim-Subscription-Key: <Ihr Key>
Content-Type: application/octet-stream
Body:
binary (wählen Sie in Postman einfach das Bild, auf dem Sie Text erkennen möchten)
Nach dem Absenden des Requests sollten Sie einen 202 Accepted-Status als Antwort erhalten. Das Service ist asynchron ausgelegt: Mit dem POST-Request starten Sie die Analyse, das Ergebnis der Erkennung wird aber nicht sofort zurück geliefert, sondern steht unter einer weiteren URL zur Abholung bereit. Beachten Sie dafür den Operation-Location-Header in der Response und setzen Sie einen authentifizierten GET-Request auf diese URL ab.
GET
https://westeurope.api.cognitive.microsoft.com/vision/v2.0/textOperations/<Ihre ID aus dem Operation-Location-Header>
Headers:
Ocp-Apim-Subscription-Key: <Ihr Key>
Als Ergebnis erhalten Sie den erkannten Text inklusive seiner Position im Bild. Zur näheren Betrachtung empfehle ich ein Online-Tool, zB jsonformatter.org. Durch das Setzen eines JMESPath-Filters können Sie den erkannten Satz rasch betrachten.
Text-Verständnis mit LUIS (Language Understanding Intelligent Service)
Im nächsten Schritt wollen wir verstehen, um welchen Wunsch es sich handelt. Es ist uns egal, wie genau der Wunsch formuliert wurde (“Ich möchte…”, “Ich hätte gerne…”, “Ich wünsche mir…”) - wir wollen den Satz auf seine Kern-Aussage reduzieren.
Mit klassischen Software-Entwicklungs-Ansätzen würde man vermutlich einen Parser für die deutsche Sprache schreiben - und scheitern. Neben den vielen Formulierungsmöglichkeiten müssten auch Satzzeichen, Tippfehler, Füllwörter, etc. berücksichtigt werden.
Alternativ dazu verwenden wir wieder Machine Learning - diesmal in Form von LUIS - Language Understanding Intelligent Service. LUIS versucht mit Hilfe von Testsätzen ein Modell zu trainieren und damit die entscheidenden Informationen herauszufinden.
Melden Sie sich unter luis.ai an und erstellen Sie eine neue App in deutscher Sprache. Zunächst erstellen Sie einen Intent, also die Grund-Intention Ihrer Sätze. Nennen Sie den Intent Wishes.
Anschließend werden Sie aufgefordert, Testsätze (so genannte Utterances) bereit zu stellen. Lassen Sie Ihrer Phantasie freien Lauf und überlegen Sie, wie Sie einen Wunsch formulieren würden. Sie benötigen mindestens 5 Sätze, je mehr desto besser.
Alle Testsätze sind nun dem Intent “Wishes” zugeordnet. Würden Sie einen beliebigen Satz an LUIS senden, würde das Service zumindest versuchen, die Intention zu erkennen. Wir gehen aber noch einen Schritt weiter: Wir wollen den Wunsch erfahren.
Dazu klicken Sie den Wunsch im ersten Testsatz an und erstellen ein neues Entity namens Wish. Wiederholen Sie den Vorgang für alle Testsätze (Sie können das bereits erstellte Entity einfach auswählen).
Wir sind bereit für einen ersten Testlauf. Klicken Sie auf Train in der Menüleiste und warten Sie einige Augenblicke, bis LUIS ihre Testsätze analysiert hat.
Mit Klick auf Test öffnet sich ein interaktives Fenster, in dem Sie die Kommunikation mit LUIS testen können. Übernehmen Sie den Satz aus der OCR-Recognition von vorhin und warten Sie ab, was passiert…
Wenn Sie bereits zufrieden sind: perfekt! Wenn die Erkennung noch nicht klappt: mehr Testsätze, trainieren, testen. Machine Learning steht und fällt mit guten Testdaten - und mein Beispiel mit 5 Sätzen ist natürlich für die Praxis noch nicht gerüstet.
Wir Entwickler sollten uns schnell daran gewöhnen, dass wir nicht mehr (ausschließlich) Regeln in Form von Sourcecode entwickeln. Machine learning wird zum Werkzeug, und Technologien wie die Cognitive Services machen den Einstieg erheblich leichter.
Einen Videomitschnitt des gesamten Vortrages finden Sie hier (Danke an Rainer Stropek):