GS-IR — Introduction

Generic System dans son ensemble

Le système d’informations de Generic System peut être divisé en trois parties distinctes :

  • gs-reactor : c’est la partie « front office » qui a été développée afin de faciliter la création d’applications web dynamiques codées uniquement en Java ;
  • gs-kernel : c’est la partie « back office » qui permet la persistance des données dans le moteur d’informations;
  • gs-ir : c’est la partie « information retriever » ou « intelligence artificielle » qui est en phase active de développement.

Qu’est-ce que gs-ir ?

GS-ir a été imaginé comme un système complet permettant de tirer le meilleur parti du moteur d’informations de Generic System, ainsi que des technologies avancées d’intelligence artificielle comme le deep learning ou le machine learning.

L’objectif principal est de développer une application autonome capable de :

  1. Récupérer des documents depuis différentes sources (e-mails, pages web, etc.) ;
  2. Les classifier (carte d’identité, bulletin de paie, facture, etc.) ;
  3. En extraire le contenu pertinent par reconnaissance optique de caractères (OCR) ;
  4. Enfin, stocker et diffuser l’information dans Generic System.

Pour prendre un exemple concret, gs-ir peut automatiser le processus de constitution d’un dossier, par exemple pour une demande de prêt bancaire. Vous envoyez l’ensemble de vos documents (pièces d’identité, bulletins de salaire, relevés de comptes, etc.) à une adresse e-mail, et quelques minutes plus tard toutes les informations auront été extraites et votre dossier est prêt !

Info
Un des avantages de Generic System dans ce domaine est qu’il est entièrement restructurable. Ainsi, la structure même de l’information peut être modifiée ou créée dynamiquement ! GS-IR aurait ainsi la capacité, après analyse d’un document, de reconnaître la structure de l’information et d’adapter le modèle de données à chaque type de document.

Présentation

Une première version de l’application a été développée précédemment à l’aide du framework vert.x. Cette application comporte plusieurs modules (verticles), qui possèdent chacun une fonction propre. Ces différents verticles communiquent ensuite par messages à travers l’eventBus de vert.x.

L’architecture de vert.x permet également de redimensionner l’application suivant le besoin, par exemple en créant plusieurs instances d’un même verticle, ou bien en les répartissant sur plusieurs ordinateurs sur un même réseau.

Nous avons tout d’abord développé une application autonome qui peut récupérer les documents envoyés à une adresse e-mail donnée, puis les classifier et en extraire l’information pour la stocker dans le moteur de Generic System.

Modules développés

Afin de pouvoir facilement répartir les traitements effectués par l’application sur plusieurs ordinateurs, nous avons décidé de développer 3 modules principaux :

  • une application vert.x répartie, qui peut être déployée sur n’importe quel ordinateur relié au réseau ;
  • un répartiteur de tâches, qui enregistre les tâches à exécuter et les répartit sur les ordinateurs disponibles ;
  • une interface de gestion web, qui permet de consulter l’avancement du traitement des tâches et s’occuper de persister les données dans le moteur d’informations de Generic System.

Le répartiteur et l’interface de gestion web ne sont pour l’instant déployés chacun que sur une seule machine.

Info
L’ensemble de ces applications est déployé sur un cluster Hazelcast, ce qui permet aux verticles de bénéficier d’un eventBus distribué et partagé. Ainsi, chaque nouvelle instance de l’application répartie pourra rejoindre le cluster et prendre en charge une partie des traitements, tout cela de manière totalement transparente !

Flux d’utilisation de l’application

Lors de la réception d’un nouvel e-mail, la pièce jointe (au format pdf) est téléchargée, puis chaque page est convertie sous forme d’image (au format png). Ces images sont ensuite automatiquement classifiées selon leur type, puis ces données sont enregistrées dans Generic System. Ensuite, si la classe de document possède un dé-zonage précis (c.à.d. que la structure de l’information a été supervisée) le document est soumis à l’OCR.

Pendant ce processus, un ensemble prédéfini de filtres de traitement d’image est appliqué à l’image d’origine, pour en créer autant de copies qui seront toutes soumises à la reconnaissance de caractères. En effet, le pré-traitement de l’image peut dans certains cas faciliter l’OCR, par exemple en supprimant le fond d’une image, ou en accentuant les contours du texte. Enfin, l’ensemble des résultats de l’OCR est sauvegardé dans Generic System.

Répartiteur de tâches

Le répartiteur a deux rôles principaux :

  • réceptionner les e-mails ;
  • créer, enregistrer et mettre à jour les tâches ;

Toutes les tâches sont persistées dans le moteur de Generic System. De cette façon, le traitement peut reprendre son cours normal si un des ordinateurs du réseau rencontre un problème (panne, surcharge, etc.). Cela nous permet également de journaliser les traitements.

Application répartie

L’application répartie peut être déployée sur n’importe quelle machine du réseau. Elle est à l’écoute des requêtes postées par le répartiteur sur l’eventBus et prend en charge les différents traitements à effectuer sur les documents reçus :

  • convertir chaque page du pdf en image png ;
  • classifier ces images selon leur type (“classe” de document) ;
  • réaliser la reconnaissance optique de caractères pour extraire les informations pertinentes de l’image.
Classification des images

Une première version du classificateur a été développée en se basant sur la comparaison de points d’intérêt avec un template de la classe. L’inconvénient de cette méthode, c’est qu’il est nécessaire de créer des templates pour chacune de nos classes de documents.

Afin d’améliorer l’efficacité et la précision du classement, et surtout de s’affranchir de la création des templates, nous sommes actuellement en train de développer un nouveau classificateur basé sur un réseau de neurones convolutif.

Reconnaissance optique de caractères

Le traitement d’images dans gs-ir est réalisé à l’aide de la bibliothèque OpenCV, et la reconnaissance optique de caractères (OCR) est assurée par tesseract-ocr.

Pour améliorer l’OCR, il peut être nécessaire d’améliorer la qualité de l’image. Pour cela, une série de filtres (binarisation, etc.) est appliquée à notre image d’entrée, et chaque image qui en résulte est soumise à l’OCR. Toutes ces données sont ensuite persistées dans Generic System. On peut alors utiliser un algorithme afin de sélectionner le texte le plus probable.

Une première version simplifiée de cet algorithme a été développée, et repose sur un système de notation en fonction de la fréquence d’apparition de la chaîne de caractères, pondérée selon les filtres de traitement. Une nouvelle version de cet algorithme est à l’étude, cette fois-ci en utilisant un réseau de neurone de type MLP.

Interface de gestion web

Cette application permet de consulter l’avancement du traitement des tâches effectuées par les autres modules, et permet de consulter le contenu de l’information pour chaque document. Elle sera aussi responsable de la persistence des données dans le moteur de Generic System.

Pour cela, plusieurs verticles sont déployés au démarrage de l’application, pour permettre notamment d’enregistrer les nouveaux documents, de vérifier si un dé-zonage précis a été effectué, ou bien d’enregistrer le contenu de l’information obtenue suite à l’OCR.

En résumé

GS-IR constitue la partie “information retriever” de Generic System, et permet de récupérer de façon automatique l’information contenue dans des documents. Après classification et reconnaissance optique de caractères, l’information pertinente sera diffusée dans le moteur de Generic System et sera instantanément accessible dans une application web.

Nous avons imaginé et développé une application qui peut être répartie facilement sur plusieurs machines en réseau, et qui possède un système de gestion des tâches robuste. Ainsi, l’application peut facilement s’adapter à une montée en charge et possède un meilleure tolérance aux pannes.