BERT

À la découverte de BERT

Ces dernières années, les avancées en traitement automatique du langage naturel (NLP) ont consisté, essentiellement, à l’élaboration de modèles pré-entraînés. Ceux-ci ont pour avantage de donner de bons résultats même avec peu de données. Aujourd’hui nous allons à la decouverte de BERT : ce modèle de NLP implémenté par Google.
Dans la suite de cet article nous verrons ce qu’est BERT, quelle est son architecture et comment l’utiliser pour une tâche concrète.

C’est quoi BERT ?

BERT ou encore Bidirectional Encoder Representations from Transformers est un modèle de représentation de textes écrit en langage naturel. La représentation faite par BERT à la particularité d’être contextuelle. C’est-à-dire qu’un mot n’est pas représenté de façon statique comme dans un embedding classique mais en fonction du sens du mot dans le contexte du texte. Par exemple, le mot « baguette » aura des représentations différentes dans « la baguette du magicien » et « la baguette du boulanger ». En plus, le contexte de BERT est bidirectionel, c’est-à-dire que la représentation d’un mot fait intervenir à la fois les mots qui le précèdent et les mots qui le suivent dans une phrase.

Le principe d’utilisation de BERT est tout simple : Il est « déjà » pré-entraîné sur une grande quantité de données, on le modifie pour une tâche précise puis on le (re)entraîne avec nos propres données. La modification dont il est question ici consiste en général à rajouter un réseau de neurones à la sortie de BERT. Cela s’appelle : le fine-tuning.

Architecture de BERT

BERT réutilise l’architecture des Transfomers (d’où le « T » de BERT). En effet, BERT n’est rien d’autre qu’une superposition d’encoders.

Architecture BERT
BERT-Base

Les encodeurs ont tous la même structure (voir cet article) mais ne partagent pas les mêmes poids.

La version représentée ci-dessus est la version dite « Base » de BERT. Elle est constituée de 12 encoders. Il existe une version plus grande dite « Large » qui a 24 encodeurs. Évidemment la version large est plus performante mais plus gourmande en ressource machine.

Le modèle a 512 entrées qui correspondent chacune à un token. La première entrée correspond à un token spécial le “[CLS]” pour “classification” et qui permet d’utiliser BERT pour une tâche de classification de texte.

Il a également 512 sorties de taille 768 chacune (1024 pour la version Base). Le premier vecteur correspond au vecteur de classification.

La sortie de chacun des 12 encodeurs peut être considérée comme une représentation vectorielle de la séquence passée en entrée. La pertinance de cette représentation est assurée par le mécanisme d‘attention mis en œuvre par les encodeurs.

L’innovation qu’apporte BERT n’est pas dans son architecture. Vu qu’on vient de voir que la seule pièce qui le compose a été gentiment empruntée au Transformer. Et puis, OpenAI avec son GPT avait déjà un modèle pré-entraîné basé sur les Transformers. Qu’est-ce que BERT apporte comme nouveauté concrètement ?

Pré-entraînement

BERT se différencie de ses prédécesseurs (modèles de NLP pré-entraînés), par la façon dont il est pré-entraîné. Ce pré-entraînement est non-supervisé c’est-à-dire qu’il ne nécessite pas de jeu de données labellisé. BERT est pré-entraîné sur un grand jeu de données constitué de textes des pages Wikipédia en anglais (2 500 millions de mots) ainsi qu’un ensemble de livres (800 millions de mots).

Cet (pré)entraînement est fait sur deux tâches.

Tâche 1 : MLM ou Masked Language Modeling

Le Language Modeling est une tâche habituelle de NLP qui consiste à prédire le mot suivant étant donnée le début de la phrase.

Exemple :

Séquence initiale : « Le lion ne s’associe pas avec le cafard »

Séquence donnée : « Le lion ne s’associe pas avec le »

Prédiction du modèle de LM : « cafard »

Le principe du Masked Language Modeling est de prédire des tokens « masqués » à partir des autres tokens de la séquence.

Exemple :

