avatarPierre Guillou

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

5904

Abstract

ize:fit:800/1*DhuX7p5pRvZxw4_WfWhjbw.png"><figcaption>Progrès des modèles seq2seq de Deep Learning en NMT depuis 2015 (image source: <i>vidéo <a href="https://www.youtube.com/watch?v=tY0n9OT5_nA&amp;feature=youtu.be&amp;t=5m36s">11</a> du cours de <a href="https://twitter.com/jeremyphoward">Jeremy Howard</a> de 2018)</i></figcaption></figure><p id="eac2">Le slide suivant met en avant 4 raisons pour lesquelles le NMT améliore nettement les résultats de traduction:</p><figure id="5a56"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*6CVKo8twXWALWCNCrRC4FA.png"><figcaption>4 raisons pour lesquelles le NMT améliore nettement les résultats de traduction (image source: <i>vidéo <a href="https://www.youtube.com/watch?v=tY0n9OT5_nA&amp;feature=youtu.be&amp;t=5m36s">11</a> du cours de <a href="https://twitter.com/jeremyphoward">Jeremy Howard</a> de 2018)</i></figcaption></figure><h1 id="260a">Architecture | Encoder/Decoder</h1><p id="84ed">De manière générale, il faut <b>3 choses pour entraîner un modèle de Machine Learning: des données, une architecture et une fonction de coût</b>.</p><figure id="5cdf"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*KSrylp74eeMfBrXvTjKW5w.png"><figcaption>3 choses sont nécessaires pour entraîner un modèle de Machine Learning: des données, une architecture et une fonction de coût (source: <a href="https://www.youtube.com/watch?v=tY0n9OT5_nA">video 11</a> du cours Deep Learning Part 2 2018)</figcaption></figure><p id="0236">En fonction de l’objectif (classification, régression, entrée/sortie de taille fixe ou variable…), une peut être plus importante que les autres. <b>Lorsqu’il s’agit de modèle seq2seq, c’est bien l’architecture du modèle qui est le point le plus important</b> car c’est elle qui autorise que les données en entrée et sortie soient de taille variable et c’est elle qui permet au modèle d’avoir une mémoire et de faire attention au contexte.</p><h2 id="77af">Diagramme</h2><p id="819b">Voici ci-dessous un <b>diagramme de l’architecture d’un modèle seq2seq:</b></p><figure id="bfd7"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*x4wsJobiSC7zlTkP8yv40A.png"><figcaption><i>Diagram from Smerity’s <a href="https://smerity.com/articles/2016/google_nmt_arch.html">Peeking into the neural network architecture used for Google’s Neural Machine Translation</a></i></figcaption></figure><h2 id="fcd5">Principe</h2><p id="c28f">Le principe général est le suivant:</p><ol><li>chaque token en entrée (ici des mots ou ponctuation) est transformé en <b>vecteur d’embedding (word vector) de taille identique</b> (dimension de l’espace des embeddings, généralement de 200 ou 300) qui via l’<b>encoder</b> (RNN du backbone) va être transformé à son tour en <b>vecteur d’état (ou vecteur de contexte)</b>.</li><li>Une fois que l’ensemble des tokens de la séquence sont ainsi transformés, <b>un vecteur d’état de l’ensemble de la séquence est généré (s: state vector, context vector, hidden vector ou hidden state)</b>: il contient donc toutes les informations décrivant la séquence (sa taille est généralement de 256, 512 ou 1024).</li><li>Il est alors mis en entrée d’un <b>decoder</b> (un autre RNN) qui va générer au fur et à mesure les<b> tokens de la séquence de sortie</b>.</li></ol><figure id="879a"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*8R3G6YFMSic7f2XKsssxnw.png"><figcaption>Principe d’un modèle Seq2Seq: encoder (RNN) qui produit un vecteur d’état (hidden state vector) qui est passé à un decoder (RNN) (source: <a href="https://www.youtube.com/watch?v=tY0n9OT5_nA">video 11</a> du cours Deep Learning Part 2 2018)</figcaption></figure><h1 id="b6c7">BLEU | Evaluation d’un modèle Seq2Seq</h1><p id="f9de">(source: <a href="https://en.wikipedia.org/wiki/BLEU">Wikipedia</a>) BLEU (BiLingual Evaluation Understudy) est un algorithme pour évaluer la qualité du texte qui a été traduit automatiquement d’une langue naturelle à une autre. La qualité est considérée comme la correspondance entre la traduction d’une machine et celle d’un humain: “plus une traduction automatique est proche d’une traduction humaine professionnelle, mieux c’est” — telle est l’idée centrale derrière BLEU. BLEU a été l’une des premières mesures à revendiquer une forte corrélation avec les jugements humains de qualité et demeure l’une des mesures automatisées et les moins chères les plus populaires.</p><p id="3265">Les scores sont calculés pour chaque segment traduit, généralement des phrases, en les comparant à un ensemble de traductions de référence de bonne qualité. Ces scores sont ensuite moyennés sur l’ensemble du corpus pour obtenir une estimation de la qualité globale de la traduction. L’intelligibilité ou la correction grammaticale ne sont pas prises en compte.</p><p id="2fde">La sortie de BLEU est toujours un nombre compris entre 0 et 1. Cette valeur indique la similitude du texte candidat avec les textes de référence, les valeurs plus proches de 1 représentant des textes plus similaires. Peu de traductions humaines atteindront un score de 1, car cela indiquerait que le candidat est identique à l’une des traductions de référence. Pour cette raison, il n’est pas nécessaire d’atteindre un score de 1. Parce qu’il y a plus de possibilités de correspondance, l’ajout de traductions de référence supplémentaires augmentera le score BLEU.</p><h1 id="eb0e">Conseils pour améliorer un modèle Seq2Seq</h1><p id="ffc6">3 procédés classiques peuvent être appliqués à un modèle Seq2Seq pour améliorer sa performance: Bidirectional (encoder), Teacher forcing et Attention.</p><h2 id="9722">Bidirectional</h2><p id="d159">Vidéo & notes de la leçon 11 (DL2, 2018) — Timestamp [ <a href="https://youtu.be/tY0n9OT5_nA?t=4593">1:16:33</a> ] — <a href="https://readmedium.com/deep-learning-2-part-2-lesson-11-61477d24dc34#d6c4">notes</a></p><p id="a5b3">Ce procédé s’app

