Fallstudie von Grammarly Nutzung von Deep Learning für Swipe-Tippen auf der iOS-Tastatur

Von Projektteam von Grammarly* 11 min Lesedauer

Schneller und präziser schreiben, ohne jeden Buchstaben einzeln zu tippen – eine neue Deep-Learning-Technologie von Grammarly macht es möglich. Wie revolutioniert diese Innovation das Wischen auf der iOS-Tastatur? Das zeigt das Projektteam von Grammarly anhand dieser Schritt für Schritt Erklärung ihres Projekts.

Textnachrichten mithilfe von Wischbewegungen anstatt Tippen auf iOS sind durch Grammarly möglich.(Bild:  © Bojan - stock.adobe.com)
Textnachrichten mithilfe von Wischbewegungen anstatt Tippen auf iOS sind durch Grammarly möglich.
(Bild: © Bojan - stock.adobe.com)

Während die Texteingabe auf der mobilen Tastatur im Vergleich zum Tippen durch Wischen viel schneller ist, ist es eine Herausforderung, eine Geste in ein Wort zu entschlüsseln. Das Team des Softwareentwicklers Grammarly hat vor kurzem dessen Ansatz für die Dekodierung von Wischgesten bei der Grammarly-Tastatur für iOS überarbeitet. In diesem Beitrag wird daher erläutert, wie die Ingenieure den Decoder für die Wischgesteneingabe für iOS auf Basis eines neuronalen Netzes entwickelt und verbessert haben: den Neural Swipe Decoder.

Swipe Typing und seine Herausforderungen

Beim Wisch-Tippen wird nicht jeder Buchstabe des Wortes, das geschrieben werden soll, einzeln auf der Tastatur eingegeben. Stattdessen zieht man mit dem Finger über die jeweiligen Buchstaben, um das Wort kontinuierlich zu “zeichnen”.

Die Wischbewegung "zeichnet" das Wort.(Bild:  Grammarly)
Die Wischbewegung "zeichnet" das Wort.
(Bild: Grammarly)

Um ein einwandfreies Benutzererlebnis für das Wischen über die Tastatur zu schaffen, müssen viele interessante technische Probleme gelöst werden: Wie kann man den Beginn einer Geste erkennen, um festzustellen, ob der Benutzer streicht oder nur tippt? Wie sollte man die "Spur" des Wischens animieren, um dem Benutzer genau das richtige Maß an Feedback zu geben?

In diesem Beitrag geht es um das wichtigste Problem: Das Dekodieren anhand des Musters, das der Nutzer wischte. Um dies effizient zu meistern, muss sich zunächst mit den drei großen Herausforderungen beschäftigt werden:

  • 1. Wischmuster sind sehr kompliziert.
  • 2. Der Arbeitsspeicher (RAM) ist auf Mobilgeräten begrenzt.
  • 3. Eine Dekodierung mit geringer Latenz und hoher Reaktionsfähigkeit ist ein Muss.

Wischmuster

Wischmuster können sehr komplex sein, insbesondere im Vergleich dazu, wie Menschen auf einer Tastatur tippen. Zum einen haben viele verschiedene Wörter nahezu oder gänzlich identische Wischmuster. Ein Beispiel sind die Wörter "god" und "good", die das gleiche Wischmuster haben:

Ein Beispiel dafür, wie das Wischsystem die gleiche Geste für das Wort "god" oder "good" dekodiert, je nachdem, in welchem Kontext das Wort vorkommt. (Bild:  Grammarly)
Ein Beispiel dafür, wie das Wischsystem die gleiche Geste für das Wort "god" oder "good" dekodiert, je nachdem, in welchem Kontext das Wort vorkommt.
(Bild: Grammarly)

Ein Beispiel dafür, wie das Wischsystem die gleiche Geste für das Wort "god" oder "good" dekodiert, je nachdem, in welchem Kontext das Wort vorkommt. (Bild:  Grammarly)
Ein Beispiel dafür, wie das Wischsystem die gleiche Geste für das Wort "god" oder "good" dekodiert, je nachdem, in welchem Kontext das Wort vorkommt.
(Bild: Grammarly)

Ein weiterer solcher Fall sind die Wörter „good“ und „food“, bei denen das Wischmuster fast identisch ist. Auch „play“ und „pat“ – sehr unterschiedliche Wörter – haben nahezu identische Wischmuster.

