IA
Mar 1, 2020

Une revue des approches récentes en Traitement Automatique du Langage Naturel (TALN)

Comment créer des modèles de langage puissants capables de surpasser presque tous les tests de performance et de résoudre la plupart des tâches de TALN ? Les approches récentes en TALN apportent un vent de nouvelles idées et de techniques qui permettent la création de tels modèles d'apprentissage profond variés. Le présent article traite d'une de ces approches récentes : le pré-entraînement non supervisé des réseaux de neurones artificiels profonds en faisant usage de l’apprentissage multi-tâche (multi-task learning) et de mécanismes d'auto-attention multi-têtes (multi-head self-attention mechanisms).


Le présent article porte sur les éléments suivants :

   1. Dans un premier temps, nous explorerons le fonctionnement du pré-entraînement non supervisé.

   2. Nous verrons ensuite comment cela peut être amélioré en utilisant plusieurs objectifs d’apprentissage non supervisés (plusieurs têtes de régression).

   3. Ensuite, voyons comment faire un entraînement supervisé avec un objectif d’apprentissage après avoir entraîné un modèle de façon non-supervisée (fine-tuning).

   4. Enfin, nous approfondirons les détails techniques des modèles d’apprentissage en profondeur qui se rapprochent le plus de l’état de l’art (SOTA), afin de résoudre la plupart des problèmes de TALN.


Pré-entraînement non-supervisé

Qu’est-ce qu’un pré-entraînement non-supervisé ?

Pour un algorithme d’apprentissage automatique, un apprentissage non supervisé est un apprentissage fait sur des données non étiquetées. Ainsi, il n’y a pas d’objectif d’apprentissage clair.


Un pré-entraînement non supervisé est donc un moyen de faire en sorte que les réseaux de neurones (ou autres algorithmes d’apprentissage automatique) se familiarisent avec des données générales avant de savoir comment résoudre une tâche précise. On peut comparer cela à des étudiants qui terminent leurs études généralistes avant de se spécialiser (e.x. : Sciences de la Nature au Cégep).


Les réseaux de neurones profonds (DNN) peuvent bénéficier d’un tel apprentissage progressif (curriculum learning).

Pourquoi le pré-entraînement est-il requis pour atteindre l’état de l’art sur plusieurs tâches de TALN variées?

Lorsque les données spécialisées sont rares, difficiles ou coûteuses à générer, il est judicieux de recourir à un pré-entraînement non supervisé, car des réseaux de neurones correctement formés de façon généraliste à l'avance auront besoin de moins de données d’entraînement supervisé pour apprendre à effectuer de bonnes prédictions (par rapport à d'autres réseaux de neurones entraînés uniquement à l’aide de données d’entraînement supervisé). En d’autres mots : les jeux de données d’évaluations disponibles en ligne ont souvent peu de données d’entraînement étiquetées, et cette situation se reflète aussi souvent dans l’industrie.


Il convient également de noter que, selon la nature de la tâche à accomplir, ce que l’on appelle les « petites quantités de données » peut se compter en millions ou plus. Le meilleur exemple : le langage naturel. Combien de temps un cerveau humain doit-il être entraîné sur des textes avant d'être considéré comme très intelligent ? On pourrait compter ça en décennies.


En résumé, la plupart des tâches et tests d’évaluations de performance de TALN en ligne ne fournissent que quelques exemples d’entraînement pour les réseaux de neurones artificiels. Pour obtenir les meilleurs résultats sur ces tests avec l’apprentissage automatique, il est impératif de faire apprendre aux réseaux de neurones à modéliser le langage de façon non supervisé pour ensuite appliquer concrètement le réseau de neurones au peu de données spécialisées qui sont disponibles.


Apprentissage multi-tâche

Qu’est-ce que l’apprentissage multi-tâche et pourquoi est-ce bénéfique ?

L’apprentissage multi-tâche (Multi-Task Learning : MTL) est un moyen d’apprendre à résoudre plusieurs tâches d’apprentissage différentes à l’aide d’un même modèle, tel qu’un réseau de neurones profond par exemple. Cela signifie que le réseau de neurones va apprendre à mettre en évidence les points communs des différentes tâches et ainsi partager les représentations neuronales acquises pour résoudre ces nombreuses tâches avec le même tronc commun d’intelligence. Cela permet au modèle de mieux généraliser le monde qu’il observe, ce qui est non seulement un moyen d'éviter le surentraînement (overfitting), mais également un moyen d'obtenir un meilleur score de prédiction.