Options

lique uniquement à l’encoder. Cependant, avec plusieurs couches dans l’encoder (Google Translate en a 8), il faut choisir laquelle(s) des couches est bidirectionnelle sinon des problèmes de performance comme le temps d’entraînement peuvent apparaître (Google Translate applique le procédé bidirectionnel seulement dans la première couche de son modèle Seq2Seq).</p><h2 id="5755">Teacher Forcing</h2><p id="e610">Vidéo & notes de la leçon 11 (DL2, 2018) — Timestamp [ <a href="https://youtu.be/tY0n9OT5_nA?t=4959">1:22:39</a> ] — <a href="https://readmedium.com/deep-learning-2-part-2-lesson-11-61477d24dc34#76cb">notes</a></p><p id="12d0">Au début de l’entraînement, le modèle ne sait rien (paramètres avec des valeurs aléatoires) et donc s’il n’est pas aidé lors de la génération des premiers tokens par le decoder (comme un professeur peut aider un élève au début d’un exercice), il va avoir beaucoup de mal à commencer à apprendre.</p><p id="29bc">Le procédé de Teacher Forcing permet ainsi de fournir en entrée de l’encoder les premiers tokens corrects de la séquence cible.</p><h2 id="3364">Attention</h2><p id="4ac4">Vidéo & notes de la leçon 11 (DL2, 2018) — Timestamp [ <a href="https://youtu.be/tY0n9OT5_nA?t=5460">1:31:00</a> ] — <a href="https://readmedium.com/deep-learning-2-part-2-lesson-11-61477d24dc34#92f0">notes</a></p><p id="a9d5">Pourquoi utiliser seulement le vecteur d’état final de la séquence (et espérer qu’il sera suffisant pour obtenir au moment du décodage toutes les caractéristiques de la séquence d’entrée) alors que nous disposons du vecteur d’état après chaque nouveau token de la séquence d’entrée?</p><figure id="b064"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*5QBBmJ8QIh6R2bEHXrPvdg.png"><figcaption>Dans l’encoder, un vecteur d’état est généré à chaque nouveau token de la séquence d’entrée (Image source: <a href="https://readmedium.com/deep-learning-2-part-2-lesson-11-61477d24dc34#92f0">Deep Learning 2: Part 2 Lesson 11</a>)</figcaption></figure><p id="114d">En entraînant un réseau neuronal, nous pouvons alors apprendre une matrice de valeurs pondérées de chacun de ces vecteurs d’état de la séquence d’entrée, ce qui permettra de prendre en compte de manière relative et appropriée chacun des tokens de la séquence d’entrée au moment de générer un token de la séquence de sortie par le decoder.</p><p id="eb1b">Ces valeurs pondérées représentent à chaque fois une estimation de l’attention à porter aux différents tokens de la séquence d’entrée lors de la génération séquentielle d’un nouveau token (par exemple, dans le cadre d’un modèle Seq2Seq de traduction de l’allemand vers le français, il faudra porter une attention aussi sur les derniers tokens de la phrase allemande en entrée lors de la génération des tokens de verbe de la phrase française en sortie et pas seulement sur les tokens correspondants en terme de position dans la séquence).</p><figure id="04f9"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*pKqLidh_9y4sNXOSLGn_DQ.png"><figcaption>Image source: <a href="https://distill.pub/2016/augmented-rnns/">Attention and Augmented Recurrent Neural Networks</a></figcaption></figure><h1 id="af4b">Pour aller plus loin</h1><ul><li><b>Vidéos “<a href="https://www.youtube.com/playlist?list=PLkDaE6sCZn6F6wUI9tvS_Gw1vaFAx6rd6">Sequence to Sequence Models</a></b> (Deep Learning Specialization, Andrew Ng)</li><li><a href="https://arxiv.org/abs/1409.3215"><b>Sequence to Sequence Learning with Neural Networks</b></a> (septembre-décembre 2014, auteurs: Ilya Sutskever, Oriol Vinyals, Quoc V. Le)</li><li><a href="https://arxiv.org/abs/1406.1078"><b>Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation</b></a> (juin-septembre 2014: Kyunghyun Cho, Bart van Merrienboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, Yoshua Bengio)</li><li><a href="https://arxiv.org/abs/1409.0473"><b>Neural Machine Translation by Jointly Learning to Align and Translate</b></a> (2014–2016: Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio): nn article étonnant qui a initialement introduit cette idée d’attention ainsi que quelques éléments clés qui ont vraiment changé la façon dont les gens travaillent dans ce domaine. Le modèle d’attention a été utilisé non seulement pour le texte mais aussi pour d’autres choses comme lire du texte sur des images ou dans le cadre de la vision par ordinateur.</li><li><a href="https://arxiv.org/abs/1412.7449"><b>Grammar as a Foreign Language</b></a><b> </b>(2014–2015: Oriol Vinyals, Lukasz Kaiser, Terry Koo, Slav Petrov, Ilya Sutskever, Geoffrey Hinton): le deuxième article dans lequel Geoffrey Hinton a été impliqué a utilisé cette idée de RNN avec attention pour essayer de remplacer la grammaire basée sur des règles par une RNN qui a automatiquement marqué chaque mot en fonction de la grammaire. Il s’est avéré que cela fonctionnait mieux que tout système basé sur des règles, ce qui semble évident aujourd’hui, mais à l’époque, il était considéré comme vraiment surprenant. Ils résument le fonctionnement de l’attention, ce qui est vraiment agréable et concis.</li><li><a href="https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/"><b>Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)</b></a> (mai 2018)</li><li><a href="https://towardsdatascience.com/how-to-create-data-products-that-are-magical-using-sequence-to-sequence-models-703f86a231f8"><b>How To Create Data Products That Are Magical Using Sequence-to-Sequence Models</b></a> (janvier 2018)</li></ul><p id="3a54"><b>À propos de l’auteur:</b> Pierre Guillou est consultant en Intelligence Artificielle au Brésil et en France. Merci de le contacter via son <a href="https://www.linkedin.com/in/pierreguillou/">profil Linkedin</a>.</p></article></body>