Der Decoder muss zwischen all diesen ähnlichen Mustern unterscheiden und gleichzeitig kleine Fehler ausgleichen, die ein Benutzer beim Wischen machen könnte. Er muss auch in der Lage sein, Präfixe und unvollständige Wörter korrekt zu interpretieren. Wenn man z. B. nur den ersten Teil eines Wortes streicht, wie etwa "specific", wenn man "specifically" schreiben möchte, dann sollte die Tastatur in der Lage sein, dieses Wort zu vervollständigen.

Speicher

Die Dekodierung der Wischeingabe sollte vollständig lokal auf dem Gerät des Benutzers erfolgen, um den Datenschutz zu gewährleisten. Der einer Drittanbieter-Tastatur auf der iOS-Plattform zur Verfügung stehende Speicherplatz beträgt etwa 60 MiB. Diese Zahl wird zwar nirgends veröffentlicht, aber die Entwickler von Grammarly haben sie auf der Grundlage ihrer Experimente ermittelt. Das bedeutet, dass jede Art von Benutzererfahrung, die man bauen will, in das 60-MiB-Speicherbudget passen muss.

Latenz und Reaktionsgeschwindigkeit

Feedback in Echtzeit: Um während des Tippens eine Rückmeldung zu geben, liefert die Tastatur Ergebnisse, sobald man mit dem Wischen beginnt - und nicht erst, wenn die gesamte Geste ausgeführt und der Finger wieder gehoben wurde. Das bedeutet, dass der Decoder für Wischgesten kontinuierlich laufen muss. Wenn ein neuer Berührungspunkt beobachtet wird, muss er seinen Vorschlag schnell aktualisieren, um kontinuierlich arbeiten zu können.

Latenz und Benutzererfahrung: Um eine reibungslose Benutzererfahrung zu gewährleisten, muss eine Geste durchschnittlich in etwa 17 ms verarbeitet werden können. Das iPhone erfasst Berührungspunkte mit einer Frequenz von 60 Hz (60 Punkte pro Sekunde). Wenn das Ergebnis nicht innerhalb von 17 ms (1.000/60) erzeugt werden kann, wird wahrscheinlich ein Berührungspunkt verpasst, da iOS das Bewegungsereignis des nächsten Berührungspunktes nicht bereitstellt, wenn die Grammarly-Tastatur nicht bereit ist, es zu akzeptieren und zu verarbeiten.

Wischdekodierung mit neuronalen Netzwerken

Was ist angesichts dieser Herausforderungen der beste architektonische Ansatz für einen Swipe Decoder? Wie bei den meisten technischen Problemen gibt es auch hier keine allgemeingültig richtige Antwort. In der Vergangenheit hat die Grammarly-Tastatur für iOS den traditionellen Ansatz eines formorientierten Decoders verwendet. Bei dieser Technik wird die Eingabegeste (Form) des Benutzers mit den Standardformen verschiedener Wörter verglichen, wobei ein Formähnlichkeitsalgorithmus wie Dynamic Time Warping verwendet wird.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Cloud Computing

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Angesichts der Komplexität von Wischmustern kann dieser Ansatz jedoch fragil sein. Der formabhängige Decoder von Grammarly hatte immer noch Probleme mit der Genauigkeit, selbst nach Hinzufügen von Vor- und Nachbearbeitung der Benutzereingaben und manueller Feinabstimmung.

Das Team beschloss daher, das Problem durch maschinelles Lernen zu lösen. Durch das Trainieren eines neuronalen Netzwerks mit einer großen Menge an Daten zu Wischgesten konnte sichergestellt werden, dass Muster, an deren Codierung man nie gedacht hatte, genau erfasst wurden. Was für einen formbasierten Decoder schwierig ist, ist für ein neuronales Netzwerksystem einfach:

  • 1. Buchstabenbetonung: Ein neuronales Netzwerk kann lernen, längere Verweilzeiten auf bestimmten Buchstaben zu interpretieren, um bei der Unterscheidung zwischen Wörtern wie "to"/"too" und "of"/"off" zu helfen. Beispielsweise ermöglicht das längere Verweilen oder mehrmalige Tippen auf die Buchstaben "o" oder "f" in den oben genannten Beispielen dem Netzwerk, das beabsichtigte Wort zu entschlüsseln.
  • 2. Einzigartige Präfixe: Ein neuronales Netz kann lernen, Wörter zu vervollständigen, auch wenn der Benutzer eine Teilgeste als Eingabe wischt, solange die Vorsilbe für das Wort eindeutig ist.
  • 3. Buchstabenumstellung: Das Netzwerk kann lernen, Gesten zu korrigieren, bei denen fälschlicherweise ein paar Buchstaben im gewischten Wort vertauscht oder ausgelassen wurden, solange es kein Wort gibt, mit dem das Netzwerk das beabsichtigte Wort verwechseln kann.