Comment le pré-entraînement non-supervisé et l’apprentissage multi-tâche sont-ils fait en pratique?


D'accord, le pré-entraînement non supervisé n'a pas d'objectif d'apprentissage clair. En pratique, cela consiste presque toujours à reformuler le problème d’apprentissage en manipulant la façon de présenter les données au réseau de neurones afin de simuler une méthode d'entraînement qui suite à cette transformation pourrait être perçue comme étant de l’entraînement supervisé. Dans le cas de BERT (Bidirectional Encoder Representations from Transformers), au moins deux fonctions de perte (objectifs d’apprentissages, « loss ») sont utilisées pour effectuer une rétropropagation du gradient de manière supervisée. BERT est un modèle de Google qui est à l’état de l’art pour de nombreuses tâches de TALN, lequel a inspiré GPT-2 (Generative Pretrained Transformer 2) d’OpenAI, un modèle similaire qui est apparu par la suite. Ces deux modèles utilisent la même architecture neuronale avec « mécanismes d’attention ».


L'un des moyens utilisés par BERT pour formuler une fonction d'objectif d'apprentissage non supervisé (loss) consiste à obliger le réseau de neurones à lire une phrase avec des mots manquants et à demander au réseau de neurones de compléter ces trous en devinant les mots manquants. Bien que cette façon de formuler le problème soit un apprentissage supervisé techniquement parlant, on peut le considérer comme un apprentissage non supervisé du seul fait qu’il utilise d’abord des données textuelles non structurées et que c’est avec de telles données générales que le modèle est entraîné. En conséquence, le réseau de neurones apprend à deviner les mots : il doit donc se construire un modèle du langage dans sa façon de penser, développant ainsi une intelligence grammaticale et contextuelle propre pour traiter du texte. Cela ressemble vaguement aux modèles de langage par « N-Gram ». Cependant, l’encodeur (réseau de neurones) BERT est en quelque sorte bidirectionnel de par le fait qu’il utilise des mécanismes d’attention.


Cependant, l’entraînement d'un modèle BERT ne s'arrête pas là. La procédure d’entraînement de BERT comprend d’autres fonctions de pertes / objectifs, extraites du texte lui-même. Une autre fonction est un classificateur binaire simple, construit de façon à savoir si une phrase précède ou non une autre phrase. Cela aide le réseau de neurones à faire la différence entre des phrases liées v.s. des phrases complètement non-apparentées. Ainsi, BERT est poussé à naturellement tendre à apprendre des façons d’interpréter les phrases, parce qu’il lui est demandé d’être capable de dire si deux phrases se suivent en plus d’être capable de remplir des trous dans ces phrases, ce qui rend ses capacités un peu plus haut niveau que s’il était seulement utilisé pour prédire les trous manquants. C’est ce qui cause le succès de BERT dans sa façon d’interpréter le sens des phrases à plus haut niveau.


GPT-2 d’OpenAI fonctionne sensiblement de la même façon, avec quelques améliorations. Il peut résoudre de nombreuses tâches, y compris la classification, l'implication textuelle, la similarité, donner des réponses à des questions à choix multiples et compléter librement un texte rédigé.


Fine-tuning de modèles


Après un pré-entraînement non supervisé sur plusieurs tâches, l'apprentissage multitâche ne s'arrête pas là. Il est possible de prendre le modèle et de le peaufiner (fine-tune) de sorte à ensuite apprendre à résoudre de nombreuses tâches différentes. Cela consiste à ajouter au modèle d’autres d'objectifs d'apprentissage (e.x. : têtes de régressions, losses) afin de pouvoir résoudre ces nouvelles tâches, et ce, avec des données supervisées appropriées pour cette tâche. Il est ainsi possible d’ajouter (ou d’avoir déjà planifié l’ajout de) des têtes de classification, d’autres têtes de régression et n’importe quoi d’autre à la sortie du réseau de neurones pour résoudre des tâches TALN allant du balisage partiel du discours (POS) à la reconnaissance d’entité nommée (NER), à la réponse automatique de questions (QA), etc.


