Comment utiliser Bert avec des longs textes ?

2020-09-15 | Hugo Abraham

image article

Comment utiliser Bert avec des longs textes ?

Bert est l’architecture de deep learning dont on susurre le nom partout sans comprendre comment il fonctionne. Il a atteint une certaine domination en NLP et permet une compréhension fine des séquences. Bert permet de classer, de résumer, il répond à des question, et bien plus encore. Mais ces succès ont un coût, Bert est gourmand en temps de calculs et lourd en paramètres. Il est en conséquence irréaliste de vouloir l’appliquer sur des séquences aussi longues que des livres. De même utiliser un modèle moins gourmand à l’échelle du livre c’est se priver de la finesse d’analyse de Bert. Comment réconcilier ces deux impératifs ?

Comment utiliser Bert avec des longs textes ?

Depuis sa publication(1) en 2018, le modèle Bidirectional Encoder Representations from Transformers (Bert pour les intimes) a révolutionné le traitement du langage humain. Il permet une bien meilleure compréhension des textes par le modèle (nous reviendrons sur les raisons de cette supériorité) que ses prédécesseurs comme le LSTM et il a grandement amélioré les performances sur les tâches de classement, de traduction, d’extraction de réponses, etc. Ces avantages ont pourtant un coût, classique en deep learning, un nombre de paramètre énormes. La version basique en compte 110 millions, la version large 340 millions ! Et encore, ce nombre dépend de la longueur des séquences de texte qui composent le jeu d’entraînement (512 jetons(2) dans l’article). Ce nombre pose immédiatement un problème: il faut énormément d’exemples pour entraîner le modèle. Pour aggraver encore le constat, considérez le temps d’entraînement et d’exécution d’un modèle de 1000, 10 000, 100 000 jetons ! Pourtant de tels textes existent, ce sont des contrats, des lois, des rapports d’expertise. Comment alors utiliser les dernières avancées du natural language processing (NLP) ?

Le transfert learning et quelle librairie utiliser ?

Comme souvent, on utilise le transfert learning. Il permet de commencer avec un algorithme qui comprend déjà les bases du langage. Pour Bert et ses successeur (AlBert(3), RoBerta(4), et tous les jeux de mots accessibles), la libraire de modèles pré-entraînés la plus complète est HuggingFace. Au lieu d’amasser un jeu de données énorme, on préférera travailler avec un Bert pré-entraîné, typiquement sur une tâche de complétion de phrase. On masque un jeton et on demande au modèle de le démasquer. Ceci permet une bonne modélisation du langage car les liens statistiques entre les jetons sont appris par déduction de sens. Le mot qui manque est évalué par rapport à tous les autres de la phrase. Il y a pourtant un inconvénient au pré-entraînement, il faut fournir des séquences de la longueur qui a servi à entraîner le modèle; ni plus longue, ni plus courte. Souvent cela signifie des séquences de 512 jetons maximum. Voici encore notre problème : comment concilier le transfert d’apprentissage et les longs textes ?

Transformer un texte en image

L’idée est simple; il s’agit de n’utiliser Bert que pour une analyse locale des textes. Les analyses sont ensuite collectées et la classification globale du texte est réalisée par un autre réseau de neurones, un LSTM ou un ResNet. Dans la première étape il s’agit de déterminer l’activation par une séquence extraite du texte de chaque classe de document. C’est à dire que l’on n’applique pas de softmax à la dernière couche de Bert. Les séquences sont choisies de sorte à ce qu’elles se chevauchent suffisamment pour que des jetons éloignés puissent communiquer. Dans la seconde étape le réseau agrège les résultats et classifie le texte. Ainsi des types proches, différant seulement par certaines caractéristiques présentent dans une partie du document peuvent être distingués par le modèle. De telles différences seraient noyées par une simple moyenne de prédiction, ou un vote majoritaire. Dans un cas que nous avons traité, nous avons concaténés les résultats de Bert pour créer une matrice de \(n_{séquences} × n_{types}\) que nous avons utilisés comme une image. Un ResNet 110 pré-entrainé apprenait alors très rapidement (quelques époques(5) seulement,) à classer les types avec une précision supérieure à 90%. On peut être étonné de l’efficacité de cette méthode, surtout de la seconde étape. Elle s’explique par la particularité des réseaux convolutifs : ils se concentrent sur la texture et les fréquences d’apparition de motifs. C’est la raison de leur utilisation en traitement de l’image. Ici, c’est exactement ce que l’on souhaite, détecter des motifs récurrents et la “texture” des textes, c’est-à-dire les motifs d’activation des séquences.

Comment utiliser Bert pour de longs textes ? En ne l’utilisant pas pour de longs textes. Au contraire, laissons-le sur les cours passages où il performe, et laissons la classification globale à d’autres. Passer par une représentation visuelle pour une régression ou une classification est assez courant et recommandé. Peu de réseaux sont aujourd’hui aussi étudiés que les réseaux convolutifs, les utiliser c’est en bénéficier. Nous aurons donc d’autres occasions de voir cette méthode.

Notes

  1. Voir https://arxiv.org/pdf/1810.04805.pdf
  2. On distingue les jetons des mots. Les jetons sont les unités de sens pour l’algorithme. Il est ainsi important de séparer un verbe en deux jetons : radical et conjugaison. Le modèle peut alors facilement saisir les liens de sens entre deux conjugaisons d’un même verbe.
  3. Voir https://arxiv.org/pdf/1909.11942.pdf
  4. Voir https://arxiv.org/pdf/1907.11692.pdf
  5. Une époque est passée quand l’algorithme a vu tous les exemples du jeu d’entraînement une seule fois.

Bert Deep learning Machine learning Intelligence artificielle