Ein Grund, der gegen die Verwendung eines neuronalen Netzes spricht, ist die Leistung. Denn man muss zusätzliche Arbeit leisten, um sicherzustellen, dass das Modell speichereffizient und schnell bei der Inferenz ist. Durch die Erläuterung der Erstellung und der Betrachtung der Architektur des Neural Swipe Decoders wird einleuchtend, wie das Grammarly Team dies erreicht hat.

Das Modell des Neural Swipe Decoders

Der Neural Swipe Decoder begann als Grammarly-Hack-Week-Projekt. Eine handvoll Ingenieure trainierte ein Deep-Learning-Modell mit einem öffentlich verfügbaren Datensatz. Als die Ergebnisse vielversprechend aussahen, widmete sich das gesamte Team dem Projekt. In etwa vier Monaten stellte das Team die Funktion bereit.

Der Neural Swipe Decoder ist ein LSTM-Encoder-Decoder (seq2seq)-Modell mit Dot-Product-Attention. Es ist darauf trainiert, eine Liste von Eingabe-Touchpoints, jeweils mit 33 Eingabemerkmalen, zu akzeptieren und bei jedem Dekodierungsschritt einen einzelnen englischen Buchstaben (a–z) auszugeben.

Modell-Architektur

Letztlich hat sich das Entwicklerteam für einen LSTM (Long Short Term Memory)-Encoder-Decoder mit Attention entschieden, weil diese Modelle bei einer kleinen Eingabesequenz gut funktionieren. Die typische Eingabegeste besteht aus durchschnittlich 70 Berührungspunkten. Der LSTM-Encoder-Decoder kann Inferenzen mit geringem Speicherbedarf und niedriger Latenzzeit durchführen. Beides ist für die Entwicklung auf mobilen Geräten entscheidend.

Das Modell verfügt über ein 2-Schicht-LSTM sowohl für den Encoder als auch für den Decoder. Dabei haben die Grammarly-Entwickler festgestellt, dass dies eine angemessene Anzahl von Schichten ist, um eine hohe Genauigkeit zu gewährleisten und gleichzeitig die Latenzzeit niedrig zu halten. Es hat 7,5 Millionen trainierbare Parameter, was bedeutet, dass es relativ klein ist und auf das Gerät passt.

Neuronales Swipe-Decoder-Modell.(Bild:  Grammarly)
Neuronales Swipe-Decoder-Modell.
(Bild: Grammarly)

Für die Inferenz wird zunächst ein Pruning-Schritt durchgeführt, um zu nahe beieinander liegende Touchpoints zu entfernen. Dabei werden dem Modell 33 Eingangsmerkmale pro erfassten Berührungspunkt zur Verfügung gestellt:

  • Normalisierte x- und y-Koordinaten: Die Tastatur wird auf eine quadratische Einheitsgröße skaliert, um die unterschiedlichen Tastaturgrößen zu berücksichtigen, von denen die Touchpoints gesammelt wurden.
  • Ein Satz von 26 Wahrscheinlichkeiten, der angibt, wie wahrscheinlich es ist, dass dieser Touchpoint einem der 26 englischen Buchstaben zugeordnet wird. Man berechnet die Wahrscheinlichkeit, indem der Kehrwert der Entfernung jedes Tastenzentrums von den Berührungspunkten genommen und anschließend die Softmax-Funktion über alle 26 Buchstaben angewandt wird. Das von Google veröffentlichte Paper "Long Short Term Memory Neural Network for Keyboard Gesture Decoding" stellt ein Schema vor, das 30 Buchstaben, einschließlich gängiger Interpunktionssymbole, verwendet und sie stattdessen mit der One-Hot-Kodierung darstellt. Bei Grammarly ist man in der Annahme, dass weichere wahrscheinlichkeitsbasierte Formulierung besser sind als die härtere One-Hot-Kodierung, da sie dem Modell mehr Informationen für Vorhersagen liefert.
  • Der Anfahrtswinkel vom vorherigen Punkt (zwischen 0 und 2π)
  • Zeit seit Gestenbeginn (in Sekunden)
  • Zeit seit dem vorherigen Berührungspunkt (in Sekunden)
  • Geschwindigkeit (in normalisierten Pixeln pro 10 ms)
  • Beschleunigung (in normalisierten Pixeln/10 ms/ms)

Die Grammarly Entwickler verwenden BatchNorm auf den Eingaben, um für jedes der 33 Eingangsmerkmale unabhängig voneinander einen Mittelwert von null und eine Varianz von eins sicherzustellen.