NLP & fastai | Sequence-to-Sequence Model (seq2seq)

L’encodeur traite chaque élément (token) de la séquence d’entrée, il compile les informations qu’il capture dans un vecteur (appelé le vecteur de contexte ou d’état caché). Après avoir traité toute la séquence d’entrée, le codeur envoie le vecteur de contexte au décodeur, qui commence à produire la séquence de sortie élément par élément. (Image source: Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention))

Ce post concerne les vidéos 12 et 14 du cours fastai de Rachel Thomas sur NLP (A code-first introduction to NLP) et la vidéo 11 (notes, 2018) du cours de Jeremy Howard (Introduction to Machine Learning for Coders). Son objectif est d’expliquer les concepts clés des modèles sequence-to-sequence en NLP présentés dans les vidéos et leurs notebooks associés: 7-seq2seq-translation.ipynb (NLP, 2019), bleu_metric.ipynb (NLP, 2019), 7b-seq2seq-attention-translation.ipynb (NLP, 2019), translate.ipynb (fastai 0.7, DL2, 2018) et translate.ipynb (fastai 1.0, DL2, 2018).

Autres posts de la série NLP & fastai: Topic Modeling | Sentiment Classification | Language Model | Transfer Learning | ULMFiT | MultiFiT | French Language Model | Portuguese Language Model | RNN | LSTM & GRU | SentencePiece | Attention Mechanism | Transformer Model | GPT-2