Par exemple, pour répondre à des questions en langage naturel (QA), vous pouvez ajouter deux couches de neurones linéaires : une qui pointe vers le début de la réponse dans le texte et une autre qui pointe vers la fin, afin de générer une réponse. C’est de cette façon que BERT fonctionne.


La vérité est qu’il n’y a pas de solution unique, bien que les modèles de type BERT puissent faire beaucoup de choses. Pour un apprentissage supervisé précis, le choix de la tête de sortie appropriée est important et peut varier en taille et en forme.


Mécanismes d'auto-attention multi-têtes

ATTENTION: mathématiques lourdes ci-dessous!

Que sont les mécanismes d’attention ?


Dans sa forme la plus simple, telle que découverte et popularisée par Dzmitry Bahdanau, Kyunghyun Cho et Yoshua Bengio dès 2014, un mécanisme d’attention est défini comme étant un mini-réseau neuronal capable d’évaluer les proportions d’attention qu’il faut accorder à des éléments dans un ensemble ou une liste. Ces proportions d’attention sont donc d’un poids « α ». Ensuite, les valeurs des éléments les plus saillants sont généralement conservées une fois multipliées par ce poids (et les autres non conservées), le tout pondéré de manière à conserver une moyenne de ce qui était important et non une somme. Remarque: chaque élément devant être additionné dans le mécanisme d’attention est un vecteur. Les vecteurs multipliés par des « α » sont donc soit presque intacts (dans les cas d’une forte attention), ou sinon ont des valeurs très proches de zéro (suite à une multiplication par une attention nulle), avant la sommation. Ainsi, la somme des « α » est de 1.


Un mécanisme d’attention comme on le pensait à l’origine en 2014 : un poids « α » pondère chaque élément d’un ensemble, suite à quoi les valeurs de ces éléments sont moyennées en fonction de ce poids. Tel que défini avant le 21ème siècle, l'attention est un moyen de peser de manière sélective certains éléments à considérer, et non d'autres. Somme toute, les poids d’attention « α » doivent sommer à 1, afin d’équilibrer correctement les choses et de ne pas penser à tout en même temps de sorte à ne pas perdre la tête.


Que sont les mécanismes d'auto-attention multi-têtes ?


Les mécanismes d'auto-attention multi-têtes sont les variantes parmi les plus récentes des mécanismes d'attention utilisés, tels que dans BERT et GPT-2.


Avant même de parler d'auto-attention et de multi-têtes, le mécanisme d'attention déjà discuté doit d'abord être redéfini afin d'obtenir une définition complète lui permettant une extension en un fier mécanismes d'auto-attention multi-têtes.

Les clés « K » et les requêtes « Q »


Comme indiqué précédemment, un mécanisme d'attention pondère des éléments avant de faire une somme pondérée de ces éléments. Dans les mécanismes d'attention récents, tels que les mécanismes d'auto-attention multi-têtes, ces poids proviennent précisément du produit scalaire (c’est-à-dire : presqu’une similarité cosinus) entre un vecteur de requête « Q » et l'un des vecteurs clés « K ». Dans le cas de ce qui fut précédemment discuté, une seule requête pouvait être comparée à chaque clé « K » afin d’obtenir une valeur de similarité par clé pour la requête donnée. Ces valeurs sont les poids d'attention « α ». Nous avions aussi « K = Q ».


Les valeurs « V »


Les poids de l'attention « α » sont ainsi ensuite passés à travers une fonction softmax pour être normalisés afin qu'ils somment à une valeur totale de 1. Pour clarifier : nous avons maintenant autant de poids d'attention que de valeurs, car il devrait y avoir autant de valeurs que de clés (« |K| = |Q| ») et nos poids doivent provenir du produit scalaire d’une clés et d’une requête.


Les poids d'attention « α » multiplient ensuite chacun leur valeur « V » correspondante et le résultat est ainsi additionné en une somme pondéré (comme mentionné précédemment). Il en résulte maintenant d’un seul vecteur de résultat par vecteur de requête, pour cette combinaison énorme de chaque pair clé-valeurs réduites de par leur somme par pondération « α ». Nous n’avons donc qu’un seul vecteur à la fin, lequel regroupe finalement ce à quoi le réseau de neurones a choisi de porter attention.


Des ensembles de requêtes plutôt qu’une seule : l’auto-attention