Datensammlung und Training

Die Entwickler haben die folgenden Datensätze verwendet, um das Modell zu trainieren und seine Leistung offline zu validieren:

  • 1. Der öffentliche How-We-Swipe Shape-Writing-Datensatz enthält Swipe-Daten von 1.338 Nutzern mit 11.318 einzigartigen englischen Wörtern. Die Daten umfassen den Zeitstempel des Ereignisses, die x- und y-Koordinaten, den Berührungsradius (in der x- und y-Achse) und den Drehwinkel sowie die Tastaturgröße und das Zielwort.
  • 2. Synthetische Wischdaten wurden mit WordGesture-GAN erzeugt. Wir generierten Gesten für 26.597 gängige englische Wörter mit unterschiedlichen Werten für die Standardabweichung des Rauschens (σ = 1, 1,3, 1,5; σ steuert die Standardabweichung der Gauß-Verteilung für gesampelte latente Codes, was die Varianz der Wischgesten erhöht, wenn sie zunimmt).
  • 3. Ein interner Swipe-Datensatz wurde von Grammarly-Mitarbeitern mit deren ausdrücklicher Zustimmung erhoben. Dazu sammelte das Team 20.844 einzigartige Wörter von 25 Benutzern.

Vorverarbeitung und Bereinigung der Daten

Da die Datenerhebung in freier Wildbahn stattfand, waren einige Daten ungültig (z. B. stimmte die Wischgeste nicht mit dem Zielwort überein). Das Team entfernte Gesten, die zu kurz waren (weniger als 6 Berührungspunkte), und Gesten, bei denen der Startpunkt nicht in der Nähe des ersten Buchstabens des Zielworts lag, wodurch 2,1 % der gesamten Wischbewegungen entfernt wurden.

Die Daten enthalten viele Instanzen von sehr hochfrequenten Wörtern (zum Beispiel treten Wörter wie “the” and “one” hunderte Male auf, während weniger häufige Wörter nur einige Male vorkommen). Daher wird die maximale Häufigkeit eines Wortes während des Trainings auf 7 begrenzt. Dies verhindert, dass das Modell auf ein einzelnes Wort overfitted (Überanpassung).

Datenerweiterung

Um die Trainingsdaten zu erweitern, hat das Grammarly-Team nach dem Zufallsprinzip die folgenden Transformationen auf den Datensatz angewendet:

  • Verlängern des Anfangs oder des Endes einer Geste.
  • Anwendung einer affinen Transformation, einschließlich Translation, Rotation, Skalierung und Scherung. Für diese Transformationen hat das Team eine Computer Vision-Bibliothek verwendet.
  • Anpassung des Zeitstempels der Geste durch Zeitskalierung, um sie zu beschleunigen oder zu verlangsamen.

Beispielgesten vor und nach der Anwendung der affinen Transformation. Der grüne Punkt kennzeichnet den Beginn der Geste, der rote Punkt das Ende der Geste. (Bild:  Grammarly)
Beispielgesten vor und nach der Anwendung der affinen Transformation. Der grüne Punkt kennzeichnet den Beginn der Geste, der rote Punkt das Ende der Geste.
(Bild: Grammarly)

Training

Das Team hat PyTorch verwendet, um dieses Modell mit der folgenden Konfiguration zu trainieren:

  • Kreuzentropie-Verlust. Das Grammarly Team hat Focal Loss und Weighted Cross-Entropy Loss ausprobiert, um das Ungleichgewicht in der Häufigkeit der Buchstaben im Englischen auszugleichen. Diese waren jedoch nicht besser als der Standard-Cross-Entropy-Loss und lieferten durchweg schlechtere Ergebnisse im Validierungsdatensatz.
  • 30 Epochen
  • SGD-Optimierer. Grammarly hat AdamW ausprobiert, und obwohl es viel schneller konvergiert als SGD, zeigte das mit SGD trainierte Modell in der Produktion eine bessere Generalisierungsleistung. Auch andere haben dies beobachtet. Weitere Einzelheiten finden Sie in dieser Übersicht über Optimierungsalgorithmen.
  • Exponentieller Lernratenplann von 0,27 bis hinunter zu 0,02
  • Gewichtszerfall (Weight decay) von 1e-5
  • Dropout von 0,2 nach der Encoder-Schicht

Generierung, Einstufung und Filterung von Kandidaten

