Dans cette vidéo, nous allons étudier l'architecture encodeur-décodeur. Le T5
est un exemple de modèle d'encodeur-décodeur populaire. Afin de comprendre le fonctionnement de
l'encodeur-décodeur, nous vous recommandons de consulter les vidéos sur les encodeurs et les décodeurs en tant que modèles autonomes.
Comprendre comment ils se comportent individuellement aidera à comprendre le comportement d'un encodeur-décodeur.
Commençons par ce que nous avons vu à propos de l'encodeur. L'encodeur prend des mots en entrée, les
transfère dans l'encodeur et récupère une représentation numérique
pour chaque mot qui y est diffusé. Nous savons maintenant que la représentation numérique contient des informations
sur la signification de la séquence. Laissons cela de côté et ajoutons le décodeur au schéma.
Dans ce scénario, nous utilisons le décodeur d'une manière inédite.
Nous lui transmettons directement les sorties de l'encodeur. En plus des sorties de l'encodeur,
nous donnons également une séquence au décodeur. Lorsque vous demandez au décodeur une sortie sans
séquence initiale, nous pouvons lui donner la valeur qui indique le début d'une séquence.
Et c'est là que la magie de l'encodeur-décodeur opère. L'encodeur accepte une séquence en entrée.
Il calcule une prédiction et génère une représentation numérique. Ensuite, il
l'envoie au décodeur. Il a, en un sens, encodé la séquence. Et le décodeur, à son tour,
utilisant cette entrée parallèlement à son entrée de séquence habituelle, tentera de décoder la séquence.
Le décodeur décode la séquence et génère un mot. Pour l'instant, nous n'avons pas besoin de donner un sens à
ce mot, mais nous pouvons comprendre que le décodeur décode essentiellement ce que l'encodeur a en
sortie. Le mot de début de séquence indique qu'il doit commencer à décoder la séquence.
Maintenant que nous avons à la fois le vecteur de caractéristiques et un mot généré initial, nous n'avons plus besoin de
l'encodeur. Comme nous l'avons vu précédemment avec le décodeur, il peut agir de manière auto-régressive.
Le mot qu'il vient de sortir peut maintenant être utilisé comme entrée. Ceci, en combinaison avec la
représentation numérique générée par l'encodeur, peut maintenant être utilisé pour générer un deuxième mot.
Veuillez noter que le premier mot est toujours là car le modèle le produit toujours. Cependant, il est
grisé car nous n'en avons plus besoin. Nous pouvons continuer encore et encore, par exemple jusqu'à ce que le décodeur
génère une valeur que nous considérons comme une valeur d'arrêt, comme un point, signifiant la fin d'une séquence.
Ici, nous avons vu le mécanisme complet du transformer encodeur-décodeur. Reprenons-le une
fois de plus. Nous avons une séquence initiale, qui est envoyée à l'encodeur. Cette sortie d'encodeur est ensuite
envoyée au décodeur, pour qu'elle soit décodée. Bien que nous puissions désormais jeter l'encodeur après une seule utilisation,
le décodeur sera utilisé plusieurs fois. Jusqu'à ce que nous ayons généré tous les mots dont nous avons besoin.
Voyons un exemple concret avec la modélisation du langage pour la traduction, c'est-à-dire
l'action de traduire une séquence. Ici, nous aimerions traduire cette séquence en anglais « Welcome
to NYC » en français. Nous utilisons un transformer spécifiquement entraîné pour cette tâche. Nous utilisons
l'encodeur pour créer une représentation de la phrase en anglais. Nous transmettons ceci
au décodeur et, avec l'utilisation du mot de début de séquence, nous lui demandons de sortir le premier mot.
Il produit Bienvenue, qui signifie « Welcome ».
Nous utilisons ensuite « Bienvenue » comme séquence d'entrée pour le décodeur. Ceci, en plus du vecteur de caractéristiques,
permet au décodeur de prédire le deuxième mot, « à », qui est « to » en anglais.
Enfin, nous demandons au décodeur de prédire un troisième mot. Il prédit « NYC »,
ce qui est, encore une fois, correct. Nous avons traduit la phrase ! Là où l'encodeur-décodeur
brille vraiment, c'est que nous avons un encodeur et un décodeur qui souvent ne partagent pas les poids.
Nous avons donc un bloc entier (l'encodeur) qui peut être entraîné pour comprendre la séquence,
et extraire les informations pertinentes. Pour le scénario de traduction que nous avons vu précédemment, par
exemple, cela signifierait analyser et comprendre ce qui a été dit en anglais, extraire des
informations de cette langue et mettre tout cela dans un vecteur dense en informations.
D'autre part, nous avons le décodeur, dont le seul but est de décoder la représentation numérique sortie par
l'encodeur. Ce décodeur peut être spécialisé dans une langue complètement différente, ou même dans une modalité
comme les images ou la parole. Les encodeurs-décodeurs sont spéciaux pour plusieurs raisons. Tout d'abord,
ils sont capables de gérer des tâches de séquence-à-séquence, comme la traduction que nous venons de voir.
Deuxièmement, les poids entre les parties encodeur et décodeur ne sont pas nécessairement partagés.
Prenons un autre exemple de traduction. Ici, nous traduisons « Transformers are powerful » en français.
Premièrement, cela signifie qu'à partir d'une séquence de trois mots, nous sommes capables de générer
une séquence de quatre mots. On pourrait dire que cela pourrait être géré avec un décodeur
qui générerait la traduction de manière autorégressive et ils auraient raison !
Un autre exemple où les transformers de séquence-à-séquence brillent est le résumé de textes.
Ici, nous avons une très longue séquence, généralement un texte intégral,
et nous voulons la résumer. Comme l'encodeur et les décodeurs sont séparés,
nous pouvons avoir des longueurs de contexte différentes (par exemple, un contexte très long pour l'encodeur qui
gère le texte et un contexte plus petit pour le décodeur qui gère la séquence résumée).
Il existe de nombreux modèles de séquence-à-séquence. Celui-ci contient quelques exemples de
modèles encodeur-décodeur populaires disponibles dans la bibliothèque Transformers.
De plus, vous pouvez charger un encodeur et un décodeur dans un
modèle d'encodeur-décodeur ! Par conséquent, selon la tâche spécifique que vous ciblez,
vous pouvez choisir d'utiliser des encodeurs et des décodeurs spécifiques, qui ont fait leurs preuves sur ces tâches spécifiques.