1
00:00:03,860 --> 00:00:09,750
Dans cette vidéo, nous allons étudier l'architecture du décodeur. Un exemple d'architecture populaire composée uniquement d'un

2
00:00:09,750 --> 00:00:15,809
décodeur est le GPT-2. Afin de comprendre le fonctionnement les décodeurs, nous vous recommandons de regarder la vidéo

3
00:00:15,809 --> 00:00:21,640
concernant les encodeurs : ils sont extrêmement similaires aux décodeurs. On peut utiliser un décodeur pour la plupart

4
00:00:21,640 --> 00:00:26,429
des mêmes tâches qu'un encodeur, mais avec, généralement, une petite perte de performances.

5
00:00:26,429 --> 00:00:31,769
Prenons la même approche que nous avons adoptée avec l'encodeur pour essayer de comprendre les

6
00:00:31,769 --> 00:00:38,969
différences architecturales entre un encodeur et un décodeur. Nous allons utiliser un petit exemple, en utilisant trois mots.

7
00:00:38,969 --> 00:00:46,550
Nous les passons par le décodeur. Nous récupérons une représentation numérique de chaque mot. Ici,

8
00:00:46,550 --> 00:00:51,739
par exemple, le décodeur convertit les trois mots « Welcome to NYC » en ces trois

9
00:00:51,739 --> 00:00:57,750
séquences de chiffres. Le décodeur sort exactement une séquence de nombres par

10
00:00:57,750 --> 00:01:05,290
mot d'entrée. Cette représentation numérique peut également être appelée « vecteur de caractéristiques » ou « tenseur de caractéristiques ».

11
00:01:05,290 --> 00:01:09,590
Plongeons dans cette représentation. Il contient un vecteur par mot passé

12
00:01:09,590 --> 00:01:14,830
par le décodeur. Chacun de ces vecteurs est une représentation numérique du mot

13
00:01:14,830 --> 00:01:21,810
en question. La dimension de ce vecteur est définie par l'architecture du modèle.

14
00:01:21,810 --> 00:01:28,400
Là où le décodeur diffère de l'encodeur, c'est principalement par son mécanisme d'auto-attention.

15
00:01:28,400 --> 00:01:34,090
Il utilise ce qu'on appelle l'auto-attention masquée. Ici par exemple, si nous nous concentrons sur le mot

16
00:01:34,090 --> 00:01:40,170
« to », nous verrons que son vecteur n'est absolument pas modifié par le mot « NYC ». C'est parce que

17
00:01:40,170 --> 00:01:45,560
tous les mots à droite (également appelés le contexte droit) du mot sont masqués.

18
00:01:45,560 --> 00:01:50,729
Plutôt que de bénéficier de tous les mots à gauche et à droite, c'est-à-dire le

19
00:01:50,729 --> 00:02:01,229
contexte bidirectionnel, les décodeurs n'ont accès qu'aux mots à leur gauche. Le mécanisme d'auto-attention masquée

20
00:02:01,229 --> 00:02:06,310
diffère du mécanisme d'auto-attention en utilisant un masque supplémentaire pour masquer

21
00:02:06,310 --> 00:02:12,110
le contexte de chaque côté du mot : la représentation numérique du mot ne sera pas

22
00:02:12,110 --> 00:02:18,730
affectée par les mots dans le contexte masqué. Alors quand faut-il utiliser un décodeur ?  Les décodeurs,

23
00:02:18,730 --> 00:02:24,610
comme les encodeurs, peuvent être utilisés comme modèles autonomes. Comme ils génèrent une représentation numérique,

24
00:02:24,610 --> 00:02:30,410
ils peuvent également être utilisés dans une grande variété de tâches. Cependant, la force d'un décodeur

25
00:02:30,410 --> 00:02:35,420
réside dans la manière dont un mot a accès à son contexte gauche. Les décodeurs, n'ayant accès

26
00:02:35,420 --> 00:02:40,280
qu'à leur contexte de gauche, sont intrinsèquement bons pour la génération de texte : la capacité de générer

27
00:02:40,280 --> 00:02:46,120
un mot, ou une séquence de mots, à partir d'une séquence de mots connue. En NLP, c'est ce qu'on appelle la

28
00:02:46,120 --> 00:02:52,150
modélisation causale du langage. Prenons un exemple. Voici un exemple du fonctionnement de la modélisation causale du langage

29
00:02:52,150 --> 00:02:59,240
: nous commençons par un mot initial, qui est « My ». Nous l'utilisons comme entrée pour le

30
00:02:59,240 --> 00:03:06,330
décodeur. Le modèle sort un vecteur de dimension 768. Ce vecteur contient des informations sur

31
00:03:06,330 --> 00:03:11,650
la séquence, qui est ici un seul mot. Nous appliquons une petite transformation à

32
00:03:11,650 --> 00:03:17,019
ce vecteur pour qu'il corresponde à tous les mots connus par le modèle (une association que nous verrons

33
00:03:17,019 --> 00:03:22,650
plus tard, appelée tête de modélisation de langage). Nous identifions que le modèle croit que le

34
00:03:22,650 --> 00:03:29,720
mot suivant le plus probable est « name ». Nous prenons ensuite ce nouveau mot et l'ajoutons à la

35
00:03:29,720 --> 00:03:35,560
séquence initiale. De « Mon », nous sommes maintenant à « Mon nom ». C'est là qu'intervient l'aspect autorégressif. Les

36
00:03:35,560 --> 00:03:42,689
modèles autorégressifs réutilisent leurs sorties passées comme entrées dans les étapes suivantes.

37
00:03:42,689 --> 00:03:49,280
Encore une fois, nous effectuons exactement la même opération : nous analysons cette séquence dans le décodeur

38
00:03:49,280 --> 00:03:57,459
et récupérons le mot suivant le plus probable. Dans ce cas, c'est le mot « is ». Nous répétons

39
00:03:57,459 --> 00:04:03,049
l'opération jusqu'à ce que nous soyons satisfaits. À partir d'un seul mot, nous avons maintenant généré une

40
00:04:03,049 --> 00:04:08,870
phrase complète. Nous décidons de nous arrêter là, mais nous pourrions continuer un moment. Par exemple

41
00:04:08,870 --> 00:04:16,919
le GPT-2 a une taille de contexte maximale de 1024. Nous pourrions donc éventuellement générer jusqu'à 1024 mots,

42
00:04:16,919 --> 00:04:20,125
et le décodeur aurait encore une mémoire des premiers mots de la séquence !