Projet Pykana

PyKana – L’application de reconnaissance de Kana (caractères japonais)

Charles

Charles

8 min

Le projet PyKana est la dernière partie de validation de quatre de nos apprenants, Raouf, Franck, Diahana et Marius du bootcamp Data Scientist de Mars 2021. Leur objectif est d’utiliser différents algorithmes de Machine et Deep Learning afin de réaliser de la reconnaissance de Kanas, des caractères japonais.

Comment ont-ils eu l’idée du projet ? Ils vous le racontent.

“Nous partageons un intérêt commun pour la culture japonaise. Par ailleurs, Dahiana une des membres de notre équipe résidait au Japon. Elle a joué un rôle essentiel au niveau de l’apprentissage des bases des différents systèmes d’écriture japonais. Nous avions eu de la chance de la compter parmi les membres de notre équipe. D’autre part, certains d’entre nous ont déjà travaillé sur des thématiques de traitement d’image. Ainsi, l’attrait pour le projet s’est fait naturellement.  

De plus, la réalisation de ce projet laisse entrevoir des applications concrètes dans le réel : la reconnaissance de caractères (ici japonais, mais peut être généralisée à d’autres) aboutissant à de la traduction en temps réel ou de la lecture de fichiers manuscrits numérisés. Bien que ces applications existent déjà, il est toujours valorisant de travailler sur un projet dont la portée est palpable.

Enfin, ce projet nous a essentiellement permis de mettre en pratique ce que nous avions étudié au cours de notre formation chez Datascientest comme la data visualisation, le machine learning, le deep learning ainsi que les applications web.”

Les codes développés lors de ce projet se trouvent dans ce repository GitHub.

Vous pouvez retrouver la démo streamlit complète sur le site du Studio de DataScientest . 

Projet PyKana

Les caractères japonais sont principalement répartis en 2 catégories :

  • Kanji : dérivés du chinois et servent à lire et écrire une partie du japonais en étant associés à des kanas
    • Les kanjis comportent entre 2000 et 4000 caractères
  • Kana : servent à noter phonétiquement la langue japonaise et sont constitués de 2 sous-groupes
    • Hiragana : 48 caractères
    • Katakana : 48 caractères

Étant dans un problème d’apprentissage supervisé et au regard de la puissance de calcul que nous avions à disposition, nous nous sommes limités à la reconnaissance des kana.

Pour les besoins de notre étude, nous nous sommes basés sur le jeu de données du site ETL Character Database qui nous fournissait des images de kanas compressées, toutes en niveaux de gris.

Nous avions donc à disposition environ 6100 Hiragana et 10600 Katakana écrits respectivement par 120 et 106 personnes qui devaient écrire 2 ou 3 fois chaque kana.

extrait de la base de données Hiragana
Fig. 2.1 Extrait de la base de données brutes Hiragana

Les caractères de la base étaient concaténés dans des images que nous avons dû séparer, ainsi nous avons pu faire le travail de reconnaissance sur chaque kana individuellement.

Après observation détaillée des bases de données brutes des Hiragana et Katakana, nous avons remarqué que notre set d’étude était assez bruité, comme nous pouvons le voir ci-dessous :

Fig. 2.2 Extraits de Hiragana bruts
Fig. 2.2 Extraits de Hiragana bruts

Initialement nous pensions que le bruit pourrait biaiser notre étude, donc nous avons appliqué nos algorithmes sur nos données brutes et filtrées afin d’évaluer ce biais. Ci-dessous, voici des extraits de nos kanas filtrés :

Fig. 2.3 Extraits de Katakana filtrés
Fig. 2.3 Extraits de Katakana filtrés

Ci-dessous, nous pouvons voir que notre jeu de données était assez équilibré pour les Hiragana et Katakana :

Distribution des Hiragana et Katakana dans la base d’images

Distribution des Hiragana et Katakana dans la base d’images
Fig. 2.4 Distribution des Hiragana et Katakana dans la base d’images

Nous avons retenu 4 modèles classiques de Machine Learning, conjugués d’un Voting Classifier afin de résoudre notre problème de classification :

Nous avons tenté d’optimiser ces modèles indépendamment les uns des autres et réaliser ce travail sur nos données brutes et filtrées avec Canny (extracteur de contours), ainsi avons-nous pu voir si la réduction du bruit en entrée influe sur les performances des modèles. Puis nous avons combiné chaque modèle avec ses meilleurs paramètres pour le Voting Classifier

Nous avons utilisé 80% des données pour l’entraînement, et 20% des données restantes pour le test. Afin de pouvoir comparer les performances des divers modèles, nous avons fixé ces ensembles d’entraînement et de test.

Enfin, nous avons obtenu les scores de prédictions ci-dessous :les scores de prédictions
Les scores de prédictions

 