Motivation

De nombreux processus de transformation ou création délivrent une sortie comme un texte dont la taille n’est ni fixe, ni prévisible. Il peut s’agir par exemple de processus de traduction, de création de titres ou résumés à partir d’un texte, de création de légendes d’images…

Les modèles classiques de Deep Learning (Full Connected Network, ConvNet, RNN…) ne peuvent alors être utilisés pour ce type de processus puisque leur sortie est de taille fixe que ce soit une ou plusieurs classes, une ou plusieurs valeurs ou même une image.

En revanche, les modèles seq2seq de Deep Learning (DL) s’appliquent parfaitement à ces processus puisque par nature leur sortie n’est pas contrainte par une taille fixe.

Applications des modèles seq2seq

En plus des processus de traduction, les applications des modèles seq2seq sont multiples comme le montre le slide suivant:

Utilisation des modèles seq2seq bidirectionnels avec attention (image source: vidéo 11 du cours de Jeremy Howard de 2018)

Cependant, comme les principes sont les mêmes quelque soit les applications, il est intéressant de comprendre le codage d’un seq2seq pour la traduction afin de pouvoir le réutiliser pour d’autres situations.

Neural Machine Translation (NMT)

Ainsi, les modèles seq2seq avec Deep Learning (DL) sont utilisés avec succès depuis 2015 pour le Neural Machine Translation (NMT) et ont dépassé en terme de performance les modèles statistiques de traduction dès 2016 selon la métrique BLEU.

Progrès des modèles seq2seq de Deep Learning en NMT depuis 2015 (image source: vidéo 11 du cours de Jeremy Howard de 2018)

Le slide suivant met en avant 4 raisons pour lesquelles le NMT améliore nettement les résultats de traduction:

4 raisons pour lesquelles le NMT améliore nettement les résultats de traduction (image source: vidéo 11 du cours de Jeremy Howard de 2018)

Architecture | Encoder/Decoder

De manière générale, il faut 3 choses pour entraîner un modèle de Machine Learning: des données, une architecture et une fonction de coût.

3 choses sont nécessaires pour entraîner un modèle de Machine Learning: des données, une architecture et une fonction de coût (source: video 11 du cours Deep Learning Part 2 2018)

En fonction de l’objectif (classification, régression, entrée/sortie de taille fixe ou variable…), une peut être plus importante que les autres. Lorsqu’il s’agit de modèle seq2seq, c’est bien l’architecture du modèle qui est le point le plus important car c’est elle qui autorise que les données en entrée et sortie soient de taille variable et c’est elle qui permet au modèle d’avoir une mémoire et de faire attention au contexte.

Diagramme

Voici ci-dessous un diagramme de l’architecture d’un modèle seq2seq:

Diagram from Smerity’s Peeking into the neural network architecture used for Google’s Neural Machine Translation

Principe

Le principe général est le suivant:

  1. chaque token en entrée (ici des mots ou ponctuation) est transformé en vecteur d’embedding (word vector) de taille identique (dimension de l’espace des embeddings, généralement de 200 ou 300) qui via l’encoder (RNN du backbone) va être transformé à son tour en vecteur d’état (ou vecteur de contexte).
  2. Une fois que l’ensemble des tokens de la séquence sont ainsi transformés, un vecteur d’état de l’ensemble de la séquence est généré (s: state vector, context vector, hidden vector ou hidden state): il contient donc toutes les informations décrivant la séquence (sa taille est généralement de 256, 512 ou 1024).
  3. Il est alors mis en entrée d’un decoder (un autre RNN) qui va générer au fur et à mesure les tokens de la séquence de sortie.
Principe d’un modèle Seq2Seq: encoder (RNN) qui produit un vecteur d’état (hidden state vector) qui est passé à un decoder (RNN) (source: video 11 du cours Deep Learning Part 2 2018)

BLEU | Evaluation d’un modèle Seq2Seq