Séquence initiale : « Je suis, mon cher ami, très heureux de te voir. »

Séquence d’entrée : « Je [MASK]1, mon cher [MASK]2, très heureux de te voir »

Pédiction du modèle de MLM : [MASK]1 = « suis » ; [MASK]2 = « ami »

Pour la première phase du pré-entraînement de BERT on masque 15% des tokens de chaque séquence, de façon aléatoire. Puis on entraîne sur du MLM.

Cet entraînement est l’essence même de BERT. C’est de là que ce dernier tire sa bidirectionalité (deep bidirectionality). D’autres modèles comme ELMo se disent bidirectionels mais en réalité ils sont « shallow-bidirectional » car leurs représentations n’est rien de plus qu’une concaténation de la représentation faite grâce à un entraînement de la gauche vers droite et de celle faite grâce à l’entraînement de la droite vers la gauche.

Tâche 2 : NSP ou Next Sentence Prediction

Cette tâche consiste à prédire si oui ou non, une certaine séquence A est suivie par une certaine séquence B.

L’entraînement pour cette tâche se fait avec deux séquences à chaque itération et dans 50% des cas la phrase A est vraiment suivie par B.

Exemple 1 :

Séquence A : Il va pleuvoir.

Séquence B : Je prends mon parapluie.

Prédiction : IsNext

Exemple 2 :

Séquence A : Il va pleuvoir.

Séquence B : C’est bientôt les élections présidentielles américaines.

Prédiction : NotNext

La tâche NSP permet à BERT d’appréhender les interdépendances entre les phrases qui se suivent. Ce qui enrichit la représentation de texte finale et la rend adaptée pour des tâches telles que le Question Answering et le NLI.

Utilisation de BERT : Fine-Tuning

Le fine-tuning consiste à utiliser une version pré-entraînée de BERT dans l’architecture d’un modèle pour une tâche de NLP spécifique.

Les auteurs de BERT nous disent que pour la plupart des tâches il suffit d’ajouter une couche de réseau de neurones basique pour avoir de très bons résultats.

Pour une tâche de classification de texte par exemple, plus précisément pour l’analyse de sentiments des avis de cinéphiles, l’architecture du modèle « fine-tuné » peut ressembler à ça :

BERT fine-tuning
Classification de texte avec BERT : Fine-Tuning

Il suffit d’ajouter, en aval de BERT, un feed-forward suivi d’un softmax et le tour est joué.

Comment utiliser BERT en pratique (avec Python) ?

Tous les modèles sont sur ce repo. Il est aussi possible de les charger directement à partir de Tensorflow Hub et PyTorch Hub. Cependant, je vous recommande vivement la bibliothèque Transformers de HuggingFace. Elle contient des fonctions Python permettant de faciliter l’utilisation de modèles basés sur les Transformers tels que les GPT, XLN et ainsi que BERT et ses dérivés.

Les dérivés de BERT

Plusieurs modèles réutilisant BERT ont vu le jour ces dernières années. Dans la plupart des cas l’architecture reste la même mais l’entraînement change sensiblement. RoBERTa, par exemple, est une « version de BERT » avec des paramètres de pré-entraînement différents et la tâche de NSP supprimée. Cela dans le but de rendre le pré-entraînement plus rapide. En ce qui concerne la francophonie, nous avons CamemBERT qui est basée sur RoBERTa et qui est entraîné sur un jeu de données en français.

Conclusion

Nous venons de voir BERT ou Bidirectional Encoder Representations from Transformers. Qui est un modèle de représentation de texte en langage naturel. La représentation offerte par BERT est contextuelle et bidirectionelle. BERT est pré-entraîné sur des millions de textes ce qui permet d’avoir de bons résultats lors de fine-tuning même quand l’on dispose de peu de données.

Bien qu’étant très performant, BERT a des limites notamment : le fait qu’il ne peut prendre qu’une séquence de 512 tokens maximum à la fois. L’entraînement sur la tâche MLM est également criticable. Il existe plusieurs modèles tels que XNet et Transformers-XL qui essaient de palier ces problèmes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.