La première remarque intéressante que nous pouvons faire est que contrairement à l’hypothèse que nous avions formulée au début, le filtrage de nos images dégrade la qualité de nos prédictions.

Ensuite, le modèle SVM semble donner les meilleurs résultats en termes de prédiction, ce qui est cohérent avec le fait qu’il soit réputé performant pour les problématiques de classification d’image. Nous avons ensuite utilisé le Voting Classifier pour tenter d’optimiser les résultats. Cependant, le gain de score obtenu est trop faible par rapport au temps de calcul nécessaire. Si l’on reste à ce niveau-là d’étude, les modèles les plus efficaces de Machine Learning à utiliser sont le Random Forest ou le SVM pour la reconnaissance de kanas.

Enfin, les Katakana semblent plus faciles à prédire que les Hiragana. En s’intéressant plus précisément à la forme de ces kanas, cela semble logique, car la forme des Hiragana est bien plus “arrondie” et complexe que celle des Katakana (cf. figures 2.2, 2.3).

Devant les limites observées par les algorithmes de Machine Learning pour notre étude, nous avons embrayé sur du Deep Learning avec des réseaux de neurones CNN (Convolutional Neural Network).

  1. Modèle CNN utilisé

Nous avons développé l’architecture CNN ci-après (Fig. 2.5) :Architecture du modèle CNN utilisé
Fig. 2.5 : Architecture du modèle CNN utilisé

Ci-après le détail des couches constituant le modèle CNN utilisé (Fig. 2.6) :

Résumé du modèle CNN utilisé
 Fig. 2.6 Résumé du modèle CNN utilisé

Avec ce modèle CNN, nous obtenions :

MétriqueHiraganaKatakana
Score89%99%

Pour les Hiragana, nous avons obtenu des résultats assez satisfaisants 89% et une courbe qui converge vers un maximum et s’est stabilisée vers cette valeur, après un entraînement de 50 epochs.

Sur les Katakana, sur le jeu de données de test, nous avons obtenu des résultats très suffisants de 99% et une courbe qui converge vers un maximum et s’est stabilisée vers cette valeur, après un entraînement de 50 epochs.

Nous pouvons noter que nous avons déjà un gros gain de score par rapport aux modèles de Machine Learning utilisés.

Bien que les résultats obtenus étaient assez satisfaisants avec le modèle CNN utilisé, nous avons voulu optimiser cette approche en faisant de la data augmentation : ceci est un moyen permettant à partir d’un jeu de données de multiplier les données disponibles pour l’entraînement du réseau afin de permettre d’avoir plus de données pour réaliser l’entraînement et la mise à jour des poids du réseau.

Avec la data augmentation, nous obtenions :

MétriqueHiraganaKatakana
Score95%99%

Ce réseau est très performant : 

  • Sur les Katakana, un score supérieur à 99% pour la reconnaissance des caractères
  • Sur les Hiragana, un score supérieur à 95% pour la reconnaissance des caractères

Par manque de temps, nous n’avons pas pu exploiter toutes les pistes afin d’améliorer et optimiser notre modèle, voire faire un modèle pour chaque type de kana, un spécifique pour les Hiragana et un autre pour les Katakana.

1. Modèles de Machine Learning

Afin d’améliorer la précision des algorithmes de Machine Learning utilisés, nous pouvons envisager :

  • Transfer Learning

Création d’un modèle hybride combinant les meilleurs modèles de Machine Learning (SVM et Random Forest) ou Machine/Deep Learning, notamment pour augmenter les performances sur les Hiragana

  • Autre méthode d’élimination du bruit

Nous n’avons eu le temps que de tester le filtre Canny pour faire la suppression de bruit sur nos caractères en entrée, mais celui-ci n’est peut-être pas adapté à notre problématique. L’utilisation d’un autre filtre donnerait peut-être de meilleurs résultats.

  • “Généralisation” du modèle

Dans le cadre de notre projet, nous n’avons utilisé que des modèles permettant de faire de la reconnaissance sur un seul caractère à la fois. L’utilisation de modèles fonctionnant sur des séquences de caractères donnerait une dimension beaucoup plus grande à notre projet en termes d’applications.

2. Modèle de Deep Learning

Afin d’améliorer notre modèle CNN (déjà performant), nous pouvons envisager :

  • Optimisation de l’architecture réseau
    • Nombre de couches de Convolutions / Pooling
    • Paramètres associés aux couches de Convolutions et de Pooling (strides, filters, kernel_size…)
    • Couches de Regularization (limitation de l’over-fitting)
  • Optimisation du traitement des données
    • Paramètres de transformation d’images (rotation, zoom, flip …)
    • Nombre de transformations
    • Nombre d’images d’entraînement
  • Assemblage de modèles
    • Il est possible d’assembler plusieurs modèles différents
    • Les prédictions sont alors moyennées entre les différents modèles
  • “Généralisation” du modèle

