Das PyKana-Projekt ist der letzte Teil der Prüfung von vier unserer Schüler, Raouf, Franck, Diahana und Marius, die am Data Scientist-Bootcamp im März 2021 teilgenommen haben. Ihr Ziel war es, verschiedene Algorithmen des maschinellen Lernens und des Deep Learning zu verwenden, um Kanas, japanische Schriftzeichen, zu erkennen.
Wie kamen sie auf die Idee für das Projekt? Sie erzählen es Dir.
„Wir teilen ein gemeinsames Interesse an der japanischen Kultur. Außerdem lebte Dahiana, ein Mitglied unseres Teams, in Japan. Sie spielte eine wichtige Rolle dabei, die Grundlagen der verschiedenen japanischen Schriftsysteme zu erlernen. Wir hatten Glück, dass sie zu unseren Teammitgliedern gehörte. Andererseits hatten einige von uns bereits an Themen der Bildverarbeitung gearbeitet. So war der Anreiz für das Projekt ganz natürlich.“
Darüber hinaus lässt die Umsetzung dieses Projekts konkrete Anwendungen in der Realität erwarten: die Erkennung von Schriftzeichen (hier japanisch, kann aber auch auf andere verallgemeinert werden), die zu Übersetzungen in Echtzeit oder zum Lesen von digitalisierten handschriftlichen Dateien führen. Auch wenn es diese Anwendungen bereits gibt, ist es immer lohnenswert, an einem Projekt zu arbeiten, dessen Tragweite spürbar ist.
Schließlich konnten wir bei diesem Projekt vor allem die Dinge anwenden, die wir während unserer Ausbildung bei Datascientest gelernt haben, wie z. B. Datenvisualisierung, Machine Learning, Deep Learning und Webanwendungen.“
Die Codes, die während dieses Projekts entwickelt wurden, findest du in diesem GitHub-Repository.
Du kannst die komplette Streamlit-Demo auf der Studio-Website von DataScientest finden.
PyKana Projekt
Die japanischen Schriftzeichen werden hauptsächlich in 2 Kategorien unterteilt:
- Kanji: Sie stammen aus dem Chinesischen und dienen dazu, einen Teil der japanischen Sprache zu lesen und zu schreiben, indem sie mit Kanas verbunden werden.
- Kanjis bestehen aus 2.000 bis 4.000 Zeichen.
- Kana: dienen dazu, die japanische Sprache phonetisch zu notieren und bestehen aus 2 Untergruppen.
- Hiragana: 48 Zeichen
- Katakana: 48 Zeichen
Da es sich um supervisiertes Lernen handelt und angesichts der Rechenleistung, die uns zur Verfügung stand, haben wir uns auf die Erkennung von Kana beschränkt.
Für unsere Studie haben wir uns auf den Datensatz der ETL-Website Character Database gestützt, die uns komprimierte Bilder von Kanas, alle in Graustufen, zur Verfügung gestellt hat.
Wir hatten also ungefähr 6100 Hiragana und 10600 Katakana zur Verfügung, die von 120 bzw. 106 Personen geschrieben wurden, die jedes Kana zwei- oder dreimal schreiben mussten.
Abb. 2.1 Auszug aus der Hiragana-Rohdatenbank.
Die Zeichen in der Datenbank waren in Bildern verkettet, die wir trennen mussten, so dass wir die Erkennungsarbeit an jedem Kana einzeln durchführen konnten.
Nach eingehender Betrachtung der Hiragana- und Katakana-Rohdatenbanken stellten wir fest, dass unser Untersuchungsset ziemlich verrauscht war, wie wir unten sehen können:
Abb. 2.2 Rohe Hiragana-Ausschnitte
Ursprünglich dachten wir, dass das Rauschen unsere Studie verzerren könnte. Daher haben wir unsere Algorithmen auf unsere rohen und gefilterten Daten angewendet, um diese Verzerrung zu bewerten. Im Folgenden sind einige Auszüge aus unseren gefilterten Kanas zu sehen:
Abb. 2.3 Gefilterte Katakana-Auszüge
Im Folgenden können wir sehen, dass unser Datensatz bei Hiragana und Katakana ziemlich ausgeglichen war:
Abb. 2.4 Verteilung von Hiragana und Katakana in der Bilddatenbank
Wir haben vier klassische Machine-Learning-Modelle ausgewählt, die mit einem Voting Classifier kombiniert wurden, um unser Klassifikationsproblem zu lösen:
- Random Forest
- KNN (K-Nearest Neighbors oder K nächste Nachbarn)
- SVM (Support Vector Machine)
- Logistische Regression (Logistic Regression).
Wir versuchten, diese Modelle unabhängig voneinander zu optimieren und führten diese Arbeit an unseren Rohdaten durch, die mit Canny (Kantenextraktor) gefiltert wurden. Auf diese Weise konnten wir sehen, ob die Reduzierung des Eingangsrauschens die Leistung der Modelle beeinflusst. Dann haben wir jedes Modell mit seinen besten Parametern für den Voting Classifier kombiniert.
Wir verwendeten 80% der Daten für das Training und die restlichen 20% der Daten für den Test. Um die Leistung der verschiedenen Modelle vergleichen zu können, legten wir diese Trainings- und Testsätze fest.
Schließlich erhielten wir die folgenden Vorhersagewerte:
Die Vorhersage-Scores
Die erste interessante Beobachtung, die wir machen können, ist, dass entgegen unserer anfänglichen Annahme die Filterung unserer Bilder die Qualität unserer Vorhersagen verschlechtert.
Zweitens scheint das SVM-Modell die besten Vorhersageergebnisse zu liefern, was mit der Tatsache übereinstimmt, dass es für die Problematik der Bildklassifizierung als leistungsfähig gilt.
Wir haben dann den Voting Classifier verwendet, um zu versuchen, die Ergebnisse zu optimieren. Die erzielte Verbesserung der Punktzahl ist jedoch im Vergleich zur benötigten Rechenzeit zu gering. Wenn wir auf diesem Niveau der Studie bleiben, sind die effizientesten Machine-Learning-Modelle, die wir verwenden können, Random Forest oder SVM für die Erkennung von Kanas.
Schließlich scheinen Katakana leichter vorherzusagen zu sein als Hiragana. Wenn man sich genauer mit der Form dieser Kanas beschäftigt, erscheint dies logisch, da die Form der Hiragana viel „runder“ und komplexer ist als die der Katakana (vgl. Abbildungen 2.2, 2.3).
Angesichts der Einschränkungen, die die Machine-Learning-Algorithmen für unsere Studie aufwiesen, haben wir auf Deep Learning mit CNN (Convolutional Neural Network) umgestellt.
Das verwendete CNN-Modell
Wir haben die folgende CNN-Architektur entwickelt (Abb. 2.5):
Abb. 2.5: Architektur des verwendeten CNN-Modells.
Nachfolgend eine detaillierte Darstellung der Schichten, aus denen das verwendete CNN-Modell besteht (Abb. 2.6) :
Abb. 2.6 Zusammenfassung des verwendeten CNN-Modells.
Mit diesem CNN-Modell erhielten wir :
Metrik | Hiragana | Katakana |
Score | 89% | 99% |
Metrik Hiragana Katakana
Punktzahl 89% 99%.
Bei Hiragana erzielten wir recht zufriedenstellende Ergebnisse 89% und eine Kurve, die zu einem Maximum konvergiert und sich nach einem Training von 50 Epochs bei diesem Wert stabilisiert hat.
Bei Katakana haben wir im Testdatensatz sehr ausreichende Ergebnisse von 99 % und eine Kurve, die auf ein Maximum zuläuft und sich nach einem Training von 50 Epochs auf diesen Wert stabilisiert hat, erzielt.
Wir können feststellen, dass wir im Vergleich zu den verwendeten Machine-Learning-Modellen bereits eine große Verbesserung der Punktzahl haben.
Obwohl die Ergebnisse mit dem verwendeten CNN-Modell recht zufriedenstellend waren, wollten wir diesen Ansatz durch Data Augmentation optimieren: Dies ist ein Mittel, mit dem man aus einem Datensatz die für das Training des Netzwerks verfügbaren Daten vervielfachen kann, um mehr Daten für das Training und die Aktualisierung der Gewichte des Netzwerks zur Verfügung zu haben.
Mit der Datenvermehrung erhielten wir :
Metrik | Hiragana | Katakana |
Score | 95% | 99% |
Metrik Hiragana Katakana
Punktzahl 95% 99%.
Dieses Netzwerk ist sehr leistungsstark:
Auf Katakana, eine Punktzahl von über 99% für die Zeichenerkennung.
Auf Hiragana, eine Punktzahl von über 95% für die Zeichenerkennung.
Aus Zeitmangel konnten wir nicht alle Möglichkeiten ausschöpfen, um unser Modell zu verbessern und zu optimieren, oder sogar ein Modell für jede Art von Kana zu erstellen, eines speziell für Hiragana und eines speziell für Katakana.
1. Modelle für Machine Learning
Um die Genauigkeit der verwendeten Machine-Learning-Algorithmen zu verbessern, können wir uns vorstellen :
Transfer Learning
Erstellung eines Hybridmodells, das die besten Machine-Learning-Modelle (SVM und Random Forest) oder Machine/Deep Learning kombiniert, insbesondere um die Leistung bei Hiragana zu steigern.
Andere Methode zur Entfernung von Rauschen
Wir hatten nur Zeit, den Canny-Filter zu testen, um die Rauschunterdrückung bei unseren Eingabezeichen durchzuführen, aber dieser Filter ist vielleicht nicht für unser Problem geeignet. Die Verwendung eines anderen Filters könnte zu besseren Ergebnissen führen.
„Verallgemeinerung“ des Modells
Im Rahmen unseres Projekts haben wir nur Modelle verwendet, die die Erkennung jeweils nur eines Zeichens ermöglichen. Die Verwendung von Modellen, die mit Zeichensequenzen arbeiten, würde unserem Projekt eine viel größere Dimension an Anwendungen verleihen.
2. Modell für Deep Learning
Um unser (bereits erfolgreiches) CNN-Modell zu verbessern, könnten wir Folgendes in Betracht ziehen:
Optimierung der Netzwerkarchitektur.
Anzahl der Convolutions-/Pooling-Schichten.
Mit den Convolutions- und Pooling-Schichten verbundene Parameter (strides, filters, kernel_size…).
Regularization Layer (Begrenzung des Overfittings).
Optimierung der Datenverarbeitung
Parameter für Bildtransformationen (Drehen, Zoomen, Flip …)
Anzahl der Transformationen
Anzahl der Trainingsbilder
Zusammenfügen von Vorlagen
Es ist möglich, mehrere verschiedene Modelle zusammenzufügen.
Die Vorhersagen werden dann zwischen den verschiedenen Modellen gemittelt.
„Verallgemeinerung“ des Modells
Im Rahmen unseres Projekts haben wir nur Modelle verwendet, die die Erkennung jeweils nur eines Zeichens ermöglichen. Die Verwendung von Modellen, die mit Zeichensequenzen arbeiten, würde unserem Projekt eine viel größere Dimension an Anwendungen verleihen.
Déroulement du projet
Die größte Schwierigkeit, auf die wir zu Beginn des Projekts stießen, war die Verarbeitung/Extraktion unserer Rohdaten aus der ETL Character Database. Wir stellten fest, dass es Probleme mit der Kodierung gab, die das Extrahieren der Bilder erschwerten. Wir konnten sie jedoch auf einem unserer Computer abrufen und auf den anderen duplizieren, so dass alle mit derselben Datenbank arbeiten konnten.
Bei den Modellen, die wir ausprobieren wollten, hatten wir keine großen Schwierigkeiten, außer dass wir nicht direkt zu den Modellen des Deep Learning übergingen, die später im Kurs behandelt wurden. Allerdings konnten wir so sehen, dass es möglich ist, mit Machine-Learning-Modellen ordentliche Ergebnisse zu erzielen (wenn auch nicht so gut wie mit Deep-Learning-Modellen), und dass eine bessere Rauschfilterarbeit an unseren Eingabebildern diese Ergebnisse vielleicht noch verbessern könnte.
Was den Zeitplan betrifft, so dauerte es aufgrund von Kodierungsproblemen im Allgemeinen länger als erwartet, bis wir unsere Daten abrufen konnten. Dasselbe gilt für die Optimierung unserer Machine-Learning-Modelle, da die Laufzeit für die Grid Search (Suche nach den besten Parametern für jedes Modell) zu lang war. Dies wirkte sich vor allem auf das Ende unseres Projekts aus, wo wir gerne ein Transfer Learning-Modell oder ein Hybridmodell zwischen Machine Learning und Deep Learning eingesetzt hätten, um unsere Ergebnisse für Hiragana zu verbessern.
Wie bereits beschrieben, hatten wir anfangs aufgrund der Kodierung Probleme beim Lesen unserer Daten. Um die Menge der einzelnen Bilder zu bewältigen, entschieden wir uns außerdem, die Daten in CSV-Dateien umzuwandeln, die einfacher zu importieren waren und weniger Speicherplatz benötigten.
Schließlich dachten wir, dass wir vor allem am Anfang ein Problem mit Rauschen in unseren Bildern hatten, das die Leistung unserer Modelle beeinträchtigen würde.
Zusätzlich zu den von DataScientest durchgeführten Masterclasses standen uns die verschiedenen Online-Module auf der Plattform zur Verfügung, die uns bei der Entwicklung unserer verschiedenen Algorithmen halfen. DataScientest bot uns auch einen Zeitplan für den Projektablauf an, auf den wir uns stützten, um mit agilen Methoden zu arbeiten.
Während unseres Projekts wurden wir auch von Louis betreut, der uns durch seine Erfahrung sehr gut beraten hat, was den Ablauf der einzelnen Projektphasen betrifft:
Tools, die wir für die Erstellung der Datenvisualisierung verwenden sollten.
Die relevantesten Algorithmen, die wir für unsere Studie verwenden sollten.
Validierung der Konsistenz der erhaltenen Ergebnisse.
Außerdem ermöglichte es uns Louis‘ Blick, unsere Arbeit ein wenig aus der Vogelperspektive zu betrachten, damit sie auch für Personen außerhalb des Projekts verständlich war.
Die erste Lektion, die wir aus einem Datenprojekt wie PyKana gelernt haben, ist, dass die Zeit für die Verarbeitung/Extraktion der Basisdaten, um sie nutzbar zu machen, nicht zu vernachlässigen ist. Es ist wichtig, sich dies bei jeder Art von Projekt zu vergegenwärtigen, da für diesen Schritt ein wichtiger Zeitrahmen im Projektkalender vorgesehen werden muss.
Zweitens erweisen sich die Vermutungen, die man über die Ergebnisse haben kann, nicht immer als richtig. Wir haben das am eigenen Leib erfahren, als wir annahmen, dass unsere Modelle auf unserer gefilterten Datenbasis bessere Ergebnisse liefern würden als auf unserer Rohdatenbasis. Die Realität hat uns eines Besseren belehrt, da unsere Rohdatenbank stark verrauscht war, aber vielleicht war die Wahl des Filters (Canny), die wir getroffen hatten, nicht die richtige.
Danach wurde uns schnell klar, dass ein Datenprojekt eine intelligente Aufgabenverteilung innerhalb des Teams erfordert, um die Effizienz zu steigern. Zum Beispiel war die Entscheidung, die Implementierung der verschiedenen Machine/Deep Learning-Modelle separat unter uns aufzuteilen, entscheidend, um unsere Arbeit zu parallelisieren und nicht redundant zu sein. Wir haben auch unsere Aufgaben so verteilt, dass sie den Vorlieben jedes Einzelnen entsprechen.
Schließlich ist die Nutzung von Tools zur Zusammenarbeit unerlässlich, vor allem, wenn man parallel arbeitet. Sie ermöglicht es, die Arbeit zu versionieren und Datenverluste bei der Zusammenführung von Codes, die von zwei Mitgliedern desselben Teams entwickelt wurden, zu vermeiden.
Vielen Dank an Pykana für ihren Erfahrungsbericht!
Möchtest auch Du ein Data-Science-Projekt von A bis Z entwickeln und von erfahrenen Ausbildern betreut werden? Vereinbare online einen Termin mit unserem Team um deine Lernziele zu besprechen.