Deep Learning, ou comment automatiser des tâches ?

2023-01-31 | Florent Damiens

image article

Deep Learning, ou comment automatiser des tâches ?

Suite à l’organisation de Volcamp les 13 et 14 Octobre, nous avons décidé de revenir sur quelques thématiques coup de cœur. Dans une suite d’article, nous allons rentrer dans le détail et partager notre retour d’expérience sur des technologies ou des concepts. Basé sur la conférence d’Eléa Petton et Stéphane Philippart « Si on aidait le capitaine Némo à classifier les monstres marins ? », ce premier article vous emmène dans les profondeurs du Machine Learning.

L’objectif de cet article est de démystifier l’imaginaire et la complexité derrière les concepts de Machine learning et de Deep Learning et de découvrir comment nous avons abordé ce domaine dans le cadre de la création d’une application de classification automatique de documents pour des notaires. On abordera les concepts clefs (différence entre Machine et Deep Learning, les types d'apprentissages…), comment nous avons constitué le jeu de données et comment nous avons interfacé le modèle dans une application intuitive pour l’utilisateur.

Machine Learning, Deep Learning ? Quelles différences ?

Les domaines d'applications utilisant une Intelligence Artificielle sont de plus en plus variés, nous les manipulons tous les jours sans nous en rendre compte: traduction, reconnaissance d’image, classification automatique de textes, d’objets… Dans l’imaginaire il existe parfois une certaine incompréhension face à toutes les informations que nous pouvons percevoir. Afin d’aborder plus sereinement la suite de l'article, il est nécessaire de reprendre les notions de base.

Quelques définitions

Par définition le Machine Learning (ou l’apprentissage automatique) regroupe toutes les techniques qui permettent à un algorithme d'obtenir des résultats non calculables grâce à l’analyse d’un important volume de données. Les données peuvent-être de différents types: texte, image… Les patterns présent dans le jeu de données permet à l’algorithme d’apprendre et de s’améliorer dans l'exécution d’une tâche bien spécifique, d’où le terme apprentissage autonome.

Le Deep Learning est une branche du Machine Learning qui repose sur le modèle des réseaux de neurones. Des « couches » de neurones sont empilées afin d’apporter une plus grande complexité à la mise en place de règles. La profondeur du réseau permet un apprentissage beaucoup plus précis et peut mettre en évidence des concepts ou des patterns plus subtiles ou abstraits.

Dans le cadre de notre application de classification automatique de documents, l’objectif est de fournir une importante volumétrie de documents labellisés (Acte, État hypothécaire, Urbanisme, Réglementation…) afin que le système découvre par lui-même des patterns présents dans ces classes et de pouvoir les retrouver dans de nouvelles données.

Les différents types d'apprentissage

Suivant les types de données que nous manipulons, certaines techniques d’apprentissage sont plus ou moins pertinente, on retrouve :

  • l’apprentissage supervisé, le système s'entraîne avec un jeu de données que nous avons préalablement labellisé.
  • l’apprentissage non supervisé, le système s'entraîne avec un jeu de données qui n’est pas labellisé et cherche à explorer des patterns. Ce type d’apprentissage nécessite plus de données que la précédente.
  • l’apprentissage par renforcement, le système apprend de ses erreurs pour atteindre un objectif, il sera récompensé ou pénalisé afin de l’inciter à prendre une direction et nécessite encore plus de données.

De la théorie à la pratique

Après la théorie, place à la pratique, l’objectif est de présenter les grandes étapes de conceptions et de faire un parallèle avec l’application que nous avons développée. L’enjeu pour nous est de trouver le meilleur taux de confiance pour chaque classe de documents, maximiser la prédiction en minimisant la fonction de coût.

La première étape correspond à la constitution du jeu de données, c’est une étape cruciale, une erreur de jugement et le taux de confiance lors de la prédiction peuvent en être fortement impactés et rendre le modèle inefficace. Face à la montagne de données que nous possédons, il faut d’abord les trier puisque toutes ne sont pas pertinentes, ensuite les regrouper par classe. Il faut donc les choisir soigneusement, être rigoureux lors de la labellisation et ne pas hésiter à inclure plusieurs personnes lors de la classification afin d’éviter d’inclure des biais qui se retrouveraient dans le modèle.

Dans notre cas, cette première étape s'est avérée très complexe, nous avons des centaines de milliers de documents, près de 8 To ! Impossible de labéliser manuellement toutes ces données, nous avons d’abord cherché à catégoriser grossièrement les documents dans une dizaine de classe: Actif immobilier, Fiscalité, Réglementation, Urbanisme… Puis nous avons affiné chaque classe en ajoutant des sous catégories, par exemple nous avons rajouté les classes Taxes foncières, Redevance, TVA au sein de Fiscalité, etc… Finalement environ un millier de documents ont été labellisés.

La seconde étape est la préparation du jeu de données. Pour l’instant nous n’avons que des PDF, il est nécessaire d'en extraire le texte pour que le système puisse se baser sur le champ lexical et retrouver des patterns similaires dans chaque catégorie de documents. On se base sur l’API Cloud Vision de Google afin d’avoir une très bonne reconnaissance de texte même sur des documents scannés ou manuscrits.

L’étape suivante consiste à sélectionner le modèle le plus pertinent. Beaucoup de domaines d’application dans le Machine Learning ont été théorisés. On retrouve ainsi des thèses pouvant nous donner un point de départ dans nos recherches. Pré-entraîner le modèle permet de nous affranchir d’une grande volumétrie de données, pourvu que notre jeu de données possède des concepts communs avec les données du pré-entraînement. C’est pour cette raison que nous avons utilisé BERT, un modèle de langage particulièrement performant en Français, idéal quand nous voulons avoir une compréhension plus fine du texte !

Pour finir, la dernière étape est itérative, le but est d'entraîner le modèle avec environ 80% du jeu de données, analyser les résultats (avec les 20% restants) et ajuster les variables en conséquence afin d’optimiser la prédiction. On s’aide d’une multitude de rapports comme une matrice de confusion qui permet de représenter les résultats issus de la prédiction et de déterminer la fiabilité du modèle, ou la détection d’un sur-apprentissage.

Nous avons écrit un ensemble d’article beaucoup plus détaillé sur le principe du pré-entraînement ou encore le fonctionnement de BERT sur des textes longs.

Interfacer le modèle avec une application

Après toute cette phase de R&D, il est temps d’interfacer notre python avec une application web plus standard. La particularité de ce projet est que nous avons deux environnements techniques distinct:

  • un environnement pour notre application web
  • un environnement Python pour la prédiction

Les deux environnements sont hébergés indépendamment l’un de l'autre sur Google Cloud Platform. Toute la difficulté ici est de les faire communiquer ensemble tout en limitant les coûts d’exploitation de l’environnement de prédiction. Contrairement à OVH, Google ne facture pas une instance qui est arrêtée, la solution est donc de lancer le serveur à la demande, lorsqu’une personne lance la prédiction de documents.

Pour résoudre le problème de communication, nous décidons d’externaliser le filesystem en utilisant Google Cloud Storage et d’utiliser RabbitMQ pour échanger des messages d’un environnement à un autre.

Notre objectif est de rendre l’application intuitive, nous avons créé trois sections, la première s’occupe de lister tous les ZIP qui ont été ou sont en cours de traitement. La seconde est un assistant qui permet à l’utilisateur d'accepter le résultat de la prédiction ou de le modifier. Pour finir la dernière regroupe l’arborescence de tous les documents qui ont été validés, il s’agit de notre jeu de données. Tout le concept repose sur cette dernière section qui permet à l’utilisateur d’ajouter, de supprimer ou de déplacer des éléments de cette arborescence. En quelques clics, l’utilisateur a la possibilité de relancer un entraînement avec un jeu de données qu’il a lui-même consolidé.

Conclusion

Pour conclure, après plus d'une année de R&D, à modifier, ajouter des documents, à lancer et re-lancer l'entraînement, les résultats sont prometteurs, près de 80% de précision ! Il existe cependant une grosse disparité entre certaines classes, un long travail reste nécessaire afin d’affiner notre jeu de données.

Malgré cela, les performances sont au rendez-vous, en quelques minutes des centaines de documents peuvent ainsi être traités. Et la mise en place d'un système de start and stop sur le serveur de prédiction permet de baisser sensiblement les coûts. Les objectifs sont pleinement remplis pour notre première application de machine learning.

Machine Learning Deep Learning IA