Extraire des nombres d’un texte

Comment extraire des nombres de documents

La reconnaissance des entités nommées concerne l’extraction de séquences de mots à partir d’un document. Cette technique est principalement utilisée pour extraire des noms de personnes, d’organisations ou de lieux, qui sont donc les entités nommées les plus typiques. Toutefois, l’expression  » reconnaissance d’entités nommées » ne rend pas très bien compte de l’importance d’un fragment de texte constitué d’un ou de plusieurs mots successifs. Ce fragment peut tout aussi bien être constitué d’un seul verbe ou adjectif, qui ne sont pas à proprement parler des entités nommées telles qu’une date ou un montant. Dans ce cas d’utilisation, nous extrayons des nombres.

Extraction des frais financiers des décisions de justice

Il s’agit ici d’extraire d’une décision de justice, le montant que la personne condamnée ou déboutée par la décision doit payer à la partie adverse pour les frais dits « irréductibles », ou plus précisément les honoraires d’avocats.

Dans le projet ci-dessous, c’est le label « coûts irréductibles » (avant-dernier label de la liste ci-dessous) qui est intéressant :

distribution des étiquettes

Il s’agit ici de calculer un montant moyen pour un ensemble donné de documents (un corpus), pour une juridiction donnée. Ce qui est intéressant, c’est que le terme « irréductible » apparaît rarement dans le texte et que ces coûts sont le plus souvent révélés indirectement par la présence à proximité, avant ou après, d’un article de loi : l’article 700 du « Code civil ».

Comment procéder ?

L’annotateur doit d’abord définir son besoin et sa méthode. Dans le cas présent, il s’agit d’extraire chaque montant individuel décidé par le juge.

Capture d'écran de Kairntech

Si la partie A doit payer 1000 euros à la partie B et 800 euros à la partie C, deux montants doivent être extraits. Parfois, le texte dit que A doit payer à B et à C la somme de X euros « chacun », auquel cas la somme sera impossible, mais ce cas est rare et n’a pas d’impact majeur sur un processus qui analyse de nombreuses décisions.

Il convient de veiller à n’annoter qu’une seule fois chaque montant individuel. La convention de rédaction peut en effet conduire à répéter le même montant dans des phrases différentes. Dans l’exemple ci-dessous, le choix est d’annoter à partir des mots « POUR CES MOTIFS » qui annoncent la décision elle-même.

Capture d'écran de Kairntech

Avec ou sans unité monétaire ?

Dans le même exemple, il convient de noter que le montant a été mis en évidence sans son unité monétaire, l’euro. Il s’agit d’un choix lié à l’absence de convention d’écriture des monnaies dans les décisions de justice. Non seulement l’euro pourrait être désigné alternativement par son symbole € ou son code ISO EUR, mais les aléas de l’encodage peuvent aussi le remplacer par des caractères spéciaux. Plus il y a de variantes, plus l’apprentissage est difficile et plus le post-traitement est compliqué.

Nous avons donc pris la décision de ne pas extraire l’unité monétaire. Ceci est possible dans ce cas d’utilisation car les coûts irréductibles des décisions françaises sont nécessairement libellés en euros depuis 2001 (et en francs avant). Si dans un autre cas d’utilisation, les montants pouvaient être libellés dans des unités monétaires différentes, ces dernières pourraient être incluses dans l’annotation. Il sera alors nécessaire de prévoir une séparation a posteriori du montant et de l’unité monétaire avant de pouvoir effectuer un calcul arithmétique.

Introduction de contre-exemples dans l’ensemble de données

L’annotateur doit essayer d’introduire des contre-exemples dans son ensemble de données. L’exemple ci-dessous montre deux suggestions qui devraient être rejetées (l’utilisateur devra double-cliquer sur la petite croix en haut à gauche)

Capture d'écran de Kairntech

Il refusera le premier extrait parce que la phrase montre que le montant est celui réclamé par une partie, qui ne sera pas nécessairement accordé par le juge, et le second extrait parce que le montant est d’une nature différente.

Choisir le meilleur algorithme

Il reste alors à déterminer quel algorithme donne le meilleur résultat pour extraire ces coûts irrécupérables. Ici, nous avons comparé la mesure f d’un modèle basé sur CRF-Suite avec d’autres modèles formés sur différents cadres de réseaux neuronaux tels que Delft, Flair et Spacy :

Capture d'écran de Kairntech

Nous pouvons constater que c’est le modèle utilisant le cadre DELFT qui fournit la meilleure qualité.

Autres montants financiers à extraire ?

Un montant n’a pas de sémantique en soi. Une décision peut mentionner de nombreux autres montants qui n’ont rien à voir avec les coûts irréparables. Par exemple, le loyer ou les dommages et intérêts sont des montants que l’algorithme ne doit pas confondre avec les coûts irréparables. Chaque annotation erronée diminue le taux de précision.

Dans cette variante de cas d’utilisation, l’objectif est d’extraire non seulement les coûts irrécouvrables obtenus, mais aussi les dommages obtenus :

Capture d'écran de Kairntech

Le texte de la décision comprend également les montants réclamés par les parties au titre des frais irrépétibles. S’ils doivent être extraits, notamment pour comparer le montant réclamé et le montant obtenu, les demandes des deux parties doivent être distinguées et annotées dans une étiquette différente, d’une couleur très distincte, afin d’éviter toute confusion, comme dans la décision suivante :

Si d’autres montants sont recherchés, la charge d’annotation manuelle augmentera, mais la qualité de chaque étiquette sera améliorée car le moteur d’apprentissage aura moins d’occasions d’hésiter.

Formation sur un sous-ensemble d’étiquettes

Lors de la mise en place d’une expérience visant à tester la qualité d’un algorithme, il est possible de restreindre le champ d’application à un sous-ensemble d’étiquettes. Une expérience rassemblant toutes les étiquettes du type « montant » donnera une meilleure qualité individuelle de chaque étiquette que chacune des quatre expériences limitées à une seule des 4 étiquettes dans notre exemple. En général, il est préférable de sélectionner toutes les étiquettes susceptibles d’entrer en concurrence sur un même segment de texte :

Associer un montant financier à une entité nommée

Enfin, l’utilisateur peut vouloir attribuer le numéro extrait à une partie, dans notre cas, les frais de justice que le tribunal a demandé aux parties de payer. Cela nécessite l’annotation d’une autre balise (dans le cas ci-dessous en couleur fuchsia) :

Ensuite, la relation entre le montant et le parti sera créée simplement en établissant une cooccurrence entre les entités nommées (proximité) ou par l’annotation des relations entre les entités nommées. Mais ceci fera l’objet d’un prochain article.