Les mécanismes d’attention ont été décrits ci-dessus pour une seule requête « Q » et un ensemble de clés « K » avec chacune leurs valeurs respectives « V ». Dans ce cas, le résultat était un vecteur. Maintenant pour plusieurs requêtes « Q », le résultat est un tableau à deux dimensions (de taille des résultats des requêtes par leur représentation). Donc en pratique, nous pourrions avoir un nombre de requêtes différent de celui du nombre de clés. Ainsi, si nous avons plusieurs requêtes au lieu d'une, l'ensemble du processus est répété autant de fois que nécessaire, permettant ainsi autant de vecteurs de sortie que nous avions de requêtes.


Le vrai truc dans BERT et GPT-2 est alors de faire en sorte que les requêtes, les clés et les valeurs soient toutes identiques. D'où l'appellation auto-attention (self-attention) de ce genre de mécanismes. Les requêtes, clés et valeurs sont donc chacune une représentation partagée d’un mot au sein du réseau de neurones profond. De plus, l'opération est répétée entre chaque couche et avec des opérateurs linéaires. En d’autres mots : chaque mot d'une phrase est pris pour en faire des requêtes et non seulement des clés et valeurs. Les mots s’interrogent donc mutuellement de requêtes en clés en valeurs, de sorte à ce qu’ils se comparent tous entre chaque à la « O(n²) ». Le résultat ? Les mots sont comparés les uns aux autres et chacun peut tirer parti du contexte complet du reste de la phrase pour enrichir sa représentation vectorielle (plongement). En tant que tel, suite à cela, les vecteurs de mots ne représentent plus les mots, mais également les mots dans leur contexte, car rappelez-vous : BERT est entraîné pour prédire les mots manquants et doit ainsi être capable de prédire les mots cachés en portant attention à chaque autre mot environnant, ce qui met tous les mots en relation les uns avec les autres.

Multi-Têtes

Il ne manque plus qu'un élément pour bien comprendre les mécanismes d'auto-attention multi-têtes, tels qu'ils sont utilisés dans BERT et GPT-2 : la partie des multiples têtes. Celle-ci est relativement simple, mais difficile à cerner : avant de calculer l’ensemble du processus d’auto-attention, les représentations de mots sont redimensionnées avec une couche de neurones linéaire (fully-connected) de sorte à avoir des plus petites représentations de mots. Par contre, autant les représentations de mots sont plus petites, autant on fera plusieurs fois cette opération de redimensionnement et de recalcul de l’auto-attention avec ces sous-découpage de mots suite à une couche linéaire. Ainsi, le processus peut être effectué plusieurs fois, avec de nombreuses petites représentations des mots, ce qui aura une incidence sur la façon dont l'attention sera portée de façon indépendante d’une sous-représentation de mot aux autres. C’est comme d’ajouter de l’indépendance entre chaque passe du mécanisme d’auto-attention afin de garder les choses dans leur propre petit environnement avant de concaténer tous les résultats à la fin, ayant laissé les différentes têtes auto-attentives traiter le sujet tous avec leur angle d’attention différent sans nécessairement perdre tout ce qui est en somme réduisant les tenseurs lorsque les « α » d’attentions prenaient des valeurs proches de zéro.


Comment les mécanismes d’attention sont-ils utilisés dans BERT et dans GPT-2  ?

BERT signifie Bidirectional Encoder Representations from Transformers. Ceci est assez ironique étant donné qu’il n’utilise PAS les réseaux de neurones récurrents bidirectionnels (RNN), et que les mécanismes d'auto-attention multi-têtes peuvent traiter des informations dans tous les sens (pas exactement dans juste deux sens comme insinue le mot « bidirectionnel » dans leur appellation, lequel peut confondre). En termes simples, BERT est une énorme pile de mécanismes d'auto-attention multi-têtes avec encodage de position, également appelé « Transformer » par Google. Il en va de même pour GPT-2 : OpenAI a réutilisé le Transformer et a modifié les données sur lesquelles il a été formé, ainsi que l'objectif d'apprentissage, pour en faire un modèle génératif.

Pourquoi les mécanismes d’attention sont-ils parfois meilleurs que les RNN, et parfois non ?


Les mécanismes d'attention sont parfois meilleurs que les RNN pour deux raisons:

   1. Ils capturent les informations neuronales dans toutes les directions, comme le traitement d'un ensemble de valeurs au lieu d'une liste ou d'une liste doublement chaînée. En ce sens, les mécanismes d’attention ressemblent à des ensembles (sets) neuronaux (ou dictionnaires, hashmaps), tandis que les RNN sont comparables à des listes chaînées.

