Transformer

À la découverte du Transformer

Le traitement automatique du language naturel est, aujourd’hui, essentiellement dominé par les modèles séquence à séquence (ou seq2seq). Effectivement, ce type de modèle est adapté à la langue et à plusieurs tâches de NLP classiques telles que la traduction de texte. Parmi les modèles seq2seq qui ont vu le jour ces dernières années, s’il y en a un qui peut être caractérisé de « game changer » c’est bien le Transformer. Le Transformer est un modèle de séquence à séquence basé sur le mécanisme d’attention et non sur un réseau de neurones récurrent comme c’était le cas pour les modèles précedents.

Dans cet article nous verrons :

  • Ce qu’est un Transformer ;
  • En quoi est-il une innovation ;
  • Son architecture ;
  • Comment peut-on l’utiliser.

Qu’est-ce qu’un Transformer

Le Transformer est un modèle de Deep Learning (donc un réseau de neurones) de type seq2seq qui a la particularité de n’utiliser que le mécanisme d’attention et aucun réseau récurrent ou convolutionnel. Le Transformer est présenté dans le papier « Attention Is All You Need » qui décrit son architecture et ses performances impressionnantes sur plusieurs jeux de données de traduction.

Pour rappel, un modèle seq2seq est un modèle qui prend en entrée une séquence (une suite d’éléments du même type) et renvoie une séquence en sortie. L’exemple par excellence pour ce type de modèle est la traduction de texte.

Modèle Traduction de séquence

Comment le Transformer a changé le NLP ?

Pour faire des modèles séquence à séquence avant la venue du Transfomer, il fallait faire recours au fameux LSTM (ou GRU) qu’on utilisait dans une architecture Encoder-Decoder.

Dans une architecture Encoder-Decoder, la partie « Encodeur » crée une représentation vectorielle d’une séquence de mots. Le « Décodeur », lui, retourne une séquence de mots à partir d’une représentation vectorielle.

Traducteur Encoder-Decoder avec LSTM (seq2seq avant le Transformer)

Le rôle du LSTM est de prendre en compte l’interdépendance des mots. Mais ce modèle a une limitation : il est relativement lent à entraîner et très peu parallélisable.

L’idée du Transformer est de conserver l’interdépendance des mots d’une séquence en n’utilisant pas de réseau récurrent mais seulement le mécanisme d’attention qui est au centre de son architecture.

Architecture du Transformer

L’architecture du Transfomer a hérité du pattern Encoder-Decoder. La partie « encodage » contient 6 encodeurs montés l’un après l’autre. La partie « décodage » consiste en 6 décodeurs également montés l’un après l’autre mais prenant chacun, comme entrée supplémentaire, la sortie du 6e encodeur.

Architecture du Transformer

Les encodeurs (resp. décodeurs) ont tous la même structure et leur nombre (six) est totalement arbitraire (peu importe le nombre d’encoders-decoders, le principe reste le même).

L’entrée d’un encodeur est la sortie du précédent. L’entrée du premier encodeur est vecteur d’embedding. Également l’entrée d’un décodeur est la sortie du décodeur précédent ainsi que les mots déjà encodés. Le dernier décodeur est connecté à un bloc « Réseau de neurones linéaire + Softmax ». Le rôle de ce bloc est de permettre d’identifier à quels mots du vocabulaire correspondent les sorties du dernier encodeur.

Les blocs élémentaires du Transformer, vous l’aurez compris, sont les « encoders » et les « décodeurs ». Passons ces deux éléments à la loupe.

Zoom sur l'encodeur et le décodeur du Transformer

L’encodeur consiste en deux blocs (qui sont tous deux réseaux de neurones) : Une couche dite de « Self-attention » et un réseau à propagation avant (ou Feed-forward Neural Network). Si le second est un réseau de neurones assez connu, le premier l’est un peu moins. La couche de Self-attention est l’élément central de l’architecture du Transformer. Son rôle est de faire garder l’interdependance des mots dans la représentation des séquences. Nous verrons le mécanisme d’attention plus en détail un plus bas. Le décodeur est également composé d’un bloc de Self-attention et d’un Feed-forward mais il contient en plus une couche « Encoder-Decoder Attention » qui a pour but de permettre au décodeur de réaliser le mécanisme d’attention entre la séquence d’entrée (encodée) et la séquence de sortie (en train d’être décodée).

Le mécanisme d’Attention

L’idée du concept d’attention est de mesurer à quel point deux éléments de deux séquences sont liés. Dans un contexte de séquence à séquence en NLP, le mécanisme d’attention aura pour but de « dire, au reste du modèle, à quels mots de la séquence B il faut porter le plus d’attention quand on traite un mot de la séquence A ». Regardons un exemple.

Illutstration de l'attention entre deux séquences.
Distribution de l’attention entre deux séquences
Source: Bahdanau et al., 2015

Dans cet exemple plus une cellule est claire, plus le lien entre les deux mots auxquels elle correspond est fort. On voit qu’en règle générale un mot a un lien fort avec sa traduction littérale.

Self-attention ou Intra-attention

On sait maintenant ce qu’est l’attention, mais qu’est-ce qu’il en est du « Self-attention ? Le self-attention n’est rien d’autre que le mécanisme d’attention appliqué à une seule séquence. La couche de self-attention détermine l’interdépendance des différents mots de la même séquence afin de lui associer une représentation (encoding) pertinante. Prenons pour exemple la phrase : “Le chat dort sur le tabouret car il est fatigué.”. Il est évident, pour un être humain, que “il” fait référence au “chat” et non au “tabouret”. Le processus de self-attention aura donc pour objectif de détecter le lien entre “chat” et “il”.