Die Funktionsweise des Neural Swipe Decoder-Modells wurde bereits erläutert, aber damit ist die Arbeit noch nicht vollständig abgeschlossen. Die Vorhersage des Modells ist eine Abfolge von Buchstaben und nicht unbedingt ein kohärentes Wort. Diese Vorhersage muss zunächst in ein Wort umgewandelt werden. Zusätzlich kann dieses Wort möglicherweise nicht korrekt sein und muss basierend auf dem Kontext angepasst werden. Daher müssen aus einer einzigen dekodierten Geste mehrere Kandidaten generiert werden.

Hierfür wird dasselbe Autokorrektursystem verwendet, das auch bei der Grammarly-Tastatur für die Tap-Eingabe zum Einsatz kommt. Autokorrektur akzeptiert den vorherigen Kontext (den Text, den der Benutzer bisher eingegeben hat) zusammen mit dem vom Neural Swipe Decoder vorhergesagten Wort. Es wird dann eine Liste der Top-k-Kandidatenwörter erstellt (wobei k von uns anpassbar ist).

Autokorrektur liefert zwei Bewertungen für jeden Kandidaten:

  • 1. Ähnlichkeitsbewertung: Diese misst die „Distanz“ zwischen dem Kandidatenwort und dem vom Neural Swipe Decoder vorhergesagten Wort in Bezug auf die Anzahl der Einfüge-, Lösch- oder Änderungsoperationen, die benötigt werden, um von einem Wort zum anderen zu gelangen. Zum Beispiel, wenn das neuronale Modell das Wort „God“ vorhersagt, würde „good“ eine höhere Ähnlichkeitsbewertung haben als „food“.
  • 2. Sprachmodellbewertung: Autokorrektur verwendet ein separates Deep-Learning-Modell, um zu analysieren, wie sinnvoll ein gegebenes Kandidatenwort im Kontext des bisher eingegebenen Textes ist. Wenn der bisherige Satz beispielsweise „that sounds“ lautet, würde die Sprachmodellbewertung für „good“ hoch und für „God“ oder „food“ niedrig ausfallen.

Danach werden diese zu einer einzigen aussagekräftigen Bewertung kombiniert, die Kandidaten werden sortiert und anschließend werden einige Filter angewendet, um potenziell schädliche oder anstößige Wörter zu entfernen.

Nach der Dekodierung der Geste des Benutzers werden weitere Wortkandidaten generiert, eingestuft und gefiltert. (Bild:  Grammarly)
Nach der Dekodierung der Geste des Benutzers werden weitere Wortkandidaten generiert, eingestuft und gefiltert.
(Bild: Grammarly)

Der beste Kandidat wird in den Text eingefügt und der Benutzer sieht bis zu drei zusätzliche Kandidatenwörter in der Box oberhalb der Tastatur.

Erkenntnisse

Nun ist klar, wie der Neural Swipe Decoder entwickelt wurde, das Deep-Learning-Modell, das dabei hilft, die Wischgesten des Benutzers in Wörter zu dekodieren. Zudem wurde erläutert, wie mehrere Kandidatenwörter generiert, gerankt und gefiltert werden, um die Ausgabe des Modells weiter zu verfeinern.

Hier sind einige Erkenntnisse, die das Team dabei gewonnen hat:

  • Die besten Systeme lassen sich auf Probleme verallgemeinern, für die sie ursprünglich nicht entwickelt wurden. Mit geringfügigen Anpassungen der Hyperparameter war es überraschend einfach, das Autokorrektursystem der Tap-Eingabe zur Generierung von Kandidaten für die Wischeingabe zu nutzen. Dies sparte nicht nur Zeit, sondern stellt auch sicher, dass zukünftige Verbesserungen der Autokorrektur sowohl der Tap- als auch der Wischeingabe zugutekommen.
  • Große Dinge können aus kleinen Anfängen entstehen – der Prototyp des Neural Swipe Decoders wurde in nur einer Woche entwickelt. Dies zeigt, wie Ideen einen großen Unterschied in der Produkterfahrung bewirken können.

Die Autoren des Projekts bei Grammarly:

Ein Projekt von Dhruv Matani, Suwen Zhu, Seungil Lee, Kosta Eleftheriou, Roman Tysiachnik, Ihor Savynskyi, Sri Malireddi, Ignat Blazhko, Illia Dzivinskyi, Kyron Richard, John Blatz, Max Gubin, Oleksii Chulochnykov, Ankit Garg, Phil Mertens, Igor Velykokhatko. Mit besonderem Dank an Viacheslav Klimkov und Vipul Raheja für ihren Beitrag zu bewährten Verfahren bei der Modellschulung.

(ID:50139553)