2. Bien que les informations puissent être traitées dans n’importe quelle direction (toutes en même temps - même plus que dans juste les deux sens), elles peuvent également être traitées simultanément. Donc, si vous avez 10 items à calculer, le calcul de ces items prendra 10 * 10 == 100 unités de temps, il a ainsi une complexité spatiale polynomiale au carré O(n²). Cependant, le fait est que le traitement de ces éléments O(n²) peut être effectué en une seule fois. L'algorithme est donc O(1) dans le temps.


Vous devinez peut-être déjà pourquoi ça fonctionne de cette façon : si doté d'une mémoire infinie, le calcul peut s'effectuer en temps constant avec les mécanismes d’auto-attention. Cependant, personne ne dispose d'une quantité infinie de mémoire dans ses GPU ou ses TPU. Compte tenu de cela, il est facile de tomber sous le charme des articles cringy et borderline-fake-news (qui citent même des dates et sources erronées), comme celui-ci affirmant que le RNN n’est plus bon (d’ailleurs, cet article a beaucoup trop eu d’attention naïve). Et même malgré cela, il est intéressant de noter que les gagnants d'une récente compétition de classification des commentaires toxiques utilisaient les RNN au lieu des mécanismes d'attention, et il en était dit que les modèles d'attention étaient plus longs à entraîner et étaient les seuls à obtenir des performances comparables à celles des RNN (peut-être parce que leur matériel n’avait pas assez de cœurs pour faire une vraie opération O(1) en même temps). Que tout cela soit nuancé correctement ; dans l’ensemble, il est sain et utile de comprendre que les RNNs sont toujours utiles en plus des mécanismes d’attention, et qu’ils restent un bon choix si vous voulez vous en tenir à un usage de mémoire en O(n) mais aussi en temps O(n) : tout est traité de manière linéaire. Néanmoins, la plupart du temps les approches axées sur les mécanismes d’attention battent tous les tests de performance, si on leurs donne un pré-entraînement non supervisé assez important au préalable.


Pour résumer, dans le cas du TALN, étant donné un ensemble de données suffisamment importantes pour effectuer un pré-entraînement, si vous limitez, coupez ou divisez votre longueur de phrase maximale en un certain nombre de mots, vous pouvez limiter vos utilisations de temps à O(1) avec les mécanismes d’attention, mais aussi O(1) en espace étant donné les limitations fixées. La plupart des phrases étant rarement « trop longues », il est donc possible d'avoir des équations bornées dans l'espace (avec une longueur de phrase maximale) qui permettent de saisir les corrélations entre chaque mot et chaque sens sémantique, de sorte à obtenir de bons résultats pour la plupart des tâches de TALN. Dans certains cas : Attention Is All You Need (AIAYN).

Conclusion

Les approches en TALN récentes sont très techniques et il est important de comprendre le fonctionnement de ces approches, non seulement pour pouvoir les utiliser, mais également pour pouvoir généraliser correctement le sujet traité de manière à être capable de créer et de proposer de nouvelles idées sur la façon de les utiliser, de les modifier et de les améliorer. Le plus important est donc de savoir comment fonctionnent les choses et comment elles pourraient fonctionner à l’avenir. Chaque petit détail est sujet à changement, même si dans l’ensemble, les choses progressent continuellement en se basant sur les fondements précédemment découverts.


En résumé, nous avons survolés comment fonctionne le pré-entraînement non supervisé, comment utiliser plusieurs objectifs d'apprentissage non supervisé (plusieurs têtes de régression), et comment fine-tuner un entraînement supervisé depuis un entraînement non supervisé. Enfin, nous avons abordé les détails techniques du fonctionnement des architectures neuronales par Transformer avec leurs mécanismes d’attention et tout le tralala.


À l'avenir, nous nous attendons à ce que les nouvelles approches en TALN incluent de nouvelles méthodes de définition ou de formulation des différents objectifs d’entraînement non supervisés de sorte à faciliter l'apprentissage. Nous devrions également voir de nouvelles façons de connecter les neurones des réseaux de neurones profonds, le tout pour obtenir de meilleurs scores et améliorer la complexité algorithmique de l'ensemble du processus.


Pour continuer la lecture