Illustration du self-attention
Visualisation d’une couche de self-attention

La visualisation d’une couche d’attention sur notre séquence montre que pour le mot (token) « il », le coefficient d’attention est élevé pour « chat » et « dort ». Ce qui veut dire que le modèle devra se « concetrer » sur « chat » et « dort » quand il faudra encoder « il ».

N’hésitez pas à faire un tour sur le Notebook Tensor2Tensor qui permet de visualiser des couches d’attention de Transformers.

Calcul de (self) l’attention

Regardons plus en détail comment est fait le calcul de l’attention au sein du Transformer. Reprenons notre séquence du début : « Je suis ton père ». Une couche de self-attention va calculer un vecteur d’attention pour chaque mot de la séquence. Dans la suite, faisons les calculs avec des vecteurs par souci de simplicité mais en vrai tout se fait avec des matrices (plusieurs vecteurs juxtaposés).

Vecteurs k,q et v

Pour calculer le vecteur d’attention il faut considérer 3 vecteurs pour chaque entrée de l’encodeur :

  • Vecteur requête (Query Vector) qu’on appelle q
  • Vecteur clé (Key Vector) qu’on appelle k
  • Vecteur valeur (Value Vector) qu’on appelle v

On indice chacun de ces vecteurs par la position du mot dans la séquence (Ex: q1,k1 et v1 pour le premier mot de la séquence). Ces vecteurs sont obtenus en multipliant l’embedding de la séquence d’entrée (qu’on va appeler x) par les 3 matrices (qu’on appelle Q, K et V) qui sont entraînées pendant le processus d’entraînement du Transformer.

Calcul des vecteurs de self-attention

On commence par calculer le produit scalaire de q1 et des différents ki qu’on divise par la racine carrée de la dimension du vecteur k (dimension qui dans le papier est fixé à 64). Le but de cette division est de diminuer les produits scalaires afin d’assurer une stabilité du gradient.

MotsqkvScore / 8
Jeq1k1v1q1.k1/8
suisk2v2q1.k2/8
tonk3v3q1.k3/8
pèrek4v4q1.k4/8

Ensuite, on applique la fonction Softmax au vecteur « score/8 ». On appelle s1i la probabilité du i-ème mot donnée par le Softmax. On multiplie ensuite chaque terme du vecteur s (Résultat du Softmax) par le vecteur v correspondant.

MotsqkvScore / 8SoftmaxSoftmax * v
Jeq1k1v1q1.k1/8s11s11*v1
suisk2v2q1.k2/8s12s12*v2
tonk3v3q1.k3/8s13s13*v3
pèrek4v4q1.k4/8s14s14*v4

Pour finir on fait la somme des vecteurs obtenus (Sofmax*v) et on obtient le vecteur de self-attention du mot « Je ».

MotsqkvSoftmaxSomme
Jeq1k1v1s11z1 = s11*v1 + s12*v2 + s13*v3 + s14*v4
suisk2v2s12
tonk3v3s13
pèrek4v4s14

On fait de même avec les autres mots pour obtenir le self-attention de toute la séquence. Ces vecteurs zi sont ceux qui vont être passés au Feed-forwards.

Encore une fois, les calculs dans le Transformer sont faits par « lots de mots » donc avec des matrices et pas des vecteurs comme on l’a fait ici. Cependant, le principe de calcul de self-attention reste le même.

Multi-head Attention

En plus, ce calcul est fait en parallèle par plusieurs blocs d’attention différent. Cela est appelé « Multi-head Attention » et a pour but d’avoir plusieurs « sous-espaces de représentation » qui empêchent que la représentation soit totalement biaisée si une couche (head) d’attention l’est. Le vecteur de self-attention en multi-head n’est rien d’autre que la concaténation des vecteurs de sortie de chaque tête.

Influences du Transformer

Le Transformer fut clairement une révolution à sa sortie par le fait qu’il soit à la fois très performant comme modèle de traduction et beaucoup plus rapide à entraîner comparé à ses prédécésseurs. Mais surtout par l’influence qu’il a sur le NLP à travers les modèles pré-entraînés qu’il a inspiré.

GPT-2 et BERT sont des gros modèles de NLP pré-entraînés sur des millions de textes et qu’il est possible de fine-tuner pour des tâches spécifiques. Ces modèles, aujourd’hui, sont ceux qui permettent d’avoir les meilleurs résultats pour les tâches classiques : classification de texte, reconnaissance d’entités nommées, etc. Et le point commun de ces deux modèles est l’emprunt d’un bloc de son architecture au Transformer.

GPT-2 est composé d’une pile du bloc « decoder » du Transformer. Tandis que BERT se base sur le bloc « encoder ». Le pré-entraînement sur autant de données n’a été envisageable que parce que l’entraînement d’un modèle inspiré du Transformer est beaucoup plus parallélisable que celui d’un modèle classique à base de réseaux récurrents.

Conclusion

Nous venons de voir le Transformer qui est un modèle séquence à séquence dont l’architecture à la particularité de n’utiliser aucun réseau récurrent. En effet, le Transformer assure l’interdépendance des mots grâce au mécanisme d’attention. L’architecture du Transformer a inspiré l’implémentation de plusieurs modèles qui font partie, aujourd’hui, des incontournables du NLP.

3 réflexions sur “À la découverte du Transformer”

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.