Comment marche Bert ?

2020-09-15 | Hugo Abraham

image article

Comment marche Bert ?

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 mais son fonctionnement semble peu intuitif à beaucoup. Pour percer à jour ce modèle hégémonique nous allons observer ce qui le distingue de ceux qu’il remplace.

Comment fonctionne Bert, le modèle qui a changé le NLP ?

Deux changements majeurs séparent Bert des modèles classiques et le rendent plus performant. Le premier est la manière dont Bert enchâsse(1) une séquence (souvent une phrase) dans une matrice, la seconde est l’utilisation de l’algorithme Transformers pour mettre en interaction tous les jetons de la séquence.

Les modèles précédents utilisaient une représentation assez simple des jetons (généralement leur indice dans le vocabulaire extrait du jeu d’entraînement). Les jetons étaient analysés en relation avec tous les jetons qui les avaient précédés dans la séquence, à la manière dont nous pourrions lire un texte. Voilà pourquoi la manière standard d’entraîner ce modèle est de lui faire prédire le jeton à ajouter à une séquence. Bien que puissant, ce modèle a du mal à capturer les relations entre jetons éloignés dans la séquence, plus encore les relations au delà du bilatéral. Enfin, la position du jeton dans la séquence n’a que peu d’influence. Voyons comment Bert parvient à résoudre chacune de ces embûches, en commençant par la dernière.

C’est avant même la présentation de la séquence à l’analyse que Bert intègre la position, juste après l'enchâssement de la séquence. Le but de cette étape est de construire une représentation numérique la plus complète possible de la séquence. Assez naturellement on part de la représentation de chaque jeton par sa position dans la liste de tous les jetons, appelé le vocabulaire du modèle. ‘lorem ipsum dolor sit amet’ devient donc [‘lorem’, ‘ipsum’, ‘dolor’, ‘sit’, ‘amet’] puis [31, 22, 12, 972, 442]. Jusqu’ici rien de très nouveau. Classiquement on dérive une représentation matricielle de la séquence en empilant des vecteurs unitaires correspondant à chaque jetons: ‘lorem’ le 34 jeton est donc représenté par le vecteur \( e^{(34)} \) qui a pour éléments 0 partout sauf en position 34 où se trouve un 1. On les écrits donc \( e^{(34)}_j = \delta_{34,j} \) avec \( j\in{ 0, n_{vocab}-1} \). Chaque vecteur-jeton est alors orthogonal aux autres et la matrice dans laquelle est enchâssée la séquence ne comporte que des zéros et des uns (ce qu’on appelle one hot encoding). Si ce procédé semble naturel, il dissimule en réalité une hypothèse, que les jetons soient orthogonaux, i-e que la matrice ne contiennent que des zéros et des uns. Or l’objectif de l’apprentissage automatique est de limiter les suppositions. A cette fin, Bert considère les éléments \( e^{(i)}_j \) (représentant le \( j^{ème} \) élément du \( i^{ème} \) jeton du vocabulaire) comme des paramètres du modèle. C’est à dire que ces éléments feront l’objet d’une rétropropagation pendant l’entraînement; ils seront appris par le modèle. Il en résulte que le vocabulaire s’adapte au jeu d’entraînement, et renferme plus d’informations qu’un simple annuaire. N’oublions pas cependant notre objectif : intégrer la position des jetons dans la représentation de la séquence. Nous désirons que le vecteur représentant un jeton dépende de la position du jeton dans la séquence. Pour cela les auteurs de Bert ajoutent une matrice de position à la matrice d’enchâssement. Nous nous contenterons ici de dire que cette matrice a pour caractéristique que chaque ligne soit différente selon une fonction précise. Chaque vecteur-jeton est donc modifié en fonction de sa position dans la séquence. Le modèle possède alors une représentation riche de chaque séquence; il dispose de beaucoup d’informations et pourra en extraire de meilleures prédictions. Pour plus d’informations au sujet de l’enchâssement et de Bert en général on se reportera au très bon article de Miguel Rodrigo Calvo.

Revenons aux deux premiers manquements des modèles classiques, les interactions distantes et multilatérales. C’est le rôle des bloc de transformers. Leur objectif est de projeter la matrice représentant la séquence de sorte à ce que chaque jeton interagisse avec tous les autres, ceci est classiquement le rôle du produit scalaire entre chaque vecteur-jeton :

\[ e^{(i)}\dot e^{(j)} = e^{(i)}_k P_{kl} e^{(j)}_l \]

où la matrice P joue le rôle de métrique. Ie, la matrice P mesure la proximité entre deux jetons. En géométrie euclidienne, sur du plat quoi, \( P_{kl} = \delta_{kl} \), et on s'ennuie. Ici au contraire, la géométrie de l’espace des jetons est inconnue; la trouver est le but de l’entraînement. En la trouvant, ou plus certainement en l’approximant, le modèle établit quels jetons sont “proches” les uns des autres, c’est à dire lesquels font unité de sens. Ce processus est itéré, brassant les vecteurs-jetons à chaque reprise et approximant un nouveau métrique. Ainsi on obtient une information sur les groupes de jetons, sur les proximités conditionnelles, c’est à dire des interactions à plusieurs jetons. Voici le coeur véritable de la supériorité de Bert sur ses successeurs, d’où sa présence dans le nom même. La présentation ici faite de l’attention à tête multiple (le vrai nom de ce morceau d’algorithme), n’a pour but que d’en faire sentir l’objectif, pour une discussion moins vulgarisante et plus fidèle à l’article original, on se reportera à un article d’Anusha Lihala. Attention, elle présente l’attention dans son ensemble. Le passage qui nous concerne est à trouver dans la dernière partie.

Bert assoit donc sa supériorité par une mise en relation intelligente de tous les jetons, ainsi qu’en traitant leur enchâssement comme un paramètre. On voit alors le coût en calcul et la quantité de données faramineuse nécessaire pour informer le modèle. C’est le prix à payer pour la finesse d’analyse d’un modèle qui a brutalement propulsé la compréhension du langage à un niveau de précision qui lui ouvre des opportunités incroyables. Le modèle est prêt, il ne reste plus qu’à l’appliquer.

Notes

  1. J'espére ainsi traduire le terme anglais embedding, bien qu’il signifie littéralement “mettre au lit”.

Bert Deep learning Machine learning Intelligence artificielle