subtitles/ru/07_transformer-models-encoder-decoders.srt (195 lines of code) (raw):
1
00:00:04,160 --> 00:00:07,200
В этом видео мы изучим архитектуру кодера-декодера.
2
00:00:08,160 --> 00:00:16,160
Примером популярной модели кодера-декодера является T5. Для того чтобы понять, как работает кодер-декодер
3
00:00:16,160 --> 00:00:21,680
мы рекомендуем вам ознакомиться с видео о кодерах и декодерах как самостоятельных моделях.
4
00:00:22,400 --> 00:00:30,320
Понимание того, как они ведут себя по отдельности, поможет понять, как ведет себя кодер-декодер.
5
00:00:30,320 --> 00:00:35,360
Давайте начнем с того, что мы видели о кодере. Кодер принимает слова в качестве входа,
6
00:00:36,000 --> 00:00:40,640
прогоняет их через кодер и извлекает числовое представление
7
00:00:40,640 --> 00:00:47,360
для каждого пропущенного через него слова. Теперь мы знаем, что числовое представление содержит информацию
8
00:00:47,360 --> 00:00:54,000
о смысле последовательности. Давайте отложим это в сторону и добавим к диаграмме декодер.
9
00:00:56,480 --> 00:01:00,160
В этом сценарии мы используем декодер таким образом, которого раньше не видели.
10
00:01:00,720 --> 00:01:07,600
Мы передаем выходы кодера непосредственно на него! Дополнительно к выходам кодера,
11
00:01:07,600 --> 00:01:13,040
мы также передаем декодеру последовательность. При запросе декодера на вывод без
12
00:01:13,040 --> 00:01:17,360
начальной последовательности, мы можем передать ему значение, указывающее на начало последовательности.
13
00:01:18,000 --> 00:01:23,520
И именно здесь происходит волшебство кодера-декодера. Кодер принимает на вход последовательность.
14
00:01:24,560 --> 00:01:30,480
Он вычисляет прогноз и выдает числовое представление. Затем он посылает
15
00:01:30,480 --> 00:01:38,000
его декодеру. Он, в некотором смысле, закодировал последовательность. А декодер, в свою очередь,
16
00:01:38,000 --> 00:01:42,960
используя этот вход наряду с обычной входной последовательностью, попытается декодировать последовательность.
17
00:01:44,720 --> 00:01:50,400
Декодер декодирует последовательность и выводит слово. На данный момент нам не нужно понимать
18
00:01:50,400 --> 00:01:55,440
смысл этого слова, но мы можем понять, что декодер по сути декодирует то, что вывел кодер.
19
00:01:55,440 --> 00:02:02,160
Слово "Start of sequence word" указывает на то, что он должен начать декодирование последовательности.
20
00:02:03,600 --> 00:02:10,240
Теперь, когда у нас есть и вектор признаков, и начальное сгенерированное слово, нам больше не нужен
21
00:02:10,240 --> 00:02:17,760
кодер. Как мы уже видели на примере декодера, он может действовать в авторегрессивной манере;
22
00:02:18,640 --> 00:02:24,960
слово, которое он только что вывел, теперь может быть использовано в качестве входа. Это, в сочетании с
23
00:02:24,960 --> 00:02:30,800
числовым представлением, выводимым кодером, может быть использовано для генерации второго слова.
24
00:02:33,200 --> 00:02:38,880
Обратите внимание, что первое слово все еще здесь, поскольку модель все еще выводит его. Однако оно выделено серым цветом,
25
00:02:38,880 --> 00:02:45,120
поскольку оно нам больше не нужно. Мы можем продолжать и продолжать, например, пока декодер
26
00:02:45,120 --> 00:02:50,720
не выдаст значение, которое мы считаем "stopping value", например, точку, означающую конец последовательности.
27
00:02:53,440 --> 00:02:58,080
Здесь мы увидели весь механизм трансформера кодер-декодер: давайте пройдемся по нему
28
00:02:58,080 --> 00:03:05,120
еще раз. У нас есть начальная последовательность, которая отправляется на кодер. Затем выходной сигнал кодера
29
00:03:05,120 --> 00:03:12,240
передается декодеру для декодирования. Если кодер мы теперь можем выбросить после одного использования,
30
00:03:12,240 --> 00:03:17,840
то декодер будет использоваться несколько раз: пока мы не сгенерируем все слова, которые нам нужны.
31
00:03:20,000 --> 00:03:25,120
Рассмотрим конкретный случай; на примере Translation Language Modeling; также называемого трансдукцией;
32
00:03:25,120 --> 00:03:30,800
акт перевода последовательности. Здесь мы хотим перевести английскую последовательность "Welcome"
33
00:03:30,800 --> 00:03:38,400
"to NYC" на французский язык. Мы используем модель трансформера, которая обучена для этой задачи в явном виде.
34
00:03:38,400 --> 00:03:43,520
Мы используем кодер для создания представления английского предложения. Мы передаем это
35
00:03:43,520 --> 00:03:48,880
декодеру и, используя слово "start of sequence", просим его вывести первое слово.
36
00:03:50,720 --> 00:03:52,960
Он выводит "Bienvenue", что означает "Welcome".
37
00:03:55,280 --> 00:04:02,480
Затем мы используем "Bienvenue" в качестве входной последовательности для декодера. Это, наряду с вектором признаков,
38
00:04:04,320 --> 00:04:08,480
позволяет декодеру предсказать второе слово, "à", которое в английском языке означает "to".
39
00:04:10,160 --> 00:04:14,400
Наконец, мы просим декодер предсказать третье слово; он предсказывает "NYC",
40
00:04:14,400 --> 00:04:20,240
что снова является правильным. Мы перевели предложение! Где кодер-декодер действительно
41
00:04:20,240 --> 00:04:24,880
блистает, так это в том, что у нас есть кодер и декодер, которые часто не имеют общих весов.
42
00:04:27,280 --> 00:04:31,440
Таким образом, у нас есть целый блок (кодер), который можно обучить понимать последовательность
43
00:04:31,440 --> 00:04:36,480
и извлекать релевантную информацию. Например, для сценария перевода, который мы рассматривали ранее,
44
00:04:36,480 --> 00:04:44,160
это означает разбор и понимание того, что было сказано на английском языке; извлечение
45
00:04:44,160 --> 00:04:49,040
информации из этого языка и помещение всего этого в вектор, насыщенный информацией.
46
00:04:50,880 --> 00:04:57,280
С другой стороны, у нас есть декодер, единственной целью которого является декодирование признака, выводимого
47
00:04:57,280 --> 00:05:03,760
кодером. Этот декодер может быть специализирован для совершенно другого языка или даже модальности,
48
00:05:03,760 --> 00:05:11,760
например, изображения или речи. Кодеры-декодеры являются особенными по нескольким причинам. Во-первых,
49
00:05:11,760 --> 00:05:17,040
они способны справляться с задачами преобразования последовательности в последовательность, такими как перевод, который мы только что видели.
50
00:05:18,640 --> 00:05:23,880
Во-вторых, веса между частями кодера и декодера не обязательно являются общими. Давайте
51
00:05:24,480 --> 00:05:31,200
возьмем другой пример перевода. Здесь мы переводим "Transformers are powerful" на французский язык.
52
00:05:32,240 --> 00:05:36,560
Во-первых, это означает, что из последовательности из трех слов мы можем сгенерировать
53
00:05:36,560 --> 00:05:42,240
последовательность из четырех слов. Кто-то может возразить, что с этим можно справиться с помощью декодера,
54
00:05:42,240 --> 00:05:46,960
который будет генерировать перевод авторегрессивным способом, и он будет прав!
55
00:05:49,840 --> 00:05:53,840
Другим примером того, где трансформеры последовательности в последовательность проявляют себя с лучшей стороны, является суммаризация.
56
00:05:54,640 --> 00:05:58,560
Здесь у нас есть очень длинная последовательность, как правило, полный текст,
57
00:05:58,560 --> 00:06:03,840
и мы хотим обобщить его. Поскольку кодер и декодер разделены,
58
00:06:03,840 --> 00:06:08,880
мы можем иметь разные длины контекста (например, очень длинный контекст для кодера, который
59
00:06:08,880 --> 00:06:13,840
обрабатывает текст, и меньший контекст для декодера, который обрабатывает обобщенный текст).
60
00:06:16,240 --> 00:06:20,480
Существует множество моделей преобразования последовательности в последовательность.
61
00:06:20,480 --> 00:06:24,160
Здесь приведено несколько примеров популярных моделей кодеров-декодеров, доступных в библиотеке трансформеров.
62
00:06:26,320 --> 00:06:31,200
Кроме того, вы можете загрузить кодер и декодер внутри модели кодера-декодера!
63
00:06:31,200 --> 00:06:35,040
Поэтому, в зависимости от конкретной задачи, которую вы ставите перед собой,
64
00:06:35,040 --> 00:06:40,240
вы можете использовать конкретные кодеры и декодеры, которые зарекомендовали себя с лучшей стороны
65
00:06:40,240 --> 00:06:49,850
в этих конкретных задачах. На этом мы завершаем разговор о кодерах-декодерах. Спасибо за просмотр!