Dans le cadre de notre projet, nous n’avons utilisé que des modèles permettant de faire de la reconnaissance sur un seul caractère à la fois. L’utilisation de modèles fonctionnant sur des séquences de caractères donnerait une dimension beaucoup plus grande à notre projet en termes d’applications.

Déroulement du projet

La principale difficulté que nous avons rencontrée au début du projet a été le traitement/extraction de nos données brutes de la base ETL Character Database. Nous nous sommes en effet aperçus qu’il y avait des problèmes d’encodage compliquant l’extraction des images. Nous avons néanmoins pu les récupérer sur un de nos ordinateurs et les dupliquer sur les autres afin que tout le monde puisse travailler sur la même base. 

Au niveau des modèles à essayer nous n’avons pas rencontré de difficultés majeures, si ce n’est que nous ne sommes pas partis directement vers les modèles de Deep Learning,  qui ont été étudiés plus tard dans la formation. Cependant, cela nous a permis de voir qu’il était possible d’obtenir des résultats corrects avec les modèles de Machine Learning (même si moins bons que ceux de Deep Learning), et qu’un meilleur travail de filtrage de bruit sur nos images d’entrée pourrait peut-être améliorer ces résultats.

En termes de calendrier, nous avons mis en général plus de temps que prévu à récupérer nos données à cause des problèmes d’encodage. Idem pour optimiser nos modèles de Machine Learning, à cause du temps d’exécution trop long pour les Grid Search (recherche des meilleurs paramètres pour chaque modèle). Cela a eu un impact notamment sur la fin de notre projet où nous aurions aimé pouvoir peut-être mettre en place un modèle de Transfer Learning, ou un modèle hybride entre le Machine Learning et le Deep Learning, notamment pour améliorer nos résultats sur les Hiragana. 

Comme décrit précédemment, nous avons rencontré au départ des problèmes de lecture de nos données à cause de l’encodage. Puis pour gérer la volumétrie des images individuelles, nous avons également fait le choix de transformer les datas pour les stocker dans des fichiers CSV plus simples à importer à chaque fois et moins coûteux en termes de mémoire.

Enfin, surtout au début nous pensions avoir un problème de bruit sur nos images qui nuirait à la performance de nos modèles, ce qui s’est révélé faux par la suite, mais nous a fait perdre un temps certain

En plus d’avoir pu bénéficier des masterclass dispensées par DataScientest, nous avions à disposition les différents modules en ligne sur la plateforme pour nous aider à développer nos différents algorithmes. DataScientest nous a aussi proposé un calendrier de déroulement du projet, sur lequel nous nous sommes appuyés pour travailler en méthode agile.

Pendant notre projet, nous avons également été encadrés par Louis qui nous a été par son expérience de très bon conseil en ce qui concerne le déroulement des étapes du projet :

  • Outils à utiliser pour réaliser la data visualisation
  • Algorithmes les plus pertinents à utiliser pour notre étude
  • Validation de la cohérence des résultats obtenus

De plus, le regard de Louis nous permettait de prendre un peu de hauteur sur nos travaux afin qu’ils soient intelligibles pour les personnes extérieures au projet.

“La première leçon retenue sur un projet data tel que PyKana est que le temps de traitement/extraction des données de base pour les rendre exploitables est non négligeable. Il est important de s’en rappeler sur tout type de projet, car il faut allouer un créneau important à cette étape dans le calendrier de celui-ci.

Ensuite, les intuitions que l’on peut avoir sur des résultats ne s’avèrent pas toujours justes. Nous en avons fait l’expérience lorsque nous avons supposé que nos modèles donneraient de meilleurs résultats sur notre base de données filtrées que sur notre base brute. La réalité nous a prouvé le contraire alors que notre base brute était fortement bruitée, cependant peut-être que le choix du filtre (Canny) que nous avons fait n’était pas le bon.

Après, nous nous sommes vite rendus compte qu’un projet data nécessite une répartition intelligente des tâches au sein de l’équipe pour une efficacité accrue. Par exemple, le choix de nous répartir séparément l’implémentation des différents modèles de Machine/Deep Learning a été déterminant pour paralléliser notre travail et ne pas être redondants. Nous avons également opéré notre répartition des tâches de façon à coller au mieux avec les appétences de chacun(e).

Enfin, l’utilisation d’outils de travail collaboratif est indispensable surtout lorsque l’on travaille de façon parallèle. Elle permet de versionner son travail et d’éviter la perte de données lors de la fusion de codes développés par deux membres d’une même équipe.”

Merci au groupe Pykana pour son témoignage ! 

Vous aussi vous souhaitez développer un projet de data science de A à Z et être encadré par des formateurs experts ? N’hésitez pas à prendre rendez-vous en ligne avec notre équipe pour discuter de vos objectifs de formation.