(source: Wikipedia) BLEU (BiLingual Evaluation Understudy) est un algorithme pour évaluer la qualité du texte qui a été traduit automatiquement d’une langue naturelle à une autre. La qualité est considérée comme la correspondance entre la traduction d’une machine et celle d’un humain: “plus une traduction automatique est proche d’une traduction humaine professionnelle, mieux c’est” — telle est l’idée centrale derrière BLEU. BLEU a été l’une des premières mesures à revendiquer une forte corrélation avec les jugements humains de qualité et demeure l’une des mesures automatisées et les moins chères les plus populaires.

Les scores sont calculés pour chaque segment traduit, généralement des phrases, en les comparant à un ensemble de traductions de référence de bonne qualité. Ces scores sont ensuite moyennés sur l’ensemble du corpus pour obtenir une estimation de la qualité globale de la traduction. L’intelligibilité ou la correction grammaticale ne sont pas prises en compte.

La sortie de BLEU est toujours un nombre compris entre 0 et 1. Cette valeur indique la similitude du texte candidat avec les textes de référence, les valeurs plus proches de 1 représentant des textes plus similaires. Peu de traductions humaines atteindront un score de 1, car cela indiquerait que le candidat est identique à l’une des traductions de référence. Pour cette raison, il n’est pas nécessaire d’atteindre un score de 1. Parce qu’il y a plus de possibilités de correspondance, l’ajout de traductions de référence supplémentaires augmentera le score BLEU.

Conseils pour améliorer un modèle Seq2Seq

3 procédés classiques peuvent être appliqués à un modèle Seq2Seq pour améliorer sa performance: Bidirectional (encoder), Teacher forcing et Attention.

Bidirectional

Vidéo & notes de la leçon 11 (DL2, 2018) — Timestamp [ 1:16:33 ] — notes

Ce procédé s’applique uniquement à l’encoder. Cependant, avec plusieurs couches dans l’encoder (Google Translate en a 8), il faut choisir laquelle(s) des couches est bidirectionnelle sinon des problèmes de performance comme le temps d’entraînement peuvent apparaître (Google Translate applique le procédé bidirectionnel seulement dans la première couche de son modèle Seq2Seq).

Teacher Forcing

Vidéo & notes de la leçon 11 (DL2, 2018) — Timestamp [ 1:22:39 ] — notes

Au début de l’entraînement, le modèle ne sait rien (paramètres avec des valeurs aléatoires) et donc s’il n’est pas aidé lors de la génération des premiers tokens par le decoder (comme un professeur peut aider un élève au début d’un exercice), il va avoir beaucoup de mal à commencer à apprendre.

Le procédé de Teacher Forcing permet ainsi de fournir en entrée de l’encoder les premiers tokens corrects de la séquence cible.

Attention

Vidéo & notes de la leçon 11 (DL2, 2018) — Timestamp [ 1:31:00 ] — notes

Pourquoi utiliser seulement le vecteur d’état final de la séquence (et espérer qu’il sera suffisant pour obtenir au moment du décodage toutes les caractéristiques de la séquence d’entrée) alors que nous disposons du vecteur d’état après chaque nouveau token de la séquence d’entrée?

Dans l’encoder, un vecteur d’état est généré à chaque nouveau token de la séquence d’entrée (Image source: Deep Learning 2: Part 2 Lesson 11)

En entraînant un réseau neuronal, nous pouvons alors apprendre une matrice de valeurs pondérées de chacun de ces vecteurs d’état de la séquence d’entrée, ce qui permettra de prendre en compte de manière relative et appropriée chacun des tokens de la séquence d’entrée au moment de générer un token de la séquence de sortie par le decoder.

Ces valeurs pondérées représentent à chaque fois une estimation de l’attention à porter aux différents tokens de la séquence d’entrée lors de la génération séquentielle d’un nouveau token (par exemple, dans le cadre d’un modèle Seq2Seq de traduction de l’allemand vers le français, il faudra porter une attention aussi sur les derniers tokens de la phrase allemande en entrée lors de la génération des tokens de verbe de la phrase française en sortie et pas seulement sur les tokens correspondants en terme de position dans la séquence).

Image source: Attention and Augmented Recurrent Neural Networks

Pour aller plus loin

À propos de l’auteur: Pierre Guillou est consultant en Intelligence Artificielle au Brésil et en France. Merci de le contacter via son profil Linkedin.

Sequence To Sequence
Deep Learning
Fastai
NLP
Translation
Recommended from ReadMedium