diff --git a/README.md b/README.md
index 7d253aa5c..b41485d8d 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ This repo contains the content that's used to create the **[Hugging Face course]
| [Bahasa Indonesia](https://huggingface.co/course/id/chapter1/1) (WIP) | [`chapters/id`](https://github.com/huggingface/course/tree/main/chapters/id) | [@gstdl](https://github.com/gstdl) |
| [Italian](https://huggingface.co/course/it/chapter1/1) (WIP) | [`chapters/it`](https://github.com/huggingface/course/tree/main/chapters/it) | [@CaterinaBi](https://github.com/CaterinaBi), [@ClonedOne](https://github.com/ClonedOne), [@Nolanogenn](https://github.com/Nolanogenn), [@EdAbati](https://github.com/EdAbati), [@gdacciaro](https://github.com/gdacciaro) |
| [Japanese](https://huggingface.co/course/ja/chapter1/1) (WIP) | [`chapters/ja`](https://github.com/huggingface/course/tree/main/chapters/ja) | [@hiromu166](https://github.com/@hiromu166), [@younesbelkada](https://github.com/@younesbelkada), [@HiromuHota](https://github.com/@HiromuHota) |
-| [Korean](https://huggingface.co/course/ko/chapter1/1) (WIP) | [`chapters/ko`](https://github.com/huggingface/course/tree/main/chapters/ko) | [@Doohae](https://github.com/Doohae), [@wonhyeongseo](https://github.com/wonhyeongseo), [@dlfrnaos19](https://github.com/dlfrnaos19) |
+| [Korean](https://huggingface.co/course/ko/chapter1/1) (WIP) | [`chapters/ko`](https://github.com/huggingface/course/tree/main/chapters/ko) | [@Doohae](https://github.com/Doohae), [@wonhyeongseo](https://github.com/wonhyeongseo), [@dlfrnaos19](https://github.com/dlfrnaos19), [@nsbg](https://github.com/nsbg) |
| [Portuguese](https://huggingface.co/course/pt/chapter1/1) (WIP) | [`chapters/pt`](https://github.com/huggingface/course/tree/main/chapters/pt) | [@johnnv1](https://github.com/johnnv1), [@victorescosta](https://github.com/victorescosta), [@LincolnVS](https://github.com/LincolnVS) |
| [Russian](https://huggingface.co/course/ru/chapter1/1) (WIP) | [`chapters/ru`](https://github.com/huggingface/course/tree/main/chapters/ru) | [@pdumin](https://github.com/pdumin), [@svv73](https://github.com/svv73) |
| [Thai](https://huggingface.co/course/th/chapter1/1) (WIP) | [`chapters/th`](https://github.com/huggingface/course/tree/main/chapters/th) | [@peeraponw](https://github.com/peeraponw), [@a-krirk](https://github.com/a-krirk), [@jomariya23156](https://github.com/jomariya23156), [@ckingkan](https://github.com/ckingkan) |
diff --git a/chapters/en/chapter4/3.mdx b/chapters/en/chapter4/3.mdx
index a782152c6..6b27777f4 100644
--- a/chapters/en/chapter4/3.mdx
+++ b/chapters/en/chapter4/3.mdx
@@ -83,7 +83,7 @@ training_args = TrainingArguments(
When you call `trainer.train()`, the `Trainer` will then upload your model to the Hub each time it is saved (here every epoch) in a repository in your namespace. That repository will be named like the output directory you picked (here `bert-finetuned-mrpc`) but you can choose a different name with `hub_model_id = "a_different_name"`.
-To upload you model to an organization you are a member of, just pass it with `hub_model_id = "my_organization/my_repo_name"`.
+To upload your model to an organization you are a member of, just pass it with `hub_model_id = "my_organization/my_repo_name"`.
Once your training is finished, you should do a final `trainer.push_to_hub()` to upload the last version of your model. It will also generate a model card with all the relevant metadata, reporting the hyperparameters used and the evaluation results! Here is an example of the content you might find in a such a model card:
diff --git a/chapters/en/chapter5/3.mdx b/chapters/en/chapter5/3.mdx
index 3f9c37dc2..4a3ddc7b5 100644
--- a/chapters/en/chapter5/3.mdx
+++ b/chapters/en/chapter5/3.mdx
@@ -387,7 +387,7 @@ ArrowInvalid: Column 1 named condition expected length 1463 but got length 1000
Oh no! That didn't work! Why not? Looking at the error message will give us a clue: there is a mismatch in the lengths of one of the columns, one being of length 1,463 and the other of length 1,000. If you've looked at the `Dataset.map()` [documentation](https://huggingface.co/docs/datasets/package_reference/main_classes.html#datasets.Dataset.map), you may recall that it's the number of samples passed to the function that we are mapping; here those 1,000 examples gave 1,463 new features, resulting in a shape error.
-The problem is that we're trying to mix two different datasets of different sizes: the `drug_dataset` columns will have a certain number of examples (the 1,000 in our error), but the `tokenized_dataset` we are building will have more (the 1,463 in the error message). That doesn't work for a `Dataset`, so we need to either remove the columns from the old dataset or make them the same size as they are in the new dataset. We can do the former with the `remove_columns` argument:
+The problem is that we're trying to mix two different datasets of different sizes: the `drug_dataset` columns will have a certain number of examples (the 1,000 in our error), but the `tokenized_dataset` we are building will have more (the 1,463 in the error message; it is more than 1,000 because we are tokenizing long reviews into more than one example by using `return_overflowing_tokens=True`). That doesn't work for a `Dataset`, so we need to either remove the columns from the old dataset or make them the same size as they are in the new dataset. We can do the former with the `remove_columns` argument:
```py
tokenized_dataset = drug_dataset.map(
diff --git a/chapters/en/chapter6/3.mdx b/chapters/en/chapter6/3.mdx
index 62d143dcc..88250f6df 100644
--- a/chapters/en/chapter6/3.mdx
+++ b/chapters/en/chapter6/3.mdx
@@ -109,7 +109,7 @@ We can see that the tokenizer's special tokens `[CLS]` and `[SEP]` are mapped to
-The notion of what a word is is complicated. For instance, does "I'll" (a contraction of "I will") count as one or two words? It actually depends on the tokenizer and the pre-tokenization operation it applies. Some tokenizers just split on spaces, so they will consider this as one word. Others use punctuation on top of spaces, so will consider it two words.
+The notion of what a word is complicated. For instance, does "I'll" (a contraction of "I will") count as one or two words? It actually depends on the tokenizer and the pre-tokenization operation it applies. Some tokenizers just split on spaces, so they will consider this as one word. Others use punctuation on top of spaces, so will consider it two words.
✏️ **Try it out!** Create a tokenizer from the `bert-base-cased` and `roberta-base` checkpoints and tokenize "81s" with them. What do you observe? What are the word IDs?
diff --git a/chapters/en/chapter7/3.mdx b/chapters/en/chapter7/3.mdx
index a31bb432c..dc12fb8bc 100644
--- a/chapters/en/chapter7/3.mdx
+++ b/chapters/en/chapter7/3.mdx
@@ -35,7 +35,7 @@ This process of fine-tuning a pretrained language model on in-domain data is usu
By the end of this section you'll have a [masked language model](https://huggingface.co/huggingface-course/distilbert-base-uncased-finetuned-imdb?text=This+is+a+great+%5BMASK%5D.) on the Hub that can autocomplete sentences as shown below:
-
+
Let's dive in!
@@ -1035,7 +1035,7 @@ Neat -- our model has clearly adapted its weights to predict words that are more
-This wraps up our first experiment with training a language model. In [section 6](/course/chapter7/section6) you'll learn how to train an auto-regressive model like GPT-2 from scratch; head over there if you'd like to see how you can pretrain your very own Transformer model!
+This wraps up our first experiment with training a language model. In [section 6](/course/en/chapter7/section6) you'll learn how to train an auto-regressive model like GPT-2 from scratch; head over there if you'd like to see how you can pretrain your very own Transformer model!
diff --git a/chapters/en/chapter9/5.mdx b/chapters/en/chapter9/5.mdx
index b32056e33..4e1797c7a 100644
--- a/chapters/en/chapter9/5.mdx
+++ b/chapters/en/chapter9/5.mdx
@@ -23,19 +23,13 @@ import gradio as gr
title = "GPT-J-6B"
description = "Gradio Demo for GPT-J 6B, a transformer model trained using Ben Wang's Mesh Transformer JAX. 'GPT-J' refers to the class of model, while '6B' represents the number of trainable parameters. To use it, simply add your text, or click one of the examples to load them. Read more at the links below."
article = "
"
-examples = [
- ["The tower is 324 metres (1,063 ft) tall,"],
- ["The Moon's orbit around Earth has"],
- ["The smooth Borealis basin in the Northern Hemisphere covers 40%"],
-]
+
gr.Interface.load(
"huggingface/EleutherAI/gpt-j-6B",
inputs=gr.Textbox(lines=5, label="Input Text"),
title=title,
description=description,
article=article,
- examples=examples,
- enable_queue=True,
).launch()
```
diff --git a/chapters/en/chapter9/7.mdx b/chapters/en/chapter9/7.mdx
index 3c74d8452..fce4f80fb 100644
--- a/chapters/en/chapter9/7.mdx
+++ b/chapters/en/chapter9/7.mdx
@@ -231,6 +231,6 @@ with gr.Blocks() as block:
block.launch()
```
-
+
We just explored all the core concepts of `Blocks`! Just like with `Interfaces`, you can create cool demos that can be shared by using `share=True` in the `launch()` method or deployed on [Hugging Face Spaces](https://huggingface.co/spaces).
\ No newline at end of file
diff --git a/chapters/en/events/3.mdx b/chapters/en/events/3.mdx
index b0770d38d..d74b9c206 100644
--- a/chapters/en/events/3.mdx
+++ b/chapters/en/events/3.mdx
@@ -6,4 +6,4 @@ You can find all the demos that the community created under the [`Gradio-Blocks`
**Natural language to SQL**
-
+
diff --git a/chapters/it/chapter2/2.mdx b/chapters/it/chapter2/2.mdx
index 5260f62c4..1471eb014 100644
--- a/chapters/it/chapter2/2.mdx
+++ b/chapters/it/chapter2/2.mdx
@@ -257,7 +257,7 @@ outputs = model(inputs)
```
{/if}
-Ora, se osserviamo la forma dei nostri input, la dimensionalità sarà molto più bassa: la model head prende in input i vettori ad alta dimensionalità che abbiamo visto prima e produce vettori contenenti due valori (uno per etichetta):
+Ora, se osserviamo la forma dei nostri output, la dimensionalità sarà molto più bassa: la model head prende in input i vettori ad alta dimensionalità che abbiamo visto prima e produce vettori contenenti due valori (uno per etichetta):
```python
print(outputs.logits.shape)
diff --git a/chapters/ko/chapter2/8.mdx b/chapters/ko/chapter2/8.mdx
index ddc6f4558..49a23d412 100644
--- a/chapters/ko/chapter2/8.mdx
+++ b/chapters/ko/chapter2/8.mdx
@@ -88,16 +88,16 @@
-Это установка самой базовой версии 🤗 Transformers. В частности, никаких библиотек машинного обучения (как PyTorch или TensorFloat) установлено не будет. Так как мы будем использовать множество различных возможностей библиотеки 🤗 Transformers, мы рекомендуем установить версию для разработчиков, в составе которой сразу инсталлируются все необходимые зависимости:
+Это установка самой базовой версии 🤗 Transformers. В частности, никаких библиотек машинного обучения (например, PyTorch или TensorFloat) установлено не будет. Так как мы будем использовать множество различных возможностей библиотеки 🤗 Transformers, мы рекомендуем установить версию для разработчиков, в состав которой сразу входят все необходимые зависимости:
```
!pip install transformers[sentencepiece]
@@ -52,11 +52,11 @@ import transformers
После установки Python у вас появится возможность запускать Python-команды в терминале. Прежде чем переходить дальше, запустите в терминале команду `python --version`. В результате должна быть распечатана версия Python, доступная для работы.
-Когда вы запускаете Python-команду в терминале (например, `python --version`), эту команду обрабатывает _оснвной_ Python-интерпретатор вашей системы. Мы не рекомендуем устанавливать в его окружение дополнительные библиотеки, лучше для каждого проекта создавать виртуальные окружения. Каждый проект будет обладать собственными зависимостями и пакетами, если проекты будут в разных окружениях, то вам меньше придется следить за совместимостью бибилиотек.
+Когда вы запускаете Python-команду в терминале (например, `python --version`), эту команду обрабатывает _основной_ Python-интерпретатор вашей системы. Мы не рекомендуем устанавливать в его окружение дополнительные библиотеки, лучше для каждого проекта создавать отдельное виртуальное окружение. Каждый проект будет обладать собственными зависимостями и пакетами, если проекты будут в разных окружениях, то вам меньше придется следить за совместимостью библиотек.
В Python такой подход можно реализовать с помощью разных библиотек, а подробнее об окружениях можно почитать [тут](https://docs.python.org/3/tutorial/venv.html). Каждое окружение будет содержать в себе необходимую версию языка и набор библиотек. Все эти окружения изолированы друг от друга. Среди самых популярных инструментов для работы с виртуальными окружениями можно отметить [`venv`](https://docs.python.org/3/library/venv.html#module-venv).
-Для начала создайте папку в домашней директории, в которой будут храниться ваши файлы курса (ее можно назвать произвольным именем, например: *transformers-course*):
+Для начала создайте папку в домашней директории, в которой будут храниться ваши файлы курса (ее можно назвать произвольным именем, например, *transformers-course*):
```
mkdir ~/transformers-course
@@ -84,7 +84,7 @@ ls -a
# Активировать виртуальное окружение
source .env/bin/activate
-# Деактивировать окржуение
+# Деактивировать окружение
source .env/bin/deactivate
```
diff --git a/chapters/ru/chapter1/1.mdx b/chapters/ru/chapter1/1.mdx
index 3c10ca68f..8d5b8a560 100644
--- a/chapters/ru/chapter1/1.mdx
+++ b/chapters/ru/chapter1/1.mdx
@@ -9,7 +9,7 @@
-В этом курсе вы научитесь основам обработки естесственного языка (NLP) с использованием библиотек от [Hugging Face](https://huggingface.co/). Экосистема состоит из: моделей ([🤗 Transformers](https://github.com/huggingface/transformers)), датасетов ([🤗 Datasets](https://github.com/huggingface/datasets)), вспомогательных бибилиотек ([🤗 Accelerate](https://github.com/huggingface/accelerate), [🤗 Tokenizers](https://github.com/huggingface/tokenizers)), а также репозитория [Hugging Face Hub](https://huggingface.co/models). Это полностью бесплатно!
+В этом курсе вы научитесь основам обработки естественного языка (NLP) с использованием библиотек от [Hugging Face](https://huggingface.co/). Экосистема состоит из: моделей ([🤗 Transformers](https://github.com/huggingface/transformers)), датасетов ([🤗 Datasets](https://github.com/huggingface/datasets)), вспомогательных библиотек ([🤗 Accelerate](https://github.com/huggingface/accelerate), [🤗 Tokenizers](https://github.com/huggingface/tokenizers)), а также репозитория [Hugging Face Hub](https://huggingface.co/models). Это полностью бесплатно!
## Чего ожидать от курса?
@@ -21,8 +21,8 @@
- Главы 1-4 содержат в себе введение в главные концепции библиотеки 🤗 Transformers. К концу этой части курса вы будете знакомы с тем, как функционируют трансформеры, как применять модели из репозитория [Hugging Face Hub](https://huggingface.co/models), как дообучить модели на собственных данных и опубликовать результаты на Hugging Face Hub!
-- Главы 5-8 научат вас основам разделов 🤗 Datasets и 🤗 Tokenizers (датасеты и токенизаторы), это необходимо для дальнейшего погружения в область обработки естесственного языка. К концу этой части вы научитесь решать наиболее распространенные задачи в NLP самостоятельно!
-- Главы 9-12 выходят за рамки NLP, в них описано, как можно применять трансформеры в задачах обработки речи и компьютерном зрении. Также вы узнаете, как создавать и демонстрировать свои модели, оптимизировать их для промышленного использования. После изучения этой части вы будете в силах применить 🤗 трансформеры к (почти) любой задаче машинного обучения!
+- Главы 5-8 научат вас основам библиотек 🤗 Datasets и 🤗 Tokenizers (датасеты и токенизаторы); это необходимо для дальнейшего погружения в область обработки естественного языка. К концу этой части вы научитесь решать наиболее распространенные задачи в NLP самостоятельно!
+- Главы 9-12 выходят за рамки NLP, в них описано, как можно применять трансформеры в задачах обработки речи и компьютерном зрении. Также вы узнаете, как создавать и демонстрировать свои модели, оптимизировать их для промышленного использования. После изучения этой части вы будете в силах применить 🤗 Transformers к (почти) любой задаче машинного обучения!
Этот курс:
@@ -37,23 +37,70 @@
Об авторах:
-**Matthew Carrigan** - ML-инженер в Hugging Face. Живет в Дублине, Ирландия, и ранее работал инженером по машинному обучению в Parse.ly, а до этого — научным сотрудником в Тринити-колледже в Дублине. Он не верит, что мы сможем достичь реализовать теорию сильного искусственного интеллекта за счет масштабирования существующих архитектур, но все равно возлагает большие надежды на бессмертие роботов.
+[**Abubakar Abid**](https://huggingface.co/abidlabs) окончил PhD в области прикладного машинного обучения в Стэндфордском университете. Во время PhD, он основал [Gradio](https://github.com/gradio-app/gradio) - свободная библиотека для Python, с помощью которой увидели свет свыше 600000 тысяч демоверсий моделей машинного обучения. Hugging Face приобрел Gradio, и теперь Abubakar работает с нами в качестве руководителя разработки машинного обучения.
+[**Matthew Carrigan**](https://huggingface.co/Rocketknight1) - ML-инженер в Hugging Face. Живет в Дублине, Ирландия, и ранее работал инженером по машинному обучению в Parse.ly, а до этого — научным сотрудником в Тринити-колледже в Дублине. Он не верит, что мы сможем реализовать теорию сильного искусственного интеллекта за счет масштабирования существующих архитектур, но все равно возлагает большие надежды на бессмертие роботов.
-**Lysandre Debut** - ML-инженер в Hugging Face, работает над библиотекой 🤗 Transformers с самых ранних этапов разработки. Его цель — сделать NLP доступным для всех, разработав инструменты с очень простым API.
+[**Lysandre Debut**](https://huggingface.co/lysandre) - ML-инженер в Hugging Face, работает над библиотекой 🤗 Transformers с самых ранних этапов разработки. Его цель — сделать NLP доступным для всех, разработав инструменты с очень простым API.
-**Sylvain Gugger** – инженер-исследователь в Hugging Face и один из ключевых участников разработки библиотеки 🤗 Transformers. Ранее работал научным сотрудником в fast.ai и написал книгу в соавторстве с Jeremy Howard: _[Deep Learning for Coders with fastai and PyTorch](https://learning.oreilly.com/library/view/deep-learning-for/9781492045519/)_. Основное внимание в его исследованиях уделяется тому, чтобы сделать глубокое обучение более доступным путем разработки и улучшения методов, позволяющих моделям быстро обучаться с ограниченными ресурсами.
+[**Sylvain Gugger**](https://huggingface.co/sgugger) – инженер-исследователь в Hugging Face и один из ключевых участников разработки библиотеки 🤗 Transformers. Ранее работал научным сотрудником в fast.ai и написал книгу _[Deep Learning for Coders with fastai and PyTorch](https://learning.oreilly.com/library/view/deep-learning-for/9781492045519/)_ в соавторстве с Jeremy Howard. Основное внимание в его исследованиях уделяется тому, чтобы сделать глубокое обучение более доступным путем разработки и улучшения методов, позволяющих моделям быстро обучаться при ограниченных ресурсах.
-**Merve Noyan** - developer advocate в Hugging Face, работает над разработкой инструментов и созданием контента на их основе, чтобы машинное обучение более доступным.
+[**Dawood Khan**](https://huggingface.co/dawoodkhan82) - ML-инженер в Hugging Face. Dawood из Нью-Йорка, где он окончил Нью-Йоркский университет и получил степень бакалавра компьютерных наук. Проработав несколько лет iOS инженером, Dawood решил сменить работу и стал сооснователем Gradio. Позднее Hugging Face приобрел Gradio.
-**Lucile Saulnier** - ML-инженер в Hugging Face, разрабатывающая и поддерживающая использование инструментов с открытым исходным кодом. Она также активно участвует во многих исследовательских проектах в области NLP, таких как совместное обучение и BigScience.
+[**Merve Noyan**](https://huggingface.co/merve) - developer advocate в Hugging Face, работает над разработкой инструментов и созданием контента на их основе, чтобы машинное обучение более доступным.
-**Lewis Tunstall** - ML-инженер в Hugging Face, сосредоточен на разработке инструментов с открытым исходным кодом и обеспечении их доступности для более широкого сообщества. Соавтор будущей книги [O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/).
+[**Lucile Saulnier**](https://huggingface.co/SaulLu) - ML-инженер в Hugging Face, разрабатывающая и поддерживающая использование инструментов с открытым исходным кодом. Она также активно участвует во многих исследовательских проектах в области NLP, таких как совместное обучение и BigScience.
-**Leandro von Werra** - ML-инженер в команде, работающей над открытым исходным кодом Hugging Face и соавтор будушей будущей книги [O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/). Обладает большим опытом реализации NLP-проектов в промышленности.
+[**Lewis Tunstall**](https://huggingface.co/lewtun) - ML-инженер в Hugging Face, сосредоточен на разработке инструментов с открытым исходным кодом и обеспечении их доступности для более широкого сообщества. Соавтор будущей книги [O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/).
+[**Leandro von Werra**](https://huggingface.co/lvwerra) - ML-инженер в команде, работающей над открытым исходным кодом Hugging Face и соавтор будущей будущей книги [O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/). Обладает большим опытом реализации NLP-проектов в промышленности.
+
+## ЧАВО
+
+Мы собрали ответы на несколько часто задаваемых вопросов:
+
+- **Получу ли я сертификат после прохождения этого курса?**
+На данный момент у нас нет сертификации для этого курса. Мы работаем над получением сертификации для экосистемы Hugging Face. Следите за новостями!
+
+- **Сколько времени мне нужно будет потратить на прохождение этого курса?**
+Каждая глава этого курса рассчитана на неделю работы, то есть примерно 6-8 часов в неделю. Однако, вы можете проходить курс в любом удобном для вас ритме.
+
+- **Где я могу задать вопрос по материалам курса?**
+Если у вас возникли какие-либо вопросы по поводу любой части курса, просто нажмите на "*Ask a question*" наверху страницы, и вы будете автоматически перенаправлены в соответствующий раздел [форума Hugging Face](https://discuss.huggingface.co/) (форум на английском языке):
+
+
+
+Обратите внимание, что на форуме также доступен список [идей для проектов](https://discuss.huggingface.co/c/course/course-event/25), если вы хотите применить полученные знания на практике после прохождения курса.
+
+- **Где я могу посмотреть на код, используемый в этом курсе?**
+Внутри каждого раздела наверху страницы есть баннер, который позволит запустить код в Google Colab или Amazon SageMaker Studio Lab:
+
+
+
+Блокноты Jupyter со всем кодом, используемом в материалах курса, доступны в репозитории [`huggingface/notebooks`](https://github.com/huggingface/notebooks). Если вы хотите сгенерировать их на своем компьютере, вы можете найти инструкцию в репозитории [`course`](https://github.com/huggingface/course#-jupyter-notebooks) на GitHub.
+
+- **Как я могу внести свой вклад в развитие курса?**
+Существует множество способов внести свой вклад в наш курс! Если вы найдете опечатку или баг, пожалуйста, откройте вопрос (issue) в репозитории [`course`](https://github.com/huggingface/course). Если вы хотите помочь с переводом на ваш родной язык, вы можете найти инструкцию [здесь](https://github.com/huggingface/course#translating-the-course-into-your-language).
+
+- **Какие стандарты использовались при переводе?**
+Каждый перевод содержит глоссарий и файл `TRANSLATING.txt`, в которых описаны стандарты, используемые для перевода терминов и т.д. Вы можете посмотреть на пример для немецкого языка [здесь](https://github.com/huggingface/course/blob/main/chapters/de/TRANSLATING.txt).
+
+- **Могу ли я использовать этот курс в своих целях?**
+Конечно! Этот курс распространяется по либеральной лицензии [Apache 2 license](https://www.apache.org/licenses/LICENSE-2.0.html). Это означает, что вы должны упомянуть создателей этого курса, предоставить ссылку на лицензию и обозначить все изменения. Все это может быть сделано любым приемлемым способов, который, однако, не подразумевает, что правообладатель поддерживает вас или ваши действия по отношению этого курса. Если вы хотите процитировать этот курс, пожалуйста, используйте следующий BibTex:
+
+```
+@misc{huggingfacecourse,
+ author = {Hugging Face},
+ title = {The Hugging Face Course, 2022},
+ howpublished = "\url{https://huggingface.co/course}",
+ year = {2022},
+ note = "[Online; accessed ]"
+}
+```
+
+## Поехали!
Вы готовы начать? В этой главе вы узнаете:
-* Как испольовать `pipeline()` для решения NLP-задач генерации и классификации текста
+* Как использовать `pipeline()` для решения NLP-задач генерации и классификации текста
* Об архитектуре трансформеров
-* Как различать архитектуры кодировщика, декодера и кодировщика-декодера и варианты их использования
+* Как различать архитектуры кодировщика, декодировщика и кодировщика-декодировщика и варианты их использования
diff --git a/chapters/ru/chapter1/10.mdx b/chapters/ru/chapter1/10.mdx
new file mode 100644
index 000000000..124998f73
--- /dev/null
+++ b/chapters/ru/chapter1/10.mdx
@@ -0,0 +1,258 @@
+
+
+# Проверка знаний[[end-of-chapter-quiz]]
+
+
+
+В этой главе было много материала! Если вы чувствуете, что все еще всецело не познали все премудрости трансформеров - не переживайте! В следующих главах мы детально расскажем, как все устроено "под капотом".
+
+Сперва, однако, давайте проверим, что вы узнали в этой главе!
+
+
+### 1. Зайдите на Hub и найдите чекпоинт модели `roberta-large-mnli`. Какую задачу она решает?
+
+
+странице roberta-large-mnli."
+ },
+ {
+ text: "Классификация текстов",
+ explain: "В частности, модель определяет, являются ли два предложения логически связанными и присваивает одну из трех меток: противопоставление, нейтральная связь, импликация (англ. contradiction, neutral, entailment). Эта задача называется автоматическое определение логической связи между текстами (англ. natural language inference).",
+ correct: true
+ },
+ {
+ text: "Генерация текста",
+ explain: "Посмотрите получше на странице roberta-large-mnli."
+ }
+ ]}
+/>
+
+### 2. Какой будет результат выполнения данного кода?
+
+```py
+from transformers import pipeline
+
+ner = pipeline("ner", grouped_entities=True)
+ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")
+```
+
+sentiment-analysis."
+ },
+ {
+ text: "Пайплайн вернет текст, сгенерированный на основе данного предложения.",
+ explain: "Неверно — для этого используется пайплайн text-generation.",
+ },
+ {
+ text: "Пайплайн вернет слова, обозначающие персон, организаций или географических локаций.",
+ explain: "Кроме того, с аргументом grouped_entities=True, пайплайн сгруппирует слова, принадлежащие одной и той же сущности, например, \"Hugging Face\".",
+ correct: true
+ }
+ ]}
+/>
+
+### 3. Чем нужно заменить ... в данном коде?
+
+```py
+from transformers import pipeline
+
+filler = pipeline("fill-mask", model="bert-base-cased")
+result = filler("...")
+```
+
+ has been waiting for you.",
+ explain: "Неверно. Прочитайте карточку модели bert-base-cased и попробуйте найти, где вы ошиблись."
+ },
+ {
+ text: "This [MASK] has been waiting for you.",
+ explain: "Верно! Токен-маска для этой модели - [MASK].",
+ correct: true
+ },
+ {
+ text: "This man has been waiting for you.",
+ explain: "Неверно. Этот пайплайн предсказывает замаскированный токен, а для этого нужно предоставить токен-маску."
+ }
+ ]}
+/>
+
+### 4. Почему этот код выдаст ошибку?
+
+```py
+from transformers import pipeline
+
+classifier = pipeline("zero-shot-classification")
+result = classifier("This is a course about the Transformers library")
+```
+
+candidate_labels=[...].",
+ correct: true
+ },
+ {
+ text: "Этому пайплайну требуются несколько предложений, а не одно.",
+ explain: "Неверно. Хотя, если использовать этот пайплайн правильно, он может принимать на вход массив предложений (как и все остальные пайплайны)."
+ },
+ {
+ text: "Опять библиотека 🤗 Transformers не работает как положено.",
+ explain: "Мы даже не будем комментировать этот ответ!"
+ },
+ {
+ text: "Этому пайплайну требуются более длинные предложения - это слишком короткое.",
+ explain: "Неверно. Однако, стоит отметить, что этот пайплайн обрежет очень длинный текст, для того, чтобы его корректно обработать."
+ }
+ ]}
+/>
+
+### 5. Что такое «трансферное обучение»?
+
+получит знания предобученной модели. Другими словами, предобученная модель передаст свои знания новой.",
+ correct: true
+ },
+ {
+ text: "Передача знаний от предобученной модели к новой модели путем проектирования новой модели с той же самой архитектурой, что и у предобученной.",
+ explain: "Архитектура - это лишь «скелет» модели; в этом случае никой передачи знаний не происходит."
+ }
+ ]}
+/>
+
+### 6. Правда или ложь? Для предобучения языковой модели обычно не требуются метки классов.
+
+самостоятельно (англ. self-supervised). Это означает, что метки классов создаются автоматически на основе входных данных (например, предсказание следующего или замаскированного слова).",
+ correct: true
+ },
+ {
+ text: "Ложь",
+ explain: "Это неверный ответ."
+ }
+ ]}
+/>
+
+### 7. Выберите предложение, которое наилучшим способом описывает следующие термины: «модель», «архитектура» и «веса».
+
+
+
+
+### 8. Какую из этих моделей вы выберете для дополнения текста по введенной его части?
+
+
+
+### 9. Какую из этих моделей вы выберете для автоматического реферирования?
+
+
+
+### 10. Какую из этих моделей вы выберете для классификации текстов путем присвоения им определенных меток?
+
+
+
+### 11. Что может быть одной из причин предвзятости модели?
+
+
diff --git a/chapters/ru/chapter1/2.mdx b/chapters/ru/chapter1/2.mdx
index f265cabca..3afb88da3 100644
--- a/chapters/ru/chapter1/2.mdx
+++ b/chapters/ru/chapter1/2.mdx
@@ -1,25 +1,25 @@
-# Обработка естесственного языка
+# Обработка естественного языка
-Прежде, чем перейти к трансформерам, сделаем быстрый обзор того, что такое обработка естесственного языка (NLP) и почему мы заинтересованы в этой сфере.
+Прежде, чем перейти к трансформерам, сделаем быстрый обзор того, что такое обработка естественного языка (NLP), и почему мы заинтересованы в этой сфере.
## Что такое NLP?
-NLP - область лингвистики и машинного обучения, сосредоточенная на изучении всего, что связано с человеческим языком. Главная цель NLP не просто понимать отдельные слова, но и иметь возможность понимать конекст, в котором эти слова находятся.
+NLP - область лингвистики и машинного обучения, которая изучает все, что связано с естественными языками. Главная цель NLP не просто понимать отдельные слова, но и иметь возможность понимать контекст, в котором эти слова находятся.
-Список общих NLP-задач с некоторыми примерами:
+Список типичных NLP-задач с некоторыми примерами:
-- **Классификация предложений**: определить эмоциональную окраску отзыва, детектировать среди входящий писем спам, определить грамматическую корректность предложения или даже проверить, являются ли два предложения связанными между собой логически
+- **Классификация предложений**: определить эмоциональную окраску отзыва, детектировать среди входящих писем спам, определить грамматическую правильность предложения или даже проверить, являются ли два предложения связанными между собой логически
- **Классификация каждого слова в предложении**: вычленить грамматические составляющие предложения (существительное, глагол, прилагательное) или определить именованные сущности (персона, локация, организация)
-- **Генерация текста**: закончить предложение на основе некоторого вводного фрагмента, заполнить пропуски в тексте, содержащем замаскированные слова
+- **Генерация текста**: закончить предложение на основе некоторого запроса, заполнить пропуски в тексте, содержащем замаскированные слова
- **Сформулировать ответ на вопрос**: получить ответ на заданный по тексту вопрос
-- **Сгенерировать новое предложение исходя из предложенного**: перевести текст с одного языка на другой, аннотировать/саммаризовать текст
+- **Сгенерировать новое предложение исходя из предложенного**: перевести текст с одного языка на другой, выполнить автоматическое реферирование текста
-NLP не ограничивается только письменным текстом. Есть множество сложных задач, связанных с распознаванием речи, компьютерным зрением, таких как расшифровка аудио-сигнала или описания изображений.
+NLP не ограничивается только письменным текстом. Есть множество сложных задач, связанных с распознаванием речи и компьютерным зрением, таких как транскрибирование аудио или описание изображений.
## Почему это сложно?
diff --git a/chapters/ru/chapter1/3.mdx b/chapters/ru/chapter1/3.mdx
index 2f418a6fb..ed4fb86d4 100644
--- a/chapters/ru/chapter1/3.mdx
+++ b/chapters/ru/chapter1/3.mdx
@@ -1,4 +1,4 @@
-# Трансформеры, на что они способны?
+# Трансформеры: на что они способны?
Библиотека [🤗 Transformers](https://github.com/huggingface/transformers) предоставляет различную функциональность для создания и использования этих моделей. [Model Hub](https://huggingface.co/models) содержит тысячи предобученных моделей, которые может скачать и использовать любой. Вы также можете загружать свои модели на Model Hub!
-⚠️ Hugging Face Hub не ограничивается только моделями. Любой человек может поделиться своими моделями или датасетами! Для этого нужно создать аккаунт: Create a huggingface.co
+⚠️ Hugging Face Hub не ограничивается только моделями. Любой человек может поделиться своими моделями или датасетами! Для этого нужно создать учетную запись: Create a huggingface.co
@@ -62,7 +62,7 @@ classifier(
{'label': 'NEGATIVE', 'score': 0.9994558095932007}]
```
-По умолчанию этот пайплайн выбирает специальную модель, которая была предобучена для оценки эмоциональной окаски предложений на английском языке. Модель загружается и кэшируется когда вы создадите объект `classifier`. Если вы перезапустите команду, будет использована кэшированная модель, загрузки новой модели не произойдет.
+По умолчанию этот пайплайн выбирает специальную модель, которая была предобучена для оценки тональности предложений на английском языке. Модель загружается и кэшируется когда вы создадаете объект `classifier`. Если вы перезапустите команду, будет использована кэшированная модель, т.е. загрузки новой модели не произойдет.
В процессе обработки пайплайном текста, который вы ему передали, есть три главных шага:
@@ -115,7 +115,7 @@ classifier(
## Генерация текста
-Теперь давайте взглянем на пайплайн генерации текста. Главная идея заключается в следующем: вы передаете на вход модели небольшой фрагмент текста, а модель будет продолжать его. Это похоже на предсказание следующего слова в клавиатурах различных смартфонов. Генерация текста содержит в себе элемент случайности, поэтому ваш результат может отличаться от того, который приведен ниже в примере.
+Теперь давайте взглянем на пайплайн генерации текста (англ. text generation). Главная идея заключается в следующем: вы передаете на вход модели небольшой фрагмент текста, а модель будет продолжать его. Это похоже на предсказание следующего слова в клавиатурах различных смартфонов. Генерация текста содержит в себе элемент случайности, поэтому ваш результат может отличаться от того, который приведен ниже в примере.
```python
from transformers import pipeline
@@ -141,7 +141,7 @@ generator("In this course, we will teach you how to")
-## Использование произвольной модлеи из Hub в пайплайне
+## Использование произвольной модели из Hub в пайплайне
Предыдущие примеры использовали модель по умолчанию для решения конкретной задачи, но у вас есть возможность выбрать произвольную модель из Hub и передать ее в пайплайн для конкретной задачи. Например, для генерации текста. Перейдите по ссылке [Model Hub](https://huggingface.co/models) и кликните на соответствующий тег слева, чтобы получить список доступных для этой задачи моделей. Вы должны увидеть страницу, подобную [этой](https://huggingface.co/models?pipeline_tag=text-generation).
@@ -167,7 +167,7 @@ generator(
'time and real'}]
```
-Вы можете уточнить, для какого языка вам нужна модель, щелкнув на языковые теги, и выбрать ту, которая будет генерировать текст на другом языке. Model Hub предобученные модели для многоязычных задач.
+Вы можете уточнить, для какого языка вам нужна модель, щелкнув на языковые теги, и выбрать ту, которая будет генерировать текст на другом языке. На Model Hub даже есть предобученные модели для многоязычных задач.
Как только вы выберете модель, вы увидите, что есть виджет, позволяющий вам попробовать ее прямо на сайте. Таким образом, вы можете быстро протестировать возможности модели перед ее загрузкой.
@@ -179,7 +179,7 @@ generator(
### The Inference API
-Все модели могут быть протестированы прямо на сайте с использованием inference api, доступнго по адресу [https://huggingface.co/](https://huggingface.co/). Вы можете попробовать применить модель вводя различный текст и сразу же получая результат.
+Все модели могут быть протестированы прямо на сайте с использованием inference API, доступного по адресу [https://huggingface.co/](https://huggingface.co/). Вы можете попробовать применить модель, вводя различный текст и сразу же получая результат.
Inference API также представляется как платный продукт, что пригодится для интегрирования моделей в свои рабочие процессы. Подробнее можно узнать на странице с [ценами](https://huggingface.co/pricing).
@@ -187,7 +187,7 @@ Inference API также представляется как платный пр
## Заполнение пропусков
-Следующая задача, на которую мы обратим внимание, связана с заполнением пропусков в тексте. Идея очень проста, мы продемонстрируем ее на простом тексте:
+Следующая задача, на которую мы обратим внимание, связана с заполнением пропусков в тексте (англ. mask filling). Идея очень проста, мы продемонстрируем ее на простом тексте:
```python
@@ -208,19 +208,17 @@ unmasker("This course will teach you all about models.", top_k=2)
'token_str': ' computational'}]
```
-Аргумент `top_k` указывает, сколько вариантов для пропущенного слова будет отображено. Обратите внимание, что модель заполнит пропуск на месте слова ``, которое часто интерпретируют как *mask token*. Другие модели могут использовать другие токены для обозначения пропуска, всегда лучше проверять это. Один из способов сделать это - обратить внимание на виджет для соответствующей модели.
-
-The `top_k` argument controls how many possibilities you want to be displayed. Note that here the model fills in the special `` word, which is often referred to as a *mask token*. Other mask-filling models might have different mask tokens, so it's always good to verify the proper mask word when exploring other models. One way to check it is by looking at the mask word used in the widget.
+Аргумент `top_k` указывает, сколько вариантов для пропущенного слова будет отображено. Обратите внимание, что модель заполнит пропуск на месте слова ``, которое часто интерпретируют как *mask token (токен-маска)*. Другие модели могут использовать другие токены для обозначения пропуска, всегда лучше проверять это. Один из способов сделать это - обратить внимание на виджет для соответствующей модели.
-✏️ **Попробуйте!** Найдите в поиске модель `bert-based-cased` и обратите внимание на его mask token в виджете. Что эта модель будет предсказывать для нашего пайплайна выше?
+✏️ **Попробуйте!** Найдите в поиске модель `bert-based-cased` и обратите внимание на его токен-маску в виджете. Что эта модель предскажет, если применить ее в предыдущем примере?
## Распознавание именованных сущностей (NER)
-Распознавание именованных сущностей - это задача, в которой модели необходимо найти части текста, соответствующие некоторым сущностям, например: персонам, местам, организациям. Давайте посмотрим на пример:
+Распознавание именованных сущностей (англ. named entity recognition) - это задача, в которой модели необходимо найти части текста, соответствующие некоторым сущностям, например: персонам, местам, организациям. Давайте посмотрим на пример:
```python
from transformers import pipeline
@@ -236,20 +234,19 @@ ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")
]
```
-В этом примере модель корректно обозначила Сильвен как персону (PER), Hugging Face как организацию (ORG) и Бруклин как локацию (LOC).
+В этом примере модель корректно обозначила Sylvain как персону (PER), Hugging Face как организацию (ORG) и Brooklyn как локацию (LOC).
Мы передали в пайплайн аргумент `grouped_entities=True` для того, чтобы модель сгруппировала части предложения, соответствующие одной сущности: в данном случае модель объединила "Hugging" и "Face" несмотря на то, что название организации состоит из двух слов. На самом деле, как мы увидим в следующей главе, препроцессинг делит даже отдельные слова на несколько частей. Например, `Sylvain` будет разделено на 4 части: `S`, `##yl`, `##va`, and `##in`. На этапе постпроцессинга пайплайн успешно объединит эти части.
-✏️ **Попробуйте!** Найдите на Hub модель, позволяющую решать задачу определения частей речи в предложении (part of speech tagging, POS). Что модель предскажет для предложения из примера выше?
+✏️ **Попробуйте!** Найдите на Model Hub модель, позволяющую решать задачу определения частей речи в предложении (part of speech tagging, POS). Что модель предскажет для предложения из примера выше?
-## Ответы на вопросы
-
-Пайплан `question-answering` позволяет сгенерировать ответ на вопрос по данному контексту:
+## Вопросно-ответные системы
+Пайплайн `question-answering` позволяет сгенерировать ответ на вопрос по данному контексту:
```python
from transformers import pipeline
@@ -268,9 +265,9 @@ question_answerer(
Обратите внимание, что пайплайн извлекает информацию для ответа из переданного ему контекста
-## Саммаризация
+## Автоматическое реферирование (саммаризация)
-Саммаризация - задача, в которой необходимо сократить объем текста, но при этом сохранить все (или большинство) важных аспектов изначального текста. Вот пример:
+Автоматическое реферирование (англ. summarization) - задача, в которой необходимо сократить объем текста, но при этом сохранить все важные аспекты (или большинство из них) изначального текста. Вот пример:
```python
from transformers import pipeline
@@ -329,7 +326,7 @@ translator("Ce cours est produit par Hugging Face.")
[{'translation_text': 'This course is produced by Hugging Face.'}]
```
-Так же, как и в задачах генерации и саммаризации текста, вы можете указать максимальную длину `max_length` или минимальную длину `min_length` результата.
+Так же, как и в задачах генерации и автоматического реферирования текста, вы можете указать максимальную длину `max_length` или минимальную длину `min_length` результата.
@@ -338,5 +335,5 @@ translator("Ce cours est produit par Hugging Face.")
-Показанные пайплайн в основном носят демонстрационный характер, потому что настроены на решение конкретных задач. В следующей главе вы узнаете, как изменить поведение функции `pipeline()`.
+Показанные пайплайны в основном носят демонстрационный характер, потому что настроены на решение конкретных задач. В следующей главе вы узнаете, как изменить поведение функции `pipeline()`.
diff --git a/chapters/ru/chapter1/4.mdx b/chapters/ru/chapter1/4.mdx
index a817d124c..52072be87 100644
--- a/chapters/ru/chapter1/4.mdx
+++ b/chapters/ru/chapter1/4.mdx
@@ -5,7 +5,7 @@
classNames="absolute z-10 right-0 top-0"
/>
-В этом разделе мы посмотрим в общих чертах на то, как работают трансфореры.
+В этом разделе мы посмотрим в общих чертах на то, как работают трансформеры.
## Немного истории
@@ -18,9 +18,9 @@
[Архитектура трансформеров](https://arxiv.org/abs/1706.03762) была опубликована в июне 2017. Основной фокус оригинального исследования был сосредоточен на задачах перевода. Эта публикация повлекла за собой несколько влиятельных моделей:
-- **Июнь 2018**: [GPT](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf), первая предобученная модель, часто используется процедура тонкой настройки (fine-tuning) и применение для различных NLP-задач с последующим получением результатов высокого качества.
+- **Июнь 2018**: [GPT](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf), первая предобученная модель для тонкой настройки или дообучения (fine-tuning), которая показала результаты высокого качества для многих NLP-задач.
-- **Октябрь 2018**: [BERT](https://arxiv.org/abs/1810.04805), другая большая предобученная модель, была разработана для для получения хороших саммаризаций предложений (больше мы узнаем об этом в следующей главе!)
+- **Октябрь 2018**: [BERT](https://arxiv.org/abs/1810.04805), другая большая предобученная модель, была разработана для извлечения более точного содержания из предложений (больше мы узнаем об этом в следующей главе!)
- **Февраль 2019**: [GPT-2](https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf), улучшенная (и более объемная) версия GPT, которая не была сразу опубликована по этическим соображениям
@@ -34,17 +34,17 @@
В широком смысле трансформеры могут быть классифицированы на три типа:
- GPT-подобные модели (также часто называемые _авторегрессионные_ трансформеры)
- BERT-подобные модели (также часто называемые _автокодирующие_ трансформеры (_auto-encoding_))
-- тип BART/T5 модели (также часто называются модели класса _последовательность-последовательность_ (_sequence2sequence, seq2seq_))
+- тип BART/T5 модели (также часто называются модели класса _последовательность-последовательность_ (_sequence-to-sequence, seq2seq_))
-Мы рассмотри эти семейства более глубоко позже.
+Мы рассмотрим эти семейства более детально позже.
## Трансформеры - языковые модели
-Все модели трансформеров, упомянутые выше (GPT, BERT, BART, T5, etc.) обучены как *языковые модели*. Это означает, что они обучены на огромном количестве текста в технике самостоятельного обучения (self-supervised learning). Самостоятельное обучение - это такой способ обучения, в котором цель обучения автоматически вычислятся на основе входных данных. Это означает, что люди не должны размечать данные!
+Все модели трансформеров, упомянутые выше (GPT, BERT, BART, T5, etc.) обучены как *языковые модели (англ. language models)*. Это означает, что они обучены на огромном количестве текста, используя технику самостоятельного обучения (англ. self-supervised learning). Самостоятельное обучение - это такой способ обучения, в котором цель обучения автоматически вычисляется на основе входных данных. Это означает, что люди не должны размечать данные!
-Такой тип моделей реализует статистическое понимание языка, на котором он был обучен, но он не очень полезен для конкретных практических задач. Из-за этого базовая предварительно обученная модель потом подвергается процедуре, называемой *трансферным обучением*. В ходе этого процесса модель настраивается под конкретные наблюдения, т. е. с размеченными человеком данными конкретной задачи.
+Такой тип моделей реализует статистическое понимание языка, на котором он был обучен, но он не очень полезен для конкретных практических задач. Из-за этого базовая предварительно обученная модель потом подвергается процедуре, называемой *трансферным обучением (англ. transfer learning)*. В ходе этого процесса модель настраивается под конкретные наблюдения, т.е. размеченными человеком данными для конкретной задачи.
-В качестве примера можно привести предсказание следующего слова в предложении на основе *n* предыдущих слов. Это называется *каузальным языковым моделированием*, потому что модель зависит от прошлых и текущих слов, но не от будущих.
+В качестве примера можно привести предсказание следующего слова в предложении на основе *n* предыдущих слов. Это называется *каузальным языковым моделированием (англ. causal language modeling)*, потому что модель зависит от прошлых и текущих слов, но не от будущих.
@@ -52,7 +52,7 @@
-Другой пример - *максированная языковая модель*, которая предсказывает замаскированное слово в предложении.
+Другой пример - *маскированная языковая модель (англ. masked language modeling)*, которая предсказывает замаскированное слово в предложении.
@@ -76,17 +76,19 @@
-Это продемонстрировано командой разработчиков на примере очень большой модели. Команда сознательно пытающется уменьшить воздействие предобучения на окружающую среду. Углеродный следу от проведения множества экспериментов для получения лучших гиперпараметров будет еще выше.
+И это наглядная демонстрация проекта по разработке (очень большой) модели, которым руководит команда, _сознательно_ пытающаяся уменьшить воздействие предобучения на окружающую среду. Углеродный след от проведения множества экспериментов для получения лучших гиперпараметров будет еще выше.
-Представьте себе, что каждый раз, когда исследовательская группа, студенческая организация или компания хотят обучить модель, они делают это с нуля. Это привело бы к огромным, ненужным глобальным затратам!
+Представьте себе, что каждый раз, когда исследовательская группа, студенческая организация или компания хотели бы обучить модель, они делали бы это с нуля. Это привело бы к огромным, ненужным глобальным затратам!
-Вот почему совместное использование языковых моделей имеет первостепенное значение: совместное использование обученных весов и построение на основе уже обученных весов снижает общую стоимость вычислений и углеродный след сообщества.
+Вот почему распространение языковых моделей имеет первостепенное значение: распространение обученных весов и построение новых моделей на их основе снижает общую стоимость вычислений и углеродный след сообщества.
+
+Кстати, вы можете измерить углеродный след, который оставят ваши модели, при помощи нескольких инструментов. Например, интегрированные в 🤗 Transformers [ML CO2 Impact](https://mlco2.github.io/impact/) или [Code Carbon](https://codecarbon.io/). Чтобы узнать больше о этом, вы можете прочитать этот [блог-пост](https://huggingface.co/blog/carbon-emissions-on-the-hub), в котором мы рассказываем как сгенерировать файл `emissions.csv`, содержащий прогноз объемов выброса углерода во время обучения модели, а также [документацию](https://huggingface.co/docs/hub/model-cards-co2) 🤗 Transformers, в которой затрагивается эта тема.
## Трансферное обучение
-*Предобучение* - это процесс обучения модели с нуля: веса модели случайным образом инициализируются, после начинается обучение без предварительных настроек.
+*Предобучение (англ. pretraining)* - это процесс обучения модели с нуля: веса модели случайным образом инициализируются, после начинается обучение без предварительных настроек.
@@ -95,22 +97,22 @@
Предобучение обычно происходит на огромных наборах данных, сам процесс может занять несколько недель.
-*Fine-tuning*, с другой стороны, это обучение, проведенной *после* того, как модель была предобучена. Для проведения fine-tuning вы сначала должны выбрать предобученную языковую модель, а после провести обучение на данных собственной задачи. Стойте -- почему не обучить модель сразу же на данных конкретной задачи? Этому есть несколько причин:
+*Дообучение (англ. fine-tuning)*, с другой стороны, это обучение *после* того, как модель была предобучена. Для дообучения вы сначала должны выбрать предобученную языковую модель, а после продолжить ее обучение ее на данных собственной задачи. Стойте -- почему не обучить модель сразу же на данных конкретной задачи? Этому есть несколько причин:
-* Предобученная модель уже обучена на датасете, который имеет много сходств с датасетом для fine-tuning. Процесс тонкой настройки может использовать знания, которые были получены моделью в процессе предобучения (например, в задачах NLP предварительно обученная модель будет иметь представление о статистических закономерностях языка, который вы используете в своей задаче).
+* Предобученная модель уже обучена на датасете, который имеет много сходств с датасетом для дообучения. Процесс дообучения может использовать знания, которые были получены моделью в процессе предобучения (например, в задачах NLP предварительно обученная модель будет иметь представление о статистических закономерностях языка, который вы используете в своей задаче).
-* Так как предобученная модель уже "видела" много данных, процесс тонкой настройки требует меньшего количества данных для получения приемлемых результатов.
+* Так как предобученная модель уже "видела" много данных, процесс дообучения требует меньшего количества данных для получения приемлемых результатов.
* По этой же причине требуется и намного меньше времени для получения хороших результатов.
-Например, можно использовать предварительно обученную на английском языке модель, а затем провести ее fine-tuning на корпусе arXiv, в результате чего получится научно-исследовательская модель. Для тонкой настройки потребуется лишь ограниченный объем данных: знания, которые приобрела предварительно обученная модель, «передаются» (осуществляют трансфер), отсюда и термин «трансферное обучение».
+Например, можно использовать предварительно обученную на английском языке модель, а затем дообучить ее на корпусе arXiv, в результате чего получится научно-исследовательская модель. Для дообучения потребуется лишь ограниченный объем данных: знания, которые приобрела предварительно обученная модель, «передаются» (осуществляют трансфер), отсюда и термин «трансферное обучение».
-Таким образом, тонкая настройка модели требует меньше времени, данных, финансовых и экологических затрат. Также быстрее и проще перебирать различные схемы тонкой настройки, поскольку обучение требует меньше усилий, чем полное предварительное обучение.
+Таким образом, дообучение модели требует меньше времени, данных, финансовых и экологических затрат. Также быстрее и проще перебирать различные схемы дообучения, поскольку оно требует меньше усилий, чем полное предварительное обучение.
Этот процесс также даст лучшие результаты, чем обучение с нуля (если только у вас нет большого количества данных), поэтому вы всегда должны пытаться использовать предобученную модель — модель, максимально приближенную к поставленной задаче, а потом дообучить ее.
@@ -124,8 +126,8 @@
Модель состоит из двух блоков:
-* **Encoder (слева)** (кодировщик, энкодер): энкодер получает входные данные и строит их репрезентацию (формирует признаки). Это означает, модель нацелена на "понимание" входных данных.
-* **Декодер (справа)** (декодировщик, декодер): декодер использует репрезентации (признаки) энкодера с другими входными данными для создания нужной последовательности. Это означает, что модель нацелена на генерацию выходных данных.
+* **Кодировщик (слева)** (англ. encoder): кодировщик получает входные данные и строит их репрезентацию (формирует признаки). Это означает, модель нацелена на "понимание" входных данных.
+* **Декодировщик (справа)** (англ. decoder): декодировщик использует репрезентации (признаки) кодировщика с другими входными данными для создания нужной последовательности. Это означает, что модель нацелена на генерацию выходных данных.
@@ -134,45 +136,45 @@
Каждая из этих частей может быть использована отдельно, это зависит от задачи:
-* **Encoder-модели**: полезны для задач, требющих понимания входных данных, таких как классификация предложений и распознавание именованных сущностей.
-* **Decoder-модели**: полезны для генеративных задач, таких как генерация текста.
-* **Encoder-decoder модели** или **seq2seq-модели**: полезны в генеративных задачах, требущих входных данных. Например: перевод или саммаризация текста.
+* **Модели-кодировщики**: полезны для задач, требующих понимания входных данных, таких как классификация предложений и распознавание именованных сущностей.
+* **Модели-декодировщики**: полезны для генеративных задач, таких как генерация текста.
+* **Модели типа "кодировщик-декодировщик"** или **seq2seq-модели**: полезны в генеративных задачах, требующих входных данных. Например: перевод или автоматическое реферирование текста.
-Мы изучим эти архитектуры глубже в следующих разделах.
+Мы изучим эти архитектуры подробнее в следующих разделах.
-## Слой внимания или attention
+## Слой внимания
-Ключевой особенностью трансформеров является наличие в архитектуре специального слоя, называемого слоем внимания или attention'ом. Статья, в которой была описана архитектура трансформера, называлась["Attention Is All You Need"](https://arxiv.org/abs/1706.03762) ("Внимание - все, что вам нужно")! Мы изучим детали этого слоя позже. На текущий момент мы сформулируем механизм его работы так: attention-слой помогает модели "обращать внимание" на одни слова в поданном на вход предложении, а другие слова в той или иной степени игнорировать. И это происходит в процессе анализа каждого слова.
+Ключевой особенностью трансформеров является наличие в архитектуре специального слоя, называемого *слоем внимания (англ. attention layer)*. Статья, в которой была впервые представлена архитектура трансформера, называется ["Attention Is All You Need"](https://arxiv.org/abs/1706.03762) ("Внимание - все, что вам нужно")! Мы изучим детали этого слоя позже. На текущий момент мы сформулируем механизм его работы так: слой внимания помогает модели "обращать внимание" на одни слова в поданном на вход предложении, а другие слова в той или иной степени игнорировать. И это происходит в процессе анализа каждого слова.
Чтобы поместить это в контекст, рассмотрим задачу перевода текста с английского на французский язык. Для предложения "You like this course", модель должна будет также учитывать соседнее слово "You", чтобы получить правильный перевод слова "like", потому что во французском языке глагол "like" спрягается по-разному в зависимости от подлежащего. Однако остальная часть предложения бесполезна для перевода этого слова. В том же духе при переводе "like" также необходимо будет обратить внимание на слово "course", потому что "this" переводится по-разному в зависимости от того, стоит ли ассоциированное существительное в мужском или женском роде. Опять же, другие слова в предложении не будут иметь значения для перевода "this". С более сложными предложениями (и более сложными грамматическими правилами) модели потребуется уделять особое внимание словам, которые могут оказаться дальше в предложении, чтобы правильно перевести каждое слово.
-Такая же концепция применима к любой задаче, связанной с обработкой естесственного языка: слово само по себе имеет некоторое значение, однако значение очень часто зависит от контекста, которым может являться слово (или слова), стоящие вокруг искомого слова.
+Такая же концепция применима к любой задаче, связанной с обработкой естественного языка: слово само по себе имеет некоторое значение, однако значение очень часто зависит от контекста, которым может являться слово (или слова), стоящие вокруг искомого слова.
-Теперь, когда вы знакомы с идеей attention в целом, посмотрим поближе на архитектуру всего трансформера.
+Теперь, когда вы знакомы с идеей внимания в целом, посмотрим поближе на архитектуру всего трансформера.
## Первоначальная архитектура
-Архитектура трансформера изначально была разработана для перевода. Во время обучения энкодер получает входные данные (предложения) на определенном языке, а декодер получает те же предложения на желаемом целевом языке. В энкодере слои внимания могут использовать все слова в предложении (поскольку, как мы только что видели, перевод данного слова может зависеть от того, что в предложении находится после и перед ним). Декодер, в свою очерель, работает последовательно и может обращать внимание только на слова в предложении, которые он уже перевел (то есть только на слова перед генерируемым в данный момент словом). Например, когда мы предсказали первые три слова переведенной цели, мы передаем их декодеру, который затем использует все входные данные энкодера, чтобы попытаться предсказать четвертое слово.
+Архитектура трансформера изначально была разработана для перевода. Во время обучения кодировщик получает входные данные (предложения) на определенном языке, а декодировщик получает те же предложения на желаемом целевом языке. В кодировщике слои внимания могут использовать все слова в предложении (поскольку, как мы только что видели, перевод данного слова может зависеть от того, что в предложении находится после и перед ним). Декодировщик, в свою очередь, работает последовательно и может обращать внимание только на слова в предложении, которые он уже перевел (то есть только на слова перед генерируемым в данный момент словом). Например, когда мы предсказали первые три слова переведенной цели, мы передаем их декодировщику, который затем использует все входные данные кодировщика, чтобы попытаться предсказать четвертое слово.
-Чтобы ускорить процесс во время обучения (когда модель имеет доступ к целевым предложениям), декодер получает целевое предложение полностью, но ему не разрешается использовать будущие слова (если он имел доступ к слову в позиции 2 при попытке предсказать слово на позиции 2, задача не будет сложной!). Например, при попытке предсказать четвертое слово уровень внимания будет иметь доступ только к словам в позициях с 1 по 3.
+Чтобы ускорить процесс во время обучения (когда модель имеет доступ к целевым предложениям), декодировщик получает целевое предложение полностью, но ему не разрешается использовать будущие слова (если он имел доступ к слову в позиции 2 при попытке предсказать слово на позиции 2, задача не будет сложной!). Например, при попытке предсказать четвертое слово слой внимания будет иметь доступ только к словам в позициях с 1 по 3.
-Первоначальная архитектура Transformer выглядела так: энкодер слева и декодер справа:
+Первоначальная архитектура Transformer выглядела так: кодировщик слева и декодировщик справа:
-Обратите внимание, что первый уровень внимания в блоке декодера обращает внимание на все (прошлые) входные данные декодера, а второй уровень внимания использует выходные данные первого энкодера. Таким образом, он может получить доступ ко всему входному предложению, чтобы наилучшим образом предсказать текущее слово. Это очень полезно, так как разные языки могут иметь грамматические правила, которые располагают слова в разном порядке, или некоторый контекст, предоставленный в предложении далеко от текущего слова. Конекст может быть полезен для определения наилучшего перевода данного слова.
+Обратите внимание, что первый слой внимания в блоке декодировщика обращает внимание на все (прошлые) входные данные декодировщика, а второй слой внимания использует выходные данные кодировщика. Таким образом, он может получить доступ ко всему входному предложению, чтобы наилучшим образом предсказать текущее слово. Это очень полезно, так как разные языки могут иметь грамматические правила, которые располагают слова в разном порядке, или некоторый контекст, предоставленный в предложении далеко от текущего слова. Контекст может быть полезен для определения наилучшего перевода данного слова.
-*Attention-mask* (маска внимания) также может использоваться в энкодере/декодере, чтобы модель не обращала внимания на некоторые специальные слова — например, специальное несуществующее слово-заполнитель (служебный токен), используемое для придания всем входным данным одинаковой длины при группировке предложений.
+*Маска внимания (англ. attention mask)* также может использоваться в кодировщике/декодировщике, чтобы модель не обращала внимания на некоторые специальные слова — например, специальное несуществующее слово-заполнитель (англ. padding), используемое для придания всем входным данным одинаковой длины при группировке предложений.
-## Архитектуры и контрольные точки
+## Архитектуры и чекпоинты
-По мере погружения в трансформеры, вы будете встречать термины *архитектуры* и *контрольные точки* (checkpoints) в смысле *модели*. Эти термины имеют разный смысл:
+По мере погружения в трансформеры, вы будете встречать термины *архитектуры* и *чекпоинты* (англ. checkpoints) в смысле *модели*. Эти термины имеют разный смысл:
**Архитектура** - скелет модели -- слои, связи и операции, которые выполняются в модели.
-**Контрольная точка** - веса модели, которые могут быть загружены для конкретной архитектуры.
+**Чекпоинт** - веса модели, которые могут быть загружены для конкретной архитектуры.
**Модель** - зонтичный термин, который может означать и архитектуру, и веса для конкретной архитектуры. В этом курсе мы будем точнее использовать термины *архитектуры* и *чекпоинт*, если это будет важно для лучшего понимания.
Например, BERT - это архитектура, а `bert-base-cased` - набор весов, подготовленный Google к первому выпуску BERT'а, - это чекпоинт. Однако можно сказать и "модель BERT", и "модель bert-base-cased".
diff --git a/chapters/ru/chapter1/5.mdx b/chapters/ru/chapter1/5.mdx
index 1cc0839a3..f4b28c5c8 100644
--- a/chapters/ru/chapter1/5.mdx
+++ b/chapters/ru/chapter1/5.mdx
@@ -1,4 +1,4 @@
-# Модели энкодеров
+# Модели-кодировщики
-Энкодеры используют только компонент кодировщика трансформера. На каждом этапе слой внимания может использовать все слова исходного предложения. Эти модели часто характеризуют как имеющие двунаправленное внимание ("bi-directional attention"), и часто называют моделями *автоэнкодеров*.
+Кодировщики используют только компонент кодировщика трансформера. На каждом этапе слой внимания может использовать все слова исходного предложения. Эти модели часто характеризуют как имеющие двунаправленное внимание (англ. bi-directional attention), и часто называют моделями *автокодировщиками*.
-Предварительное обучение этих моделей обычно заключаетс в том, чтобы как-то исказить данное предложение (например, путем маскировки в нем случайных слов) и поставить перед моделью задачу найти или восстановить исходное предложение.
+Предварительное обучение этих моделей обычно заключается в том, чтобы как-то исказить предложение (например, путем маскировки в нем случайных слов) и поставить перед моделью задачу найти или восстановить исходное предложение.
-Энкодеры лучше всего подходят для задач, требующих _понимания_ всего предложения, таких как классификация предложений, распознавание именованных сущностей (и, в более общем смысле, классификация слов) и ответы на вопросы с извлечением информации из контекста.
+Кодировщики лучше всего подходят для задач, требующих _понимания_ всего предложения, таких как классификация предложений, распознавание именованных сущностей (и, в более общем смысле, классификация слов) и ответы на вопросы с извлечением информации из контекста (выделительные вопросно-ответные системы).
К представителям этого семейства моделей относятся:
diff --git a/chapters/ru/chapter1/6.mdx b/chapters/ru/chapter1/6.mdx
index 815f267d5..b75dd4ea4 100644
--- a/chapters/ru/chapter1/6.mdx
+++ b/chapters/ru/chapter1/6.mdx
@@ -1,4 +1,4 @@
-# Модели декодеров
+# Модели-декодировщики
-Декодировщики используют только компонент декодер трансформера. На каждом этапе для текущего слова слой внимания может получить доступ только к словам, которые были расположены до текущего в предложении. Такие модели часто называются *авторегрессионными моделями*.
+Декодировщики используют только компонент декодирования трансформера. На каждом этапе для текущего слова слой внимания может получить доступ только к словам, которые были расположены до него в предложении. Такие модели часто называются *авторегрессионными моделями*.
-Процесс предобучения декодеров обычно заключается в предсказании следующего слова в предложении. ё
+Процесс предобучения декодировщиков обычно заключается в предсказании следующего слова в предложении.
Такие модели лучше всего подходят для задач, связанных с генерацией текста.
diff --git a/chapters/ru/chapter1/7.mdx b/chapters/ru/chapter1/7.mdx
index 86be51145..6f13b4683 100644
--- a/chapters/ru/chapter1/7.mdx
+++ b/chapters/ru/chapter1/7.mdx
@@ -7,11 +7,11 @@
-Энкодер-декодер модели (также называемые *sequence-to-sequence models*) используют обе части трансформера. На каждом этапе слой внимания энкодера получает доступ ко всем словам в исходной последовательности, тогда как слой внимания декодера получает доступ только к тем словам, которые позиционированы до текущего слова.
+Модели типа кодировщик-декодировщик (также называемые *sequence-to-sequence models*) используют обе части трансформера. На каждом этапе слой внимания кодировщика получает доступ ко всем словам в исходной последовательности, тогда как слой внимания декодировщика получает доступ только к тем словам, которые расположены до текущего слова.
-Предобучение таких моделей может быть проведено по аналогии с процессом предобучения энкодера или декодера, но обычно это происходит сложнее. Например, модель [T5](https://huggingface.co/t5-base) была предобучена путем замены случайных фрагментов текста (фрагменты могут содержать несколько слов) на специальную маску, цель модели - предсказать текст, который заменила маска.
+Предобучение таких моделей может быть выполнено на задачах, используемых для предобучения моделей кодировщиков или декодировщиков, но обычно все немного сложнее. Например, модель [T5](https://huggingface.co/t5-base) была предобучена путем замены случайных фрагментов текста (фрагменты могут содержать несколько слов) на специальную маску, цель модели - предсказать текст, который заменила маска.
-Модели seq2seq лучше всего подходят для задач генерации новых предложений, зависящих от входного массива данных, например: саммаризация текста, перевод или генерация ответов на вопросы.
+Модели seq2seq лучше всего подходят для задач генерации новых предложений, зависящих от входного массива данных, например: автоматическое реферирование текста, перевод или в генеративных вопросно-ответных системах.
Представителями этого семейства являются:
diff --git a/chapters/ru/chapter1/8.mdx b/chapters/ru/chapter1/8.mdx
index fe5db9f6b..edc759829 100644
--- a/chapters/ru/chapter1/8.mdx
+++ b/chapters/ru/chapter1/8.mdx
@@ -7,7 +7,7 @@
{label: "Aws Studio", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter1/section8.ipynb"},
]} />
-Если вы намерены использовать предварительно обученную модель или точно настроенную версию в рабочей среде, имейте в виду, что, хотя эти модели являются мощными инструментами, они имеют ограничения. Самая большая из них заключается в том, что для предварительной подготовки на больших объемах данных исследователи часто очищают весь контент, который они могут найти, беря как лучшее, так и худшее из того, что доступно в Интернете.
+Если вы намерены использовать предварительно обученную модель или ее дообученную версию в рабочей среде, имейте в виду, что, хотя эти модели являются мощными инструментами, они имеют ограничения. Самое большое из них заключается в том, что для предварительного обучения на больших объемах данных исследователи часто очищают весь контент, который они могут найти, беря как лучшее, так и худшее из того, что доступно в Интернете.
Для иллюстрации вернемся к примеру пайплайна `fill-mask` с моделью BERT:
@@ -29,5 +29,5 @@ print([r["token_str"] for r in result])
На просьбу вставить пропущенное слово в этих двух предложениях модель дает только один ответ без гендерной принадлежности (официант/официантка). Другие рабочие профессии обычно ассоциируются с одним конкретным полом — и да, проститутка попала в топ-5 вариантов, которые модель ассоциирует с "женщиной" и "работой". Это происходит даже несмотря на то, что BERT — одна из редких моделей трансформеров, созданная не путем сбора данных со всего Интернета, а с использованием явно нейтральных данных (он обучен на [английской Википедии](https://huggingface.co/datasets/wikipedia) и наборе данных [BookCorpus](https://huggingface.co/datasets/bookcorpus).
-Поэтому, когда вы используете эти инструменты, вам нужно помнить, что исходная модель, которую вы используете, может очень легко генерировать сексистский, расистский или гомофобный контент. Тонкая настройка модели на ваших данных не избавит вас от этой внутренней предвзятости.
+Поэтому, когда вы используете эти инструменты, вам нужно помнить, что исходная модель, которую вы используете, может очень легко генерировать сексистский, расистский или гомофобный контент. Дообучение модели на ваших данных не сможет устранить эту внутреннюю предвзятость.
diff --git a/chapters/ru/chapter1/9.mdx b/chapters/ru/chapter1/9.mdx
index f808b04d0..98c0abaac 100644
--- a/chapters/ru/chapter1/9.mdx
+++ b/chapters/ru/chapter1/9.mdx
@@ -7,11 +7,11 @@
В этой главе вы увидели, как подходить к различным задачам NLP, используя высокоуровневую функцию `pipeline()` из библиотеки 🤗 Transformers. Вы также увидели, как искать и использовать модели в Hub, а также как использовать Inference API для тестирования моделей прямо в браузере.
-Мы обсудили, как трансформеры работают на высоком уровне, и поговорили о важности трансферного обучения и тонкой настройки. Ключевым аспектом является то, что вы можете использовать всю архитектуру или только энкодер или декодер, в зависимости от того, какую задачу вы хотите решить. Следующая таблица резюмирует это:
+Мы обсудили, как трансформеры работают на высоком уровне, и поговорили о важности трансферного обучения и дообучения. Ключевым аспектом является то, что вы можете использовать всю архитектуру или только кодировщик или декодировщик, в зависимости от того, какую задачу вы хотите решить. Следующая таблица резюмирует это:
-| Модель | Примеры | Задачи |
-|-----------------|--------------------------------------------|----------------------------------------------------------------------------------|
-| Энкодер | ALBERT, BERT, DistilBERT, ELECTRA, RoBERTa | Классификация предложений, распознавание именованных сущностей, генерация ответов на вопросы с извлечением информации |
-| Декодер | CTRL, GPT, GPT-2, Transformer XL | Генерация текста |
-| Энкодер-декодер | BART, T5, Marian, mBART | Саммаризация, перевод, генеративный подход к ответам на вопросы |
+| Модель | Примеры | Задачи |
+|-------------------------|--------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| Кодировщик | ALBERT, BERT, DistilBERT, ELECTRA, RoBERTa | Классификация предложений, распознавание именованных сущностей, выделительные вопросно-ответные системы |
+| Декодировщик | CTRL, GPT, GPT-2, Transformer XL | Генерация текста |
+| Кодировщик-декодировщик | BART, T5, Marian, mBART | Автоматическое реферирование, перевод, генеративные вопросно-ответные системы |
diff --git a/chapters/ru/glossary/1.mdx b/chapters/ru/glossary/1.mdx
new file mode 100644
index 000000000..00e1217c8
--- /dev/null
+++ b/chapters/ru/glossary/1.mdx
@@ -0,0 +1,146 @@
+# Глоссарий
+
+| Оригинал | Перевод |
+|---------------------------------|-----------------------------------------|
+| Abstraction | абстракция |
+| Account | учетная запись |
+| Accuracy | accuracy |
+| Artificial General Intelligence | сильный искусственный интеллект |
+| Attention | внимание |
+| Attention mask (layer) | маска внимания (слой) |
+| Backward Pass\* | обратный проход |
+| Batch | батч |
+| Bias | смещение |
+| Causal Language Modeling | каузальное языковое моделирование |
+| Chapter | глава |
+| Checkpoint(s) | чекпоинт |
+| Class | класс |
+| Classification | классификация |
+| Code | код |
+| Colab Notebook | блокнот Colab |
+| Command | команда |
+| Computer Vision | компьютерное зрение |
+| Configuration | конфигурация |
+| Course | курс |
+| Decoder | декодировщик / декодер |
+| Dependency | зависимость |
+| Deployment | развертывание (программного обеспечения)|
+| Development | разработка |
+| Dictionary | dictionary |
+| Distribution | распределение |
+| Download | download |
+| Encoder | кодировщик / энкодер |
+| Extractive question answering | выделительная вопросно-ответная система |
+| F1 score | F1-мера |
+| Feature | признак |
+| Fine-tune | дообучать |
+| Fine-tuning | дообучение |
+| Folder | папка / директория |
+| Forward Pass\* | прямой проход |
+| Function | функция |
+| Generative question answering | генеративная вопросно-ответная система |
+| Google | Google |
+| Hugging Face | Hugging Face |
+| Incompatibility | несовместимость |
+| Inference | инференс |
+| Input | вход |
+| Input data | входные данные |
+| Label (verb) | размечать |
+| Label (subj) | метка класса |
+| Layer | слой |
+| Library | библиотека |
+| Linux | Linux |
+| Load | загружать |
+| Loss function | функция потерь |
+| Machine Learning | машинное обучение |
+| macOS | macOS |
+| Mask | маска |
+| Mask Filling | предсказание замаскированного токена |
+| Mask Token | токен-маска |
+| Masked Language Modeling | маскированное языковое моделирование |
+| Model | модель |
+| Model Hub | Model Hub |
+| Module | модуль |
+| Named Entities | именованные сущности |
+| Named Entity Recognition | распознавание именованных сущностей |
+| Natural Language Processing | обработка естественного языка |
+| Output | выход |
+| Package | пакет |
+| Package Manager | менеджер пакетов |
+| Padding (объект) | padding |
+| Padding (действие) | дополнение |
+| Parameter | параметр |
+| Postprocessing | постобработка / последующая обработка |
+| Preprocessing | предобработка / предварительная обработка|
+| Pretraining | предварительное обучение / предобучение |
+| Pretrained model | предварительно обученная модель |
+| Pretrained model | предобученная модель |
+| Prompt | начальный текст |
+| Python | Python |
+| Pytorch | Pytorch |
+| Question Answering | вопросно-ответная система |
+| Save | сохранять |
+| Sample | пример |
+| Script | скрипт |
+| Self-Attention | самовнимание |
+| Self-Contained | самостоятельный |
+| Sentiment analysis | анализ тональности текста (сентимент-анализ)|
+| Sequence-to-sequence models | sequence-to-sequence модель |
+| Setup | установка (программы) / настройка (среды)|
+| Speech Processing | обработка речи |
+| Speech Recognition | распознавание речи |
+| Summarization | суммаризация |
+| Target | целевая переменная |
+| Task | задача |
+| TensorFlow | Tensorflow |
+| Terminal | терминал |
+| Text generation | генерация текста |
+| Tokenizer | Tokenizer (библиотека) / токенизатор |
+| Train | обучение (обучать) |
+| Transfer Learning | Transfer Learning / трансферное обучение|
+| Transformer | трансформер |
+| Transformer models | архитектура трансформер |
+| Translation | (машинный) перевод |
+| Virtual Environment | виртуальное окружение |
+| Weight | вес |
+| Weights | веса |
+| Windows | Windows |
+| Working Environment | рабочее окружение |
+| Workload | нагрузка |
+| Workspace | Workspace |
+| Zero-shot classification | zero-shot классификация |
+=======
+
+\* Данные термины могут употребляться взаимозаменяемо с их английской версией
+
+## Сокращения
+
+| Оригинал | Перевод |
+|-----------|-------------|
+| NLP | NLP |
+| API | API |
+| GPU | GPU |
+| TPU | TPU |
+| ML | ML |
+
+## Notes
+
+Please refer to [TRANSLATING.txt](/chapters/ru/TRANSLATING.txt) for a translation guide. Here are some excerpts relevant to the glossary:
+
+- Refer and contribute to the glossary frequently to stay on top of the latest
+ choices we make. This minimizes the amount of editing that is required.
+ Add new terms alphabetically sorted.
+
+- The Russian language accepts English words especially in modern contexts more
+ than many other languages (i.e. Anglicisms). Check for the correct usage of
+ terms in computer science and commonly used terms in other publications.
+
+- Don't translate industry-accepted acronyms. e.g. TPU or GPU.
+
+- If translating a technical word, keep the choice of Russian translation consistent.
+ This does not apply for non-technical choices, as in those cases variety actually
+ helps keep the text engaging.
+
+- Be exact when choosing equivalents for technical words. Package is package.
+ Library is library. Don't mix and match.
+
diff --git a/chapters/zh-CN/_toctree.yml b/chapters/zh-CN/_toctree.yml
index ff3aaaa6d..08335aaf7 100644
--- a/chapters/zh-CN/_toctree.yml
+++ b/chapters/zh-CN/_toctree.yml
@@ -69,7 +69,7 @@
- local: chapter4/1
title: The Hugging Face Hub
- local: chapter4/2
- title: 使用预训练的模型
+ title: 使用预训练模型
- local: chapter4/3
title: 分享预训练的模型
- local: chapter4/4
diff --git a/chapters/zh-CN/chapter0/1.mdx b/chapters/zh-CN/chapter0/1.mdx
index 5e46295d1..45af8dfc9 100644
--- a/chapters/zh-CN/chapter0/1.mdx
+++ b/chapters/zh-CN/chapter0/1.mdx
@@ -1,4 +1,4 @@
-# 课程简介
+# 课程简介 [[课程简介]]
欢迎来到拥抱脸课程!本介绍将指导您设置工作环境。如果您刚开始学习本课程,我们建议您先阅读[第一章](/course/chapter1), 然后再回来设置您的环境,以便您可以自己尝试运行代码。
@@ -10,7 +10,7 @@
大多数课程和服务都依赖于您拥有 Hugging Face 帐户。我们建议现在创建一个:[创建一个账号](https://huggingface.co/join).
-## 使用 Google Colab 笔记本
+## 使用 Google Colab 笔记本 [[使用 Google Colab 笔记本]]
使用 Colab notebook 是最简单的设置;可以在浏览器中启动Notebook并直接开始编写自己的代码!
@@ -46,7 +46,7 @@ import transformers
这将需要一些时间,但当完成之后您就做好学习剩下的课程的环境准备了!
-## 使用 Python 虚拟环境
+## 使用 Python 虚拟环境 [[使用 Python 虚拟环境]]
如果您更喜欢使用 Python 虚拟环境,那么第一步是在您的系统上安装 Python。我们建议您按照[这个教程](https://realpython.com/installing-python/)进行配置。
@@ -99,7 +99,7 @@ which python
/home//transformers-course/.env/bin/python
```
-### 安装依赖
+### 安装依赖 [[安装依赖]]
与使用 Google Colab 实例的上一节一样,您现在需要安装继续所需的包。 同样,您可以使用 `pip` 包管理器安装 🤗 Transformers 的开发版本:
diff --git a/chapters/zh-CN/chapter1/1.mdx b/chapters/zh-CN/chapter1/1.mdx
index fb0ccc351..18d638949 100644
--- a/chapters/zh-CN/chapter1/1.mdx
+++ b/chapters/zh-CN/chapter1/1.mdx
@@ -1,18 +1,18 @@
-# 本章简介
+# 本章简介 [[本章简介]]
-## 欢迎来到🤗课程
+## 欢迎来到🤗课程 [[欢迎来到🤗课程]]
本课程将使用 Hugging Face 生态系统中的库——🤗 Transformers、🤗 Datasets、🤗 Tokenizers 和 🤗 Accelerate——以及 Hugging Face Hub 教你自然语言处理 (NLP)。它是完全免费的,并且没有广告。
-## 有什么是值得期待的?
+## 有什么是值得期待的?[[有什么是值得期待的?]]
以下是课程的简要概述:
@@ -33,23 +33,74 @@
完成本课程后,我们建议您查看 [DeepLearning.AI的自然语言处理系列课程](https://www.coursera.org/specializations/natural-language-processing?utm_source=deeplearning-ai&utm_medium=institutions&utm_campaign=20211011-nlp-2-hugging_face-page-nlp-refresh),其中涵盖了广泛的传统 NLP 模型,如朴素贝叶斯和 LSTM,这些模型非常值得了解!
-## 我们是谁?
+## 我们是谁?[[我们是谁?]]
关于作者:
-**Matthew Carrigan** 是 Hugging Face 的机器学习工程师。他住在爱尔兰都柏林,之前在 Parse.ly 担任机器学习工程师,在此之前,他在Trinity College Dublin担任博士后研究员。他不相信我们会通过扩展现有架构来实现 AGI,但无论如何都对机器人充满希望。
+[**Abubakar Abid**](https://huggingface.co/abidlabs) 在斯坦福大学获得应用机器学习博士学位。 在攻读博士学位期间,他创立了 [Gradio](https://github.com/gradio-app/gradio),这是一个开源 Python 库,已用于构建超过 600,000 个机器学习演示。 Gradio 被 Hugging Face 收购,Abubakar 现在是该公司的机器学习团队负责人。
-**Lysandre Debut** 是 Hugging Face 的机器学习工程师,从早期的开发阶段就一直致力于 🤗 Transformers 库。他的目标是通过使用非常简单的 API 开发工具,让每个人都可以使用 NLP。
+[**Matthew Carrigan**](https://huggingface.co/Rocketknight1) 是 Hugging Face 的机器学习工程师。他住在爱尔兰都柏林,之前在 Parse.ly 担任机器学习工程师,在此之前,他在Trinity College Dublin担任博士后研究员。他不相信我们会通过扩展现有架构来实现 AGI,但无论如何都对机器人充满希望。
-**Sylvain Gugger** 是 Hugging Face 的一名研究工程师,也是 🤗Transformers库的核心维护者之一。此前,他是 fast.ai 的一名研究科学家,他与Jeremy Howard 共同编写了[Deep Learning for Coders with fastai and Py Torch](https://learning.oreilly.com/library/view/deep-learning-for/9781492045519/)。他的主要研究重点是通过设计和改进允许模型在有限资源上快速训练的技术,使深度学习更容易普及。
+[**Lysandre Debut**](https://huggingface.co/lysandre) 是 Hugging Face 的机器学习工程师,从早期的开发阶段就一直致力于 🤗 Transformers 库。他的目标是通过使用非常简单的 API 开发工具,让每个人都可以使用 NLP。
-**Merve Noyan** 是 Hugging Face 的开发者倡导者,致力于开发工具并围绕它们构建内容,以使每个人的机器学习平民化。
+[**Sylvain Gugger**](https://huggingface.co/sgugger) 是 Hugging Face 的一名研究工程师,也是 🤗Transformers库的核心维护者之一。此前,他是 fast.ai 的一名研究科学家,他与Jeremy Howard 共同编写了[Deep Learning for Coders with fastai and Py Torch](https://learning.oreilly.com/library/view/deep-learning-for/9781492045519/)。他的主要研究重点是通过设计和改进允许模型在有限资源上快速训练的技术,使深度学习更容易普及。
-**Lucile Saulnier** 是 Hugging Face 的机器学习工程师,负责开发和支持开源工具的使用。她还积极参与了自然语言处理领域的许多研究项目,例如协作训练和 BigScience。
+[**Dawood Khan**](https://huggingface.co/dawoodkhan82) 是 Hugging Face 的机器学习工程师。 他来自纽约,毕业于纽约大学计算机科学专业。 在担任 iOS 工程师几年后,Dawood 辞职并与其他联合创始人一起创办了 Gradio。 Gradio 最终被 Hugging Face 收购。
-**Lewis Tunstall** 是 Hugging Face 的机器学习工程师,专注于开发开源工具并使更广泛的社区可以使用它们。他也是即将出版的一本书[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/)的作者之一。
+[**Merve Noyan**](https://huggingface.co/sgugger) 是 Hugging Face 的开发者倡导者,致力于开发工具并围绕它们构建内容,以使每个人的机器学习平民化。
-**Leandro von Werra** 是 Hugging Face 开源团队的机器学习工程师,也是即将出版的一本书[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/)的作者之一。他拥有多年的行业经验,通过在整个机器学习堆栈中工作,将 NLP 项目投入生产。
+[**Lucile Saulnier**](https://huggingface.co/SaulLu) 是 Hugging Face 的机器学习工程师,负责开发和支持开源工具的使用。她还积极参与了自然语言处理领域的许多研究项目,例如协作训练和 BigScience。
+
+[**Lewis Tunstall**](https://huggingface.co/lewtun) 是 Hugging Face 的机器学习工程师,专注于开发开源工具并使更广泛的社区可以使用它们。他也是即将出版的一本书[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/)的作者之一。
+
+[**Leandro von Werra**](https://huggingface.co/lvwerra) 是 Hugging Face 开源团队的机器学习工程师,也是即将出版的一本书[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/)的作者之一。他拥有多年的行业经验,通过在整个机器学习堆栈中工作,将 NLP 项目投入生产。
+
+## FAQ[[faq]]
+
+这里有一些经常被提到的问题:
+
+- **参加本课程是否会获得认证?**
+目前,我们没有获得此课程的任何认证。 但是,我们正在为 Hugging Face 生态系统制定认证计划——敬请期待!
+
+- **我应该在这门课程上花多少时间?**
+本课程的每一章都设计为在 1 周内完成,每周大约需要 6-8 小时的学习时间。 但是,您可以花尽可能多的时间来完成课程。
+
+- **如果我有问题,我可以在哪里提问?**
+如果您对课程的任何部分有疑问,只需单击页面顶部的“*提问*”横幅,系统就会自动重定向到 [Hugging Face 论坛](https:// discuss.huggingface.co/):
+
+
+
+请注意,如果您想在完成课程后进行更多练习,论坛上还提供了[项目灵感](https://discuss.huggingface.co/c/course/course-event/25) 列表。
+
+- **我在哪里可以获得课程的代码?**
+对于每个部分,单击页面顶部的横幅可以在 Google Colab 或 Amazon SageMaker Studio Lab 中运行代码:
+
+
+
+包含课程所有代码的 Jupyter 笔记本托管在 [`huggingface/notebooks`](https://github.com/huggingface/notebooks) 仓库中。 如果您希望在本地生成它们,请查看 GitHub 上 [`course`](https://github.com/huggingface/course#-jupyter-notebooks) 仓库中的说明。
+
+
+- **我如何为课程做出贡献?**
+有很多方法可以为课程做出贡献! 如果您发现拼写错误或错误,请在 [`course`](https://github.com/huggingface/course) 仓库中提出问题。 如果您想帮助将课程翻译成您的母语,请在[此处](https://github.com/huggingface/course#translating-the-course-into-your-language) 查看说明。
+
+- ** 每个翻译的选择是什么?**
+每个翻译都有一个词汇表和“TRANSLATING.txt”文件,其中详细说明了为机器学习术语等所做的选择。您可以在 [此处](https://github.com/huggingface/course/blob/main/chapters/de/TRANSLATING.txt)。
+
+
+- **我可以使用这门课程再次进行创作吗?**
+当然! 该课程是根据宽松的 [Apache 2 许可证](https://www.apache.org/licenses/LICENSE-2.0.html) 发布的。 这意味着您必须按照诚信的原则,提供许可证的链接,并指出是否进行了更改。您可以以任何合理的方式这样做,但不能以任何表明许可方认可您或您的使用的方式。 如果您想引用该课程,请使用以下 BibTeX:
+
+```
+@misc{huggingfacecourse,
+ author = {Hugging Face},
+ title = {The Hugging Face Course, 2022},
+ howpublished = "\url{https://huggingface.co/course}",
+ year = {2022},
+ note = "[Online; accessed ]"
+}
+```
+
+## 让我们开始吧![[让我们开始吧!]]
你准备好了吗?在本章中,您将学习:
* 如何使用 `pipeline()` 函数解决文本生成、分类等NLP任务
diff --git a/chapters/zh-CN/chapter1/10.mdx b/chapters/zh-CN/chapter1/10.mdx
index 3e2951036..84a5cb639 100644
--- a/chapters/zh-CN/chapter1/10.mdx
+++ b/chapters/zh-CN/chapter1/10.mdx
@@ -1,6 +1,6 @@
-# 章末小测试
+# 章末小测试 [[章末小测试]]
准备.
-## Transformer被应用于各个方面!
+## Transformer被应用于各个方面! [[Transformer被应用于各个方面!]]
Transformer 模型用于解决各种 NLP 任务,就像上一节中提到的那样。以下是一些使用 Hugging Face 和 Transformer 模型的公司和组织,他们也通过分享他们的模型回馈社区:
![使用 Hugging Face 的公司](https://huggingface.co/course/static/chapter1/companies.PNG)
@@ -26,7 +26,7 @@ Transformer 模型用于解决各种 NLP 任务,就像上一节中提到的那
在深入研究 Transformer 模型的底层工作原理之前,让我们先看几个示例,看看它们如何用于解决一些有趣的 NLP 问题。
-## 使用pipelines
+## 使用pipelines [[使用pipelines]]
(这里有一个视频,但是国内可能打不开,译者注)
@@ -77,7 +77,7 @@ classifier(
让我们来看看其中的一些吧!
-## 零样本分类
+## 零样本分类 [[零样本分类]]
我们将首先处理一项非常具挑战性的任务,我们需要对尚未标记的文本进行分类。这是实际项目中的常见场景,因为注释文本通常很耗时并且需要领域专业知识。对于这项任务**zero-shot-classification**pipeline非常强大:它允许您直接指定用于分类的标签,因此您不必依赖预训练模型的标签。下面的模型展示了如何使用这两个标签将句子分类为正面或负面——但也可以使用您喜欢的任何其他标签集对文本进行分类。
```python
@@ -100,7 +100,7 @@ classifier(
✏️**快来试试吧!**使用您自己的序列和标签,看看模型的行为。
-## 文本生成
+## 文本生成 [[文本生成]]
现在让我们看看如何使用pipeline来生成一些文本。这里的主要使用方法是您提供一个提示,模型将通过生成剩余的文本来自动完成整段话。这类似于许多手机上的预测文本功能。文本生成涉及随机性,因此如果您没有得到相同的如下所示的结果,这是正常的。
```python
@@ -122,7 +122,7 @@ generator("In this course, we will teach you how to")
✏️**快来试试吧!**使用 num_return_sequences 和 max_length 参数生成两个句子,每个句子 15 个单词。
-## 在pipeline中使用 Hub 中的其他模型
+## 在pipeline中使用 Hub 中的其他模型 [[在pipeline中使用 Hub 中的其他模型]]
前面的示例使用了默认模型,但您也可以从 Hub 中选择特定模型以在特定任务的pipeline中使用 - 例如,文本生成。转到[模型中心(hub)](https://huggingface.co/models)并单击左侧的相应标签将会只显示该任务支持的模型。[例如这样](https://huggingface.co/models?pipeline_tag=text-generation)。
让我们试试 [**distilgpt2**](https://huggingface.co/distilgpt2) 模型吧!以下是如何在与以前相同的pipeline中加载它:
@@ -151,12 +151,12 @@ generator(
✏️**快来试试吧!**使用标签筛选查找另一种语言的文本生成模型。使用小组件测试并在pipeline中使用它!
-## 推理 API
+## 推理 API [[推理 API]]
所有模型都可以使用 Inference API 直接通过浏览器进行测试,该 API 可在 [Hugging Face 网站](https://huggingface.co/)上找到。通过输入自定义文本并观察模型的输出,您可以直接在此页面上使用模型。
小组件形式的推理 API 也可作为付费产品使用,如果您的工作流程需要它,它会派上用场。有关更多详细信息,请参阅[定价页面](https://huggingface.co/pricing)。
-## Mask filling
+## Mask filling [[Mask filling]]
您将尝试的下一个pipeline是 **fill-mask**。此任务的想法是填充给定文本中的空白:
```python
from transformers import pipeline
@@ -180,7 +180,7 @@ unmasker("This course will teach you all about models.", top_k=2)
✏️**快来试试吧!**在 Hub 上搜索基于 bert 的模型并在推理 API 小组件中找到它的掩码。这个模型对上面pipeline示例中的句子预测了什么?
-## 命名实体识别
+## 命名实体识别 [[命名实体识别]]
命名实体识别 (NER) 是一项任务,其中模型必须找到输入文本的哪些部分对应于诸如人员、位置或组织之类的实体。让我们看一个例子:
```python
from transformers import pipeline
@@ -202,7 +202,7 @@ ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")
✏️**快来试试吧!**在模型中心(hub)搜索能够用英语进行词性标注(通常缩写为 POS)的模型。这个模型对上面例子中的句子预测了什么?
-## 问答系统
+## 问答系统 [[问答系统]]
问答pipeline使用来自给定上下文的信息回答问题:
```python
from transformers import pipeline
@@ -221,7 +221,7 @@ klyn",
```
请注意,此pipeline通过从提供的上下文中提取信息来工作;它不会凭空生成答案。
-## 文本摘要
+## 文本摘要 [[文本摘要]]
文本摘要是将文本缩减为较短文本的任务,同时保留文本中的主要(重要)信息。下面是一个例子:
```python
@@ -262,7 +262,7 @@ summarizer(
```
与文本生成一样,您指定结果的 **max_length** 或 **min_length**。
-## 翻译
+## 翻译 [[翻译]]
对于翻译,如果您在任务名称中提供语言对(例如“**translation_en_to_fr**”),则可以使用默认模型,但最简单的方法是在[模型中心(hub)](https://huggingface.co/models)选择要使用的模型。在这里,我们将尝试从法语翻译成英语:
```python
diff --git a/chapters/zh-CN/chapter1/4.mdx b/chapters/zh-CN/chapter1/4.mdx
index a2f8a839f..c056b2b10 100644
--- a/chapters/zh-CN/chapter1/4.mdx
+++ b/chapters/zh-CN/chapter1/4.mdx
@@ -1,4 +1,4 @@
-# Transformers 是如何工作的?
+# Transformers 是如何工作的? [[Transformers 是如何工作的?]]
+
+- 第 1 章到第 4 章介紹了 🤗 Transformers 庫的主要概念。在本課程的這一部分結束時,您將熟悉 Transformer 模型的工作原理,並將瞭解如何使用 [Hugging Face Hub](https://huggingface.co/models) 中的模型,在數據集上對其進行微調,並在 Hub 上分享您的結果。
+- 第 5 章到第 8 章在深入研究經典 NLP 任務之前,教授 🤗 Datasets和 🤗 Tokenizers的基礎知識。在本部分結束時,您將能夠自己解決最常見的 NLP 問題。
+- 第 9 章到第 12 章更加深入,探討瞭如何使用 Transformer 模型處理語音處理和計算機視覺中的任務。在此過程中,您將學習如何構建和分享模型,並針對生產環境對其進行優化。在這部分結束時,您將準備好將🤗 Transformers 應用於(幾乎)任何機器學習問題!
+
+這個課程:
+
+* 需要良好的 Python 知識
+* 最好先學習深度學習入門課程,例如[DeepLearning.AI](https://www.deeplearning.ai/) 提供的 [fast.ai實用深度學習教程](https://course.fast.ai/)
+* 不需要事先具備 [PyTorch](https://pytorch.org/) 或 [TensorFlow](https://www.tensorflow.org/) 知識,雖然熟悉其中任何一個都會對huggingface的學習有所幫助
+
+完成本課程後,我們建議您查看 [DeepLearning.AI的自然語言處理系列課程](https://www.coursera.org/specializations/natural-language-processing?utm_source=deeplearning-ai&utm_medium=institutions&utm_campaign=20211011-nlp-2-hugging_face-page-nlp-refresh),其中涵蓋了廣泛的傳統 NLP 模型,如樸素貝葉斯和 LSTM,這些模型非常值得瞭解!
+
+## 我們是誰?
+
+關於作者:
+
+**Matthew Carrigan** 是 Hugging Face 的機器學習工程師。他住在愛爾蘭都柏林,之前在 Parse.ly 擔任機器學習工程師,在此之前,他在Trinity College Dublin擔任博士後研究員。他不相信我們會通過擴展現有架構來實現 AGI,但無論如何都對機器人充滿希望。
+
+**Lysandre Debut** 是 Hugging Face 的機器學習工程師,從早期的開發階段就一直致力於 🤗 Transformers 庫。他的目標是通過使用非常簡單的 API 開發工具,讓每個人都可以使用 NLP。
+
+**Sylvain Gugger** 是 Hugging Face 的一名研究工程師,也是 🤗Transformers庫的核心維護者之一。此前,他是 fast.ai 的一名研究科學家,他與Jeremy Howard 共同編寫了[Deep Learning for Coders with fastai and Py Torch](https://learning.oreilly.com/library/view/deep-learning-for/9781492045519/)。他的主要研究重點是通過設計和改進允許模型在有限資源上快速訓練的技術,使深度學習更容易普及。
+
+**Merve Noyan** 是 Hugging Face 的開發者倡導者,致力於開發工具並圍繞它們構建內容,以使每個人的機器學習平民化。
+
+**Lucile Saulnier** 是 Hugging Face 的機器學習工程師,負責開發和支持開源工具的使用。她還積極參與了自然語言處理領域的許多研究項目,例如協作訓練和 BigScience。
+
+**Lewis Tunstall** 是 Hugging Face 的機器學習工程師,專注於開發開源工具並使更廣泛的社區可以使用它們。他也是即將出版的一本書[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/)的作者之一。
+
+**Leandro von Werra** 是 Hugging Face 開源團隊的機器學習工程師,也是即將出版的一本書[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/)的作者之一。他擁有多年的行業經驗,通過在整個機器學習堆棧中工作,將 NLP 項目投入生產。
+
+你準備好了嗎?在本章中,您將學習:
+* 如何使用 `pipeline()` 函數解決文本生成、分類等NLP任務
+* 關於 Transformer 架構
+* 如何區分編碼器、解碼器和編碼器-解碼器架構和用例
diff --git a/chapters/zh-TW/chapter1/10.mdx b/chapters/zh-TW/chapter1/10.mdx
new file mode 100644
index 000000000..cea2082cd
--- /dev/null
+++ b/chapters/zh-TW/chapter1/10.mdx
@@ -0,0 +1,258 @@
+
+
+# 章末小測試
+
+
+
+這一章涵蓋了很多內容! 如果有一些不太明白的地方,請不要擔心; 下一章將幫助你瞭解這些模塊在底層是如何運作的。
+
+讓我們來測試一下你在這一章學到了什麼!
+
+### 1. 探索 Hub 並尋找 `roberta-large-mnli` checkpoint。 它可以完成什麼類型的任務?
+
+
+roberta-large-mnli 頁面回顧一下."
+ },
+ {
+ text: "文本分類",
+ explain: "更準確地說,它對兩個句子在三個標籤(矛盾、無關、相近)之間的邏輯鏈接進行分類——這項任務也稱爲自然語言推理.",
+ correct: true
+ },
+ {
+ text: "文本生成",
+ explain: "點擊前往roberta-large-mnli 頁面回顧一下."
+ }
+ ]}
+/>
+
+### 2. 下面的代碼將會返回什麼結果?
+
+```py
+from transformers import pipeline
+
+ner = pipeline("ner", grouped_entities=True)
+ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")
+```
+
+sentiment-analysis pipeline將會返回這些."
+ },
+ {
+ text: "它將返回一個生成的文本來完成這句話。",
+ explain: "這個選項是不對的 — text-generation pipeline將會返回這些.",
+ },
+ {
+ text: "它將返回代表人員、組織或位置的單詞。",
+ explain: "此外,使用 grouped_entities=True,它會將屬於同一實體的單詞組合在一起,例如“Hugging Face”。",
+ correct: true
+ }
+ ]}
+/>
+
+### 3. 在此代碼示例中...的地方應該填寫什麼?
+
+```py
+from transformers import pipeline
+
+filler = pipeline("fill-mask", model="bert-base-cased")
+result = filler("...")
+```
+
+ has been waiting for you.",
+ explain: "這個選項是不對的。 請查看 bert-base-cased 模型卡片,然後再嘗試找找錯在哪裏。"
+ },
+ {
+ text: "This [MASK] has been waiting for you.",
+ explain: "正解! 這個模型的mask的掩碼是[MASK].",
+ correct: true
+ },
+ {
+ text: "This man has been waiting for you.",
+ explain: "這個選項是不對的。 這個pipeline的作用是填充經過mask的文字,因此它需要在輸入的文本中存在mask的token。"
+ }
+ ]}
+/>
+
+### 4. 爲什麼這段代碼會無法運行?
+
+```py
+from transformers import pipeline
+
+classifier = pipeline("zero-shot-classification")
+result = classifier("This is a course about the Transformers library")
+```
+
+candidate_labels=[...].",
+ correct: true
+ },
+ {
+ text: "這個pipeline需要多個句子,而不僅僅是一個。",
+ explain: "這個選項是不對的。儘管正確使用時,此pipeline可以同時處理多個句子(與所有其他pipeline一樣)。"
+ },
+ {
+ text: "像往常一樣,🤗 Transformers 庫出故障了。",
+ explain: "對此,我們不予置評!"
+ },
+ {
+ text: "該 pipeline 需要更長的輸入; 這個句子太短了。",
+ explain: "這個選項是不對的。 不過請注意,在這個 pipeline 處理時,太長的文本將被截斷。"
+ }
+ ]}
+/>
+
+### 5. “遷移學習”是什麼意思?
+
+
+
+### 6. 語言模型在預訓練時通常不需要標籤,這樣的說法是否正確。
+
+
+自監督,這意味着標籤是根據輸入自動創建的(例如:預測下一個單詞或填充一些[MARSK]單詞)。",
+ correct: true
+ },
+ {
+ text: "錯誤",
+ explain: "這不是一個正確的答案。"
+ }
+ ]}
+/>
+
+
+### 7. 選擇最能描述「模型(model)」、「架構(architecture)」和「權重(weights)」的句子。
+
+
+
+### 8. 你將使用以下哪種類型的模型來根據輸入的提示生成文本?
+
+
+
+### 9. 你會使用哪些類型的模型來生成文本的摘要?
+
+
+
+### 10. 你會使用哪一種類型的模型來根據特定的標籤對文本輸入進行分類?
+
+
+
+### 11. 模型中觀察到的偏見有哪些可能的來源?
+
+
diff --git a/chapters/zh-TW/chapter1/2.mdx b/chapters/zh-TW/chapter1/2.mdx
new file mode 100644
index 000000000..e9a1f74f6
--- /dev/null
+++ b/chapters/zh-TW/chapter1/2.mdx
@@ -0,0 +1,25 @@
+# 自然語言處理
+
+
+
+在進入 Transformer 模型之前,讓我們快速概述一下自然語言處理是什麼以及我們為什麼這麼重視它。
+
+## 什麼是自然語言處理?
+
+NLP 是語言學和機器學習交叉領域,專注於理解與人類語言相關的一切。 NLP 任務的目標不僅是單獨理解單個單詞,而且是能夠理解這些單詞的上下文。
+
+以下是常見 NLP 任務的列表,每個任務都有一些示例:
+
+- **對整個句子進行分類**: 獲取評論的情緒,檢測電子郵件是否為垃圾郵件,確定句子在語法上是否正確或兩個句子在邏輯上是否相關
+- **對句子中的每個詞進行分類**: 識別句子的語法成分(名詞、動詞、形容詞)或命名實體(人、地點、組織)
+- **生成文本內容**: 用自動生成的文本完成提示,用屏蔽詞填充文本中的空白
+- **從文本中提取答案**: 給定問題和上下文,根據上下文中提供的信息提取問題的答案
+- **從輸入文本生成新句子**: 將文本翻譯成另一種語言,總結文本
+
+NLP 不僅限於書面文本。它還解決了語音識別和計算機視覺中的複雜挑戰,例如生成音頻樣本的轉錄或圖像描述。
+## 為什麼具有挑戰性?
+
+計算機處理信息的方式與人類不同。例如,當我們讀到「我餓了」這句話時,我們很容易理解它的意思。同樣,給定兩個句子,例如「我很餓」和「我很傷心」,我們可以輕鬆確定它們的相似程度。對於機器學習 (ML) 模型,此類任務更加困難。文本需要以一種使模型能夠從中學習的方式進行處理。而且由於語言很複雜,我們需要仔細考慮必須如何進行這種處理。關於如何表示文本已經做了很多研究,我們將在下一章中介紹一些方法。
\ No newline at end of file
diff --git a/chapters/zh-TW/chapter1/3.mdx b/chapters/zh-TW/chapter1/3.mdx
new file mode 100644
index 000000000..31e4c8296
--- /dev/null
+++ b/chapters/zh-TW/chapter1/3.mdx
@@ -0,0 +1,287 @@
+# Transformers能做什麼?
+
+
+
+在本節中,我們將看看 Transformer 模型可以做什麼,並使用 🤗 Transformers 庫中的第一個工具:pipeline() 函數。
+
+👀 看到那個右上角的 在Colab中打開的按鈕了嗎? 單擊它就可以打開一個包含本節所有代碼示例的 Google Colab 筆記本。 每一個有實例代碼的小節都會有它。
+
+如果您想在本地運行示例,我們建議您查看準備.
+
+
+## Transformer被應用於各個方面!
+Transformer 模型用於解決各種 NLP 任務,就像上一節中提到的那樣。以下是一些使用 Hugging Face 和 Transformer 模型的公司和組織,他們也通過分享他們的模型回饋社區:
+
+![使用 Hugging Face 的公司](https://huggingface.co/course/static/chapter1/companies.PNG)
+[🤗 Transformers 庫](https://github.com/huggingface/transformers)提供了創建和使用這些共享模型的功能。[模型中心(hub)](https://huggingface.co/models)包含數千個任何人都可以下載和使用的預訓練模型。您還可以將自己的模型上傳到 Hub!
+
+
+⚠️ Hugging Face Hub 不限於 Transformer 模型。任何人都可以分享他們想要的任何類型的模型或數據集!創建一個 Huggingface.co 帳戶(https://huggingface.co/join)以使用所有可用功能!
+
+
+在深入研究 Transformer 模型的底層工作原理之前,讓我們先看幾個示例,看看它們如何用於解決一些有趣的 NLP 問題。
+
+## 使用pipelines
+
+
+(這裡有一個視頻,但是國內可能打不開,譯者注)
+
+
+🤗 Transformers 庫中最基本的對象是 **pipeline()** 函數。它將模型與其必要的預處理和後處理步驟連接起來,使我們能夠通過直接輸入任何文本並獲得最終的答案:
+
+```python
+from transformers import pipeline
+
+classifier = pipeline("sentiment-analysis")
+classifier("I've been waiting for a HuggingFace course my whole life.")
+```
+```python out
+[{'label': 'POSITIVE', 'score': 0.9598047137260437}]
+```
+
+
+我們也可以多傳幾句!
+```python
+classifier(
+ ["I've been waiting for a HuggingFace course my whole life.", "I hate this so much!"]
+)
+```
+```python out
+[{'label': 'POSITIVE', 'score': 0.9598047137260437},
+ {'label': 'NEGATIVE', 'score': 0.9994558095932007}]
+```
+默認情況下,此pipeline選擇一個特定的預訓練模型,該模型已針對英語情感分析進行了微調。創建**分類器**對象時,將下載並緩存模型。如果您重新運行該命令,則將使用緩存的模型,無需再次下載模型。
+
+將一些文本傳遞到pipeline時涉及三個主要步驟:
+
+1. 文本被預處理為模型可以理解的格式。
+2. 預處理的輸入被傳遞給模型。
+3. 模型處理後輸出最終人類可以理解的結果。
+
+目前[可用的一些pipeline](https://huggingface.co/transformers/main_classes/pipelines.html)是:
+
+* **特徵提取**(獲取文本的向量表示)
+* **填充空缺**
+* **ner**(命名實體識別)
+* **問答**
+* **情感分析**
+* **文本摘要**
+* **文本生成**
+* **翻譯**
+* **零樣本分類**
+
+讓我們來看看其中的一些吧!
+
+## 零樣本分類
+我們將首先處理一項非常具挑戰性的任務,我們需要對尚未標記的文本進行分類。這是實際項目中的常見場景,因為注釋文本通常很耗時並且需要領域專業知識。對於這項任務**zero-shot-classification**pipeline非常強大:它允許您直接指定用於分類的標籤,因此您不必依賴預訓練模型的標籤。下面的模型展示瞭如何使用這兩個標籤將句子分類為正面或負面——但也可以使用您喜歡的任何其他標籤集對文本進行分類。
+
+```python
+from transformers import pipeline
+
+classifier = pipeline("zero-shot-classification")
+classifier(
+ "This is a course about the Transformers library",
+ candidate_labels=["education", "politics", "business"],
+)
+```
+```python out
+{'sequence': 'This is a course about the Transformers library',
+ 'labels': ['education', 'business', 'politics'],
+ 'scores': [0.8445963859558105, 0.111976258456707, 0.043427448719739914]}
+```
+
+此pipeline稱為zero-shot,因為您不需要對數據上的模型進行微調即可使用它。它可以直接返回您想要的任何標籤列表的概率分數!
+
+✏️**快來試試吧!**使用您自己的序列和標籤,看看模型的行為。
+
+
+## 文本生成
+現在讓我們看看如何使用pipeline來生成一些文本。這裡的主要使用方法是您提供一個提示,模型將通過生成剩餘的文本來自動完成整段話。這類似於許多手機上的預測文本功能。文本生成涉及隨機性,因此如果您沒有得到相同的如下所示的結果,這是正常的。
+
+```python
+from transformers import pipeline
+
+generator = pipeline("text-generation")
+generator("In this course, we will teach you how to")
+```
+```python out
+[{'generated_text': 'In this course, we will teach you how to understand and use '
+ 'data flow and data interchange when handling user data. We '
+ 'will be working with one or more of the most commonly used '
+ 'data flows — data flows of various types, as seen by the '
+ 'HTTP'}]
+```
+您可以使用參數 **num_return_sequences** 控制生成多少個不同的序列,並使用參數 **max_length** 控制輸出文本的總長度。
+
+
+✏️**快來試試吧!**使用 num_return_sequences 和 max_length 參數生成兩個句子,每個句子 15 個單詞。
+
+
+## 在pipeline中使用 Hub 中的其他模型
+前面的示例使用了默認模型,但您也可以從 Hub 中選擇特定模型以在特定任務的pipeline中使用 - 例如,文本生成。轉到[模型中心(hub)](https://huggingface.co/models)並單擊左側的相應標籤將會只顯示該任務支持的模型。[例如這樣](https://huggingface.co/models?pipeline_tag=text-generation)。
+
+讓我們試試 [**distilgpt2**](https://huggingface.co/distilgpt2) 模型吧!以下是如何在與以前相同的pipeline中加載它:
+
+```python
+from transformers import pipeline
+
+generator = pipeline("text-generation", model="distilgpt2")
+generator(
+ "In this course, we will teach you how to",
+ max_length=30,
+ num_return_sequences=2,
+)
+```
+```python out
+[{'generated_text': 'In this course, we will teach you how to manipulate the world and '
+ 'move your mental and physical capabilities to your advantage.'},
+ {'generated_text': 'In this course, we will teach you how to become an expert and '
+ 'practice realtime, and with a hands on experience on both real '
+ 'time and real'}]
+```
+您可以通過單擊語言標籤來篩選搜索結果,然後選擇另一種文本生成模型的模型。模型中心(hub)甚至包含支持多種語言的多語言模型。
+
+通過單擊選擇模型後,您會看到有一個小組件,可讓您直接在線試用。通過這種方式,您可以在下載之前快速測試模型的功能。
+
+✏️**快來試試吧!**使用標籤篩選查找另一種語言的文本生成模型。使用小組件測試並在pipeline中使用它!
+
+
+## 推理 API
+所有模型都可以使用 Inference API 直接通過瀏覽器進行測試,該 API 可在 [Hugging Face 網站](https://huggingface.co/)上找到。通過輸入自定義文本並觀察模型的輸出,您可以直接在此頁面上使用模型。
+
+小組件形式的推理 API 也可作為付費產品使用,如果您的工作流程需要它,它會派上用場。有關更多詳細信息,請參閱[定價頁面](https://huggingface.co/pricing)。
+
+## Mask filling
+您將嘗試的下一個pipeline是 **fill-mask**。此任務的想法是填充給定文本中的空白:
+```python
+from transformers import pipeline
+
+unmasker = pipeline("fill-mask")
+unmasker("This course will teach you all about models.", top_k=2)
+```
+```python out
+[{'sequence': 'This course will teach you all about mathematical models.',
+ 'score': 0.19619831442832947,
+ 'token': 30412,
+ 'token_str': ' mathematical'},
+ {'sequence': 'This course will teach you all about computational models.',
+ 'score': 0.04052725434303284,
+ 'token': 38163,
+ 'token_str': ' computational'}]
+```
+**top_k** 參數控制要顯示的結果有多少種。請注意,這裡模型填充了特殊的< **mask** >詞,它通常被稱為掩碼標記。其他掩碼填充模型可能有不同的掩碼標記,因此在探索其他模型時要驗證正確的掩碼字是什麼。檢查它的一種方法是查看小組件中使用的掩碼。
+
+
+✏️**快來試試吧!**在 Hub 上搜索基於 bert 的模型並在推理 API 小組件中找到它的掩碼。這個模型對上面pipeline示例中的句子預測了什麼?
+
+
+## 命名實體識別
+命名實體識別 (NER) 是一項任務,其中模型必須找到輸入文本的哪些部分對應於諸如人員、位置或組織之類的實體。讓我們看一個例子:
+```python
+from transformers import pipeline
+
+ner = pipeline("ner", grouped_entities=True)
+ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")
+```
+```python out
+[{'entity_group': 'PER', 'score': 0.99816, 'word': 'Sylvain', 'start': 11, 'end': 18},
+ {'entity_group': 'ORG', 'score': 0.97960, 'word': 'Hugging Face', 'start': 33, 'end': 45},
+ {'entity_group': 'LOC', 'score': 0.99321, 'word': 'Brooklyn', 'start': 49, 'end': 57}
+]
+```
+在這裡,模型正確地識別出 Sylvain 是一個人 (PER),Hugging Face 是一個組織 (ORG),而布魯克林是一個位置 (LOC)。
+
+我們在pipeline創建函數中傳遞選項 **grouped_entities=True** 以告訴pipeline將對應於同一實體的句子部分重新組合在一起:這裡模型正確地將「Hugging」和「Face」分組為一個組織,即使名稱由多個詞組成。事實上,正如我們即將在下一章看到的,預處理甚至會將一些單詞分成更小的部分。例如,**Sylvain** 分割為了四部分:**S、##yl、##va** 和 **##in**。在後處理步驟中,pipeline成功地重新組合了這些部分。
+
+
+✏️**快來試試吧!**在模型中心(hub)搜索能夠用英語進行詞性標注(通常縮寫為 POS)的模型。這個模型對上面例子中的句子預測了什麼?
+
+
+## 問答系統
+問答pipeline使用來自給定上下文的信息回答問題:
+```python
+from transformers import pipeline
+
+question_answerer = pipeline("question-answering")
+question_answerer(
+ question="Where do I work?",
+ context="My name is Sylvain and I work at Hugging Face in Brooklyn",
+)
+```
+```python out
+{'score': 0.6385916471481323, 'start': 33, 'end': 45, 'answer': 'Hugging Face'}
+klyn",
+)
+
+```
+請注意,此pipeline通過從提供的上下文中提取信息來工作;它不會憑空生成答案。
+
+## 文本摘要
+文本摘要是將文本縮減為較短文本的任務,同時保留文本中的主要(重要)信息。下面是一個例子:
+
+```python
+from transformers import pipeline
+
+summarizer = pipeline("summarization")
+summarizer(
+ """
+ America has changed dramatically during recent years. Not only has the number of
+ graduates in traditional engineering disciplines such as mechanical, civil,
+ electrical, chemical, and aeronautical engineering declined, but in most of
+ the premier American universities engineering curricula now concentrate on
+ and encourage largely the study of engineering science. As a result, there
+ are declining offerings in engineering subjects dealing with infrastructure,
+ the environment, and related issues, and greater concentration on high
+ technology subjects, largely supporting increasingly complex scientific
+ developments. While the latter is important, it should not be at the expense
+ of more traditional engineering.
+
+ Rapidly developing economies such as China and India, as well as other
+ industrial countries in Europe and Asia, continue to encourage and advance
+ the teaching of engineering. Both China and India, respectively, graduate
+ six and eight times as many traditional engineers as does the United States.
+ Other industrial countries at minimum maintain their output, while America
+ suffers an increasingly serious decline in the number of engineering graduates
+ and a lack of well-educated engineers.
+"""
+)
+```
+```python out
+[{'summary_text': ' America has changed dramatically during recent years . The '
+ 'number of engineering graduates in the U.S. has declined in '
+ 'traditional engineering disciplines such as mechanical, civil '
+ ', electrical, chemical, and aeronautical engineering . Rapidly '
+ 'developing economies such as China and India, as well as other '
+ 'industrial countries in Europe and Asia, continue to encourage '
+ 'and advance engineering .'}]
+```
+與文本生成一樣,您指定結果的 **max_length** 或 **min_length**。
+
+## 翻譯
+對於翻譯,如果您在任務名稱中提供語言對(例如「**translation_en_to_fr**」),則可以使用默認模型,但最簡單的方法是在[模型中心(hub)](https://huggingface.co/models)選擇要使用的模型。在這裡,我們將嘗試從法語翻譯成英語:
+
+```python
+from transformers import pipeline
+
+translator = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-en")
+translator("Ce cours est produit par Hugging Face.")
+```
+```python out
+[{'translation_text': 'This course is produced by Hugging Face.'}]
+
+```
+
+與文本生成和摘要一樣,您可以指定結果的 **max_length** 或 **min_length**。
+
+
+
+✏️**快來試試吧!**搜索其他語言的翻譯模型,嘗試將前一句翻譯成幾種不同的語言。
+
+
+
+到目前為止顯示的pipeline主要用於演示目的。它們是為特定任務而編程的,不能對他們進行自定義的修改。在下一章中,您將瞭解 **pipeline()** 函數內部的內容以及如何進行自定義的修改。
\ No newline at end of file
diff --git a/chapters/zh-TW/chapter1/4.mdx b/chapters/zh-TW/chapter1/4.mdx
new file mode 100644
index 000000000..cb531b1b5
--- /dev/null
+++ b/chapters/zh-TW/chapter1/4.mdx
@@ -0,0 +1,177 @@
+# Transformers 是如何工作的?
+
+
+
+在本節中,我們將深入瞭解 Transformer 模型的架構。
+
+## 一點Transformers的發展歷史
+
+以下是 Transformer 模型(簡短)歷史中的一些關鍵節點:
+
+
+
+儘管 BERT 和 RoBERTa 系列模型的下載量最大, 但我們將使用名為 [DistilBERT](https://huggingface.co/distilbert-base-uncased)的模型。
+可以更快地訓練, 而下游性能幾乎沒有損失。這個模型使用一種稱為[_知識蒸餾_](https://en.wikipedia.org/wiki/Knowledge_distillation)的特殊技術進行訓練, 其中使用像 BERT 這樣的大型“教師模型”來指導參數少得多的“學生模型”的訓練。在本節中對知識蒸餾細節的解釋會使我們離題太遠, 但如果你有興趣, 可以閱讀所有相關內容 [_Natural Language Processing with Transformers_](https://www.oreilly.com/library/view/natural-language-processing/9781098136789/) (俗稱Transformers教科書)。
+
+{#if fw === 'pt'}
+
+讓我們繼續, 使用 `AutoModelForMaskedLM` 類下載 DistilBERT:
+
+```python
+from transformers import AutoModelForMaskedLM
+
+model_checkpoint = "distilbert-base-uncased"
+model = AutoModelForMaskedLM.from_pretrained(model_checkpoint)
+```
+
+我們可以通過調用 `num_parameters()` 方法查看模型有多少參數:
+
+```python
+distilbert_num_parameters = model.num_parameters() / 1_000_000
+print(f"'>>> DistilBERT number of parameters: {round(distilbert_num_parameters)}M'")
+print(f"'>>> BERT number of parameters: 110M'")
+```
+
+```python out
+'>>> DistilBERT number of parameters: 67M'
+'>>> BERT number of parameters: 110M'
+```
+
+{:else}
+
+讓我們繼續, 使用 `AutoModelForMaskedLM` 類下載 DistilBERT:
+
+```python
+from transformers import TFAutoModelForMaskedLM
+
+model_checkpoint = "distilbert-base-uncased"
+model = TFAutoModelForMaskedLM.from_pretrained(model_checkpoint)
+```
+
+我們可以通過調用 `summary()` 方法查看模型有多少參數:
+
+```python
+model(model.dummy_inputs) # Build the model
+model.summary()
+```
+
+```python out
+Model: "tf_distil_bert_for_masked_lm"
+_________________________________________________________________
+Layer (type) Output Shape Param #
+=================================================================
+distilbert (TFDistilBertMain multiple 66362880
+_________________________________________________________________
+vocab_transform (Dense) multiple 590592
+_________________________________________________________________
+vocab_layer_norm (LayerNorma multiple 1536
+_________________________________________________________________
+vocab_projector (TFDistilBer multiple 23866170
+=================================================================
+Total params: 66,985,530
+Trainable params: 66,985,530
+Non-trainable params: 0
+_________________________________________________________________
+```
+
+{/if}
+
+DistilBERT 大約有 6700 萬個參數, 大約比 BERT 基本模型小兩倍, 這大致意味著訓練的速度提高了兩倍 -- 非常棒! 現在讓我們看看這個模型預測什麼樣的標記最有可能完成一小部分文本:
+
+```python
+text = "This is a great [MASK]."
+```
+
+作為人類, 我們可以想象 `[MASK]` 標記有很多可能性, 例如 "day"、 "ride" 或者 "painting"。對於預訓練模型, 預測取決於模型所訓練的語料庫, 因為它會學習獲取數據中存在的統計模式。與 BERT 一樣, DistilBERT 在[English Wikipedia](https://huggingface.co/datasets/wikipedia) 和 [BookCorpus](https://huggingface.co/datasets/bookcorpus) 數據集上進行預訓練, 所以我們期望對 `[MASK]` 的預測能夠反映這些領域。為了預測掩碼, 我們需要 DistilBERT 的標記器來生成模型的輸入, 所以讓我們也從 Hub 下載它:
+
+```python
+from transformers import AutoTokenizer
+
+tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
+```
+
+使用標記器和模型, 我們現在可以將我們的文本示例傳遞給模型, 提取 logits, 並打印出前 5 個候選:
+
+{#if fw === 'pt'}
+
+```python
+import torch
+
+inputs = tokenizer(text, return_tensors="pt")
+token_logits = model(**inputs).logits
+# Find the location of [MASK] and extract its logits
+mask_token_index = torch.where(inputs["input_ids"] == tokenizer.mask_token_id)[1]
+mask_token_logits = token_logits[0, mask_token_index, :]
+# Pick the [MASK] candidates with the highest logits
+top_5_tokens = torch.topk(mask_token_logits, 5, dim=1).indices[0].tolist()
+
+for token in top_5_tokens:
+ print(f"'>>> {text.replace(tokenizer.mask_token, tokenizer.decode([token]))}'")
+```
+
+{:else}
+
+```python
+import numpy as np
+import tensorflow as tf
+
+inputs = tokenizer(text, return_tensors="np")
+token_logits = model(**inputs).logits
+# Find the location of [MASK] and extract its logits
+mask_token_index = np.argwhere(inputs["input_ids"] == tokenizer.mask_token_id)[0, 1]
+mask_token_logits = token_logits[0, mask_token_index, :]
+# Pick the [MASK] candidates with the highest logits
+# We negate the array before argsort to get the largest, not the smallest, logits
+top_5_tokens = np.argsort(-mask_token_logits)[:5].tolist()
+
+for token in top_5_tokens:
+ print(f">>> {text.replace(tokenizer.mask_token, tokenizer.decode([token]))}")
+```
+
+{/if}
+
+```python out
+'>>> This is a great deal.'
+'>>> This is a great success.'
+'>>> This is a great adventure.'
+'>>> This is a great idea.'
+'>>> This is a great feat.'
+```
+
+我們可以從輸出中看到模型的預測是指日常用語, 鑑於英語維基百科的基礎, 這也許並不奇怪。讓我們看看我們如何將這個領域改變為更小眾的東西 -- 高度兩極分化的電影評論!
+
+
+## 數據集
+
+為了展示域適配, 我們將使用著名的[大型電影評論數據集(Large Movie Review Dataset)](https://huggingface.co/datasets/imdb) (或者簡稱為IMDb), 這是一個電影評論語料庫, 通常用於對情感分析模型進行基準測試。通過在這個語料庫上對 DistilBERT 進行微調, 我們預計語言模型將根據維基百科的事實數據調整其詞彙表, 這些數據已經預先訓練到電影評論中更主觀的元素。我們可以使用🤗 Datasets中的`load_dataset()`函數從Hugging Face 中獲取數據:
+
+```python
+from datasets import load_dataset
+
+imdb_dataset = load_dataset("imdb")
+imdb_dataset
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['text', 'label'],
+ num_rows: 25000
+ })
+ test: Dataset({
+ features: ['text', 'label'],
+ num_rows: 25000
+ })
+ unsupervised: Dataset({
+ features: ['text', 'label'],
+ num_rows: 50000
+ })
+})
+```
+
+我們可以看到 `train` 和 `test` 每個拆分包含 25,000 條評論, 而有一個未標記的拆分稱為 `unsupervised` 包含 50,000 條評論。讓我們看一些示例, 以瞭解我們正在處理的文本類型。正如我們在本課程的前幾章中所做的那樣, 我們將鏈接 `Dataset.shuffle()` 和 `Dataset.select()` 函數創建隨機樣本:
+
+```python
+sample = imdb_dataset["train"].shuffle(seed=42).select(range(3))
+
+for row in sample:
+ print(f"\n'>>> Review: {row['text']}'")
+ print(f"'>>> Label: {row['label']}'")
+```
+
+```python out
+
+'>>> Review: This is your typical Priyadarshan movie--a bunch of loony characters out on some silly mission. His signature climax has the entire cast of the film coming together and fighting each other in some crazy moshpit over hidden money. Whether it is a winning lottery ticket in Malamaal Weekly, black money in Hera Pheri, "kodokoo" in Phir Hera Pheri, etc., etc., the director is becoming ridiculously predictable. Don\'t get me wrong; as clichéd and preposterous his movies may be, I usually end up enjoying the comedy. However, in most his previous movies there has actually been some good humor, (Hungama and Hera Pheri being noteworthy ones). Now, the hilarity of his films is fading as he is using the same formula over and over again.
Songs are good. Tanushree Datta looks awesome. Rajpal Yadav is irritating, and Tusshar is not a whole lot better. Kunal Khemu is OK, and Sharman Joshi is the best.'
+'>>> Label: 0'
+
+'>>> Review: Okay, the story makes no sense, the characters lack any dimensionally, the best dialogue is ad-libs about the low quality of movie, the cinematography is dismal, and only editing saves a bit of the muddle, but Sam" Peckinpah directed the film. Somehow, his direction is not enough. For those who appreciate Peckinpah and his great work, this movie is a disappointment. Even a great cast cannot redeem the time the viewer wastes with this minimal effort.
The proper response to the movie is the contempt that the director San Peckinpah, James Caan, Robert Duvall, Burt Young, Bo Hopkins, Arthur Hill, and even Gig Young bring to their work. Watch the great Peckinpah films. Skip this mess.'
+'>>> Label: 0'
+
+'>>> Review: I saw this movie at the theaters when I was about 6 or 7 years old. I loved it then, and have recently come to own a VHS version.
My 4 and 6 year old children love this movie and have been asking again and again to watch it.
I have enjoyed watching it again too. Though I have to admit it is not as good on a little TV.
I do not have older children so I do not know what they would think of it.
The songs are very cute. My daughter keeps singing them over and over.
Hope this helps.'
+'>>> Label: 1'
+```
+
+是的, 這些肯定是電影評論, 如果你年齡足夠,你甚至可能會理解上次評論中關於擁有 VHS 版本的評論😜! 雖然我們不需要語言建模的標籤, 但我們已經可以看到 `0` 表示負面評論, 而 `1` 對應正面。
+
+
+
+✏️ **試試看!** 創建 `無監督` 拆分的隨機樣本, 並驗證標籤既不是 `0` 也不是 `1`。在此過程中, 你還可以檢查 `train` 和 `test` 拆分中的標籤是否確實為 `0` 或 `1` -- 這是每個 NLP 從業者在新項目開始時都應該執行的有用的健全性檢查!
+
+
+
+現在我們已經快速瀏覽了數據, 讓我們深入研究為掩碼語言建模做準備。正如我們將看到的, 與我們在[第三章](/course/chapter3)中看到的序列分類任務相比, 還需要採取一些額外的步驟。讓我們繼續!
+
+## 預處理數據
+
+
+
+對於自迴歸和掩碼語言建模, 一個常見的預處理步驟是連接所有示例, 然後將整個語料庫拆分為相同大小的塊。 這與我們通常的方法完全不同, 我們只是簡單地標記單個示例。為什麼要將所有內容連接在一起? 原因是單個示例如果太長可能會被截斷, 這將導致丟失可能對語言建模任務有用的信息!
+
+因此, 我們將像往常一樣首先標記我們的語料庫, 但是 _沒有_ 在我們的標記器中設置 `truncation=True` 選項。 我們還將獲取可用的單詞 ID ((如果我們使用快速標記器, 它們是可用的, 如 [第六章](/course/chapter6/3)中所述), 因為我們稍後將需要它們來進行全字屏蔽。我們將把它包裝在一個簡單的函數中, 當我們在做的時候, 我們將刪除 `text` 和 `label` 列, 因為我們不再需要它們:
+
+```python
+def tokenize_function(examples):
+ result = tokenizer(examples["text"])
+ if tokenizer.is_fast:
+ result["word_ids"] = [result.word_ids(i) for i in range(len(result["input_ids"]))]
+ return result
+
+
+# Use batched=True to activate fast multithreading!
+tokenized_datasets = imdb_dataset.map(
+ tokenize_function, batched=True, remove_columns=["text", "label"]
+)
+tokenized_datasets
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['attention_mask', 'input_ids', 'word_ids'],
+ num_rows: 25000
+ })
+ test: Dataset({
+ features: ['attention_mask', 'input_ids', 'word_ids'],
+ num_rows: 25000
+ })
+ unsupervised: Dataset({
+ features: ['attention_mask', 'input_ids', 'word_ids'],
+ num_rows: 50000
+ })
+})
+```
+
+由於 DistilBERT 是一個類似 BERT 的模型, 我們可以看到編碼文本由我們在其他章節中看到的 `input_ids` 和 `attention_mask` 組成, 以及我們添加的 `word_ids`。
+
+現在我們已經標記了我們的電影評論, 下一步是將它們組合在一起並將結果分成塊。 但是這些塊應該有多大? 這最終將取決於你可用的 GPU 內存量, 但一個好的起點是查看模型的最大上下文大小是多少。這可以通過檢查標記器的 `model_max_length` 屬性來判斷:
+
+```python
+tokenizer.model_max_length
+```
+
+```python out
+512
+```
+
+該值來自於與檢查點相關聯的 *tokenizer_config.json* 文件; 在這種情況下, 我們可以看到上下文大小是 512 個標記, 就像 BERT 一樣。
+
+
+
+✏️ **試試看!** 一些 Transformer 模型, 例如 [BigBird](https://huggingface.co/google/bigbird-roberta-base) 和 [Longformer](hf.co/allenai/longformer-base-4096), 它們具有比BERT和其他早期Transformer模型更長的上下文長度。為這些檢查點之一實例化標記器, 並驗證 `model_max_length` 是否與模型卡上引用的內容一致。
+
+
+
+因此, 以便在像Google Colab 那樣的 GPU 上運行我們的實驗, 我們將選擇可以放入內存的更小一些的東西:
+
+```python
+chunk_size = 128
+```
+
+
+
+請注意, 在實際場景中使用較小的塊大小可能是有害的, 因此你應該使用與將應用模型的用例相對應的大小。
+
+
+
+有趣的來了。為了展示串聯是如何工作的, 讓我們從我們的標記化訓練集中取一些評論並打印出每個評論的標記數量:
+
+```python
+# Slicing produces a list of lists for each feature
+tokenized_samples = tokenized_datasets["train"][:3]
+
+for idx, sample in enumerate(tokenized_samples["input_ids"]):
+ print(f"'>>> Review {idx} length: {len(sample)}'")
+```
+
+```python out
+'>>> Review 0 length: 200'
+'>>> Review 1 length: 559'
+'>>> Review 2 length: 192'
+```
+
+然後我們可以用一個簡單的字典理解來連接所有例子, 如下所示:
+
+```python
+concatenated_examples = {
+ k: sum(tokenized_samples[k], []) for k in tokenized_samples.keys()
+}
+total_length = len(concatenated_examples["input_ids"])
+print(f"'>>> Concatenated reviews length: {total_length}'")
+```
+
+```python out
+'>>> Concatenated reviews length: 951'
+```
+
+很棒, 總長度檢查出來了 -- 現在, 讓我們將連接的評論拆分為大小為 `block_size` 的塊。為此, 我們迭代了 `concatenated_examples` 中的特徵, 並使用列表理解來創建每個特徵的切片。結果是每個特徵的塊字典:
+
+```python
+chunks = {
+ k: [t[i : i + chunk_size] for i in range(0, total_length, chunk_size)]
+ for k, t in concatenated_examples.items()
+}
+
+for chunk in chunks["input_ids"]:
+ print(f"'>>> Chunk length: {len(chunk)}'")
+```
+
+```python out
+'>>> Chunk length: 128'
+'>>> Chunk length: 128'
+'>>> Chunk length: 128'
+'>>> Chunk length: 128'
+'>>> Chunk length: 128'
+'>>> Chunk length: 128'
+'>>> Chunk length: 128'
+'>>> Chunk length: 55'
+```
+
+正如你在這個例子中看到的, 最後一個塊通常會小於最大塊大小。有兩種主要的策略來處理這個問題:
+
+* 如果最後一個塊小於 `chunk_size`, 請刪除它。
+* 填充最後一個塊, 直到其長度等於 `chunk_size`。
+
+我們將在這裡採用第一種方法, 因此讓我們將上述所有邏輯包裝在一個函數中, 我們可以將其應用於我們的標記化數據集:
+
+```python
+def group_texts(examples):
+ # Concatenate all texts
+ concatenated_examples = {k: sum(examples[k], []) for k in examples.keys()}
+ # Compute length of concatenated texts
+ total_length = len(concatenated_examples[list(examples.keys())[0]])
+ # We drop the last chunk if it's smaller than chunk_size
+ total_length = (total_length // chunk_size) * chunk_size
+ # Split by chunks of max_len
+ result = {
+ k: [t[i : i + chunk_size] for i in range(0, total_length, chunk_size)]
+ for k, t in concatenated_examples.items()
+ }
+ # Create a new labels column
+ result["labels"] = result["input_ids"].copy()
+ return result
+```
+
+注意, 在 `group_texts()` 的最後一步中, 我們創建了一個新的 `labels` 列, 它是 `input_ids` 列的副本。我們很快就會看到, 這是因為在掩碼語言建模中, 目標是預測輸入批次中隨機掩碼的標記, 並通過創建一個 `labels` 列, 們為我們的語言模型提供了基礎事實以供學習。
+
+現在, 讓我們使用我們可信賴的 `Dataset.map()` 函數將 `group_texts()` 應用到我們的標記化數據集:
+
+```python
+lm_datasets = tokenized_datasets.map(group_texts, batched=True)
+lm_datasets
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['attention_mask', 'input_ids', 'labels', 'word_ids'],
+ num_rows: 61289
+ })
+ test: Dataset({
+ features: ['attention_mask', 'input_ids', 'labels', 'word_ids'],
+ num_rows: 59905
+ })
+ unsupervised: Dataset({
+ features: ['attention_mask', 'input_ids', 'labels', 'word_ids'],
+ num_rows: 122963
+ })
+})
+```
+
+你可以看到, 對文本進行分組, 然後對文本進行分塊, 產生的示例比我們最初的 25,000 用於 `train`和 `test` 拆分的示例多得多。那是因為我們現在有了涉及 _連續標記_ 的示例, 這些示例跨越了原始語料庫中的多個示例。你可以通過在其中一個塊中查找特殊的 `[SEP]` 和 `[CLS]` 標記來明確的看到這一點:
+
+```python
+tokenizer.decode(lm_datasets["train"][1]["input_ids"])
+```
+
+```python out
+".... at.......... high. a classic line : inspector : i'm here to sack one of your teachers. student : welcome to bromwell high. i expect that many adults of my age think that bromwell high is far fetched. what a pity that it isn't! [SEP] [CLS] homelessness ( or houselessness as george carlin stated ) has been an issue for years but never a plan to help those on the street that were once considered human who did everything from going to school, work, or vote for the matter. most people think of the homeless"
+```
+
+在此示例中, 你可以看到兩篇重疊的電影評論, 一篇關於高中電影, 另一篇關於無家可歸。 讓我們也看看掩碼語言建模的標籤是什麼樣的:
+
+```python out
+tokenizer.decode(lm_datasets["train"][1]["labels"])
+```
+
+```python out
+".... at.......... high. a classic line : inspector : i'm here to sack one of your teachers. student : welcome to bromwell high. i expect that many adults of my age think that bromwell high is far fetched. what a pity that it isn't! [SEP] [CLS] homelessness ( or houselessness as george carlin stated ) has been an issue for years but never a plan to help those on the street that were once considered human who did everything from going to school, work, or vote for the matter. most people think of the homeless"
+```
+
+正如前面的 `group_texts()` 函數所期望的那樣, 這看起來與解碼後的 `input_ids` 相同 -- 但是我們的模型怎麼可能學到任何東西呢? 我們錯過了一個關鍵步驟: 在輸入中的隨機位置插入 `[MASK]` 標記! 讓我們看看如何使用特殊的數據整理器在微調期間即時執行此操作。
+
+## 使用 `Trainer` API 微調DistilBERT
+
+微調屏蔽語言模型幾乎與微調序列分類模型相同, 就像我們在 [第三章](/course/chapter3)所作的那樣。 唯一的區別是我們需要一個特殊的數據整理器, 它可以隨機屏蔽每批文本中的一些標記。幸運的是, 🤗 Transformers 為這項任務準備了專用的 `DataCollatorForLanguageModeling` 。我們只需要將它轉遞給標記器和一個 `mlm_probability` 參數, 該參數指定要屏蔽的標記的分數。我們將選擇 15%, 這是 BERT 使用的數量也是文獻中的常見選擇:
+
+```python
+from transformers import DataCollatorForLanguageModeling
+
+data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm_probability=0.15)
+```
+
+要了解隨機掩碼的工作原理, 讓我們向數據整理器提供一些示例。由於它需要一個 `dict` 的列表, 其中每個 `dict` 表示單個連續文本塊, 我們首先迭代數據集, 然後再將批次提供給整理器。我們刪除了這個數據整理器的 `"word_ids"` 鍵, 因為它不需要它:
+
+```python
+samples = [lm_datasets["train"][i] for i in range(2)]
+for sample in samples:
+ _ = sample.pop("word_ids")
+
+for chunk in data_collator(samples)["input_ids"]:
+ print(f"\n'>>> {tokenizer.decode(chunk)}'")
+```
+
+```python output
+'>>> [CLS] bromwell [MASK] is a cartoon comedy. it ran at the same [MASK] as some other [MASK] about school life, [MASK] as " teachers ". [MASK] [MASK] [MASK] in the teaching [MASK] lead [MASK] to believe that bromwell high\'[MASK] satire is much closer to reality than is " teachers ". the scramble [MASK] [MASK] financially, the [MASK]ful students whogn [MASK] right through [MASK] pathetic teachers\'pomp, the pettiness of the whole situation, distinction remind me of the schools i knew and their students. when i saw [MASK] episode in [MASK] a student repeatedly tried to burn down the school, [MASK] immediately recalled. [MASK]...'
+
+'>>> .... at.. [MASK]... [MASK]... high. a classic line plucked inspector : i\'[MASK] here to [MASK] one of your [MASK]. student : welcome to bromwell [MASK]. i expect that many adults of my age think that [MASK]mwell [MASK] is [MASK] fetched. what a pity that it isn\'t! [SEP] [CLS] [MASK]ness ( or [MASK]lessness as george 宇in stated )公 been an issue for years but never [MASK] plan to help those on the street that were once considered human [MASK] did everything from going to school, [MASK], [MASK] vote for the matter. most people think [MASK] the homeless'
+```
+
+很棒, 成功了! 我們可以看到, `[MASK]` 標記已隨機插入我們文本中的不同位置。 這些將是我們的模型在訓練期間必須預測的標記 -- 數據整理器的美妙之處在於, 它將隨機化每個批次的 `[MASK]` 插入!
+
+
+
+✏️ **試試看!** 多次運行上面的代碼片段, 看看隨機屏蔽發生在你眼前! 還要將 `tokenizer.decode()` 方法替換為 `tokenizer.convert_ids_to_tokens()` 以查看有時會屏蔽給定單詞中的單個標記, 而不是其他標記。
+
+
+
+{#if fw === 'pt'}
+
+隨機掩碼的一個副作用是, 當使用 `Trainer` 時, 我們的評估指標將不是確定性的, 因為我們對訓練集和測試集使用相同的數據整理器。稍後我們會看到, 當我們使用 🤗 Accelerate 進行微調時, 我們將如何利用自定義評估循環的靈活性來凍結隨機性。
+
+{/if}
+
+在為掩碼語言建模訓練模型時, 可以使用的一種技術是將整個單詞一起屏蔽, 而不僅僅是單個標記。這種方法稱為 _全詞屏蔽_。 如果我們想使用全詞屏蔽, 我們需要自己構建一個數據整理器。數據整理器只是一個函數, 它接受一個樣本列表並將它們轉換為一個批次, 所以現在讓我們這樣做吧! 我們將使用之前計算的單詞 ID 在單詞索引和相應標記之間進行映射, 然後隨機決定要屏蔽哪些單詞並將該屏蔽應用於輸入。請注意, 除了與掩碼對應的標籤外, 所有的標籤均為 `-100`。
+
+{#if fw === 'pt'}
+
+```py
+import collections
+import numpy as np
+
+from transformers import default_data_collator
+
+wwm_probability = 0.2
+
+
+def whole_word_masking_data_collator(features):
+ for feature in features:
+ word_ids = feature.pop("word_ids")
+
+ # Create a map between words and corresponding token indices
+ mapping = collections.defaultdict(list)
+ current_word_index = -1
+ current_word = None
+ for idx, word_id in enumerate(word_ids):
+ if word_id is not None:
+ if word_id != current_word:
+ current_word = word_id
+ current_word_index += 1
+ mapping[current_word_index].append(idx)
+
+ # Randomly mask words
+ mask = np.random.binomial(1, wwm_probability, (len(mapping),))
+ input_ids = feature["input_ids"]
+ labels = feature["labels"]
+ new_labels = [-100] * len(labels)
+ for word_id in np.where(mask)[0]:
+ word_id = word_id.item()
+ for idx in mapping[word_id]:
+ new_labels[idx] = labels[idx]
+ input_ids[idx] = tokenizer.mask_token_id
+ feature["labels"] = new_labels
+
+ return default_data_collator(features)
+```
+
+{:else}
+
+```py
+import collections
+import numpy as np
+
+from transformers.data import tf_default_data_collator
+
+wwm_probability = 0.2
+
+
+def whole_word_masking_data_collator(features):
+ for feature in features:
+ word_ids = feature.pop("word_ids")
+
+ # Create a map between words and corresponding token indices
+ mapping = collections.defaultdict(list)
+ current_word_index = -1
+ current_word = None
+ for idx, word_id in enumerate(word_ids):
+ if word_id is not None:
+ if word_id != current_word:
+ current_word = word_id
+ current_word_index += 1
+ mapping[current_word_index].append(idx)
+
+ # Randomly mask words
+ mask = np.random.binomial(1, wwm_probability, (len(mapping),))
+ input_ids = feature["input_ids"]
+ labels = feature["labels"]
+ new_labels = [-100] * len(labels)
+ for word_id in np.where(mask)[0]:
+ word_id = word_id.item()
+ for idx in mapping[word_id]:
+ new_labels[idx] = labels[idx]
+ input_ids[idx] = tokenizer.mask_token_id
+ feature["labels"] = new_labels
+
+ return tf_default_data_collator(features)
+```
+
+{/if}
+
+Next, we can try it on the same samples as before:
+
+```py
+samples = [lm_datasets["train"][i] for i in range(2)]
+batch = whole_word_masking_data_collator(samples)
+
+for chunk in batch["input_ids"]:
+ print(f"\n'>>> {tokenizer.decode(chunk)}'")
+```
+
+```python out
+'>>> [CLS] bromwell high is a cartoon comedy [MASK] it ran at the same time as some other programs about school life, such as " teachers ". my 35 years in the teaching profession lead me to believe that bromwell high\'s satire is much closer to reality than is " teachers ". the scramble to survive financially, the insightful students who can see right through their pathetic teachers\'pomp, the pettiness of the whole situation, all remind me of the schools i knew and their students. when i saw the episode in which a student repeatedly tried to burn down the school, i immediately recalled.....'
+
+'>>> .... [MASK] [MASK] [MASK] [MASK]....... high. a classic line : inspector : i\'m here to sack one of your teachers. student : welcome to bromwell high. i expect that many adults of my age think that bromwell high is far fetched. what a pity that it isn\'t! [SEP] [CLS] homelessness ( or houselessness as george carlin stated ) has been an issue for years but never a plan to help those on the street that were once considered human who did everything from going to school, work, or vote for the matter. most people think of the homeless'
+```
+
+
+
+✏️ **試試看!** 多次運行上面的代碼片段, 看看隨機屏蔽發生在你眼前! 還要將 `tokenizer.decode()` 方法替換為 `tokenizer.convert_ids_to_tokens()` 以查看來自給定單詞的標記始終被屏蔽在一起。
+
+
+
+現在我們有兩個數據整理器, 其餘的微調步驟是標準的。如果您沒有足夠幸運地獲得神話般的 P100 GPU 😭, 在 Google Colab 上進行訓練可能需要一段時間, 因此我們將首先將訓練集的大小縮減為幾千個示例。別擔心, 我們仍然會得到一個相當不錯的語言模型! 在 🤗 Datasets 中快速下采樣數據集的方法是通過我們在 [第五章](/course/chapter5) 中看到的 `Dataset.train_test_split()` 函數:
+
+```python
+train_size = 10_000
+test_size = int(0.1 * train_size)
+
+downsampled_dataset = lm_datasets["train"].train_test_split(
+ train_size=train_size, test_size=test_size, seed=42
+)
+downsampled_dataset
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['attention_mask', 'input_ids', 'labels', 'word_ids'],
+ num_rows: 10000
+ })
+ test: Dataset({
+ features: ['attention_mask', 'input_ids', 'labels', 'word_ids'],
+ num_rows: 1000
+ })
+})
+```
+
+這會自動創建新的 `train` 和 `test` 拆分, 訓練集大小設置為 10,000 個示例, 驗證設置為其中的 10% -- 如果你有一個強大的 GPU, 可以隨意增加它! 我們需要做的下一件事是登錄 Hugging Face Hub。如果你在筆記本中運行此代碼, 則可以使用以下實用程序函數執行此操作:
+
+```python
+from huggingface_hub import notebook_login
+
+notebook_login()
+```
+
+這將顯示一個小部件, 你可以在其中輸入你的憑據。或者, 你可以運行:
+
+```
+huggingface-cli login
+```
+
+在你最喜歡的終端中登錄。
+
+{#if fw === 'tf'}
+
+登陸後, 我們就可以創建我們的 `tf.data` 數據集。我們將在這裡只使用標準數據整理器, 但你也可以嘗試使用整個單詞掩碼整理器並將結果作為練習進行比較:
+
+```python
+tf_train_dataset = downsampled_dataset["train"].to_tf_dataset(
+ columns=["input_ids", "attention_mask", "labels"],
+ collate_fn=data_collator,
+ shuffle=True,
+ batch_size=32,
+)
+
+tf_eval_dataset = downsampled_dataset["test"].to_tf_dataset(
+ columns=["input_ids", "attention_mask", "labels"],
+ collate_fn=data_collator,
+ shuffle=False,
+ batch_size=32,
+)
+```
+
+接下來, 我們設置訓練超參數並編譯模型。我們使用 🤗 Transformers 庫中的 `create_optimizer()` 函數, 它提供了一個具有線性學習率衰減的 `AdamW` 優化器。我們還使用了模型內置的損失, 當沒有損失被指定為 `compile()` 參數是, 這是默認值, 並且我們將訓練精度設置為 `"mixed_float16"`。請注意,如果你使用的是Colab GPU或其他不支持float16加速的GPU, 你可能應該註釋掉這一行。
+
+此外, 我們還設置了一個 `PushToHubCallback`, 它將在每個epoch後將模型保存到Hub。你可以使用 `hub_model_id` 參數指定你想要推送到的存儲庫的名稱 (特別是你將必須使用該參數來推送到組織)。例如, 為了將模型推送到 [`huggingface-course` organization](https://huggingface.co/huggingface-course), 我們添加了 `hub_model_id="huggingface-course/distilbert-finetuned-imdb"`。默認情況下, 使用的存儲庫將位於你的命名空間中, 並以你設置的輸出目錄命名, 因此在我們的示例中, 它將是 `"lewtun/distilbert-finetuned-imdb"`。
+
+```python
+from transformers import create_optimizer
+from transformers.keras_callbacks import PushToHubCallback
+import tensorflow as tf
+
+num_train_steps = len(tf_train_dataset)
+optimizer, schedule = create_optimizer(
+ init_lr=2e-5,
+ num_warmup_steps=1_000,
+ num_train_steps=num_train_steps,
+ weight_decay_rate=0.01,
+)
+model.compile(optimizer=optimizer)
+
+# Train in mixed-precision float16
+tf.keras.mixed_precision.set_global_policy("mixed_float16")
+
+callback = PushToHubCallback(
+ output_dir=f"{model_name}-finetuned-imdb", tokenizer=tokenizer
+)
+```
+
+我們現在已經準備好運行 `model.fit()` 了 -- 但在此之前, 讓我們先簡單地看看 _perplexity_, 它是評估語言模型性能的常用指標。
+
+{:else}
+
+登陸後, 我們可以指定 `Trainer` 參數:
+
+```python
+from transformers import TrainingArguments
+
+batch_size = 64
+# Show the training loss with every epoch
+logging_steps = len(downsampled_dataset["train"]) // batch_size
+model_name = model_checkpoint.split("/")[-1]
+
+training_args = TrainingArguments(
+ output_dir=f"{model_name}-finetuned-imdb",
+ overwrite_output_dir=True,
+ evaluation_strategy="epoch",
+ learning_rate=2e-5,
+ weight_decay=0.01,
+ per_device_train_batch_size=batch_size,
+ per_device_eval_batch_size=batch_size,
+ push_to_hub=True,
+ fp16=True,
+ logging_steps=logging_steps,
+)
+```
+
+在這裡, 我們調整了一些默認選項, 包括 `logging_steps` , 以確保我們跟蹤每個epoch的訓練損失。我們還使用了 `fp16=True` 來實現混合精度訓練, 這給我們帶來了另一個速度提升。默認情況下, `Trainer` 將刪除不屬於模型的 `forward()` 方法的列。這意味著, 如果你使用整個單詞屏蔽排序器, 你還需要設置 `remove_unused_columns=False`, 以確保我們不會在訓練期間丟失 `word_ids` 列。
+
+請注意, 你可以使用 `hub_model_id` 參數指定要推送到的存儲庫的名稱((特別是你將必須使用該參數向組織推送)。例如, 當我們將模型推送到 [`huggingface-course` organization](https://huggingface.co/huggingface-course) 時, 我們添加了 `hub_model_id="huggingface-course/distilbert-finetuned-imdb"` 到 `TrainingArguments` 中。默認情況下, 使用的存儲庫將在你的命名空間中並以你設置的輸出目錄命名, 因此在我們的示例中, 它將是 `"lewtun/distilbert-finetuned-imdb"`。
+
+我們現在擁有實例化 `Trainer` 的所有成分。這裡我們只使用標準的 `data_collator`, 但你可以嘗試使用整個單詞掩碼整理器並比較結果作為練習:
+
+```python
+from transformers import Trainer
+
+trainer = Trainer(
+ model=model,
+ args=training_args,
+ train_dataset=downsampled_dataset["train"],
+ eval_dataset=downsampled_dataset["test"],
+ data_collator=data_collator,
+ tokenizer=tokenizer,
+)
+```
+
+我們現在準備運行 `trainer.train()` -- 但在此之前讓我們簡要地看一下 _perplexity_, 這是評估語言模型性能的常用指標。
+
+{/if}
+
+### 語言模型的perplexity
+
+
+
+與文本分類或問答等其他任務不同, 在這些任務中, 我們會得到一個帶標籤的語料庫進行訓練, 而語言建模則沒有任何明確的標籤。那麼我們如何確定什麼是好的語言模型呢? 就像手機中的自動更正功能一樣, 一個好的語言模型是為語法正確的句子分配高概率, 為無意義的句子分配低概率。為了讓你更好地瞭解這是什麼樣子, 您可以在網上找到一整套 "autocorrect fails", 其中一個人手機中的模型產生了一些相當有趣 (而且通常不合適) 的結果!
+
+{#if fw === 'pt'}
+
+假設我們的測試集主要由語法正確的句子組成, 那麼衡量我們的語言模型質量的一種方法是計算它分配給測試集中所有句子中的下一個單詞的概率。高概率表明模型對看不見的例子並不感到 "驚訝" 或 "疑惑", 並表明它已經學習了語言中的基本語法模式。 perplexity度有多種數學定義, 但我們將使用的定義是交叉熵損失的指數。因此, 我們可以通過 `Trainer.evaluate()` 函數計算測試集上的交叉熵損失, 然後取結果的指數來計算預訓練模型的perplexity度:
+
+```python
+import math
+
+eval_results = trainer.evaluate()
+print(f">>> Perplexity: {math.exp(eval_results['eval_loss']):.2f}")
+```
+
+{:else}
+
+假設我們的測試集主要由語法正確的句子組成, 那麼衡量我們的語言模型質量的一種方法是計算測試集所有句子中它分配給下一個單詞的概率。高概率表明, 該模型表明該模型對未見過的示例不感到 "驚訝" 或 "困惑", 並表明它已經學會了該語言的基本語法模式。關於perplexity度有各種不同的數學定義, 但我們要用的定義是交叉熵損失的指數。因此, 我們可以通過 `model.evaluate()` 方法計算測試集上的交叉熵損失, 然後取結果的指數來計算我們預訓練模型的perplexity度:
+
+```python
+import math
+
+eval_loss = model.evaluate(tf_eval_dataset)
+print(f"Perplexity: {math.exp(eval_loss):.2f}")
+```
+
+{/if}
+
+```python out
+>>> Perplexity: 21.75
+```
+
+較低的perplexity分數意味著更好的語言模型, 我們可以在這裡看到我們的起始模型有一個較大的值。看看我們能不能通過微調來降低它! 為此, 我們首先運行訓練循環:
+
+{#if fw === 'pt'}
+
+```python
+trainer.train()
+```
+
+{:else}
+
+```python
+model.fit(tf_train_dataset, validation_data=tf_eval_dataset, callbacks=[callback])
+```
+
+{/if}
+
+然後像以前一樣計算測試集上的perplexity度:
+
+{#if fw === 'pt'}
+
+```python
+eval_results = trainer.evaluate()
+print(f">>> Perplexity: {math.exp(eval_results['eval_loss']):.2f}")
+```
+
+{:else}
+
+```python
+eval_loss = model.evaluate(tf_eval_dataset)
+print(f"Perplexity: {math.exp(eval_loss):.2f}")
+```
+
+{/if}
+
+```python out
+>>> Perplexity: 11.32
+```
+
+很好 -- 這大大減少了困惑, 這告訴我們模型已經瞭解了一些關於電影評論領域的知識!
+
+{#if fw === 'pt'}
+
+訓練完成後, 我們可以將帶有訓練信息的模型卡推送到 Hub (檢查點在訓練過程中自行保存):
+
+```python
+trainer.push_to_hub()
+```
+
+{/if}
+
+
+
+✏️ **輪到你了!** 將數據整理器改為全字屏蔽整理器後運行上面的訓練。你有得到更好的結果嗎?
+
+
+
+{#if fw === 'pt'}
+
+在我們的用例中, 我們不需要對訓練循環做任何特別的事情, 但在某些情況下, 你可能需要實現一些自定義邏輯。對於這些應用, 你可以使用 🤗 Accelerate -- 讓我們來看看吧!
+
+## 使用 🤗 Accelerate 微調 DistilBERT
+
+正如我們在 `Trainer` 中看到的, 對掩碼語言模型的微調與 [第三章](/course/chapter3) 中的文本分類示例非常相似。事實上, 唯一的微妙之處是使用特殊的數據整理器, 我們已經在本節的前面介紹過了!
+
+然而, 我們看到 `DataCollatorForLanguageModeling` 還對每次評估應用隨機掩碼, 因此每次訓練運行時, 我們都會看到perplexity度分數的一些波動。消除這種隨機性來源的一種方法是應用掩碼 _一次_ 在整個測試集上, 然後使用🤗 Transformers 中的默認數據整理器在評估期間收集批次。為了看看它是如何工作的, 讓我們實現一個簡單的函數, 將掩碼應用於批處理, 類似於我們第一次遇到的 `DataCollatorForLanguageModeling`:
+
+```python
+def insert_random_mask(batch):
+ features = [dict(zip(batch, t)) for t in zip(*batch.values())]
+ masked_inputs = data_collator(features)
+ # Create a new "masked" column for each column in the dataset
+ return {"masked_" + k: v.numpy() for k, v in masked_inputs.items()}
+```
+
+接下來, 我們將此函數應用於我們的測試集並刪除未掩碼的列, 以便我們可以用掩碼的列替換它們。你可以通過用適當的替換上面的 `data_collator` 來使整個單詞掩碼, 在這種情況下, 你應該刪除此處的第一行:
+
+```py
+downsampled_dataset = downsampled_dataset.remove_columns(["word_ids"])
+eval_dataset = downsampled_dataset["test"].map(
+ insert_random_mask,
+ batched=True,
+ remove_columns=downsampled_dataset["test"].column_names,
+)
+eval_dataset = eval_dataset.rename_columns(
+ {
+ "masked_input_ids": "input_ids",
+ "masked_attention_mask": "attention_mask",
+ "masked_labels": "labels",
+ }
+)
+```
+
+然後我們可以像往常一樣設置數據加載器, 但我們將使用🤗 Transformers 中的 `default_data_collator` 作為評估集:
+
+```python
+from torch.utils.data import DataLoader
+from transformers import default_data_collator
+
+batch_size = 64
+train_dataloader = DataLoader(
+ downsampled_dataset["train"],
+ shuffle=True,
+ batch_size=batch_size,
+ collate_fn=data_collator,
+)
+eval_dataloader = DataLoader(
+ eval_dataset, batch_size=batch_size, collate_fn=default_data_collator
+)
+```
+
+從這裡開始, 我們遵循🤗 Accelerate 的標準步驟。第一個任務是加載預訓練模型的新版本:
+
+```
+model = AutoModelForMaskedLM.from_pretrained(model_checkpoint)
+```
+
+然後我們需要指定優化器; 我們將使用標準的 `AdamW`:
+
+```python
+from torch.optim import AdamW
+
+optimizer = AdamW(model.parameters(), lr=5e-5)
+```
+
+有了這些對象, 我們現在可以準備使用 `Accelerator` 加速器進行訓練的一切:
+
+```python
+from accelerate import Accelerator
+
+accelerator = Accelerator()
+model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare(
+ model, optimizer, train_dataloader, eval_dataloader
+)
+```
+
+現在我們的模型、優化器和數據加載器都配置好了, 我們可以指定學習率調度器如下:
+
+```python
+from transformers import get_scheduler
+
+num_train_epochs = 3
+num_update_steps_per_epoch = len(train_dataloader)
+num_training_steps = num_train_epochs * num_update_steps_per_epoch
+
+lr_scheduler = get_scheduler(
+ "linear",
+ optimizer=optimizer,
+ num_warmup_steps=0,
+ num_training_steps=num_training_steps,
+)
+```
+
+在訓練之前要做的最後一件事是: 在 Hugging Face Hub 上創建一個模型庫! 我們可以使用 🤗 Hub 庫來首先生成我們的 repo 的全名:
+
+```python
+from huggingface_hub import get_full_repo_name
+
+model_name = "distilbert-base-uncased-finetuned-imdb-accelerate"
+repo_name = get_full_repo_name(model_name)
+repo_name
+```
+
+```python out
+'lewtun/distilbert-base-uncased-finetuned-imdb-accelerate'
+```
+
+然後使用來自🤗 Hub 的 `Repository` 類:
+
+```python
+from huggingface_hub import Repository
+
+output_dir = model_name
+repo = Repository(output_dir, clone_from=repo_name)
+```
+
+完成後, 只需寫出完整的訓練和評估循環即可:
+
+```python
+from tqdm.auto import tqdm
+import torch
+import math
+
+progress_bar = tqdm(range(num_training_steps))
+
+for epoch in range(num_train_epochs):
+ # Training
+ model.train()
+ for batch in train_dataloader:
+ outputs = model(**batch)
+ loss = outputs.loss
+ accelerator.backward(loss)
+
+ optimizer.step()
+ lr_scheduler.step()
+ optimizer.zero_grad()
+ progress_bar.update(1)
+
+ # Evaluation
+ model.eval()
+ losses = []
+ for step, batch in enumerate(eval_dataloader):
+ with torch.no_grad():
+ outputs = model(**batch)
+
+ loss = outputs.loss
+ losses.append(accelerator.gather(loss.repeat(batch_size)))
+
+ losses = torch.cat(losses)
+ losses = losses[: len(eval_dataset)]
+ try:
+ perplexity = math.exp(torch.mean(losses))
+ except OverflowError:
+ perplexity = float("inf")
+
+ print(f">>> Epoch {epoch}: Perplexity: {perplexity}")
+
+ # Save and upload
+ accelerator.wait_for_everyone()
+ unwrapped_model = accelerator.unwrap_model(model)
+ unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)
+ if accelerator.is_main_process:
+ tokenizer.save_pretrained(output_dir)
+ repo.push_to_hub(
+ commit_message=f"Training in progress epoch {epoch}", blocking=False
+ )
+```
+
+```python out
+>>> Epoch 0: Perplexity: 11.397545307900472
+>>> Epoch 1: Perplexity: 10.904909330983092
+>>> Epoch 2: Perplexity: 10.729503505340409
+```
+
+很棒, 我們已經能夠評估每個 epoch 的perplexity度, 並確保多次訓練運行是可重複的!
+
+{/if}
+
+## 使用我們微調的模型
+
+你可以通過在Hub上使用其他小部件或在本地使用🤗 Transformers 的`管道`於微調模型進行交互。讓我們使用後者來下載我們的模型, 使用 `fill-mask` 管道:
+
+```python
+from transformers import pipeline
+
+mask_filler = pipeline(
+ "fill-mask", model="huggingface-course/distilbert-base-uncased-finetuned-imdb"
+)
+```
+
+然後, 我們可以向管道提供 "This is a great [MASK]" 示例文本, 並查看前 5 個預測是什麼:
+
+```python
+preds = mask_filler(text)
+
+for pred in preds:
+ print(f">>> {pred['sequence']}")
+```
+
+```python out
+'>>> this is a great movie.'
+'>>> this is a great film.'
+'>>> this is a great story.'
+'>>> this is a great movies.'
+'>>> this is a great character.'
+```
+
+好的 -- 我們的模型顯然已經調整了它的權重來預測與電影更密切相關的詞!
+
+
+
+這結束了我們訓練語言模型的第一個實驗。在 [第六節](/course/chapter7/section6)中你將學習如何從頭開始訓練像 GPT-2 這樣的自迴歸模型; 如果你想了解如何預訓練您自己的 Transformer 模型, 請前往那裡!
+
+
+
+✏️ **試試看!** 為了量化域適應的好處, 微調 IMDb 標籤上的分類器和預先訓練和微調的Distil BERT檢查點。如果你需要複習文本分類, 請查看 [第三章](/course/chapter3)。
+
+
diff --git a/chapters/zh-TW/chapter7/4.mdx b/chapters/zh-TW/chapter7/4.mdx
new file mode 100644
index 000000000..fe3c33cd6
--- /dev/null
+++ b/chapters/zh-TW/chapter7/4.mdx
@@ -0,0 +1,996 @@
+
+
+# 翻譯
+
+{#if fw === 'pt'}
+
+
+
+{:else}
+
+
+
+{/if}
+
+現在讓我們深入研究翻譯。這是另一個[sequence-to-sequence 任務](/course/chapter1/7),這意味著這是一個可以表述為從一個序列到另一個序列的問題。從這個意義上說,這個問題非常類似[文本摘要](/course/chapter7/6),並且您可以將我們將在此處學習到的一些內容遷移到其他的序列到序列問題,例如:
+
+- **風格遷移** : 創建一個模型將某種風格遷移到一段文本(例如,正式的風格遷移到休閒的風格或莎士比亞英語到現代英語)
+- **生成問題的回答** :創建一個模型,在給定上下文的情況下生成問題的答案
+
+
+
+如果您有足夠大的兩種(或更多)語言的文本語料庫,您可以從頭開始訓練一個新的翻譯模型,就像我們在[因果語言建模](/course/chapter7/6)部分中所做的那樣。然而,微調現有的翻譯模型會更快,無論是從像 mT5 或 mBART 這樣的多語言模型微調到特定的語言對,或者是專門用於從一種語言翻譯成另一種語言的模型。
+
+在本節中,我們將對[KDE4 數據集](https://huggingface.co/datasets/kde4)上的Marian模型進行微調,該模型經過了從英語到法語的翻譯預訓練(因為很多“ Hugging Face”的員工會說這兩種語言),它是[KDE應用程序](https://apps.kde.org/)本地化文件的數據集。我們將使用的模型已經在從[Opus 數據集](https://opus.nlpl.eu/)(實際上包含KDE4數據集)中提取的法語和英語文本的大型語料庫上進行了預先訓練。但是,即使我們使用的預訓練模型在其預訓練期間使用了這部分數據集,我們也會看到,經過微調後,我們可以得到一個更好的版本。
+
+完成後,我們將擁有一個模型,可以進行這樣的翻譯:
+
+
+
+
+
+
+
+
+
+與前面的部分一樣,您可以使用以下代碼找到我們將訓練並上傳到 Hub 的實際模型,並[在這裡](https://huggingface.co/huggingface-course/marian-finetuned-kde4-en-to-fr?text=This+plugin+allows+you+to+automatically+translate+web+pages+between+several+languages.)查看模型輸出的結果
+
+## 準備數據
+
+為了從頭開始微調或訓練翻譯模型,我們需要一個適合該任務的數據集。如前所述,我們將使用[KDE4 數據集](https://huggingface.co/datasets/kde4)在本節中,但您可以很容易地調整代碼以使用您自己的數據,只要您有要互譯的兩種語言的句子對。如果您需要複習如何將自定義數據加載到 **Dataset** 可以複習一下[第五章](/course/chapter5).
+
+### KDE4 數據集
+
+像往常一樣,我們使用 **load_dataset()** 函數:
+
+```py
+from datasets import load_dataset, load_metric
+
+raw_datasets = load_dataset("kde4", lang1="en", lang2="fr")
+```
+
+如果您想使用不同的語言對,您可以使用它們的代碼來指定它們。該數據集共有 92 種語言可用;您可以通過[數據集卡片](https://huggingface.co/datasets/kde4)展開其上的語言標籤來查看它們.
+
+
+
+我們來看看數據集:
+
+```py
+raw_datasets
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['id', 'translation'],
+ num_rows: 210173
+ })
+})
+```
+
+我們有 210,173 對句子,但在一次訓練過程中,我們需要創建自己的驗證集。正如我們在[第五章](/course/chapter5)學的的那樣, **Dataset** 有一個 **train_test_split()** 方法,可以幫我們拆分數據集。我們將設定固定的隨機數種子:
+
+```py
+split_datasets = raw_datasets["train"].train_test_split(train_size=0.9, seed=20)
+split_datasets
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['id', 'translation'],
+ num_rows: 189155
+ })
+ test: Dataset({
+ features: ['id', 'translation'],
+ num_rows: 21018
+ })
+})
+```
+
+我們可以將 **test** 的鍵重命名為 **validation** 像這樣:
+
+```py
+split_datasets["validation"] = split_datasets.pop("test")
+```
+
+現在讓我們看一下數據集的一個元素:
+
+```py
+split_datasets["train"][1]["translation"]
+```
+
+```python out
+{'en': 'Default to expanded threads',
+ 'fr': 'Par défaut, développer les fils de discussion'}
+```
+
+我們得到一個字典,其中包含我們請求的兩種語言的兩個句子。這個充滿技術計算機科學術語的數據集的一個特殊之處在於它們都完全用法語翻譯。然而,法國工程師通常很懶惰,在交談時,大多數計算機科學專用詞彙都用英語表述。例如,“threads”這個詞很可能出現在法語句子中,尤其是在技術對話中;但在這個數據集中,它被翻譯成更正確的“fils de Discussion”。我們使用的預訓練模型已經在一個更大的法語和英語句子語料庫上進行了預訓練,採用了更簡單的選擇,即保留單詞的原樣:
+
+```py
+from transformers import pipeline
+
+model_checkpoint = "Helsinki-NLP/opus-mt-en-fr"
+translator = pipeline("translation", model=model_checkpoint)
+translator("Default to expanded threads")
+```
+
+```python out
+[{'translation_text': 'Par défaut pour les threads élargis'}]
+```
+
+這種情況的另一個例子是“plugin”這個詞,它不是正式的法語詞,但大多數母語人士都能理解,也不會費心去翻譯。
+在 KDE4 數據集中,這個詞在法語中被翻譯成更正式的“module d’extension”:
+```py
+split_datasets["train"][172]["translation"]
+```
+
+```python out
+{'en': 'Unable to import %1 using the OFX importer plugin. This file is not the correct format.',
+ 'fr': "Impossible d'importer %1 en utilisant le module d'extension d'importation OFX. Ce fichier n'a pas un format correct."}
+```
+
+然而,我們的預訓練模型堅持使用簡練而熟悉的英文單詞:
+
+```py
+translator(
+ "Unable to import %1 using the OFX importer plugin. This file is not the correct format."
+)
+```
+
+```python out
+[{'translation_text': "Impossible d'importer %1 en utilisant le plugin d'importateur OFX. Ce fichier n'est pas le bon format."}]
+```
+
+看看我們的微調模型是否能識別數據集的這些特殊性。(劇透警告:它會)。
+
+
+
+
+
+✏️ **輪到你了!** 另一個在法語中經常使用的英語單詞是“email”。在訓練數據集中找到使用這個詞的第一個樣本。它是如何翻譯的?預訓練模型如何翻譯同一個英文句子?
+
+
+
+### 處理數據
+
+
+
+您現在應該知道我們的下一步該做些什麼了:所有文本都需要轉換為token ID,以便模型能夠理解它們。對於這個任務,我們需要同時標記輸入和目標。我們的首要任務是創建我們的 **tokenizer** 對象。如前所述,我們將使用 Marian 英語到法語的預訓練模型。如果您使用另一對語言嘗試此代碼,請確保調整模型Checkpoint。[Helsinki-NLP](https://huggingface.co/Helsinki-NLP)組織提供了多種語言的一千多種模型。
+
+```python
+from transformers import AutoTokenizer
+
+model_checkpoint = "Helsinki-NLP/opus-mt-en-fr"
+tokenizer = AutoTokenizer.from_pretrained(model_checkpoint, return_tensors="tf")
+```
+
+您可以將 **model_checkpoint** 更換為[Hub](https://huggingface.co/models)上你喜歡的任何其他型號,或本地保存的預訓練模型和標記器。
+
+
+
+💡 如果正在使用mart、mBART-50或M2 M100等多語言標記器,則需要在tokenizer中設置tokenizer.src_lang和tokenizer.tgt_lang為正確的輸入和目標的語言代碼。
+
+
+
+我們的數據準備非常簡單。 只需要記住一件事:您照常處理輸入,但對於這次的輸出目標,您需要將標記器包裝在上下文管理器“as_target_tokenizer()”中。
+
+Python 中的上下文管理器引入了 **with** 語句,當您有兩個相關的操作要成對執行時很有用。最常見的例子是當您寫入或讀取文件時,下面是一個例子:
+
+```
+with open(file_path) as f:
+ content = f.read()
+```
+
+這裡成對執行的兩個相關操作是打開和關閉文件的操作。打開的文件f對應的對象只在with下的縮進塊內有效;在該塊之前打開,在該塊的末尾關閉。
+
+在本例中,上下文管理器 as_target_tokenizer() 將在執行縮進塊之前將標記器設置為輸出語言(此處為法語),然後將其設置回輸入語言(此處為英語)。
+
+因此,預處理一個樣本如下所示:
+
+```python
+en_sentence = split_datasets["train"][1]["translation"]["en"]
+fr_sentence = split_datasets["train"][1]["translation"]["fr"]
+
+inputs = tokenizer(en_sentence)
+with tokenizer.as_target_tokenizer():
+ targets = tokenizer(fr_sentence)
+```
+
+如果我們忘記在上下文管理器中標記目標,它們將被輸入標記器標記,在Marian模型的情況下,會導致輸出的異常:
+
+```python
+wrong_targets = tokenizer(fr_sentence)
+print(tokenizer.convert_ids_to_tokens(wrong_targets["input_ids"]))
+print(tokenizer.convert_ids_to_tokens(targets["input_ids"]))
+```
+
+```python out
+['▁Par', '▁dé', 'f', 'aut', ',', '▁dé', 've', 'lop', 'per', '▁les', '▁fil', 's', '▁de', '▁discussion', '']
+['▁Par', '▁défaut', ',', '▁développer', '▁les', '▁fils', '▁de', '▁discussion', '']
+```
+
+正如我們所看到的,使用英語標記器來預處理法語句子會產生更多的標記,因為標記器不知道任何法語單詞(除了那些也出現在英語語言中的單詞,比如“discussion”)。
+
+`inputs` 和 `targets` 都是帶有我們常用鍵(輸入 ID、注意掩碼等)的字典,所以最後一步是在輸入中設置一個 `"labels"` 鍵。 我們在數據集的預處理函數中執行此操作:
+
+```python
+max_input_length = 128
+max_target_length = 128
+
+
+def preprocess_function(examples):
+ inputs = [ex["en"] for ex in examples["translation"]]
+ targets = [ex["fr"] for ex in examples["translation"]]
+ model_inputs = tokenizer(inputs, max_length=max_input_length, truncation=True)
+
+ # Set up the tokenizer for targets
+ with tokenizer.as_target_tokenizer():
+ labels = tokenizer(targets, max_length=max_target_length, truncation=True)
+
+ model_inputs["labels"] = labels["input_ids"]
+ return model_inputs
+```
+
+請注意,我們為輸入和輸出設置了相同的最大長度。由於我們處理的文本看起來很短,我們使用 128。
+
+
+
+💡如果你使用的是T5模型(更具體地說,是T5 -xxx檢查點之一),模型將需要文本輸入有一個前綴來表示正在進行的任務,例如從英語到法語的翻譯
+
+
+
+
+
+⚠️ 我們不關注目標的注意力掩碼,因為模型不會需要它。相反,對應於填充標記的標籤應設置為-100,以便在loss計算中忽略它們。這將在稍後由我們的數據整理器完成,因為我們正在應用動態填充,但是如果您在此處使用填充,您應該調整預處理函數以將與填充標記對應的所有標籤設置為 -100。
+
+
+
+我們現在可以對數據集的所有數據一次性應用該預處理:
+
+```py
+tokenized_datasets = split_datasets.map(
+ preprocess_function,
+ batched=True,
+ remove_columns=split_datasets["train"].column_names,
+)
+```
+
+現在數據已經過預處理,我們準備好微調我們的預訓練模型!
+
+{#if fw === 'pt'}
+
+## 使用 Trainer API 微調模型
+
+使用 `Trainer` 的實際代碼將與以前相同,只是稍作改動:我們在這裡使用 [`Seq2SeqTrainer`](https://huggingface.co/transformers/main_classes/trainer.html#seq2seqtrainer), 它是 `Trainer` 的子類,它可以正確處理這種序列到序列的評估,並使用 `generate()` 方法來預測輸入的輸出。 當我們討論評估指標時,我們將更詳細地探討這一點。
+
+首先,我們需要一個實際的模型來進行微調。 我們將使用通常的 `AutoModel` API:
+
+```py
+from transformers import AutoModelForSeq2SeqLM
+
+model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)
+```
+
+{:else}
+
+## 使用 Keras 微調模型
+
+首先,我們需要一個實際的模型來進行微調。 我們將使用通常的 `AutoModel` API:
+
+```py
+from transformers import TFAutoModelForSeq2SeqLM
+
+model = TFAutoModelForSeq2SeqLM.from_pretrained(model_checkpoint, from_pt=True)
+```
+
+
+
+💡 `Helsinki-NLP/opus-mt-en-fr` checkpoint只有 PyTorch 的權重,所以在使用`from_pretrained()`方法加載模型時不會使用 `from_pt=True` 參數。 當您指定`from_pt=True`,庫會自動下載並轉換PyTorch 為您提供權重。 如您所見,使用🤗transormer 在兩者之間切換非常簡單
+
+
+
+{/if}
+
+請注意,這次我們使用的是在翻譯任務上訓練過的模型,並且實際上已經可以使用,因此沒有關於丟失權重或新初始化權重的警告。
+
+### 數據整理
+
+我們需要一個數據整理器來處理動態批處理的填充。在本例中,我們不能像[第3章](/course/chapter3)那樣使用帶填充的**DataCollatorWithPadding**,因為它只填充輸入(輸入ID、注意掩碼和令牌類型ID)。我們的標籤也應該填充到標籤中遇到的最大長度。而且,如前所述,用於填充標籤的填充值應為-100,而不是標記器的填充標記,以確保在損失計算中忽略這些填充值。
+
+這一切都可以由 [`DataCollatorForSeq2Seq`](https://huggingface.co/transformers/main_classes/data_collator.html#datacollatorforseq2seq) 完成。 與 `DataCollatorWithPadding` 一樣,它採用用於預處理輸入的`tokenizer`,但它也採用`model`。 這是因為數據整理器還將負責準備解碼器輸入 ID,它們是標籤偏移之後形成的,開頭帶有特殊標記。 由於不同架構的這種轉變略有不同,因此“DataCollatorForSeq2Seq”需要知道“模型”對象:
+
+{#if fw === 'pt'}
+
+```py
+from transformers import DataCollatorForSeq2Seq
+
+data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)
+```
+
+{:else}
+
+```py
+from transformers import DataCollatorForSeq2Seq
+
+data_collator = DataCollatorForSeq2Seq(tokenizer, model=model, return_tensors="tf")
+```
+
+{/if}
+
+為了在幾個樣本上進行測試,我們只需在我們標記化訓練集中的部分數據上調用它:
+
+```py
+batch = data_collator([tokenized_datasets["train"][i] for i in range(1, 3)])
+batch.keys()
+```
+
+```python out
+dict_keys(['attention_mask', 'input_ids', 'labels', 'decoder_input_ids'])
+```
+
+我們可以檢查我們的標籤是否已使用 **-100** 填充到批次的最大長度:
+
+```py
+batch["labels"]
+```
+
+```python out
+tensor([[ 577, 5891, 2, 3184, 16, 2542, 5, 1710, 0, -100,
+ -100, -100, -100, -100, -100, -100],
+ [ 1211, 3, 49, 9409, 1211, 3, 29140, 817, 3124, 817,
+ 550, 7032, 5821, 7907, 12649, 0]])
+```
+
+我們還可以查看解碼器輸入 ID,看看它們是標籤的偏移形成的版本:
+
+```py
+batch["decoder_input_ids"]
+```
+
+```python out
+tensor([[59513, 577, 5891, 2, 3184, 16, 2542, 5, 1710, 0,
+ 59513, 59513, 59513, 59513, 59513, 59513],
+ [59513, 1211, 3, 49, 9409, 1211, 3, 29140, 817, 3124,
+ 817, 550, 7032, 5821, 7907, 12649]])
+```
+
+以下是我們數據集中第一個和第二個元素的標籤:
+
+```py
+for i in range(1, 3):
+ print(tokenized_datasets["train"][i]["labels"])
+```
+
+```python out
+[577, 5891, 2, 3184, 16, 2542, 5, 1710, 0]
+[1211, 3, 49, 9409, 1211, 3, 29140, 817, 3124, 817, 550, 7032, 5821, 7907, 12649, 0]
+```
+
+{#if fw === 'pt'}
+
+我們將把這個 `data_collator` 傳遞給 `Seq2SeqTrainer`。 接下來,讓我們看一下評估指標。
+
+{:else}
+
+我們現在可以使用 `data_collator` 將我們的每個數據集轉換為 `tf.data.Dataset`,準備好進行訓練:
+
+```python
+tf_train_dataset = tokenized_datasets["train"].to_tf_dataset(
+ columns=["input_ids", "attention_mask", "labels"],
+ collate_fn=data_collator,
+ shuffle=True,
+ batch_size=32,
+)
+tf_eval_dataset = tokenized_datasets["validation"].to_tf_dataset(
+ columns=["input_ids", "attention_mask", "labels"],
+ collate_fn=data_collator,
+ shuffle=False,
+ batch_size=16,
+)
+```
+
+{/if}
+
+
+### 評估指標
+
+
+
+{#if fw === 'pt'}
+
+`Seq2SeqTrainer` 添加到其超類 `Trainer` 的功能是在評估或預測期間使用 `generate()` 方法的能力。 在訓練期間,模型將使用帶有注意掩碼的“decoder_input_ids”,以確保它不使用預測的標記之後的標記,以加快訓練速度。 在推理過程中,我們將無法使用預測的標記之後的標記,因為我們沒有標籤,因此使用相同的設置使用帶有注意掩碼的“decoder_input_ids”,評估我們的模型是個好主意。
+
+正如我們在[第一章](/course/chapter1/6)看到的,解碼器通過一個一個地預測標記來執行推理——這是🤗 Transformers 在幕後通過 **generate()** 方法實現的。如果我們設置 predict_with_generate=True,Seq2 Seq Trainer 將允許我們使用該方法進行評估。
+
+
+{/if}
+
+用於翻譯的傳統指標是[BLEU 分數](https://en.wikipedia.org/wiki/BLEU), 由Kishore Papineni等人在[2002年的一篇文章](https://aclanthology.org/P02-1040.pdf)中引入。BLEU 分數評估翻譯與其標籤的接近程度。它不衡量模型生成輸出的可懂度或語法正確性,而是使用統計規則來確保生成輸出中的所有單詞也出現在目標中。此外,如果相同單詞在目標中沒有重複,則有規則懲罰相同單詞的重複(以避免模型輸出類似 **the the the the the**的句子 ) 並輸出比目標中短的句子(以避免模型輸出像 **the** 這樣的句子)。
+
+BLEU 的一個缺點是它需要文本已經被分詞,這使得比較使用不同標記器的模型之間的分數變得困難。因此,當今用於基準翻譯模型的最常用指標是[SacreBLEU](https://github.com/mjpost/sacrebleu),它通過標準化標記化步驟解決了這個缺點(和其他的一些缺點)。要使用此指標,我們首先需要安裝 SacreBLEU 庫:
+
+```py
+!pip install sacrebleu
+```
+
+然後我們可以就像我們在[第三章](/course/chapter3)那樣通過 **load_metric()** 加載它 :
+
+```py
+from datasets import load_metric
+
+metric = load_metric("sacrebleu")
+```
+
+該指標將文本作為輸入和目標結果。它旨在接受多個可接受的目標,因為同一個句子通常有多個可接受的翻譯——我們使用的數據集只提供一個,但在 NLP 中找到將多個句子作為標籤的數據集不是一個難題。因此,預測結果應該是一個句子列表,而參考應該是一個句子列表的列表。
+
+讓我們嘗試一個例子:
+
+```py
+predictions = [
+ "This plugin lets you translate web pages between several languages automatically."
+]
+references = [
+ [
+ "This plugin allows you to automatically translate web pages between several languages."
+ ]
+]
+metric.compute(predictions=predictions, references=references)
+```
+
+```python out
+{'score': 46.750469682990165,
+ 'counts': [11, 6, 4, 3],
+ 'totals': [12, 11, 10, 9],
+ 'precisions': [91.67, 54.54, 40.0, 33.33],
+ 'bp': 0.9200444146293233,
+ 'sys_len': 12,
+ 'ref_len': 13}
+```
+
+這得到了 46.75 的 BLEU 分數,這是相當不錯的——作為參考,原始 Transformer 模型在[“Attention Is All You Need” 論文](https://arxiv.org/pdf/1706.03762.pdf)類似的英語和法語翻譯任務中獲得了 41.8 的 BLEU 分數! (有關各個指標的更多信息,例如 **counts** 和 **bp** ,見[SacreBLEU 倉庫](https://github.com/mjpost/sacrebleu/blob/078c440168c6adc89ba75fe6d63f0d922d42bcfe/sacrebleu/metrics/bleu.py#L74).) 另一方面,如果我們嘗試使用翻譯模型中經常出現的兩種糟糕的預測類型(大量重複或太短),我們將得到相當糟糕的 BLEU 分數:
+
+```py
+predictions = ["This This This This"]
+references = [
+ [
+ "This plugin allows you to automatically translate web pages between several languages."
+ ]
+]
+metric.compute(predictions=predictions, references=references)
+```
+
+```python out
+{'score': 1.683602693167689,
+ 'counts': [1, 0, 0, 0],
+ 'totals': [4, 3, 2, 1],
+ 'precisions': [25.0, 16.67, 12.5, 12.5],
+ 'bp': 0.10539922456186433,
+ 'sys_len': 4,
+ 'ref_len': 13}
+```
+
+```py
+predictions = ["This plugin"]
+references = [
+ [
+ "This plugin allows you to automatically translate web pages between several languages."
+ ]
+]
+metric.compute(predictions=predictions, references=references)
+```
+
+```python out
+{'score': 0.0,
+ 'counts': [2, 1, 0, 0],
+ 'totals': [2, 1, 0, 0],
+ 'precisions': [100.0, 100.0, 0.0, 0.0],
+ 'bp': 0.004086771438464067,
+ 'sys_len': 2,
+ 'ref_len': 13}
+```
+
+分數可以從 0 到 100,越高越好。
+
+{#if fw === 'tf'}
+
+為了從模型輸出可以被評估基準可以使用的文本,我們將使用 **tokenizer.batch_decode()** 方法。我們只需要清理標籤中所有 **-100** (標記器會自動為填充標記做同樣的事情):
+
+```py
+import numpy as np
+
+
+def compute_metrics():
+ all_preds = []
+ all_labels = []
+ sampled_dataset = tokenized_datasets["validation"].shuffle().select(range(200))
+ tf_generate_dataset = sampled_dataset.to_tf_dataset(
+ columns=["input_ids", "attention_mask", "labels"],
+ collate_fn=data_collator,
+ shuffle=False,
+ batch_size=4,
+ )
+ for batch in tf_generate_dataset:
+ predictions = model.generate(
+ input_ids=batch["input_ids"], attention_mask=batch["attention_mask"]
+ )
+ decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)
+ labels = batch["labels"].numpy()
+ labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
+ decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
+ decoded_preds = [pred.strip() for pred in decoded_preds]
+ decoded_labels = [[label.strip()] for label in decoded_labels]
+ all_preds.extend(decoded_preds)
+ all_labels.extend(decoded_labels)
+
+ result = metric.compute(predictions=all_preds, references=all_labels)
+ return {"bleu": result["score"]}
+```
+
+{:else}
+
+為了從模型輸出到度量可以使用的文本,我們將使用 `tokenizer.batch_decode()` 方法。 我們只需要清理標籤中的所有 `-100`(標記器將自動對填充標記執行相同操作):
+
+```py
+import numpy as np
+
+
+def compute_metrics(eval_preds):
+ preds, labels = eval_preds
+ # In case the model returns more than the prediction logits
+ if isinstance(preds, tuple):
+ preds = preds[0]
+
+ decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True)
+
+ # Replace -100s in the labels as we can't decode them
+ labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
+ decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
+
+ # Some simple post-processing
+ decoded_preds = [pred.strip() for pred in decoded_preds]
+ decoded_labels = [[label.strip()] for label in decoded_labels]
+
+ result = metric.compute(predictions=decoded_preds, references=decoded_labels)
+ return {"bleu": result["score"]}
+```
+
+{/if}
+
+現在這已經完成了,我們已經準備好微調我們的模型了!
+
+### 微調模型
+
+第一步是登錄 Hugging Face,這樣您就可以將結果上傳到模型中心。有一個方便的功能可以幫助您在notebook中完成此操作:
+
+```python
+from huggingface_hub import notebook_login
+
+notebook_login()
+```
+
+這將顯示一個小部件,您可以在其中輸入您的 Hugging Face 登錄憑據。
+
+如果您不是在notebook上運行代碼,只需在終端中輸入以下行:
+
+```bash
+huggingface-cli login
+```
+
+{#if fw === 'tf'}
+
+在我們開始之前,讓我們看看我們在沒有任何訓練的情況下從我們的模型中得到了什麼樣的結果:
+
+```py
+print(compute_metrics())
+```
+
+```
+{'bleu': 33.26983701454733}
+```
+
+一旦完成,我們就可以準備編譯和訓練模型所需的一切。 注意當使用 `tf.keras.mixed_precision.set_global_policy("mixed_float16")`時——這將告訴 Keras 使用 float16 進行訓練,這可以顯著提高支持它的 GPU(Nvidia 20xx/V100 或更高版本)的速度。
+
+```python
+from transformers import create_optimizer
+from transformers.keras_callbacks import PushToHubCallback
+import tensorflow as tf
+
+# The number of training steps is the number of samples in the dataset, divided by the batch size then multiplied
+# by the total number of epochs. Note that the tf_train_dataset here is a batched tf.data.Dataset,
+# not the original Hugging Face Dataset, so its len() is already num_samples // batch_size.
+num_epochs = 3
+num_train_steps = len(tf_train_dataset) * num_epochs
+
+optimizer, schedule = create_optimizer(
+ init_lr=5e-5,
+ num_warmup_steps=0,
+ num_train_steps=num_train_steps,
+ weight_decay_rate=0.01,
+)
+model.compile(optimizer=optimizer)
+
+# Train in mixed-precision float16
+tf.keras.mixed_precision.set_global_policy("mixed_float16")
+```
+
+接下來,我們定義一個 `PushToHubCallback` 以便在訓練期間將我們的模型上傳到 Hub,正如我們在 [第 2 節]((/course/chapter7/2)) 中看到的,然後我們只需擬合模型時添加該回調函數:
+
+```python
+from transformers.keras_callbacks import PushToHubCallback
+
+callback = PushToHubCallback(
+ output_dir="marian-finetuned-kde4-en-to-fr", tokenizer=tokenizer
+)
+
+model.fit(
+ tf_train_dataset,
+ validation_data=tf_eval_dataset,
+ callbacks=[callback],
+ epochs=num_epochs,
+)
+```
+
+請注意,您可以使用 `hub_model_id` 參數指定要推送到的存儲庫的名稱(當您想把模型推送到指定的組織的時候,您也必須使用此參數)。 例如,當我們將模型推送到 [`huggingface-course` 組織](https://huggingface.co/huggingface-course) 時,我們添加了 `hub_model_id="huggingface-course/marian-finetuned-kde4-en- to-fr"` 到 `Seq2SeqTrainingArguments`。 默認情況下,使用的存儲庫將在您的命名空間中,並以您設置的輸出目錄命名,因此這裡將是 `"sgugger/marian-finetuned-kde4-en-to-fr"`。
+
+
+
+💡如果您使用的輸出目錄已經存在,則它需要是您要推送到的存儲庫的本地克隆。如果不是,您將在定義您的名稱時會遇到錯誤,並且需要設置一個新名稱。
+
+
+
+最後,讓我們看看訓練結束後我們的指標是什麼樣的:
+
+```py
+print(compute_metrics())
+```
+
+```
+{'bleu': 57.334066271545865}
+```
+
+在這個階段,您可以使用模型中心上的推理小部件來測試您的模型並與您的朋友分享。 您已經成功地微調了翻譯任務中的模型——恭喜!
+
+{:else}
+
+一旦完成,我們就可以定義我們的 `Seq2SeqTrainingArguments`。 與 `Trainer` 一樣,我們使用 `TrainingArguments` 的子類,其中包含更多可以設置的字段:
+
+```python
+from transformers import Seq2SeqTrainingArguments
+
+args = Seq2SeqTrainingArguments(
+ f"marian-finetuned-kde4-en-to-fr",
+ evaluation_strategy="no",
+ save_strategy="epoch",
+ learning_rate=2e-5,
+ per_device_train_batch_size=32,
+ per_device_eval_batch_size=64,
+ weight_decay=0.01,
+ save_total_limit=3,
+ num_train_epochs=3,
+ predict_with_generate=True,
+ fp16=True,
+ push_to_hub=True,
+)
+```
+
+除了通常的超參數(如學習率、訓練輪數、批次大小和一些權重衰減)之外,與我們在前幾節中看到的相比,這裡有一些變化:
+
+- 我們沒有設置任何定期評估,因為評估需要耗費一定的時間;我們只會在訓練開始之前和結束之後評估我們的模型一次。
+- 我們設置fp16=True,這可以加快支持fp16的 GPU 上的訓練速度。
+- 和上面我們討論的那樣,我們設置predict_with_generate=True
+- 我們用push_to_hub=True在每個 epoch 結束時將模型上傳到 Hub。
+
+請注意,您可以使用 `hub_model_id` 參數指定要推送到的存儲庫的名稱(當您想把模型推送到指定的組織的時候,您也必須使用此參數)。 例如,當我們將模型推送到 [`huggingface-course` 組織](https://huggingface.co/huggingface-course) 時,我們添加了 `hub_model_id="huggingface-course/marian-finetuned-kde4-en- to-fr"` 到 `Seq2SeqTrainingArguments`。 默認情況下,使用的存儲庫將在您的命名空間中,並以您設置的輸出目錄命名,因此這裡將是 `"sgugger/marian-finetuned-kde4-en-to-fr"`。
+
+
+
+💡如果您使用的輸出目錄已經存在,則它需要是您要推送到的存儲庫的本地克隆。如果不是,您將在定義您的名稱時會遇到錯誤,並且需要設置一個新名稱。
+
+
+
+
+最後,我們需要將所有內容傳遞給 **Seq2SeqTrainer** :
+
+```python
+from transformers import Seq2SeqTrainer
+
+trainer = Seq2SeqTrainer(
+ model,
+ args,
+ train_dataset=tokenized_datasets["train"],
+ eval_dataset=tokenized_datasets["validation"],
+ data_collator=data_collator,
+ tokenizer=tokenizer,
+ compute_metrics=compute_metrics,
+)
+```
+
+在訓練之前,我們將首先查看我們的模型獲得的分數,以仔細檢查我們的微調沒有讓事情變得更糟。此命令需要一些時間,因此您可以在執行時喝杯咖啡:
+
+```python
+trainer.evaluate(max_length=max_target_length)
+```
+
+```python out
+{'eval_loss': 1.6964408159255981,
+ 'eval_bleu': 39.26865061007616,
+ 'eval_runtime': 965.8884,
+ 'eval_samples_per_second': 21.76,
+ 'eval_steps_per_second': 0.341}
+```
+
+BLEU的分數還不錯,這反映了我們的模型已經擅長將英語句子翻譯成法語句子。
+
+接下來是訓練,這也需要一些時間:
+
+```python
+trainer.train()
+```
+
+請注意,當訓練發生時,每次保存模型時(這裡是每個時期),它都會在後臺上傳到 Hub。這樣,如有必要,您將能夠在另一臺機器上繼續您的訓練。
+
+訓練完成後,我們再次評估我們的模型——希望我們會看到 BLEU 分數有所改善!
+
+```py
+trainer.evaluate(max_length=max_target_length)
+```
+
+```python out
+{'eval_loss': 0.8558505773544312,
+ 'eval_bleu': 52.94161337775576,
+ 'eval_runtime': 714.2576,
+ 'eval_samples_per_second': 29.426,
+ 'eval_steps_per_second': 0.461,
+ 'epoch': 3.0}
+```
+
+這是近 14 點的改進,這很棒。
+
+最後,我們使用 **push_to_hub()** 方法來確保我們上傳模型的最新版本。這 **Trainer** 還創建了一張包含所有評估結果的模型卡並上傳。此模型卡包含可幫助模型中心為推理演示選擇小部件的元數據。通常不需要做額外的更改,因為它可以從模型類中推斷出正確的小部件,但在這種情況下,相同的模型類可以用於所有類型的序列到序列問題,所以我們指定它是一個翻譯模型:
+
+```py
+trainer.push_to_hub(tags="translation", commit_message="Training complete")
+```
+
+如果您想檢查命令執行的結果,此命令將返回它剛剛執行的提交的 URL,可以打開url進行檢查:
+
+```python out
+'https://huggingface.co/sgugger/marian-finetuned-kde4-en-to-fr/commit/3601d621e3baae2bc63d3311452535f8f58f6ef3'
+```
+
+在此階段,您可以使用模型中心上的推理小部件來測試您的模型並與您的朋友分享。您已成功微調翻譯任務的模型 - 恭喜!
+
+如果您想更深入地瞭解訓練循環,我們現在將向您展示如何使用 🤗 Accelerate 做同樣的事情。
+
+{/if}
+
+{#if fw === 'pt'}
+
+## 自定義訓練循環
+
+現在讓我們看一下完整的訓練循環,以便您可以輕鬆自定義所需的部分。它看起來很像我們在[本章第二節](/course/chapter7/2)和[第三章第四小節](/course/chapter3/4)所做的。
+
+### 準備訓練所需的一切
+
+您已經多次看到所有這些,因此這一塊會簡略進行。首先我們將構建我們的數據集的**DataLoader** ,在將數據集設置為 **torch** 格式,我們就得到了 PyTorch 張量:
+
+```py
+from torch.utils.data import DataLoader
+
+tokenized_datasets.set_format("torch")
+train_dataloader = DataLoader(
+ tokenized_datasets["train"],
+ shuffle=True,
+ collate_fn=data_collator,
+ batch_size=8,
+)
+eval_dataloader = DataLoader(
+ tokenized_datasets["validation"], collate_fn=data_collator, batch_size=8
+)
+```
+
+接下來我們重新實例化我們的模型,以確保我們不會繼續上一節的微調,而是再次從預訓練模型開始重新訓練:
+
+```py
+model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)
+```
+
+然後我們需要一個優化器:
+
+```py
+from transformers import AdamW
+
+optimizer = AdamW(model.parameters(), lr=2e-5)
+```
+
+一旦我們擁有所有這些對象,我們就可以將它們發送到 `accelerator.prepare()` 方法。 請記住,如果您想在 Colab 筆記本訓練中使用TPU,則需要將所有這些代碼移動到訓練函數中,並且不應執行任何實例化“加速器”的對象。
+
+```py
+from accelerate import Accelerator
+
+accelerator = Accelerator()
+model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare(
+ model, optimizer, train_dataloader, eval_dataloader
+)
+```
+
+現在我們已經發送了我們的 **train_dataloader** 到 **accelerator.prepare()** ,我們可以使用它的長度來計算訓練步驟的數量。請記住,我們應該始終在準備好數據加載器後執行此操作,因為該方法會更改 **DataLoader** .我們使用從學習率衰減到 0 的經典線性學習率調度:
+
+```py
+from transformers import get_scheduler
+
+num_train_epochs = 3
+num_update_steps_per_epoch = len(train_dataloader)
+num_training_steps = num_train_epochs * num_update_steps_per_epoch
+
+lr_scheduler = get_scheduler(
+ "linear",
+ optimizer=optimizer,
+ num_warmup_steps=0,
+ num_training_steps=num_training_steps,
+)
+```
+
+最後,要將我們的模型推送到 Hub,我們需要創建一個 **Repository** 工作文件夾中的對象。如果您尚未登錄,請先登錄 Hugging Face。我們將從我們想要為模型提供的模型 ID 中確定存儲庫名稱(您可以自由地用自己的選擇替換 **repo_name** ;它需要包含您的用戶名,可以使用**get_full_repo_name()**函數的查看目前的repo_name):
+
+```py
+from huggingface_hub import Repository, get_full_repo_name
+
+model_name = "marian-finetuned-kde4-en-to-fr-accelerate"
+repo_name = get_full_repo_name(model_name)
+repo_name
+```
+
+```python out
+'sgugger/marian-finetuned-kde4-en-to-fr-accelerate'
+```
+
+然後我們可以在本地文件夾中克隆該存儲庫。如果它已經存在,這個本地文件夾應該是我們正在使用的存儲庫的克隆:
+
+```py
+output_dir = "marian-finetuned-kde4-en-to-fr-accelerate"
+repo = Repository(output_dir, clone_from=repo_name)
+```
+
+我們現在可以通過調用 **repo.push_to_hub()** 方法上傳我們保存的任何內容 **output_dir** 。這將幫助我們在每個 epoch 結束時上傳過程中的模型。
+
+### 訓練循環
+
+我們現在準備編寫完整的訓練循環。為了簡化它的評估部分,我們定義了這個 **postprocess()** 函數接收預測結果和正確標籤並將它們轉換為我們 **metric** 對象所需要的字符串列表:
+
+```py
+def postprocess(predictions, labels):
+ predictions = predictions.cpu().numpy()
+ labels = labels.cpu().numpy()
+
+ decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)
+
+ # Replace -100 in the labels as we can't decode them.
+ labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
+ decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
+
+ # Some simple post-processing
+ decoded_preds = [pred.strip() for pred in decoded_preds]
+ decoded_labels = [[label.strip()] for label in decoded_labels]
+ return decoded_preds, decoded_labels
+```
+
+訓練循環看起來和[本章第二節](/course/chapter7/2)與[第三章](/course/chapter3)很像,在評估部分有一些不同 - 所以讓我們專注於這一點!
+
+首先要注意的是我們使用 `generate()` 方法來計算預測,但這是我們基礎模型上的一個方法,而不是包裝模型🤗 Accelerate 在 `prepare()` 方法中創建。 這就是為什麼我們先解包模型,然後調用這個方法。
+
+第二件事是,就像[token 分類](/course/chapter7/2),兩個進程可能將輸入和標籤填充為不同的形狀,因此我們在調用 **gather()** 方法之前使用 **accelerator.pad_across_processes()** 使預測和標籤具有相同的形狀。如果我們不這樣做,評估要麼出錯,要麼永遠在阻塞。
+
+```py
+from tqdm.auto import tqdm
+import torch
+
+progress_bar = tqdm(range(num_training_steps))
+
+for epoch in range(num_train_epochs):
+ # Training
+ model.train()
+ for batch in train_dataloader:
+ outputs = model(**batch)
+ loss = outputs.loss
+ accelerator.backward(loss)
+
+ optimizer.step()
+ lr_scheduler.step()
+ optimizer.zero_grad()
+ progress_bar.update(1)
+
+ # Evaluation
+ model.eval()
+ for batch in tqdm(eval_dataloader):
+ with torch.no_grad():
+ generated_tokens = accelerator.unwrap_model(model).generate(
+ batch["input_ids"],
+ attention_mask=batch["attention_mask"],
+ max_length=128,
+ )
+ labels = batch["labels"]
+
+ # Necessary to pad predictions and labels for being gathered
+ generated_tokens = accelerator.pad_across_processes(
+ generated_tokens, dim=1, pad_index=tokenizer.pad_token_id
+ )
+ labels = accelerator.pad_across_processes(labels, dim=1, pad_index=-100)
+
+ predictions_gathered = accelerator.gather(generated_tokens)
+ labels_gathered = accelerator.gather(labels)
+
+ decoded_preds, decoded_labels = postprocess(predictions_gathered, labels_gathered)
+ metric.add_batch(predictions=decoded_preds, references=decoded_labels)
+
+ results = metric.compute()
+ print(f"epoch {epoch}, BLEU score: {results['score']:.2f}")
+
+ # Save and upload
+ accelerator.wait_for_everyone()
+ unwrapped_model = accelerator.unwrap_model(model)
+ unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)
+ if accelerator.is_main_process:
+ tokenizer.save_pretrained(output_dir)
+ repo.push_to_hub(
+ commit_message=f"Training in progress epoch {epoch}", blocking=False
+ )
+```
+
+```python out
+epoch 0, BLEU score: 53.47
+epoch 1, BLEU score: 54.24
+epoch 2, BLEU score: 54.44
+```
+
+完成此操作後,您應該有一個模型,其結果與使用 `Seq2SeqTrainer` 訓練的模型非常相似。 您可以在 [*huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate*](https://huggingface.co/huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate)查看訓練完的結果。 如果您想測試對訓練循環的任何調整,您可以通過編輯上面顯示的代碼直接實現它們!
+
+{/if}
+
+## 使用微調後的模型
+
+我們已經向您展示瞭如何將我們在模型中心微調的模型與推理小部件一起使用。 要在“管道”中本地使用它,我們只需要指定正確的模型標識符:
+
+```py
+from transformers import pipeline
+
+# Replace this with your own checkpoint
+model_checkpoint = "huggingface-course/marian-finetuned-kde4-en-to-fr"
+translator = pipeline("translation", model=model_checkpoint)
+translator("Default to expanded threads")
+```
+
+```python out
+[{'translation_text': 'Par défaut, développer les fils de discussion'}]
+```
+
+正如預期的那樣,我們的預訓練模型將其知識適應了我們對其進行微調的語料庫,而不是單獨留下英文單詞“threads”,而是將其翻譯成法語官方版本。 “”的翻譯也是一樣的:
+
+```py
+translator(
+ "Unable to import %1 using the OFX importer plugin. This file is not the correct format."
+)
+```
+
+```python out
+[{'translation_text': "Impossible d'importer %1 en utilisant le module externe d'importation OFX. Ce fichier n'est pas le bon format."}]
+```
+
+風格適應的另一個很好的例子!
+
+
+
+✏️ **輪到你了!** “電子郵件”這個詞在模型返回了什麼?
+
+
diff --git a/chapters/zh-TW/chapter7/5.mdx b/chapters/zh-TW/chapter7/5.mdx
new file mode 100644
index 000000000..eeab998ed
--- /dev/null
+++ b/chapters/zh-TW/chapter7/5.mdx
@@ -0,0 +1,1047 @@
+
+
+# 提取文本摘要
+
+{#if fw === 'pt'}
+
+
+
+{:else}
+
+
+
+{/if}
+
+
+在本節中,我們將看看如何使用 Transformer 模型將長文檔壓縮為摘要,這項任務稱為文本摘要.這是最具挑戰性的 NLP 任務之一,因為它需要一系列能力,例如理解長篇文章和生成能夠捕捉文檔中主要主題的連貫文本。但是,如果做得好,文本摘要是一種強大的工具,可以減輕領域專家詳細閱讀長文檔的負擔,從而加快各種業務流程。
+
+
+
+儘管在[Hugging Face Hub](https://huggingface.co/models?pipeline_tag=summarization=downloads)上已經存在各種微調模型用於文本摘要,幾乎所有這些都只適用於英文文檔。因此,為了在本節中添加一些變化,我們將為英語和西班牙語訓練一個雙語模型。在本節結束時,您將有一個可以總結客戶評論的[模型](https://huggingface.co/huggingface-course/mt5-small-finetuned-amazon-en-es)。
+
+
+
+
+如下所示:正如我們將看到的,這些摘要很簡潔,因為它們是從客戶在產品評論中提供的標題中學到的。讓我們首先為這項任務準備一個合適的雙語語料庫。
+
+## 準備多語言語料庫
+
+我們將使用[多語言亞馬遜評論語料庫](https://huggingface.co/datasets/amazon_reviews_multi)創建我們的雙語摘要器。該語料庫由六種語言的亞馬遜產品評論組成,通常用於對多語言分類器進行基準測試。然而,由於每條評論都附有一個簡短的標題,我們可以使用標題作為我們模型學習的目標摘要!首先,讓我們從 Hugging Face Hub 下載英語和西班牙語子集:
+
+```python
+from datasets import load_dataset
+
+spanish_dataset = load_dataset("amazon_reviews_multi", "es")
+english_dataset = load_dataset("amazon_reviews_multi", "en")
+english_dataset
+```
+
+```python out
+DatasetDict({
+ train: Dataset({
+ features: ['review_id', 'product_id', 'reviewer_id', 'stars', 'review_body', 'review_title', 'language', 'product_category'],
+ num_rows: 200000
+ })
+ validation: Dataset({
+ features: ['review_id', 'product_id', 'reviewer_id', 'stars', 'review_body', 'review_title', 'language', 'product_category'],
+ num_rows: 5000
+ })
+ test: Dataset({
+ features: ['review_id', 'product_id', 'reviewer_id', 'stars', 'review_body', 'review_title', 'language', 'product_category'],
+ num_rows: 5000
+ })
+})
+```
+
+如您所見,對於每種語言,都有 200,000 條評論 **train** 拆分,每個評論有 5,000 條評論 **validation** 和 **test** 分裂。我們感興趣的評論信息包含在 **review_body** 和 **review_title** 列。讓我們通過創建一個簡單的函數來查看一些示例,該函數使用我們在[第五章](/course/chapter5)學到過:
+
+```python
+def show_samples(dataset, num_samples=3, seed=42):
+ sample = dataset["train"].shuffle(seed=seed).select(range(num_samples))
+ for example in sample:
+ print(f"\n'>> Title: {example['review_title']}'")
+ print(f"'>> Review: {example['review_body']}'")
+
+
+show_samples(english_dataset)
+```
+
+```python out
+'>> Title: Worked in front position, not rear'
+'>> Review: 3 stars because these are not rear brakes as stated in the item description. At least the mount adapter only worked on the front fork of the bike that I got it for.'
+
+'>> Title: meh'
+'>> Review: Does it’s job and it’s gorgeous but mine is falling apart, I had to basically put it together again with hot glue'
+
+'>> Title: Can\'t beat these for the money'
+'>> Review: Bought this for handling miscellaneous aircraft parts and hanger "stuff" that I needed to organize; it really fit the bill. The unit arrived quickly, was well packaged and arrived intact (always a good sign). There are five wall mounts-- three on the top and two on the bottom. I wanted to mount it on the wall, so all I had to do was to remove the top two layers of plastic drawers, as well as the bottom corner drawers, place it when I wanted and mark it; I then used some of the new plastic screw in wall anchors (the 50 pound variety) and it easily mounted to the wall. Some have remarked that they wanted dividers for the drawers, and that they made those. Good idea. My application was that I needed something that I can see the contents at about eye level, so I wanted the fuller-sized drawers. I also like that these are the new plastic that doesn\'t get brittle and split like my older plastic drawers did. I like the all-plastic construction. It\'s heavy duty enough to hold metal parts, but being made of plastic it\'s not as heavy as a metal frame, so you can easily mount it to the wall and still load it up with heavy stuff, or light stuff. No problem there. For the money, you can\'t beat it. Best one of these I\'ve bought to date-- and I\'ve been using some version of these for over forty years.'
+```
+
+
+
+✏️ **試試看!** 更改 `Dataset.shuffle()` 命令中的隨機種子以探索語料庫中的其他評論。 如果您是說西班牙語的人,請查看 `spanish_dataset` 中的一些評論,看看標題是否也像合理的摘要。
+
+
+
+此示例顯示了人們通常在網上找到的評論的多樣性,從正面到負面(以及介於兩者之間的所有內容!)。儘管標題為“meh”的示例信息量不大,但其他標題看起來像是對評論本身的體面總結。在單個 GPU 上訓練所有 400,000 條評論的摘要模型將花費太長時間,因此我們將專注於為單個產品領域生成摘要。為了瞭解我們可以選擇哪些域,讓我們將 **english_dataset** 轉換到 **pandas.DataFrame** 並計算每個產品類別的評論數量:
+
+```python
+english_dataset.set_format("pandas")
+english_df = english_dataset["train"][:]
+# Show counts for top 20 products
+english_df["product_category"].value_counts()[:20]
+```
+
+```python out
+home 17679
+apparel 15951
+wireless 15717
+other 13418
+beauty 12091
+drugstore 11730
+kitchen 10382
+toy 8745
+sports 8277
+automotive 7506
+lawn_and_garden 7327
+home_improvement 7136
+pet_products 7082
+digital_ebook_purchase 6749
+pc 6401
+electronics 6186
+office_product 5521
+shoes 5197
+grocery 4730
+book 3756
+Name: product_category, dtype: int64
+```
+
+英語數據集中最受歡迎的產品是家居用品、服裝和無線電子產品。不過,為了堅持亞馬遜的主題,讓我們專注於總結書籍的評論——畢竟,這是亞馬遜這家公司成立的基礎!我們可以看到兩個符合要求的產品類別( **book** 和 **digital_ebook_purchase** ),所以讓我們為這些產品過濾兩種語言的數據集。正如我們在[第五章](/course/chapter5)學到的, 這 **Dataset.filter()** 函數允許我們非常有效地對數據集進行切片,因此我們可以定義一個簡單的函數來執行此操作:
+
+```python
+def filter_books(example):
+ return (
+ example["product_category"] == "book"
+ or example["product_category"] == "digital_ebook_purchase"
+ )
+```
+
+現在,當我們將此函數應用於 **english_dataset** 和 **spanish_dataset** ,結果將只包含涉及書籍類別的那些行。在應用過濾器之前,讓我們將**english_dataset**的格式從 **pandas** 切換回到 **arrow** :
+
+```python
+english_dataset.reset_format()
+```
+
+然後我們可以應用過濾器功能,作為健全性檢查,讓我們檢查評論樣本,看看它們是否確實與書籍有關:
+
+```python
+spanish_books = spanish_dataset.filter(filter_books)
+english_books = english_dataset.filter(filter_books)
+show_samples(english_books)
+```
+
+```python out
+'>> Title: I\'m dissapointed.'
+'>> Review: I guess I had higher expectations for this book from the reviews. I really thought I\'d at least like it. The plot idea was great. I loved Ash but, it just didnt go anywhere. Most of the book was about their radio show and talking to callers. I wanted the author to dig deeper so we could really get to know the characters. All we know about Grace is that she is attractive looking, Latino and is kind of a brat. I\'m dissapointed.'
+
+'>> Title: Good art, good price, poor design'
+'>> Review: I had gotten the DC Vintage calendar the past two years, but it was on backorder forever this year and I saw they had shrunk the dimensions for no good reason. This one has good art choices but the design has the fold going through the picture, so it\'s less aesthetically pleasing, especially if you want to keep a picture to hang. For the price, a good calendar'
+
+'>> Title: Helpful'
+'>> Review: Nearly all the tips useful and. I consider myself an intermediate to advanced user of OneNote. I would highly recommend.'
+```
+
+好的,我們可以看到評論並不是嚴格意義上的書籍,可能是指日曆和 OneNote 等電子應用程序等內容。儘管如此,該領域似乎適合訓練摘要模型。在我們查看適合此任務的各種模型之前,我們還有最後一點數據準備要做:將英語和西班牙語評論合併為一個 **DatasetDict** 目的。 🤗 Datasets 提供了一個方便的 **concatenate_datasets()** 函數(顧名思義)合併 **Dataset** 對象。因此,為了創建我們的雙語數據集,我們將遍歷每個拆分,連接該拆分的數據集,並打亂結果以確保我們的模型不會過度擬合單一語言:
+
+```python
+from datasets import concatenate_datasets, DatasetDict
+
+books_dataset = DatasetDict()
+
+for split in english_books.keys():
+ books_dataset[split] = concatenate_datasets(
+ [english_books[split], spanish_books[split]]
+ )
+ books_dataset[split] = books_dataset[split].shuffle(seed=42)
+
+# Peek at a few examples
+show_samples(books_dataset)
+```
+
+```python out
+'>> Title: Easy to follow!!!!'
+'>> Review: I loved The dash diet weight loss Solution. Never hungry. I would recommend this diet. Also the menus are well rounded. Try it. Has lots of the information need thanks.'
+
+'>> Title: PARCIALMENTE DAÑADO'
+'>> Review: Me llegó el día que tocaba, junto a otros libros que pedí, pero la caja llegó en mal estado lo cual dañó las esquinas de los libros porque venían sin protección (forro).'
+
+'>> Title: no lo he podido descargar'
+'>> Review: igual que el anterior'
+```
+
+這當然看起來像是英語和西班牙語評論的混合!現在我們有了一個訓練語料庫,最後要檢查的一件事是評論中單詞的分佈及其標題。這對於摘要任務尤其重要,其中數據中的簡短參考摘要會使模型偏向於僅在生成的摘要中輸出一兩個單詞。下面的圖顯示了單詞分佈,我們可以看到有些標題嚴重偏向於 1-2 個單詞:
+
+
+
+好的, 這很受歡迎。現在讓我們嘗試使用正確的模型 ID 再次下載模型:
+
+```python
+model_checkpoint = get_full_repo_name("distilbert-base-uncased-finetuned-squad-d5716d28")
+reader = pipeline("question-answering", model=model_checkpoint)
+```
+
+```python out
+"""
+OSError: Can't load config for 'lewtun/distilbert-base-uncased-finetuned-squad-d5716d28'. Make sure that:
+
+- 'lewtun/distilbert-base-uncased-finetuned-squad-d5716d28' is a correct model identifier listed on 'https://huggingface.co/models'
+
+- or 'lewtun/distilbert-base-uncased-finetuned-squad-d5716d28' is the correct path to a directory containing a config.json file
+"""
+```
+
+啊, 再次挫敗 -- 歡迎來到機器學習工程師的日常生活! 因為我們已經修復了模型 ID, 所以問題一定出在存儲庫本身。訪問 🤗 Hub 上存儲庫內容的一種快速方法是通過 `huggingface_hub` 庫的 `list_repo_files()` 方法:
+
+```python
+from huggingface_hub import list_repo_files
+
+list_repo_files(repo_id=model_checkpoint)
+```
+
+```python out
+['.gitattributes', 'README.md', 'pytorch_model.bin', 'special_tokens_map.json', 'tokenizer_config.json', 'training_args.bin', 'vocab.txt']
+```
+
+有趣 -- 似乎沒有配置文件存儲庫中的 *config.json* 文件! 難怪我們的 `pipeline` 無法加載模型; 我們的同事一定是在微調後忘記將這個文件推送到 Hub。在這種情況下, 問題似乎很容易解決: 我們可以要求他們添加文件, 或者, 因為我們可以從模型 ID 中看到使用的預訓練模型是 [`distilbert-base-uncased`](https://huggingface.co/distilbert-base-uncased), 我們可以下載此模型的配置並將其推送到我們的存儲庫以查看是否可以解決問題。讓我們試試看。使用我們在 [第二章](/course/chapter2) 中學習的技術, 我們使用 `AutoConfig` 類下載模型的配置:
+
+```python
+from transformers import AutoConfig
+
+pretrained_checkpoint = "distilbert-base-uncased"
+config = AutoConfig.from_pretrained(pretrained_checkpoint)
+```
+
+
+
+🚨 我們在這裡採用的方法並不是萬無一失的, 因為我們的同事可能在微調模型之前已經調整了 `distilbert-base-uncased` 配置。在現實生活中, 我們想首先檢查它們, 但出於本節的目的, 我們假設它們使用默認配置。
+
+
+
+然後我們可以使用配置的 `push_to_hub()` 方法將其推送到我們的模型存儲庫:
+
+```python
+config.push_to_hub(model_checkpoint, commit_message="Add config.json")
+```
+
+現在我們可以通過從最新提交的 `main` 分支中加載模型來測試這是否有效:
+
+```python
+reader = pipeline("question-answering", model=model_checkpoint, revision="main")
+
+context = r"""
+Extractive Question Answering is the task of extracting an answer from a text
+given a question. An example of a question answering dataset is the SQuAD
+dataset, which is entirely based on that task. If you would like to fine-tune a
+model on a SQuAD task, you may leverage the
+examples/pytorch/question-answering/run_squad.py script.
+
+🤗 Transformers is interoperable with the PyTorch, TensorFlow, and JAX
+frameworks, so you can use your favourite tools for a wide variety of tasks!
+"""
+
+question = "What is extractive question answering?"
+reader(question=question, context=context)
+```
+
+```python out
+{'score': 0.38669535517692566,
+ 'start': 34,
+ 'end': 95,
+ 'answer': 'the task of extracting an answer from a text given a question'}
+```
+
+哇哦, 成功了!讓我們回顧一下你剛剛學到的東西:
+
+- Python 中的錯誤消息稱為 _tracebacks_ , 並從下到上閱讀。錯誤消息的最後一行通常包含定位問題根源所需的信息。
+- 如果最後一行沒有包含足夠的信息, 請按照您的方式進行回溯, 看看您是否可以確定源代碼中發生錯誤的位置。
+- 如果沒有任何錯誤消息可以幫助您調試問題, 請嘗試在線搜索類似問題的解決方案。
+- `huggingface_hub`
+// 🤗 Hub?
+庫提供了一套工具, 你可以使用這些工具與 Hub 上的存儲庫進行交互和調試。
+
+現在你知道如何調試管道, 讓我們看一下模型本身前向傳遞中的一個更棘手的示例。
+
+## 調試模型的前向傳遞
+
+儘管 `pipeline` 對於大多數需要快速生成預測的應用程序來說非常有用, 有時您需要訪問模型的 logits (例如, 如果您有一些想要應用的自定義後處理)。為了看看在這種情況下會出現什麼問題, 讓我們首先從 `pipeline` 中獲取模型和標記器:
+
+```python
+tokenizer = reader.tokenizer
+model = reader.model
+```
+
+接下來我們需要一個問題, 那麼讓我們看看是否支持我們最喜歡的框架:
+
+```python
+question = "Which frameworks can I use?"
+```
+
+正如我們在 [第七章](/course/chapter7) 中學習的, 我們需要採取的通常步驟是對輸入進行標記化, 提取開始和結束標記的對數, 然後解碼答案範圍:
+
+```python
+import torch
+
+inputs = tokenizer(question, context, add_special_tokens=True)
+input_ids = inputs["input_ids"][0]
+outputs = model(**inputs)
+answer_start_scores = outputs.start_logits
+answer_end_scores = outputs.end_logits
+# Get the most likely beginning of answer with the argmax of the score
+answer_start = torch.argmax(answer_start_scores)
+# Get the most likely end of answer with the argmax of the score
+answer_end = torch.argmax(answer_end_scores) + 1
+answer = tokenizer.convert_tokens_to_string(
+ tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end])
+)
+print(f"Question: {question}")
+print(f"Answer: {answer}")
+```
+
+```python out
+"""
+---------------------------------------------------------------------------
+AttributeError Traceback (most recent call last)
+/var/folders/28/k4cy5q7s2hs92xq7_h89_vgm0000gn/T/ipykernel_75743/2725838073.py in
+ 1 inputs = tokenizer(question, text, add_special_tokens=True)
+ 2 input_ids = inputs["input_ids"]
+----> 3 outputs = model(**inputs)
+ 4 answer_start_scores = outputs.start_logits
+ 5 answer_end_scores = outputs.end_logits
+
+~/miniconda3/envs/huggingface/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
+ 1049 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
+ 1050 or _global_forward_hooks or _global_forward_pre_hooks):
+-> 1051 return forward_call(*input, **kwargs)
+ 1052 # Do not call functions when jit is used
+ 1053 full_backward_hooks, non_full_backward_hooks = [], []
+
+~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, start_positions, end_positions, output_attentions, output_hidden_states, return_dict)
+ 723 return_dict = return_dict if return_dict is not None else self.config.use_return_dict
+ 724
+--> 725 distilbert_output = self.distilbert(
+ 726 input_ids=input_ids,
+ 727 attention_mask=attention_mask,
+
+~/miniconda3/envs/huggingface/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
+ 1049 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
+ 1050 or _global_forward_hooks or _global_forward_pre_hooks):
+-> 1051 return forward_call(*input, **kwargs)
+ 1052 # Do not call functions when jit is used
+ 1053 full_backward_hooks, non_full_backward_hooks = [], []
+
+~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, output_attentions, output_hidden_states, return_dict)
+ 471 raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
+ 472 elif input_ids is not None:
+--> 473 input_shape = input_ids.size()
+ 474 elif inputs_embeds is not None:
+ 475 input_shape = inputs_embeds.size()[:-1]
+
+AttributeError: 'list' object has no attribute 'size'
+"""
+```
+
+噢, 看起來我們的代碼中有一個錯誤!但我們不怕一點調試。您可以在筆記本中使用 Python 調試器:
+
+
+
+或在終端中:
+
+
+
+在這裡, 閱讀錯誤消息告訴我們 `'list' object has no attribute 'size'`, 我們可以看到一個 `-->` 箭頭指向 `model(**inputs)` 中出現問題的行。你可以使用 Python 調試器以交互方式調試它, 但現在我們只需打印出一部分 `inputs`, 看看我們有什麼:
+
+```python
+inputs["input_ids"][:5]
+```
+
+```python out
+[101, 2029, 7705, 2015, 2064]
+```
+
+這當然看起來像一個普通的 Python `list`, 但讓我們仔細檢查一下類型:
+
+```python
+type(inputs["input_ids"])
+```
+
+```python out
+list
+```
+
+是的, 這肯定是一個 Python `list`。那麼出了什麼問題呢? 回憶 [第二章](/course/chapter2) 🤗 Transformers 中的 `AutoModelForXxx` 類在 _tensors_ 上運行(PyTorch或者or TensorFlow), 一個常見的操作是使用 `Tensor.size()` 方法提取張量的維度, 例如, 在 PyTorch 中。讓我們再看看回溯, 看看哪一行觸發了異常:
+
+```
+~/miniconda3/envs/huggingface/lib/python3.8/site-packages/transformers/models/distilbert/modeling_distilbert.py in forward(self, input_ids, attention_mask, head_mask, inputs_embeds, output_attentions, output_hidden_states, return_dict)
+ 471 raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
+ 472 elif input_ids is not None:
+--> 473 input_shape = input_ids.size()
+ 474 elif inputs_embeds is not None:
+ 475 input_shape = inputs_embeds.size()[:-1]
+
+AttributeError: 'list' object has no attribute 'size'
+```
+
+看起來我們的代碼試圖調用 `input_ids.size()`, 但這顯然不適用於 Python `list`, 這只是一個容器。我們如何解決這個問題? 在 Stack Overflow 上搜索錯誤消息給出了很多相關的 [hits](https://stackoverflow.com/search?q=AttributeError%3A+%27list%27+object+has+no+attribute+%27size%27&s=c15ec54c-63cb-481d-a749-408920073e8f)。單擊第一個會顯示與我們類似的問題, 答案如下面的屏幕截圖所示:
+
+
+
+
+
+答案建議我們添加 `return_tensors='pt'` 到標記器, 所以讓我們看看這是否適合我們:
+
+```python out
+inputs = tokenizer(question, context, add_special_tokens=True, return_tensors="pt")
+input_ids = inputs["input_ids"][0]
+outputs = model(**inputs)
+answer_start_scores = outputs.start_logits
+answer_end_scores = outputs.end_logits
+# Get the most likely beginning of answer with the argmax of the score
+answer_start = torch.argmax(answer_start_scores)
+# Get the most likely end of answer with the argmax of the score
+answer_end = torch.argmax(answer_end_scores) + 1
+answer = tokenizer.convert_tokens_to_string(
+ tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end])
+)
+print(f"Question: {question}")
+print(f"Answer: {answer}")
+```
+
+```python out
+"""
+Question: Which frameworks can I use?
+Answer: pytorch, tensorflow, and jax
+"""
+```
+
+不錯, 成功了! 這是 Stack Overflow 非常有用的一個很好的例子: 通過識別類似的問題, 我們能夠從社區中其他人的經驗中受益。然而, 像這樣的搜索並不總是會產生相關的答案, 那麼在這種情況下你能做什麼呢? 幸運的是, 有一個受歡迎的開發者社區 [Hugging Face forums](https://discuss.huggingface.co/) 可以幫助你! 在下一節中, 我們將看看如何設計可能得到回答的優秀論壇問題。
\ No newline at end of file
diff --git a/chapters/zh-TW/chapter8/3.mdx b/chapters/zh-TW/chapter8/3.mdx
new file mode 100644
index 000000000..8fa909369
--- /dev/null
+++ b/chapters/zh-TW/chapter8/3.mdx
@@ -0,0 +1,166 @@
+# 在論壇上尋求幫助
+
+
+
+
+
+[Hugging Face 論壇](https://discuss.huggingface.co) 是從開源團隊和更廣泛的 Hugging Face 社區獲得幫助的好地方。以下是論壇某一天的主頁面:
+
+
+
+
+
+在左側,您可以看到各種主題分組的所有類別,而右側顯示了最新的主題。主題是包含標題、類別和描述的帖子;它與我們在創建自己的數據集時看到的 GitHub 問題格式非常相似[Chapter 5](/course/chapter5).顧名思義,[Beginners](https://discuss.huggingface.co/c/beginners/5)類別主要面向剛開始使用 Hugging Face 庫和生態系統的人。歡迎對任何庫提出任何問題,無論是調試一些代碼還是尋求有關如何做某事的幫助。 (也就是說,如果您的問題特別涉及某個圖書館,您可能應該前往論壇上的相應圖書館類別。)
+
+同樣,the [Intermediate](https://discuss.huggingface.co/c/intermediate/6)和[Research](https://discuss.huggingface.co/c/research/7)類別用於更高級的問題,例如關於圖書館或您想討論的一些很酷的新 NLP 研究。
+
+當然,我們也應該提到[Course](https://discuss.huggingface.co/c/course/20)類別,您可以在其中提出與 Hugging Face 課程相關的任何問題!
+
+選擇類別後,您就可以編寫第一個主題了。 你可以找一些[guidelines](https://discuss.huggingface.co/t/how-to-request-support/3128) 在有關如何執行此操作的論壇中,在本節中,我們將看看構成一個好的主題的一些功能。
+
+## 寫一篇好的論壇帖子
+
+作為一個運行示例,假設我們試圖從 Wikipedia 文章生成嵌入表示以創建自定義搜索引擎。像往常一樣,我們按如下方式加載分詞器和模型:
+
+```python
+from transformers import AutoTokenizer, AutoModel
+
+model_checkpoint = "distilbert-base-uncased"
+tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
+model = AutoModel.from_pretrained(model_checkpoint)
+```
+
+現在我們嘗試將[變形金剛的維基百科](https://en.wikipedia.org/wiki/Transformers)的一整段進行嵌入表示(熱知識:變形金剛的英文就是 Transformers ,而現在 Transformers 作為一個 🤗 Python 庫也被越來越多人熟知):
+
+```python
+text = """
+Generation One is a retroactive term for the Transformers characters that
+appeared between 1984 and 1993. The Transformers began with the 1980s Japanese
+toy lines Micro Change and Diaclone. They presented robots able to transform
+into everyday vehicles, electronic items or weapons. Hasbro bought the Micro
+Change and Diaclone toys, and partnered with Takara. Marvel Comics was hired by
+Hasbro to create the backstory; editor-in-chief Jim Shooter wrote an overall
+story, and gave the task of creating the characthers to writer Dennis O'Neil.
+Unhappy with O'Neil's work (although O'Neil created the name "Optimus Prime"),
+Shooter chose Bob Budiansky to create the characters.
+
+The Transformers mecha were largely designed by Shōji Kawamori, the creator of
+the Japanese mecha anime franchise Macross (which was adapted into the Robotech
+franchise in North America). Kawamori came up with the idea of transforming
+mechs while working on the Diaclone and Macross franchises in the early 1980s
+(such as the VF-1 Valkyrie in Macross and Robotech), with his Diaclone mechs
+later providing the basis for Transformers.
+
+The primary concept of Generation One is that the heroic Optimus Prime, the
+villainous Megatron, and their finest soldiers crash land on pre-historic Earth
+in the Ark and the Nemesis before awakening in 1985, Cybertron hurtling through
+the Neutral zone as an effect of the war. The Marvel comic was originally part
+of the main Marvel Universe, with appearances from Spider-Man and Nick Fury,
+plus some cameos, as well as a visit to the Savage Land.
+
+The Transformers TV series began around the same time. Produced by Sunbow
+Productions and Marvel Productions, later Hasbro Productions, from the start it
+contradicted Budiansky's backstories. The TV series shows the Autobots looking
+for new energy sources, and crash landing as the Decepticons attack. Marvel
+interpreted the Autobots as destroying a rogue asteroid approaching Cybertron.
+Shockwave is loyal to Megatron in the TV series, keeping Cybertron in a
+stalemate during his absence, but in the comic book he attempts to take command
+of the Decepticons. The TV series would also differ wildly from the origins
+Budiansky had created for the Dinobots, the Decepticon turned Autobot Jetfire
+(known as Skyfire on TV), the Constructicons (who combine to form
+Devastator),[19][20] and Omega Supreme. The Marvel comic establishes early on
+that Prime wields the Creation Matrix, which gives life to machines. In the
+second season, the two-part episode The Key to Vector Sigma introduced the
+ancient Vector Sigma computer, which served the same original purpose as the
+Creation Matrix (giving life to Transformers), and its guardian Alpha Trion.
+"""
+
+inputs = tokenizer(text, return_tensors="pt")
+logits = model(**inputs).logits
+```
+
+```python output
+IndexError: index out of range in self
+```
+
+呃,我們遇到了一個問題——錯誤信息比我們看到的要神秘得多[section 2](/course/chapter8/section2)!我們無法確定完整回溯的正面或反面,因此我們決定轉向 Hugging Face 論壇尋求幫助。我們如何設計主題?
+
+首先,我們需要點擊右上角的“新建主題”按鈕(注意,要創建主題,我們需要登錄):
+
+
+
+為了給你的演示添加額外的內容,`Interface` 類支持一些可選參數:
+ - `title`:你可以給你的演示一個標題,它出現在輸入和輸出組件的上方。
+ - `description`:您可以為界面提供描述(文本、Markdown 或 HTML),顯示在輸入和輸出組件的上方和標題下方。
+ - `article`:您還可以編寫擴展文章(文本、Markdown 或 HTML)來解釋界面。如果提供,它會出現在輸入和輸出組件的_下方。
+ - `theme`:不喜歡默認顏色?將主題設置為使用 `default`、`huggingface`、`grass`、`peach` 之一。您還可以添加 `dark-` 前綴,例如`dark-peach` 用於深色主題(或者只是 `dark` 用於默認的深色主題)。
+ - `examples`:為了讓您的演示*更易於使用*,您可以為函數提供一些示例輸入。它們出現在 UI 組件下方,可用於填充界面。這些應該作為嵌套列表提供,其中外部列表由樣本組成,每個內部列表對應於每個輸入組件的輸入組成。
+ - `live`:如果你想讓你的演示“活”,這意味著你的模型每次輸入更改時都會重新運行,你可以設置 `live=True`。這對使用快速模型很有意義(我們將在本節末尾看到一個示例)
+使用上面的選項,我們最終得到了一個更完整的界面。 運行下面的代碼,以便與 Rick and Morty 聊天:
+
+```py
+title = "Ask Rick a Question"
+description = """
+The bot was trained to answer questions based on Rick and Morty dialogues. Ask Rick anything!
+
+"""
+
+article = "Check out [the original Rick and Morty Bot](https://huggingface.co/spaces/kingabzpro/Rick_and_Morty_Bot) that this demo is based off of."
+
+gr.Interface(
+ fn=predict,
+ inputs="textbox",
+ outputs="text",
+ title=title,
+ description=description,
+ article=article,
+ examples=[["What are you doing?"], ["Where should we time travel to?"]],
+).launch()
+```
+
+使用上面的選項,我們最終得到了一個更完整的界面。 試試下面的界面:
+
+
+
+### 使用臨時鏈接分享您的演示
+現在我們已經有了機器學習模型的工作演示,讓我們學習如何輕鬆共享指向我們界面的鏈接。
+通過在 `launch()` 方法中設置 `share=True` 可以輕鬆地公開共享接口:
+
+```python
+gr.Interface(classify_image, "image", "label").launch(share=True)
+```
+
+這會生成一個公開的、可共享的鏈接,您可以將其發送給任何人! 當您發送此鏈接時,另一方的用戶可以在瀏覽器中試用該模型長達 72 小時。 因為處理發生在您的設備上(只要您的設備保持開啟!),您不必擔心打包任何依賴項。 如果您使用 Google Colab 筆記本工作,則始終會自動創建共享鏈接。 它通常看起來像這樣:**XXXXX.gradio.app**。 雖然鏈接是通過 Gradio 鏈接提供的,但我們只是您本地服務器的代理,不會存儲通過接口發送的任何數據。
+
+但是請記住,這些鏈接是可公開訪問的,這意味著任何人都可以使用您的模型進行預測! 因此,請確保不要通過您編寫的函數公開任何敏感信息,或允許在您的設備上發生任何關鍵更改。 如果設置 `share=False`(默認值),則僅創建本地鏈接。
+
+### 在 Hugging Face Spaces 上託管您的演示
+
+可以傳遞給同事的共享鏈接很酷,但是如何永久託管您的演示並讓它存在於互聯網上自己的“空間”中?
+
+Hugging Face Spaces 提供了在互聯網上永久託管 Gradio 模型的基礎設施,**免費**! Spaces 允許您創建並推送到(公共或私人)存儲庫,
+你的 Gradio 在哪裡
+接口代碼將存在於 `app.py` 文件中。 [閱讀分步教程](https://huggingface.co/blog/gradio-spaces) 開始使用,或觀看下面的示例視頻。
+
+
+
+## ✏️ 讓我們應用它!
+
+使用到目前為止我們在各節中學到的知識,讓我們創建我們在[本章第一節](/course/chapter9/1)中看到的草圖識別演示。 讓我們為我們的界面添加一些自定義並設置 `share=True` 以創建一個我們可以傳遞的公共鏈接。
+
+我們可以從 [class_names.txt](https://huggingface.co/spaces/dawood/Sketch-Recognition/blob/main/class_names.txt) 加載標籤,並從 [pytorch_model.bin](https://huggingface.co/spaces/dawood/Sketch-Recognition/blob/main/pytorch_model.bin)加載預訓練的 pytorch 模型 。 通過點擊鏈接並單擊文件預覽左上角的下載來下載這些文件。 讓我們看看下面的代碼,看看我們如何使用這些文件來加載我們的模型並創建一個`predict()`函數:
+```py
+from pathlib import Path
+import torch
+import gradio as gr
+from torch import nn
+
+LABELS = Path("class_names.txt").read_text().splitlines()
+
+model = nn.Sequential(
+ nn.Conv2d(1, 32, 3, padding="same"),
+ nn.ReLU(),
+ nn.MaxPool2d(2),
+ nn.Conv2d(32, 64, 3, padding="same"),
+ nn.ReLU(),
+ nn.MaxPool2d(2),
+ nn.Conv2d(64, 128, 3, padding="same"),
+ nn.ReLU(),
+ nn.MaxPool2d(2),
+ nn.Flatten(),
+ nn.Linear(1152, 256),
+ nn.ReLU(),
+ nn.Linear(256, len(LABELS)),
+)
+state_dict = torch.load("pytorch_model.bin", map_location="cpu")
+model.load_state_dict(state_dict, strict=False)
+model.eval()
+
+
+def predict(im):
+ x = torch.tensor(im, dtype=torch.float32).unsqueeze(0).unsqueeze(0) / 255.0
+ with torch.no_grad():
+ out = model(x)
+ probabilities = torch.nn.functional.softmax(out[0], dim=0)
+ values, indices = torch.topk(probabilities, 5)
+ return {LABELS[i]: v.item() for i, v in zip(indices, values)}
+```
+
+現在我們有了一個`predict()`函數。 下一步是定義並啟動我們的漸變界面:
+
+```py
+interface = gr.Interface(
+ predict,
+ inputs="sketchpad",
+ outputs="label",
+ theme="huggingface",
+ title="Sketch Recognition",
+ description="Who wants to play Pictionary? Draw a common object like a shovel or a laptop, and the algorithm will guess in real time!",
+ article="
Sketch Recognition | Demo Model
",
+ live=True,
+)
+interface.launch(share=True)
+```
+
+
+
+
+注意 `Interface` 中的 `live=True` 參數,這意味著草圖演示使
+每次有人在畫板上畫畫時的預測(沒有提交按鈕!)。
+
+此外,我們還在 `launch()` 方法中設置了 `share=True` 參數。
+這將創建一個公共鏈接,您可以發送給任何人! 當您發送此鏈接時,對方的用戶可以嘗試草圖識別模型。 重申一下,您還可以在 Hugging Face Spaces 上託管模型,這就是我們能夠嵌入上面的演示的方式。
+
+接下來,我們將介紹 Gradio 可用於 Hugging Face 生態系統的其他方式!
\ No newline at end of file
diff --git a/chapters/zh-TW/chapter9/5.mdx b/chapters/zh-TW/chapter9/5.mdx
new file mode 100644
index 000000000..af733d52f
--- /dev/null
+++ b/chapters/zh-TW/chapter9/5.mdx
@@ -0,0 +1,66 @@
+# 與 Hugging Face Hub 整合
+
+
+
+為了讓你的生活更輕鬆, Gradio 直接與 Hugging Face Hub 和 Hugging Face Spaces 集成。你可以僅使用 *一行代碼* 從中心和空間加載演示。
+
+### 從 Hugging Face Hub 加載模型
+首先, 從 Hugging Face 通過 Hub 提供的數千個模型中選擇一個, 如 [第四章](/course/chapter4/2) 中所述。
+
+使用特殊的 `Interface.load()` 方法, 你可以傳遞 `"model/"` (或者, 等效的, `"huggingface/"`) 後面是模型名稱。例如, 這裡是為大型語言模型 [GPT-J](https://huggingface.co/EleutherAI/gpt-j-6B)構建演示的代碼, 添加幾個示例輸入:
+
+```py
+import gradio as gr
+
+title = "GPT-J-6B"
+description = "Gradio Demo for GPT-J 6B, a transformer model trained using Ben Wang's Mesh Transformer JAX. 'GPT-J' refers to the class of model, while '6B' represents the number of trainable parameters. To use it, simply add your text, or click one of the examples to load them. Read more at the links below."
+article = "
+
+Thomas Wolf 是 Hugging Face 的聯合創始人兼首席科學官。 Thomas Wolf 和 Hugging Face 團隊創建的工具被 5,000 多個研究機構使用,包括 Facebook 人工智能研究、谷歌研究、DeepMind、亞馬遜研究、蘋果、艾倫人工智能研究所以及大多數大學系。 Thomas Wolf 是人工智能領域有史以來最大的研究合作的發起人和高級主席:[“BigScience”](https://bigscience.huggingface.co),以及一組廣泛使用的 [庫和工具](https://github.com/huggingface/)。 Thomas Wolf 還是一位多產的教育家、人工智能和自然語言處理領域的思想領袖,並且經常受邀在世界各地的會議上發表演講 [https://thomwolf.io](https://thomwolf.io )。
+
+**Jay Alammar:** *Transformers模型的圖解*
+
+
+
+Margaret Mitchell 是一名從事人工智能倫理研究的研究員,目前專注於以倫理為依據的人工智能開發。她在自然語言生成、輔助技術、計算機視覺和人工智能倫理方面發表了 50 多篇論文,並在會話生成和情感分類領域擁有多項專利。她之前曾在 Google AI 擔任員工研究科學家,在那裡她創立並共同領導了 Google 的倫理 AI 小組,專注於基礎 AI 倫理研究和在 Google 內部實施 AI 倫理。在加入谷歌之前,她是微軟研究院的一名研究員,專注於計算機視覺到語言的生成;並且是約翰霍普金斯大學的博士後,專注於貝葉斯建模和信息提取。她擁有阿伯丁大學計算機科學博士學位和華盛頓大學計算語言學碩士學位。在獲得學位的同時,她還於 2005 年至 2012 年在俄勒岡健康與科學大學從事機器學習、神經系統疾病和輔助技術方面的工作。她在多樣性、包容性、計算機科學和倫理學的交叉領域領導了許多研討會和倡議。她的工作獲得了國防部長阿什卡特和美國盲人基金會的獎勵,並被多家科技公司實施。她喜歡園藝、狗和貓。
+
+**Matthew Watson 和 Chen Qian:** *使用 Keras 的 NLP 工作流程*
+
+
+
+
+
+
+
+
+
+Matthew Watson 是 Keras 團隊的機器學習工程師,專注於高級建模 API。 他在本科期間學習計算機圖形學,並在斯坦福大學獲得碩士學位。 作為一名幾乎是英語專業的學生,他轉向計算機科學,熱衷於跨學科工作並使 NLP 為更廣泛的受眾所接受。
+
+Chen Qian 是 Keras 團隊的一名軟件工程師,專注於高級建模 API。 Chen 在斯坦福大學獲得電氣工程碩士學位,他對簡化 ML 任務和大規模 ML 的代碼實現特別感興趣。
+
+**Mark Saroufim:** *如何使用 Pytorch 訓練模型*
+
+
+
+Philipp Schmid 是 Hugging Face 的機器學習工程師和技術主管,負責領導與 Amazon SageMaker 團隊的合作。 他熱衷於使尖端 NLP 模型民主化和生產化,並提高深度學習的易用性。
\ No newline at end of file
diff --git a/subtitles/README.md b/subtitles/README.md
index 002948954..833481ede 100644
--- a/subtitles/README.md
+++ b/subtitles/README.md
@@ -37,8 +37,8 @@ For example, in the `zh-CN` subtitles, each block has the following format:
```
1
00:00:05,850 --> 00:00:07,713
-- 欢迎来到 Hugging Face 课程。
-- Welcome to the Hugging Face Course.
+欢迎来到 Hugging Face 课程。
+Welcome to the Hugging Face Course.
```
To upload the SRT file to YouTube, we need the subtitle in monolingual format, i.e. the above block should read:
@@ -46,7 +46,7 @@ To upload the SRT file to YouTube, we need the subtitle in monolingual format, i
```
1
00:00:05,850 --> 00:00:07,713
-- 欢迎来到 Hugging Face 课程。
+欢迎来到 Hugging Face 课程。
```
To handle this, we provide a script that converts the bilingual SRT files to monolingual ones. To perform the conversion, run:
diff --git a/subtitles/en/33_the-push-to-hub-api-(pytorch).srt b/subtitles/en/33_the-push-to-hub-api-(pytorch).srt
index a2fcf8caf..3c27675f3 100644
--- a/subtitles/en/33_the-push-to-hub-api-(pytorch).srt
+++ b/subtitles/en/33_the-push-to-hub-api-(pytorch).srt
@@ -40,7 +40,7 @@ password, then click login,
10
00:00:26,640 --> 00:00:28,620
-this will store a notification token
+this will store a authentication token
11
00:00:28,620 --> 00:00:30,670
@@ -446,7 +446,7 @@ with the from_pretrained method
103
00:04:21,113 --> 00:04:22,923
-of with the pipeline function.
+or with the pipeline function.
104
00:04:34,350 --> 00:04:36,780
diff --git a/subtitles/en/41_text-embeddings-&-semantic-search.srt b/subtitles/en/41_text-embeddings-&-semantic-search.srt
index 51c9d9b29..5fc6dc369 100644
--- a/subtitles/en/41_text-embeddings-&-semantic-search.srt
+++ b/subtitles/en/41_text-embeddings-&-semantic-search.srt
@@ -194,12 +194,12 @@ average the token embeddings
44
00:01:49,650 --> 00:01:52,500
-which is called mean pooling
+which is called mean_pooling
and this is what we do here.
45
00:01:53,370 --> 00:01:55,800
-With mean pooling the only
+With mean_pooling the only
thing we need to make sure
46
@@ -210,7 +210,7 @@ padding tokens in the average,
47
00:01:58,410 --> 00:02:01,860
which is why you can see the
-attention mask being used here.
+attention_mask being used here.
48
00:02:01,860 --> 00:02:05,100
@@ -313,7 +313,7 @@ we take a small sample
70
00:02:56,070 --> 00:02:57,780
-from the SQUAD dataset and apply
+from the squad dataset and apply
71
00:02:57,780 --> 00:03:00,180
diff --git a/subtitles/en/metadata_tasks.csv b/subtitles/en/metadata_tasks.csv
new file mode 100644
index 000000000..2af9c9a82
--- /dev/null
+++ b/subtitles/en/metadata_tasks.csv
@@ -0,0 +1,7 @@
+id,title,link,srt_filename
+wVHdVlPScxA,🤗 Tasks: Token Classification,https://www.youtube.com/watch?v=wVHdVlPScxA&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=1,subtitles/en/tasks_00_🤗-tasks-token-classification.srt
+ajPx5LwJD-I,🤗 Tasks: Question Answering,https://www.youtube.com/watch?v=ajPx5LwJD-I&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=2,subtitles/en/tasks_01_🤗-tasks-question-answering.srt
+Vpjb1lu0MDk,🤗 Tasks: Causal Language Modeling,https://www.youtube.com/watch?v=Vpjb1lu0MDk&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=3,subtitles/en/tasks_02_🤗-tasks-causal-language-modeling.srt
+mqElG5QJWUg,🤗 Tasks: Masked Language Modeling,https://www.youtube.com/watch?v=mqElG5QJWUg&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=4,subtitles/en/tasks_03_🤗-tasks-masked-language-modeling.srt
+yHnr5Dk2zCI,🤗 Tasks: Summarization,https://www.youtube.com/watch?v=yHnr5Dk2zCI&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=5,subtitles/en/tasks_04_🤗-tasks-summarization.srt
+1JvfrvZgi6c,🤗 Tasks: Translation,https://www.youtube.com/watch?v=1JvfrvZgi6c&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=6,subtitles/en/tasks_05_🤗-tasks-translation.srt
diff --git a/subtitles/en/raw/tasks.md b/subtitles/en/raw/tasks.md
new file mode 100644
index 000000000..a95d2429a
--- /dev/null
+++ b/subtitles/en/raw/tasks.md
@@ -0,0 +1,77 @@
+Note: the following transcripts are associated with Merve Noyan's videos in the Hugging Face Tasks playlist: https://www.youtube.com/playlist?list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf
+
+Token Classification video
+
+Welcome to the Hugging Face tasks series! In this video we’ll take a look at the token classification task.
+Token classification is the task of assigning a label to each token in a sentence. There are various token classification tasks and the most common are Named Entity Recognition and Part-of-Speech Tagging.
+Let’s take a quick look at the Named Entity Recognition task. The goal of this task is to find the entities in a piece of text, such as person, location, or organization. This task is formulated as labelling each token with one class for each entity, and another class for tokens that have no entity.
+Another token classification task is part-of-speech tagging. The goal of this task is to label the words for a particular part of a speech, such as noun, pronoun, adjective, verb and so on. This task is formulated as labelling each token with parts of speech.
+Token classification models are evaluated on Accuracy, Recall, Precision and F1-Score. The metrics are calculated for each of the classes. We calculate true positive, true negative and false positives to calculate precision and recall, and take their harmonic mean to get F1-Score. Then we calculate it for every class and take the overall average to evaluate our model.
+An example dataset used for this task is ConLL2003. Here, each token belongs to a certain named entity class, denoted as the indices of the list containing the labels.
+You can extract important information from invoices using named entity recognition models, such as date, organization name or address.
+For more information about the Token classification task, check out the Hugging Face course.
+
+
+Question Answering video
+
+Welcome to the Hugging Face tasks series. In this video, we will take a look at the Question Answering task.
+Question answering is the task of extracting an answer in a given document.
+Question answering models take a context, which is the document you want to search in, and a question and return an answer. Note that the answer is not generated, but extracted from the context. This type of question answering is called extractive.
+The task is evaluated on two metrics, exact match and F1-Score.
+As the name implies, exact match looks for an exact match between the predicted answer and the correct answer.
+A common metric used is the F1-Score, which is calculated over tokens that are predicted correctly and incorrectly. It is calculated over the average of two metrics called precision and recall which are metrics that are used widely in classification problems.
+An example dataset used for this task is called SQuAD. This dataset contains contexts, questions and the answers that are obtained from English Wikipedia articles.
+You can use question answering models to automatically answer the questions asked by your customers. You simply need a document containing information about your business and query through that document with the questions asked by your customers.
+For more information about the Question Answering task, check out the Hugging Face course.
+
+
+Causal Language Modeling video
+
+Welcome to the Hugging Face tasks series! In this video we’ll take a look at Causal Language Modeling.
+Causal language modeling is the task of predicting the next
+word in a sentence, given all the previous words. This task is very similar to the autocorrect function that you might have on your phone.
+These models take a sequence to be completed and outputs the complete sequence.
+Classification metrics can’t be used as there’s no single correct answer for completion. Instead, we evaluate the distribution of the text completed by the model.
+A common metric to do so is the cross-entropy loss. Perplexity is also a widely used metric and it is calculated as the exponential of the cross-entropy loss.
+You can use any dataset with plain text and tokenize the text to prepare the data.
+Causal language models can be used to generate code.
+For more information about the Causal Language Modeling task, check out the Hugging Face course.
+
+
+Masked Language Modeling video
+
+Welcome to the Hugging Face tasks series! In this video we’ll take a look at Masked Language Modeling.
+Masked language modeling is the task of predicting which words should fill in the blanks of a sentence.
+These models take a masked text as the input and output the possible values for that mask.
+Masked language modeling is handy before fine-tuning your model for your task. For example, if you need to use a model in a specific domain, say, biomedical documents, models like BERT will treat your domain-specific words as rare tokens. If you train a masked language model using your biomedical corpus and then fine tune your model on a downstream task, you will have a better performance.
+Classification metrics can’t be used as there’s no single correct answer to mask values. Instead, we evaluate the distribution of the mask values.
+A common metric to do so is the cross-entropy loss. Perplexity is also a widely used metric and it is calculated as the exponential of the cross-entropy loss.
+You can use any dataset with plain text and tokenize the text to mask the data.
+For more information about the Masked Language Modeling, check out the Hugging Face course.
+
+
+Summarization video
+
+Welcome to the Hugging Face tasks series. In this video, we will take a look at the Text Summarization task.
+Summarization is a task of producing a shorter version of a document while preserving the relevant and important information in the document.
+Summarization models take a document to be summarized and output the summarized text.
+This task is evaluated on the ROUGE score. It’s based on the overlap between the produced sequence and the correct sequence.
+You might see this as ROUGE-1, which is the overlap of single tokens and ROUGE-2, the overlap of subsequent token pairs. ROUGE-N refers to the overlap of n subsequent tokens. Here we see an example of how overlaps take place.
+An example dataset used for this task is called Extreme Summarization, XSUM. This dataset contains texts and their summarized versions.
+You can use summarization models to summarize research papers which would enable researchers to easily pick papers for their reading list.
+For more information about the Summarization task, check out the Hugging Face course.
+
+
+Translation video
+
+Welcome to the Hugging Face tasks series. In this video, we will take a look at the Translation task.
+Translation is the task of translating text from one language to another.
+These models take a text in the source language and output the translation of that text in the target language.
+The task is evaluated on the BLEU score.
+The score ranges from 0 to 1, in which 1 means the translation perfectly matched and 0 did not match at all.
+BLEU is calculated over subsequent tokens called n-grams. Unigram refers to a single token while bi-gram refers to token pairs and n-grams refer to n subsequent tokens.
+Machine translation datasets contain pairs of text in a language and translation of the text in another language.
+These models can help you build conversational agents across different languages.
+One option is to translate the training data used for the chatbot and train a separate chatbot.
+You can put one translation model from your user’s language to the language your chatbot is trained on, translate the user inputs and do intent classification, take the output of the chatbot and translate it from the language your chatbot was trained on to the user’s language.
+For more information about the Translation task, check out the Hugging Face course.
diff --git "a/subtitles/en/tasks_00_\360\237\244\227-tasks-token-classification.srt" "b/subtitles/en/tasks_00_\360\237\244\227-tasks-token-classification.srt"
new file mode 100644
index 000000000..ee6e6f207
--- /dev/null
+++ "b/subtitles/en/tasks_00_\360\237\244\227-tasks-token-classification.srt"
@@ -0,0 +1,116 @@
+1
+00:00:04,520 --> 00:00:07,400
+Welcome to the Hugging Face tasks series!
+
+2
+00:00:07,400 --> 00:00:11,870
+In this video we’ll take a look at the token
+classification task.
+
+3
+00:00:11,870 --> 00:00:17,900
+Token classification is the task of assigning
+a label to each token in a sentence.
+
+4
+00:00:17,900 --> 00:00:23,310
+There are various token classification tasks
+and the most common are Named Entity Recognition
+
+5
+00:00:23,310 --> 00:00:26,430
+and Part-of-Speech Tagging.
+
+6
+00:00:26,430 --> 00:00:31,640
+Let’s take a quick look at the Named Entity
+Recognition task.
+
+7
+00:00:31,640 --> 00:00:38,400
+The goal of this task is to find the entities
+in a piece of text, such as person, location,
+
+8
+00:00:38,400 --> 00:00:40,210
+or organization.
+
+9
+00:00:40,210 --> 00:00:45,250
+This task is formulated as labelling each
+token with one class for each entity, and
+
+10
+00:00:45,250 --> 00:00:51,719
+another class for tokens that have no entity.
+
+11
+00:00:51,719 --> 00:00:55,670
+Another token classification task is part-of-speech
+tagging.
+
+12
+00:00:55,670 --> 00:01:01,399
+The goal of this task is to label the words
+for a particular part of a speech, such as
+
+13
+00:01:01,399 --> 00:01:05,900
+noun, pronoun, adjective, verb and so on.
+
+14
+00:01:05,900 --> 00:01:11,270
+This task is formulated as labelling each
+token with parts of speech.
+
+15
+00:01:11,270 --> 00:01:19,659
+Token classification models are evaluated
+on Accuracy, Recall, Precision and F1-Score.
+
+16
+00:01:19,659 --> 00:01:22,950
+The metrics are calculated for each of the
+classes.
+
+17
+00:01:22,950 --> 00:01:28,040
+We calculate true positive, true negative
+and false positives to calculate precision
+
+18
+00:01:28,040 --> 00:01:31,829
+and recall, and take their harmonic mean to
+get F1-Score.
+
+19
+00:01:31,829 --> 00:01:42,329
+Then we calculate it for every class and take
+the overall average to evaluate our model.
+
+20
+00:01:42,329 --> 00:01:45,680
+An example dataset used for this task is ConLL2003.
+
+21
+00:01:45,680 --> 00:01:51,750
+Here, each token belongs to a certain named
+entity class, denoted as the indices of the
+
+22
+00:01:51,750 --> 00:01:55,380
+list containing the labels.
+
+23
+00:01:55,380 --> 00:02:00,720
+You can extract important information from
+invoices using named entity recognition models,
+
+24
+00:02:00,720 --> 00:02:07,070
+such as date, organization name or address.
+
+25
+00:02:07,070 --> 00:02:16,840
+For more information about the Token classification
+task, check out the Hugging Face course.
diff --git "a/subtitles/en/tasks_01_\360\237\244\227-tasks-question-answering.srt" "b/subtitles/en/tasks_01_\360\237\244\227-tasks-question-answering.srt"
new file mode 100644
index 000000000..6416fde12
--- /dev/null
+++ "b/subtitles/en/tasks_01_\360\237\244\227-tasks-question-answering.srt"
@@ -0,0 +1,87 @@
+1
+00:00:04,400 --> 00:00:06,480
+Welcome to the Hugging Face tasks series.
+
+2
+00:00:07,200 --> 00:00:10,080
+In this video, we will take a look
+at the Question Answering task.
+
+3
+00:00:13,120 --> 00:00:17,200
+Question answering is the task of
+extracting an answer in a given document.
+
+4
+00:00:21,120 --> 00:00:25,600
+Question answering models take a context,
+which is the document you want to search in,
+
+5
+00:00:26,240 --> 00:00:31,440
+and a question and return an answer.
+Note that the answer is not generated,
+
+6
+00:00:31,440 --> 00:00:37,600
+but extracted from the context. This type
+of question answering is called extractive.
+
+7
+00:00:42,320 --> 00:00:46,960
+The task is evaluated on two
+metrics, exact match and F1-Score.
+
+8
+00:00:49,680 --> 00:00:52,320
+As the name implies, exact match looks for an
+
+9
+00:00:52,320 --> 00:00:57,840
+exact match between the predicted
+answer and the correct answer.
+
+10
+00:01:00,080 --> 00:01:05,520
+A common metric used is the F1-Score, which
+is calculated over tokens that are predicted
+
+11
+00:01:05,520 --> 00:01:10,960
+correctly and incorrectly. It is calculated
+over the average of two metrics called
+
+12
+00:01:10,960 --> 00:01:16,560
+precision and recall which are metrics that
+are used widely in classification problems.
+
+13
+00:01:20,880 --> 00:01:28,240
+An example dataset used for this task is called
+SQuAD. This dataset contains contexts, questions
+
+14
+00:01:28,240 --> 00:01:32,080
+and the answers that are obtained
+from English Wikipedia articles.
+
+15
+00:01:35,440 --> 00:01:39,520
+You can use question answering models to
+automatically answer the questions asked
+
+16
+00:01:39,520 --> 00:01:46,480
+by your customers. You simply need a document
+containing information about your business
+
+17
+00:01:47,200 --> 00:01:53,840
+and query through that document with
+the questions asked by your customers.
+
+18
+00:01:55,680 --> 00:02:06,160
+For more information about the Question Answering
+task, check out the Hugging Face course.
diff --git "a/subtitles/en/tasks_02_\360\237\244\227-tasks-causal-language-modeling.srt" "b/subtitles/en/tasks_02_\360\237\244\227-tasks-causal-language-modeling.srt"
new file mode 100644
index 000000000..06dc54e12
--- /dev/null
+++ "b/subtitles/en/tasks_02_\360\237\244\227-tasks-causal-language-modeling.srt"
@@ -0,0 +1,63 @@
+1
+00:00:04,560 --> 00:00:06,640
+Welcome to the Hugging Face tasks series!
+
+2
+00:00:07,200 --> 00:00:10,400
+In this video we’ll take a look
+at Causal Language Modeling.
+
+3
+00:00:13,600 --> 00:00:16,880
+Causal language modeling is
+the task of predicting the next
+
+4
+00:00:16,880 --> 00:00:21,920
+word in a sentence, given all the
+previous words. This task is very
+
+5
+00:00:21,920 --> 00:00:29,920
+similar to the autocorrect function
+that you might have on your phone.
+
+6
+00:00:29,920 --> 00:00:34,720
+These models take a sequence to be
+completed and outputs the complete sequence.
+
+7
+00:00:38,640 --> 00:00:44,160
+Classification metrics can’t be used as there’s
+no single correct answer for completion.
+
+8
+00:00:44,960 --> 00:00:49,280
+Instead, we evaluate the distribution
+of the text completed by the model.
+
+9
+00:00:50,800 --> 00:00:55,440
+A common metric to do so is the
+cross-entropy loss. Perplexity is
+
+10
+00:00:55,440 --> 00:01:01,280
+also a widely used metric and it is calculated
+as the exponential of the cross-entropy loss.
+
+11
+00:01:05,200 --> 00:01:11,840
+You can use any dataset with plain text
+and tokenize the text to prepare the data.
+
+12
+00:01:15,040 --> 00:01:18,240
+Causal language models can
+be used to generate code.
+
+13
+00:01:22,480 --> 00:01:33,200
+For more information about the Causal Language
+Modeling task, check out the Hugging Face course.
diff --git "a/subtitles/en/tasks_03_\360\237\244\227-tasks-masked-language-modeling.srt" "b/subtitles/en/tasks_03_\360\237\244\227-tasks-masked-language-modeling.srt"
new file mode 100644
index 000000000..28f376b68
--- /dev/null
+++ "b/subtitles/en/tasks_03_\360\237\244\227-tasks-masked-language-modeling.srt"
@@ -0,0 +1,85 @@
+1
+00:00:04,660 --> 00:00:07,589
+Welcome to the Hugging Face tasks series!
+
+2
+00:00:07,589 --> 00:00:13,730
+In this video we’ll take a look at Masked
+Language Modeling.
+
+3
+00:00:13,730 --> 00:00:20,720
+Masked language modeling is the task of predicting
+which words should fill in the blanks of a
+
+4
+00:00:20,720 --> 00:00:23,500
+sentence.
+
+5
+00:00:23,500 --> 00:00:32,870
+These models take a masked text as the input
+and output the possible values for that mask.
+
+6
+00:00:32,870 --> 00:00:37,550
+Masked language modeling is handy before fine-tuning
+your model for your task.
+
+7
+00:00:37,550 --> 00:00:43,579
+For example, if you need to use a model in
+a specific domain, say, biomedical documents,
+
+8
+00:00:43,579 --> 00:00:49,050
+models like BERT will treat your domain-specific
+words as rare tokens.
+
+9
+00:00:49,050 --> 00:00:54,220
+If you train a masked language model using
+your biomedical corpus and then fine tune
+
+10
+00:00:54,220 --> 00:01:02,929
+your model on a downstream task, you will
+have a better performance.
+
+11
+00:01:02,929 --> 00:01:07,799
+Classification metrics can’t be used as
+there’s no single correct answer to mask
+
+12
+00:01:07,799 --> 00:01:08,799
+values.
+
+13
+00:01:08,799 --> 00:01:12,900
+Instead, we evaluate the distribution of the
+mask values.
+
+14
+00:01:12,900 --> 00:01:16,590
+A common metric to do so is the cross-entropy
+loss.
+
+15
+00:01:16,590 --> 00:01:22,010
+Perplexity is also a widely used metric and
+it is calculated as the exponential of the
+
+16
+00:01:22,010 --> 00:01:27,240
+cross-entropy loss.
+
+17
+00:01:27,240 --> 00:01:35,680
+You can use any dataset with plain text and
+tokenize the text to mask the data.
+
+18
+00:01:35,680 --> 00:01:44,710
+For more information about the Masked Language
+Modeling, check out the Hugging Face course.
diff --git "a/subtitles/en/tasks_04_\360\237\244\227-tasks-summarization.srt" "b/subtitles/en/tasks_04_\360\237\244\227-tasks-summarization.srt"
new file mode 100644
index 000000000..0c16f7f85
--- /dev/null
+++ "b/subtitles/en/tasks_04_\360\237\244\227-tasks-summarization.srt"
@@ -0,0 +1,68 @@
+1
+00:00:04,560 --> 00:00:06,640
+Welcome to the Hugging Face tasks series.
+
+2
+00:00:07,280 --> 00:00:10,720
+In this video, we will take a look
+at the Text Summarization task.
+
+3
+00:00:13,680 --> 00:00:16,480
+Summarization is a task of
+producing a shorter version
+
+4
+00:00:16,480 --> 00:00:21,600
+of a document while preserving the relevant
+and important information in the document.
+
+5
+00:00:25,040 --> 00:00:29,840
+Summarization models take a document to be
+summarized and output the summarized text.
+
+6
+00:00:33,360 --> 00:00:40,240
+This task is evaluated on the ROUGE score. It’s
+based on the overlap between the produced sequence
+
+7
+00:00:40,240 --> 00:00:48,000
+and the correct sequence.
+You might see this as ROUGE-1,
+
+8
+00:00:48,000 --> 00:00:55,600
+which is the overlap of single tokens and ROUGE-2,
+the overlap of subsequent token pairs. ROUGE-N
+
+9
+00:00:55,600 --> 00:01:02,960
+refers to the overlap of n subsequent tokens.
+Here we see an example of how overlaps take place.
+
+10
+00:01:06,160 --> 00:01:11,280
+An example dataset used for this task is
+called Extreme Summarization, XSUM. This
+
+11
+00:01:11,280 --> 00:01:14,480
+dataset contains texts and
+their summarized versions.
+
+12
+00:01:17,680 --> 00:01:21,280
+You can use summarization models
+to summarize research papers which
+
+13
+00:01:21,280 --> 00:01:25,680
+would enable researchers to easily
+pick papers for their reading list.
+
+14
+00:01:29,040 --> 00:01:39,520
+For more information about the Summarization
+task, check out the Hugging Face course.
diff --git "a/subtitles/en/tasks_05_\360\237\244\227-tasks-translation.srt" "b/subtitles/en/tasks_05_\360\237\244\227-tasks-translation.srt"
new file mode 100644
index 000000000..ff491e24c
--- /dev/null
+++ "b/subtitles/en/tasks_05_\360\237\244\227-tasks-translation.srt"
@@ -0,0 +1,96 @@
+1
+00:00:04,569 --> 00:00:07,529
+Welcome to the Hugging Face tasks series.
+
+2
+00:00:07,529 --> 00:00:11,840
+In this video, we will take a look at the
+Translation task.
+
+3
+00:00:11,840 --> 00:00:19,420
+Translation is the task of translating text
+from one language to another.
+
+4
+00:00:19,420 --> 00:00:24,420
+These models take a text in the source language
+and output the translation of that text in
+
+5
+00:00:24,420 --> 00:00:28,609
+the target language.
+
+6
+00:00:28,609 --> 00:00:31,619
+The task is evaluated on the BLEU score.
+
+7
+00:00:31,619 --> 00:00:38,430
+The score ranges from 0 to 1, in which 1 means
+the translation perfectly matched and 0 did
+
+8
+00:00:38,430 --> 00:00:40,110
+not match at all.
+
+9
+00:00:40,110 --> 00:00:45,320
+BLEU is calculated over subsequent tokens
+called n-grams.
+
+10
+00:00:45,320 --> 00:00:51,629
+Unigram refers to a single token while bi-gram
+refers to token pairs and n-grams refer to
+
+11
+00:00:51,629 --> 00:00:56,219
+n subsequent tokens.
+
+12
+00:00:56,219 --> 00:01:01,859
+Machine translation datasets contain pairs
+of text in a language and translation of the
+
+13
+00:01:01,859 --> 00:01:05,910
+text in another language.
+
+14
+00:01:05,910 --> 00:01:11,290
+These models can help you build conversational
+agents across different languages.
+
+15
+00:01:11,290 --> 00:01:16,110
+One option is to translate the training data
+used for the chatbot and train a separate
+
+16
+00:01:16,110 --> 00:01:19,970
+chatbot.
+
+17
+00:01:19,970 --> 00:01:24,950
+You can put one translation model from your
+user’s language to the language your chatbot
+
+18
+00:01:24,950 --> 00:01:31,360
+is trained on, translate the user inputs and
+do intent classification, take the output
+
+19
+00:01:31,360 --> 00:01:39,399
+of the chatbot and translate it from the language
+your chatbot was trained on to the user’s
+
+20
+00:01:39,399 --> 00:01:40,850
+language.
+
+21
+00:01:40,850 --> 00:01:49,720
+For more information about the Translation
+task, check out the Hugging Face course.
diff --git a/subtitles/fr/63_data-processing-for-causal-language-modeling.srt b/subtitles/fr/63_data-processing-for-causal-language-modeling.srt
index ebf9da64e..c4d912776 100644
--- a/subtitles/fr/63_data-processing-for-causal-language-modeling.srt
+++ b/subtitles/fr/63_data-processing-for-causal-language-modeling.srt
@@ -116,11 +116,11 @@ et nous ne perdons aucune séquence car elles sont trop courtes. Jusqu'à prése
30
00:03:05,840 --> 00:03:10,720
-des entrées pour la modélisation causale du langage, mais pas des étiquettes nécessaires à l'entraînement supervisée.
+des entrées pour la modélisation du langage causal, mais pas des étiquettes nécessaires à l'entraînement supervisée.
31
00:03:11,600 --> 00:03:16,480
-Lorsque nous effectuons une modélisation causale du langage, nous n'avons pas besoin d'étiquettes supplémentaires pour les séquences d'entrée
+Lorsque nous effectuons une modélisation du langage causal, nous n'avons pas besoin d'étiquettes supplémentaires pour les séquences d'entrée
32
00:03:16,480 --> 00:03:22,080
@@ -168,4 +168,4 @@ Donc vous voyez qu'il n'y a pas de magie
43
00:04:21,600 --> 00:04:27,840
-impliquée dans le traitement des données pour la modélisation du langage causal et ne nécessite que quelques étapes simples !
\ No newline at end of file
+impliquée dans le traitement des données pour la modélisation du langage causal et ne nécessite que quelques étapes simples !
diff --git a/subtitles/fr/metadata_tasks.csv b/subtitles/fr/metadata_tasks.csv
new file mode 100644
index 000000000..c40e0d858
--- /dev/null
+++ b/subtitles/fr/metadata_tasks.csv
@@ -0,0 +1,7 @@
+id,title,link,srt_filename
+wVHdVlPScxA,🤗 Tasks: Token Classification,https://www.youtube.com/watch?v=wVHdVlPScxA&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=1,subtitles/fr/tasks_00_🤗-tasks-token-classification.srt
+ajPx5LwJD-I,🤗 Tasks: Question Answering,https://www.youtube.com/watch?v=ajPx5LwJD-I&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=2,subtitles/fr/tasks_01_🤗-tasks-question-answering.srt
+Vpjb1lu0MDk,🤗 Tasks: Causal Language Modeling,https://www.youtube.com/watch?v=Vpjb1lu0MDk&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=3,subtitles/fr/tasks_02_🤗-tasks-causal-language-modeling.srt
+mqElG5QJWUg,🤗 Tasks: Masked Language Modeling,https://www.youtube.com/watch?v=mqElG5QJWUg&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=4,subtitles/fr/tasks_03_🤗-tasks-masked-language-modeling.srt
+yHnr5Dk2zCI,🤗 Tasks: Summarization,https://www.youtube.com/watch?v=yHnr5Dk2zCI&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=5,subtitles/fr/tasks_04_🤗-tasks-summarization.srt
+1JvfrvZgi6c,🤗 Tasks: Translation,https://www.youtube.com/watch?v=1JvfrvZgi6c&list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf&index=6,subtitles/fr/tasks_05_🤗-tasks-translation.srt
diff --git "a/subtitles/fr/tasks_00_\360\237\244\227-tasks-token-classification.srt" "b/subtitles/fr/tasks_00_\360\237\244\227-tasks-token-classification.srt"
new file mode 100644
index 000000000..bf391083f
--- /dev/null
+++ "b/subtitles/fr/tasks_00_\360\237\244\227-tasks-token-classification.srt"
@@ -0,0 +1,99 @@
+1
+00:00:04,520 --> 00:00:07,400
+Bienvenue dans la série d'Hugging Face sur les tâches !
+
+2
+00:00:07,400 --> 00:00:11,870
+Dans cette vidéo, nous allons jeter un coup d'œil à la tâche de classification de tokens.
+
+3
+00:00:11,870 --> 00:00:17,900
+La classification de tokens consiste à attribuer une étiquette à chaque token d'une phrase
+
+4
+00:00:17,900 --> 00:00:23,310
+Il existe plusieurs tâches de classification de tokens, les plus courantes étant la reconnaissance d’entités nommées
+
+5
+00:00:23,310 --> 00:00:26,430
+et le « part-of-speech ».
+
+6
+00:00:26,430 --> 00:00:31,640
+Jetons un coup d'œil rapide à la tâche de reconnaissance d'entités nommées
+
+7
+00:00:31,640 --> 00:00:38,400
+L'objectif de cette tâche est de trouver les entités dans un texte, comme une personne, un lieu
+
+8
+00:00:38,400 --> 00:00:40,210
+ou une organisation.
+
+9
+00:00:40,210 --> 00:00:45,250
+Cette tâche est formulée comme l'étiquetage de chaque token avec une classe pour chaque entité,
+
+10
+00:00:45,250 --> 00:00:51,719
+et une autre classe pour les tokens qui n'ont pas d'entité.
+
+11
+00:00:51,719 --> 00:00:55,670
+Une autre tâche de classification de tokens est le « part-of-speech ».
+
+12
+00:00:55,670 --> 00:01:01,399
+L'objectif de cette tâche est d'étiqueter les mots pour une partie particulière du texte, comme
+
+13
+00:01:01,399 --> 00:01:05,900
+un nom, un pronom, un adjectif, un verbe, etc.
+
+14
+00:01:05,900 --> 00:01:11,270
+Cette tâche est formulée comme l'étiquetage de chaque token avec les parties du texte.
+
+15
+00:01:11,270 --> 00:01:19,659
+Les modèles de classification de tokens sont évalués sur l'exactitude, le rappel, la précision et le score F1.
+
+16
+00:01:19,659 --> 00:01:22,950
+Les métriques sont calculées pour chacune des classes.
+
+17
+00:01:22,950 --> 00:01:28,040
+Nous calculons les vrais positifs, les vrais négatifs et les faux positifs pour calculer la précision
+
+18
+00:01:28,040 --> 00:01:31,829
+et le rappel, et prenons leur moyenne harmonique pour obtenir le score F1.
+
+19
+00:01:31,829 --> 00:01:42,329
+Ensuite, nous les calculons pour chaque classe et prenons la moyenne globale pour évaluer notre modèle.
+
+20
+00:01:42,329 --> 00:01:45,680
+Un exemple de jeu de données utilisé pour cette tâche est ConLL2003.
+
+21
+00:01:45,680 --> 00:01:51,750
+Ici, chaque token appartient à une certaine classe d'entités nommées, désignées par les indices de la
+
+22
+00:01:51,750 --> 00:01:55,380
+liste contenant les étiquettes.
+
+23
+00:01:55,380 --> 00:02:00,720
+Vous pouvez extraire des informations importantes de factures à l'aide de modèles de reconnaissance d'entités nommées,
+
+24
+00:02:00,720 --> 00:02:07,070
+telles que la date, le nom de l'organisation ou l'adresse.
+
+25
+00:02:07,070 --> 00:02:16,840
+Pour plus d'informations sur la tâche de classification de tokens, consultez le cours d'Hugging Face.
diff --git "a/subtitles/fr/tasks_01_\360\237\244\227-tasks-question-answering.srt" "b/subtitles/fr/tasks_01_\360\237\244\227-tasks-question-answering.srt"
new file mode 100644
index 000000000..da7060062
--- /dev/null
+++ "b/subtitles/fr/tasks_01_\360\237\244\227-tasks-question-answering.srt"
@@ -0,0 +1,71 @@
+1
+00:00:04,400 --> 00:00:06,480
+Bienvenue dans la série d'Hugging Face sur les tâches !
+
+2
+00:00:07,200 --> 00:00:10,080
+Dans cette vidéo, nous allons examiner la tâche de réponse aux questions.
+
+3
+00:00:13,120 --> 00:00:17,200
+La réponse aux questions consiste à extraire une réponse dans un document donné.
+
+4
+00:00:21,120 --> 00:00:25,600
+Les modèles de réponse aux questions prennent un contexte, qui est le document dans lequel vous souhaitez effectuer une recherche,
+
+5
+00:00:26,240 --> 00:00:31,440
+et une question et renvoient une réponse. Notez que la réponse n'est pas générée,
+
+6
+00:00:31,440 --> 00:00:37,600
+mais extraite du contexte. Ce type de réponse aux questions est appelé extractive.
+
+7
+00:00:42,320 --> 00:00:46,960
+La tâche est évaluée sur deux statistiques, la correspondance exacte et le score F1.
+
+8
+00:00:49,680 --> 00:00:52,320
+Comme son nom l'indique, la correspondance exacte recherche une
+
+9
+00:00:52,320 --> 00:00:57,840
+correspondance exacte entre la réponse prédite et la bonne réponse.
+
+10
+00:01:00,080 --> 00:01:05,520
+Une métrique couramment utilisée est le F1-Score, qui est calculé sur des tokens prédits
+
+11
+00:01:05,520 --> 00:01:10,960
+correctement et incorrectement. Il est calculé sur la moyenne de deux métriques appelées
+
+12
+00:01:10,960 --> 00:01:16,560
+précision et rappel, qui sont des métriques largement utilisées dans les problèmes de classification.
+
+13
+00:01:20,880 --> 00:01:28,240
+Un exemple de jeu de données utilisé pour cette tâche est appelé SQuAD. Ce jeu de données contient des contextes, des questions
+
+14
+00:01:28,240 --> 00:01:32,080
+et les réponses obtenues à partir d'articles de Wikipédia en anglais.
+
+15
+00:01:35,440 --> 00:01:39,520
+Vous pouvez utiliser des modèles de réponse aux questions pour répondre automatiquement aux questions posées
+
+16
+00:01:39,520 --> 00:01:46,480
+par vos clients. Vous avez simplement besoin d'un document contenant des informations sur votre entreprise
+
+17
+00:01:47,200 --> 00:01:53,840
+et interrogez ce document avec les questions posées par vos clients.
+
+18
+00:01:55,680 --> 00:02:06,160
+Pour plus d'informations sur la tâche de réponse aux questions, consultez le cours d'Hugging Face.
diff --git "a/subtitles/fr/tasks_02_\360\237\244\227-tasks-causal-language-modeling.srt" "b/subtitles/fr/tasks_02_\360\237\244\227-tasks-causal-language-modeling.srt"
new file mode 100644
index 000000000..27e05d726
--- /dev/null
+++ "b/subtitles/fr/tasks_02_\360\237\244\227-tasks-causal-language-modeling.srt"
@@ -0,0 +1,51 @@
+1
+00:00:04,560 --> 00:00:06,640
+Bienvenue dans la série d'Hugging Face sur les tâches !
+
+2
+00:00:07,200 --> 00:00:10,400
+Dans cette vidéo, nous allons jeter un œil à la modélisation du langage causal.
+
+3
+00:00:13,600 --> 00:00:16,880
+La modélisation du langage causal consiste à prédire le
+
+4
+00:00:16,880 --> 00:00:21,920
+mot suivant dans une phrase, compte tenu de tous les mots précédents. Cette tâche est très
+
+5
+00:00:21,920 --> 00:00:29,920
+similaire à la fonction de correction automatique que vous pourriez avoir sur votre téléphone.
+
+6
+00:00:29,920 --> 00:00:34,720
+Ces modèles prennent une séquence à compléter et génèrent la séquence complète.
+
+7
+00:00:38,640 --> 00:00:44,160
+Les métriques de classification ne peuvent pas être utilisées, car il n'y a pas de réponse correcte unique pour la complétion.
+
+8
+00:00:44,960 --> 00:00:49,280
+Au lieu de cela, nous évaluons la distribution du texte complété par le modèle.
+
+9
+00:00:50,800 --> 00:00:55,440
+Une métrique courante pour ce faire est la perte d'entropie croisée. La perplexité est
+
+10
+00:00:55,440 --> 00:01:01,280
+aussi une métrique largement utilisée et elle est calculée comme l'exponentielle de la perte d'entropie croisée.
+
+11
+00:01:05,200 --> 00:01:11,840
+Vous pouvez utiliser n'importe quel jeu de données avec du texte brut et tokeniser le texte pour préparer les données.
+
+12
+00:01:15,040 --> 00:01:18,240
+Les modèles de langage causal peuvent être utilisés pour générer du code.
+
+13
+00:01:22,480 --> 00:01:33,200
+Pour plus d'informations sur la tâche de modélisation du langage causal, consultez le cours d'Hugging Face.
diff --git "a/subtitles/fr/tasks_03_\360\237\244\227-tasks-masked-language-modeling.srt" "b/subtitles/fr/tasks_03_\360\237\244\227-tasks-masked-language-modeling.srt"
new file mode 100644
index 000000000..ca32dc906
--- /dev/null
+++ "b/subtitles/fr/tasks_03_\360\237\244\227-tasks-masked-language-modeling.srt"
@@ -0,0 +1,71 @@
+1
+00:00:04,660 --> 00:00:07,589
+Bienvenue dans la série d'Hugging Face sur les tâches !
+
+2
+00:00:07,589 --> 00:00:13,730
+Dans cette vidéo, nous allons jeter un œil à la modélisation du langage masqué.
+
+3
+00:00:13,730 --> 00:00:20,720
+La modélisation du langage masqué consiste à prédire quels mots doivent remplir les blancs d'une
+
+4
+00:00:20,720 --> 00:00:23,500
+phrase.
+
+5
+00:00:23,500 --> 00:00:32,870
+Ces modèles prennent un texte masqué en entrée et génèrent les valeurs possibles pour ce masque.
+
+6
+00:00:32,870 --> 00:00:37,550
+La modélisation en langage masqué est pratique avant de finetuner votre modèle pour votre tâche.
+
+7
+00:00:37,550 --> 00:00:43,579
+Par exemple, si vous devez utiliser un modèle dans un domaine spécifique, par exemple des documents biomédicaux, des
+
+8
+00:00:43,579 --> 00:00:49,050
+modèles comme BERT traiteront vos mots spécifiques à un domaine comme des tokens rares.
+
+9
+00:00:49,050 --> 00:00:54,220
+Si vous entraînez un modèle de langage masqué à l'aide de votre corpus biomédical, puis finetunez
+
+10
+00:00:54,220 --> 00:01:02,929
+votre modèle sur une tâche en aval, vous obtiendrez de meilleures performances.
+
+11
+00:01:02,929 --> 00:01:07,799
+Les métriques de classification ne peuvent pas être utilisées car il n'y a pas de réponse correcte unique aux
+
+12
+00:01:07,799 --> 00:01:08,799
+valeurs du masque.
+
+13
+00:01:08,799 --> 00:01:12,900
+Au lieu de cela, nous évaluons la distribution des valeurs du masque.
+
+14
+00:01:12,900 --> 00:01:16,590
+Une métrique courante pour ce faire est la perte d'entropie croisée.
+
+15
+00:01:16,590 --> 00:01:22,010
+La perplexité est aussi une métrique largement utilisée et elle est calculée comme l'exponentielle de la
+
+16
+00:01:22,010 --> 00:01:27,240
+perte d'entropie croisée.
+
+17
+00:01:27,240 --> 00:01:35,680
+Vous pouvez utiliser n'importe quel jeu de données avec du texte brut et tokeniser le texte pour masquer les données.
+
+18
+00:01:35,680 --> 00:01:44,710
+Pour plus d'informations sur la modélisation du langage masqué, consultez le cours d'Hugging Face.
diff --git "a/subtitles/fr/tasks_04_\360\237\244\227-tasks-summarization.srt" "b/subtitles/fr/tasks_04_\360\237\244\227-tasks-summarization.srt"
new file mode 100644
index 000000000..8a19f28bd
--- /dev/null
+++ "b/subtitles/fr/tasks_04_\360\237\244\227-tasks-summarization.srt"
@@ -0,0 +1,55 @@
+1
+00:00:04,560 --> 00:00:06,640
+Bienvenue dans la série d'Hugging Face sur les tâches !
+
+2
+00:00:07,280 --> 00:00:10,720
+Dans cette vidéo, nous allons examiner la tâche de résumé de texte.
+
+3
+00:00:13,200 --> 00:00:16,480
+Le résumé consiste à produire une version plus courte
+
+4
+00:00:16,480 --> 00:00:21,600
+d'un document tout en préservant les informations pertinentes et importantes dans le document.
+
+5
+00:00:25,040 --> 00:00:29,840
+Les modèles de résumé prennent un document à résumer et génèrent le texte résumé.
+
+6
+00:00:33,360 --> 00:00:40,240
+Cette tâche est évaluée sur le score ROUGE. Il est basé sur le chevauchement entre la séquence produite
+
+7
+00:00:40,240 --> 00:00:48,000
+et la séquence correcte. Vous pouvez voir ceci comme ROUGE-1,
+
+8
+00:00:48,000 --> 00:00:55,600
+qui est le chevauchement de tokens uniques et ROUGE-2, le chevauchement de paires de tokens successives. ROUGE-N
+
+9
+00:00:55,600 --> 00:01:02,960
+fait référence au chevauchement de N tokens successifs. Ici, nous voyons un exemple de la façon dont les chevauchements ont lieu.
+
+10
+00:01:06,160 --> 00:01:11,280
+Un exemple de jeu de données utilisé pour cette tâche s'appelle Extreme Summarization (XSUM).
+
+11
+00:01:11,280 --> 00:01:14,480
+Ce jeu de données contient des textes et leurs versions résumées.
+
+12
+00:01:17,680 --> 00:01:21,280
+Vous pouvez utiliser des modèles de résumé pour résumer les articles de recherche, ce
+
+13
+00:01:21,280 --> 00:01:25,680
+qui permettrait aux chercheurs de choisir facilement des articles pour leur liste de lecture.
+
+14
+00:01:29,040 --> 00:01:39,520
+Pour plus d'informations sur la tâche de résumé de textes, consultez le cours d'Hugging Face.
diff --git "a/subtitles/fr/tasks_05_\360\237\244\227-tasks-translation.srt" "b/subtitles/fr/tasks_05_\360\237\244\227-tasks-translation.srt"
new file mode 100644
index 000000000..06a851321
--- /dev/null
+++ "b/subtitles/fr/tasks_05_\360\237\244\227-tasks-translation.srt"
@@ -0,0 +1,83 @@
+1
+00:00:04,569 --> 00:00:07,529
+Bienvenue dans la série d'Hugging Face sur les tâches !
+
+2
+00:00:07,529 --> 00:00:11,840
+Dans cette vidéo, nous allons jeter un œil à la tâche de traduction.
+
+3
+00:00:11,840 --> 00:00:19,420
+La traduction est la tâche de traduire un texte d'une langue à une autre.
+
+4
+00:00:19,420 --> 00:00:24,420
+Ces modèles prennent un texte dans la langue source et génèrent la traduction de ce texte dans
+
+5
+00:00:24,420 --> 00:00:28,609
+la langue cible.
+
+6
+00:00:28,609 --> 00:00:31,619
+La tâche est évaluée sur le score BLEU.
+
+7
+00:00:31,619 --> 00:00:38,430
+Le score varie de 0 à 1, où 1 signifie que la traduction correspond parfaitement et 0 ne
+
+8
+00:00:38,430 --> 00:00:40,110
+correspond pas du tout.
+
+9
+00:00:40,110 --> 00:00:45,320
+BLEU est calculé sur les tokens successifs appelés n-grammes.
+
+10
+00:00:45,320 --> 00:00:51,629
+« unigram » fait référence à un seul token tandis que bi-gramme fait référence à des paires de tokens et n-grammes fait référence à
+
+11
+00:00:51,629 --> 00:00:56,219
+n tokens successifs.
+
+12
+00:00:56,219 --> 00:01:01,859
+Les jeux de données de traduction automatique contiennent des paires de texte dans une langue et la traduction du
+
+13
+00:01:01,859 --> 00:01:05,910
+texte dans une autre langue.
+
+14
+00:01:05,910 --> 00:01:11,290
+Ces modèles peuvent vous aider à créer des agents conversationnels dans différentes langues.
+
+15
+00:01:11,290 --> 00:01:16,110
+Une option consiste à traduire les données d'entraînement utilisées pour le chatbot et à entraîner un
+
+16
+00:01:16,110 --> 00:01:19,970
+chatbot séparé.
+
+17
+00:01:19,970 --> 00:01:24,950
+Vous pouvez mettre un modèle de traduction de la langue de votre utilisateur vers la langue dans laquelle votre chatbot
+
+18
+00:01:24,950 --> 00:01:31,360
+est entraîné, traduire les entrées de l'utilisateur et effectuer une classification d'intention, prendre la sortie
+
+19
+00:01:31,360 --> 00:01:39,399
+du chatbot et la traduire de la langue dans laquelle votre chatbot a été entraîné vers la
+
+20
+00:01:39,399 --> 00:01:40,850
+langue de l'utilisateur.
+
+21
+00:01:40,850 --> 00:01:49,720
+Pour plus d'informations sur la tâche de traduction, consultez le cours d'Hugging Face.
diff --git a/subtitles/fr/titles-and-descriptions.txt b/subtitles/fr/titles-and-descriptions.txt
index ad102d6bf..3ff3a64c4 100644
--- a/subtitles/fr/titles-and-descriptions.txt
+++ b/subtitles/fr/titles-and-descriptions.txt
@@ -1005,9 +1005,9 @@ Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://hugg
-Traitement des données pour la modélisation causale du langage
+Traitement des données pour la modélisation du langage causal
-Dans cette vidéo, nous allons voir comment prétraiter un jeu de données pour une tâche de modélisation causale du langage.
+Dans cette vidéo, nous allons voir comment prétraiter un jeu de données pour une tâche de modélisation du langage causal.
Intervenant : Leandro von Werra
Traduction : Loïck Bourdois
Cette vidéo fait partie du cours Hugging Face : http://huggingface.co/course/fr/chapter7
@@ -1210,4 +1210,98 @@ Vidéos connexes :
- Utilisation d'un débogueur dans un terminal : https://youtu.be/5PkZ4rbHL6c
- Demander de l'aide sur les forums : https://youtu.be/S2EEG3JIt2A
Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
-Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
\ No newline at end of file
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+
+
+
+🤗 Tasks : Classification de tokens
+
+Cette vidéo fait partie du cours d’Hugging Face : http://huggingface.co/course/fr
+Intervenante : Merve Noyan
+Traduction : Loïck Bourdois
+Un aperçu de la tâche de classification de tokens.
+Vous pouvez en savoir plus sur la classification de tokens dans cette section du cours : https://huggingface.co/course/fr/chapter7/2
+Vidéos connexes :
+- Dans le pipeline de classification de tokens (PyTorch) : https://youtu.be/0E7ltQB7fM8
+- Dans le pipeline de classification de tokens (TensorFlow) : https://youtu.be/PrX4CjrVnNc
+- Traitement des données pour la classification de tokens : https://youtu.be/iY2AZYdZAr0
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
+
+
+
+🤗 Tasks : Réponse aux questions
+
+Cette vidéo fait partie du cours d’Hugging Face : http://huggingface.co/course/fr
+Intervenante : Merve Noyan
+Traduction : Loïck Bourdois
+Un aperçu de la tâche de réponse aux questions.
+Vous pouvez en savoir plus sur la réponse aux questions dans cette section du cours : https://huggingface.co/course/fr/chapter7/7
+Vidéos connexes :
+- Dans le pipeline de réponse aux questions (PyTorch) : https://youtu.be/_wxyB3j3mk4
+- Dans le pipeline de réponse aux questions (TensorFlow) : https://youtu.be/b3u8RzBCX9Y
+- Traitement des données pour la réponse aux questions : https://youtu.be/qgaM0weJHpA
+- L'étape de post-traitement en réponse aux questions (PyTorch) : https://youtu.be/BNy08iIWVJM
+- L'étape de post-traitement en réponse aux questions (TensorFlow) : https://youtu.be/VN67ZpN33Ss
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
+
+
+
+🤗 Tasks : Modélisation du langage causal
+
+Cette vidéo fait partie du cours d’Hugging Face : http://huggingface.co/course/fr
+Intervenante : Merve Noyan
+Traduction : Loïck Bourdois
+Un aperçu de la tâche de modélisation du langage causal.
+Vous pouvez en savoir plus sur la modélisation du langage causal dans cette section du cours : https://huggingface.co/course/fr/chapter7/6
+Vidéos connexes :
+- Traitement des données pour la modélisation du langage causal : https://youtu.be/ma1TrR7gE7I
+- Qu'est-ce que la perplexité ? : https://youtu.be/NURcDHhYe98
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
+
+
+
+🤗 Tasks : Modélisation du langage masqué
+
+Cette vidéo fait partie du cours d’Hugging Face : http://huggingface.co/course/fr
+Intervenante : Merve Noyan
+Traduction : Loïck Bourdois
+Un aperçu de la tâche de modélisation du langage masqué.
+Vous pouvez en savoir plus sur la modélisation du langage masqué dans cette section du cours : https://huggingface.co/course/fr/chapter7/3
+Vidéos connexes :
+- Traitement des données pour la modélisation du langage masqué : https://youtu.be/8PmhEIXhBvI
+- Qu'est-ce que la perplexité ? : https://youtu.be/NURcDHhYe98
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
+
+
+
+🤗 Tasks : Résumé de textes
+
+Cette vidéo fait partie du cours d’Hugging Face : http://huggingface.co/course/fr
+Intervenante : Merve Noyan
+Traduction : Loïck Bourdois
+Un aperçu de la tâche de résumé de textes.
+Vous pouvez en savoir plus sur le résumé de textes dans cette section du cours : https://huggingface.co/course/fr/chapter7/5
+Vidéos connexes :
+- Traitement des données pour le résumé : https://youtu.be/1m7BerpSq8A
+- Qu'est-ce que la métrique ROUGE ? https://youtu.be/TMshhnrEXlg
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
+
+
+
+🤗 Tasks : Traduction
+
+Cette vidéo fait partie du cours d’Hugging Face : http://huggingface.co/course/fr
+Intervenante : Merve Noyan
+Traduction : Loïck Bourdois
+Un aperçu de la tâche de traduction.
+Vous pouvez en savoir plus sur la traduction dans cette section du cours : https://huggingface.co/course/fr/chapter7/4
+Vidéos connexes :
+- Traitement des données pour la traduction : https://youtu.be/XAR8jnZZuUs
+- Qu'est-ce que la métrique BLEU ? : https://youtu.be/M05L1DhFqcw
+Vous n'avez pas de compte Hugging Face ? Inscrivez-vous maintenant : http://huggingface.co/join
+Vous avez une question ? Consultez le forum d’Hugging Face : https://discuss.huggingface.co/c/course/20
\ No newline at end of file
diff --git a/subtitles/ru/00_welcome-to-the-hugging-face-course.srt b/subtitles/ru/00_welcome-to-the-hugging-face-course.srt
new file mode 100644
index 000000000..7f7cf0c28
--- /dev/null
+++ b/subtitles/ru/00_welcome-to-the-hugging-face-course.srt
@@ -0,0 +1,411 @@
+1
+00:00:05,850 --> 00:00:07,713
+Добро пожаловать на курс Hugging Face.
+
+2
+00:00:08,550 --> 00:00:10,320
+Этот курс был разработан, чтобы научить вас
+
+3
+00:00:10,320 --> 00:00:12,750
+всему, что касается экосистемы Hugging Face,
+
+4
+00:00:12,750 --> 00:00:14,700
+как использовать набор данных и хаб моделей,
+
+5
+00:00:14,700 --> 00:00:16,803
+а также все наши библиотеки с открытым исходным кодом.
+
+6
+00:00:18,300 --> 00:00:19,950
+Вот содержание.
+
+7
+00:00:19,950 --> 00:00:22,770
+Как вы можете видеть, он разделен на три раздела,
+
+8
+00:00:22,770 --> 00:00:25,110
+которые постепенно становятся все более сложными.
+
+9
+00:00:25,110 --> 00:00:28,500
+На данном этапе выпущены первые два раздела.
+
+10
+00:00:28,500 --> 00:00:30,120
+Итак, сначала мы научим вас основам
+
+11
+00:00:30,120 --> 00:00:32,250
+как использовать модель Transformer,
+
+12
+00:00:32,250 --> 00:00:34,230
+дообучить ее на собственном наборе данных
+
+13
+00:00:34,230 --> 00:00:36,960
+ и поделиться результатом с сообществом.
+
+14
+00:00:36,960 --> 00:00:39,420
+Во-вторых, мы глубже погрузимся в наши библиотеки
+
+15
+00:00:39,420 --> 00:00:42,360
+и научим вас решать любые задачи NLP.
+
+16
+00:00:42,360 --> 00:00:44,430
+Мы активно работаем над последним разделом
+
+17
+00:00:44,430 --> 00:00:47,280
+и надеемся, что он будет готов для вас к весне 2022 года.
+
+18
+00:00:48,510 --> 00:00:50,880
+Первая глава не требует технических знаний
+
+19
+00:00:50,880 --> 00:00:52,320
+и является хорошим введением, чтобы изучить,
+
+20
+00:00:52,320 --> 00:00:54,180
+что могут модели Transformers
+
+21
+00:00:54,180 --> 00:00:56,883
+и как они могут быть полезны для вас или вашей компании.
+
+22
+00:00:58,050 --> 00:01:01,110
+Следующие главы требуют хорошего знания Python
+
+23
+00:01:01,110 --> 00:01:02,130
+и некоторых базовых знаний в
+
+24
+00:01:02,130 --> 00:01:04,350
+Машинном обучении и Глубоком обучении.
+
+25
+00:01:04,350 --> 00:01:07,110
+Если вы не знаете, что такое тренировочное и валидационное множества
+
+26
+00:01:07,110 --> 00:01:09,360
+или что означает градиентный спуск,
+
+27
+00:01:09,360 --> 00:01:11,340
+вам следует изучить вводный курс,
+
+28
+00:01:11,340 --> 00:01:14,863
+например, опубликованный на сайтах deeplearning.ai или fast.ai.
+
+29
+00:01:16,200 --> 00:01:17,910
+Также будет лучше, если вы владеете основами
+
+30
+00:01:17,910 --> 00:01:21,150
+одного из фреймворков глубокого обучения, PyTorch или TensorFlow.
+
+31
+00:01:21,150 --> 00:01:23,520
+Каждая часть материала, представленного в этом курсе,
+
+32
+00:01:23,520 --> 00:01:25,590
+имеет версию на обоих этих фреймворках,
+
+33
+00:01:25,590 --> 00:01:26,730
+поэтому вы сможете выбрать тот,
+
+34
+00:01:26,730 --> 00:01:28,230
+с которым вам удобнее работать.
+
+35
+00:01:29,550 --> 00:01:31,740
+Это команда, которая разработала данный курс.
+
+36
+00:01:31,740 --> 00:01:33,120
+Теперь я предоставлю каждому из выступающих
+
+37
+00:01:33,120 --> 00:01:34,570
+возможность кратко представиться.
+
+38
+00:01:37,230 --> 00:01:38,880
+- Привет, меня зовут Мэтью,
+
+39
+00:01:38,880 --> 00:01:41,610
+и я инженер по машинному обучению в компании Hugging Face.
+
+40
+00:01:41,610 --> 00:01:43,200
+Я работаю в команде по работе с открытым исходным кодом
+
+41
+00:01:43,200 --> 00:01:45,180
+и отвечаю там за поддержку, в частности,
+
+42
+00:01:45,180 --> 00:01:47,280
+кода TensorFlow.
+
+43
+00:01:47,280 --> 00:01:50,130
+Ранее я работал инженером по машинному обучению в компании Parsley,
+
+44
+00:01:50,130 --> 00:01:52,620
+которая недавно была приобретена компанией Automatic,
+
+45
+00:01:52,620 --> 00:01:54,210
+а до этого был постдокторантом-исследователем
+
+46
+00:01:54,210 --> 00:01:57,000
+в Тринити-колледже в Дублине в Ирландии,
+
+47
+00:01:57,000 --> 00:02:00,093
+занимался компьютерной генетикой и заболеваниями сетчатки.
+
+48
+00:02:02,400 --> 00:02:03,870
+- Привет, я Лисандр.
+
+49
+00:02:03,870 --> 00:02:05,640
+Я инженер по машинному обучению в Hugging Face
+
+50
+00:02:05,640 --> 00:02:08,700
+и, в частности, являюсь частью команды по работе с открытым исходным кодом.
+
+51
+00:02:08,700 --> 00:02:10,890
+Я работаю в Hugging Face уже несколько лет,
+
+52
+00:02:10,890 --> 00:02:12,300
+и вместе с членами моей команды
+
+53
+00:02:12,300 --> 00:02:13,890
+я работал над большинством инструментов,
+
+54
+00:02:13,890 --> 00:02:15,790
+которые вы увидите в этом курсе.
+
+55
+00:02:18,270 --> 00:02:20,130
+- Привет, я Сильвен.
+
+56
+00:02:20,130 --> 00:02:22,140
+Я инженер-исследователь в Hugging Face
+
+57
+00:02:22,140 --> 00:02:25,830
+и один из главных сопровождающих библиотеки Transformers.
+
+58
+00:02:25,830 --> 00:02:28,110
+Ранее я работал в компании fast.ai,
+
+59
+00:02:28,110 --> 00:02:30,420
+где помогал разрабатывать библиотеку fast.ai,
+
+60
+00:02:30,420 --> 00:02:32,220
+а также онлайн-книгу.
+
+61
+00:02:32,220 --> 00:02:35,340
+До этого я был учителем математики и информатики
+
+62
+00:02:35,340 --> 00:02:36,173
+во Франции.
+
+63
+00:02:38,550 --> 00:02:41,340
+- Привет, меня зовут Саша, и я исследователь в компании Hugging Face,
+
+64
+00:02:41,340 --> 00:02:42,420
+работаю над этическим,
+
+65
+00:02:42,420 --> 00:02:46,230
+экологическим и социальным воздействием моделей машинного обучения.
+
+66
+00:02:46,230 --> 00:02:49,020
+Ранее я была постдокторантом-исследователем в университете Mila
+
+67
+00:02:49,020 --> 00:02:50,400
+в Монреале,
+
+68
+00:02:50,400 --> 00:02:53,040
+а также работала в качестве исследователя прикладного ИИ
+
+69
+00:02:53,040 --> 00:02:55,140
+для UN Global Pulse.
+
+70
+00:02:55,140 --> 00:02:57,300
+Я участвовала в таких проектах, как CodeCarbon
+
+71
+00:02:57,300 --> 00:02:59,790
+и Machine Learning Impacts Calculator
+
+72
+00:02:59,790 --> 00:03:02,390
+для оценки углеродного следа машинного обучения.
+
+73
+00:03:05,160 --> 00:03:07,650
+- Привет, меня зовут Мерве, и я являюсь адвокатом разработчиков
+
+74
+00:03:07,650 --> 00:03:09,390
+в компании Hugging Face.
+
+75
+00:03:09,390 --> 00:03:12,480
+Ранее я работала инженером по машинному обучению,
+
+76
+00:03:12,480 --> 00:03:15,360
+создавая инструменты NLP и чат-боты.
+
+77
+00:03:15,360 --> 00:03:17,670
+В настоящее время я работаю над улучшением хаба
+
+78
+00:03:17,670 --> 00:03:19,563
+и демократизацией машинного обучения.
+
+79
+00:03:22,140 --> 00:03:23,670
+- Привет всем.
+
+80
+00:03:23,670 --> 00:03:27,210
+Меня зовут Люсиль, и я инженер по машинному обучению
+
+81
+00:03:27,210 --> 00:03:28,353
+в Hugging Face.
+
+82
+00:03:29,580 --> 00:03:32,550
+Если в двух предложениях рассказать, кто я такая,
+
+83
+00:03:32,550 --> 00:03:35,590
+я занимаюсь разработкой и поддержкой инструментов с открытым исходным кодом,
+
+84
+00:03:36,600 --> 00:03:39,595
+а также участвую в нескольких исследовательских проектах
+
+85
+00:03:39,595 --> 00:03:41,795
+в области Natural Language Processing.
+
+86
+00:03:44,610 --> 00:03:45,540
+- Хорошего дня.
+
+87
+00:03:45,540 --> 00:03:47,550
+Меня зовут Льюис, я инженер по машинному обучению
+
+88
+00:03:47,550 --> 00:03:50,130
+ в команде разработчиков открытого программного обеспечения Hugging Face.
+
+89
+00:03:50,130 --> 00:03:53,490
+Я увлечен разработкой инструментов для сообщества NLP,
+
+90
+00:03:53,490 --> 00:03:55,050
+и вы можете увидеть меня
+
+91
+00:03:55,050 --> 00:03:56,910
+на многих мероприятиях Hugging Face.
+
+92
+00:03:56,910 --> 00:03:58,470
+До присоединения к Hugging Face
+
+93
+00:03:58,470 --> 00:03:59,790
+я несколько лет занимался разработкой
+
+94
+00:03:59,790 --> 00:04:01,860
+приложений машинного обучения для стартапов
+
+95
+00:04:01,860 --> 00:04:04,230
+и предприятий в области NLP,
+
+96
+00:04:04,230 --> 00:04:07,260
+топологического анализа данных и временных рядов.
+
+97
+00:04:07,260 --> 00:04:10,110
+В прошлой жизни я был физиком-теоретиком,
+
+98
+00:04:10,110 --> 00:04:11,760
+исследовал столкновения частиц
+
+99
+00:04:11,760 --> 00:04:13,560
+на Большом адронном коллайдере и так далее.
+
+100
+00:04:15,900 --> 00:04:18,450
+- Привет, меня зовут Леандро, я инженер по машинному обучению
+
+101
+00:04:18,450 --> 00:04:21,030
+в команде открытого кода Hugging Face.
+
+102
+00:04:21,030 --> 00:04:23,460
+До прихода в Hugging Face я работал специалистом по анализу данных
+
+103
+00:04:23,460 --> 00:04:26,733
+в Швейцарии и преподавал науку о данных в университете.
diff --git a/subtitles/ru/01_the-pipeline-function.srt b/subtitles/ru/01_the-pipeline-function.srt
new file mode 100644
index 000000000..311e5dfe9
--- /dev/null
+++ b/subtitles/ru/01_the-pipeline-function.srt
@@ -0,0 +1,400 @@
+1
+00:00:00,069 --> 00:00:01,341
+
+
+2
+00:00:01,341 --> 00:00:02,449
+
+
+3
+00:00:02,449 --> 00:00:05,880
+
+
+4
+00:00:05,880 --> 00:00:07,080
+- Функция pipeline (конвеер).
+
+5
+00:00:09,540 --> 00:00:12,020
+Функция pipeline является наиболее высокоуровневым API
+
+6
+00:00:12,020 --> 00:00:14,010
+библиотеки Transformers.
+
+7
+00:00:14,010 --> 00:00:16,050
+Она объединяет все шаги
+
+8
+00:00:16,050 --> 00:00:18,873
+перехода от необработанных текстов к пригодным для использования прогнозам.
+
+9
+00:00:20,228 --> 00:00:22,980
+Используемая модель лежит в основе конвейера,
+
+10
+00:00:22,980 --> 00:00:24,390
+но конвейер также включает
+
+11
+00:00:24,390 --> 00:00:26,610
+всю необходимую пред-обработку,
+
+12
+00:00:26,610 --> 00:00:30,240
+поскольку модель ожидает не тексты, а числа,
+
+13
+00:00:30,240 --> 00:00:32,040
+а также некоторую постобработку,
+
+14
+00:00:32,040 --> 00:00:34,533
+чтобы сделать вывод модели человекочитаемым.
+
+15
+00:00:35,910 --> 00:00:37,593
+Давайте рассмотрим первый пример
+
+16
+00:00:37,593 --> 00:00:39,693
+с конвейером анализа настроений.
+
+17
+00:00:40,740 --> 00:00:44,670
+Этот конвейер выполняет классификацию текста на заданном входе
+
+18
+00:00:44,670 --> 00:00:46,953
+и определяет, является ли он позитивным или негативным.
+
+19
+00:00:47,910 --> 00:00:51,750
+Здесь он приписывает положительную оценку данному тексту
+
+20
+00:00:51,750 --> 00:00:54,413
+с достоверностью 95%.
+
+21
+00:00:55,650 --> 00:00:58,470
+Вы можете передать множество текстов в один конвейер,
+
+22
+00:00:58,470 --> 00:01:00,270
+которые будут обработаны и переданы
+
+23
+00:01:00,270 --> 00:01:02,673
+через модель вместе как батч (пакет).
+
+24
+00:01:03,570 --> 00:01:05,970
+На выходе получается список отдельных результатов
+
+25
+00:01:05,970 --> 00:01:07,923
+в том же порядке, что и входные тексты.
+
+26
+00:01:08,790 --> 00:01:12,270
+Здесь мы находим ту же метку и оценку для первого текста,
+
+27
+00:01:12,270 --> 00:01:14,443
+а второй текст оценивается как отрицательный
+
+28
+00:01:14,443 --> 00:01:17,243
+с достоверностью 99,9%.
+
+29
+00:01:18,720 --> 00:01:20,700
+Конвейер zero-shot классификации
+
+30
+00:01:20,700 --> 00:01:23,610
+это более общий конвейер классификации текста,
+
+31
+00:01:23,610 --> 00:01:26,370
+он позволяет вам предоставлять нужные метки.
+
+32
+00:01:26,370 --> 00:01:29,850
+Здесь мы хотим классифицировать наш входной текст по меткам,
+
+33
+00:01:29,850 --> 00:01:32,643
+образование, политика и бизнес.
+
+34
+00:01:33,540 --> 00:01:35,580
+Конвейер успешно распознает
+
+35
+00:01:35,580 --> 00:01:38,280
+это скорее образование, чем другие метки,
+
+36
+00:01:38,280 --> 00:01:40,643
+с достоверностью 84%.
+
+37
+00:01:41,670 --> 00:01:43,110
+Переходим к другим задачам,
+
+38
+00:01:43,110 --> 00:01:45,030
+конвейер генерации текста будет
+
+39
+00:01:45,030 --> 00:01:46,533
+автоматически заполнять заданную подсказку.
+
+40
+00:01:47,460 --> 00:01:49,980
+Вывод генерируется с некоторой долей случайности,
+
+41
+00:01:49,980 --> 00:01:52,800
+поэтому он меняется каждый раз, когда вы вызываете объект генератора
+
+42
+00:01:52,800 --> 00:01:53,763
+для заданной строки.
+
+43
+00:01:54,990 --> 00:01:57,123
+До сих пор мы использовали API конвейера
+
+44
+00:01:57,123 --> 00:02:00,360
+с моделью по умолчанию, связанной с каждой задачей,
+
+45
+00:02:00,360 --> 00:02:02,880
+но вы можете использовать его с любой моделью, которая была предварительно обучена
+
+46
+00:02:02,880 --> 00:02:04,263
+или дообучена на этой задаче.
+
+47
+00:02:06,540 --> 00:02:10,350
+Зайдя в хаб моделей, huggingface.co/models
+
+48
+00:02:10,350 --> 00:02:13,350
+вы можете отфильтровать доступные модели по задаче.
+
+49
+00:02:13,350 --> 00:02:17,190
+Модель по умолчанию, использованная в нашем предыдущем примере, была gpt2,
+
+50
+00:02:17,190 --> 00:02:19,290
+но существует множество других моделей,
+
+51
+00:02:19,290 --> 00:02:20,523
+и не только на английском языке.
+
+52
+00:02:21,450 --> 00:02:23,670
+Давайте вернемся к конвейеру генерации текста
+
+53
+00:02:23,670 --> 00:02:26,193
+и загрузим в него другую модель, distilgpt2.
+
+54
+00:02:27,060 --> 00:02:28,950
+Это облегченная версия gpt2
+
+55
+00:02:28,950 --> 00:02:30,603
+созданная командой Hugging Face.
+
+56
+00:02:31,740 --> 00:02:34,110
+При применении конвейера к данной строке,
+
+57
+00:02:34,110 --> 00:02:36,360
+мы можем указать несколько аргументов
+
+58
+00:02:36,360 --> 00:02:39,240
+такие как максимальная длина генерируемых текстов,
+
+59
+00:02:39,240 --> 00:02:41,700
+или количество предложений, которые мы хотим вернуть,
+
+60
+00:02:41,700 --> 00:02:44,150
+поскольку в процессе генерации присутствует некоторая случайность.
+
+61
+00:02:46,080 --> 00:02:48,750
+Генерирование текстов путем угадывания следующего слова в предложении
+
+62
+00:02:48,750 --> 00:02:51,450
+было целью предварительного обучения в GPT-2.
+
+63
+00:02:51,450 --> 00:02:55,140
+Конвейер заполнения маски является целью предварительного обучения BERT,
+
+64
+00:02:55,140 --> 00:02:57,363
+которая заключается в угадывании значения замаскированного слова.
+
+65
+00:02:58,260 --> 00:03:01,020
+В этом случае мы спрашиваем два наиболее вероятных значения
+
+66
+00:03:01,020 --> 00:03:03,660
+для пропущенных слов, согласно модели,
+
+67
+00:03:03,660 --> 00:03:07,053
+и получаем в качестве возможных вариантов ответов "mathematical" или "computational".
+
+68
+00:03:08,280 --> 00:03:10,170
+Еще одна задача, которую может выполнить модель Transformers
+
+69
+00:03:10,170 --> 00:03:12,660
+классифицировать каждое слово в предложении
+
+70
+00:03:12,660 --> 00:03:14,970
+вместо предложения в целом.
+
+71
+00:03:14,970 --> 00:03:18,390
+Одним из примеров этого является Named Entity Recognition (распознавание именованных сущностей),
+
+72
+00:03:18,390 --> 00:03:20,820
+которая представляет собой задачу идентификации сущностей,
+
+73
+00:03:20,820 --> 00:03:25,323
+таких как люди, организации или места в предложении.
+
+74
+00:03:26,400 --> 00:03:30,570
+Здесь модель правильно находит персону, "Sylvain",
+
+75
+00:03:30,570 --> 00:03:32,453
+организацию, "Hugging Face",
+
+76
+00:03:32,453 --> 00:03:35,010
+а также местоположение, "Brooklyn",
+
+77
+00:03:35,010 --> 00:03:36,303
+внутри входного текста.
+
+78
+00:03:37,661 --> 00:03:40,230
+Аргумент grouped_entities=True используется
+
+79
+00:03:40,230 --> 00:03:42,330
+для того, чтобы заставить конвейер сгруппировать
+
+80
+00:03:42,330 --> 00:03:44,790
+различные слова, связанные с одним и тем же объектом,
+
+81
+00:03:44,790 --> 00:03:46,353
+например, "Hugging" и "Face".
+
+82
+00:03:48,270 --> 00:03:50,670
+Еще одна задача, доступная с помощью API конвейера
+
+83
+00:03:50,670 --> 00:03:52,920
+является extractive question answering (экстрактивный ответ на вопрос).
+
+84
+00:03:52,920 --> 00:03:55,380
+Предоставляется контекст и вопрос,
+
+85
+00:03:55,380 --> 00:03:58,290
+модель определит участок текста в контексте
+
+86
+00:03:58,290 --> 00:04:00,190
+содержащий ответ на вопрос.
+
+87
+00:04:01,650 --> 00:04:03,960
+Получение кратких резюме очень длинных статей
+
+88
+00:04:03,960 --> 00:04:06,540
+это то, с чем также может помочь библиотека Transformers,
+
+89
+00:04:06,540 --> 00:04:08,140
+с конвейером суммаризации.
+
+90
+00:04:09,480 --> 00:04:12,570
+Наконец, последняя задача, поддерживаемая API конвейера
+
+91
+00:04:12,570 --> 00:04:14,130
+это перевод.
+
+92
+00:04:14,130 --> 00:04:16,170
+Здесь мы используем французско-английскую модель
+
+93
+00:04:16,170 --> 00:04:17,460
+найденную в хабе моделей
+
+94
+00:04:17,460 --> 00:04:19,893
+для получения английской версии нашего входного текста.
+
+95
+00:04:21,600 --> 00:04:23,490
+Вот краткий обзор всех задач
+
+96
+00:04:23,490 --> 00:04:25,500
+которые мы рассмотрели в этом видео.
+
+97
+00:04:25,500 --> 00:04:27,390
+Попробуйте использовать виджеты инференса
+
+98
+00:04:27,390 --> 00:04:28,327
+в хабе моделей.
+
+99
+00:04:30,459 --> 00:04:33,475
+
+
+100
+00:04:33,475 --> 00:04:35,175
+
+
diff --git a/subtitles/ru/02_the-carbon-footprint-of-transformers.srt b/subtitles/ru/02_the-carbon-footprint-of-transformers.srt
new file mode 100644
index 000000000..bbe7ff90e
--- /dev/null
+++ b/subtitles/ru/02_the-carbon-footprint-of-transformers.srt
@@ -0,0 +1,516 @@
+1
+00:00:05,580 --> 00:00:08,820
+- Итак, давайте поговорим об углеродном следе трансформеров.
+
+2
+00:00:08,820 --> 00:00:10,530
+Возможно, вы видели заголовки, подобные этому
+
+3
+00:00:10,530 --> 00:00:13,530
+что обучение одной модели ИИ может выбросить столько углерода,
+
+4
+00:00:13,530 --> 00:00:16,020
+сколько пять автомобилей за весь срок службы.
+
+5
+00:00:16,020 --> 00:00:19,440
+Так когда же это правда и всегда ли это так?
+
+6
+00:00:19,440 --> 00:00:21,803
+На самом деле, это зависит от нескольких вещей.
+
+7
+00:00:21,803 --> 00:00:23,430
+Самое главное, это зависит
+
+8
+00:00:23,430 --> 00:00:24,960
+от типа энергии, которую вы используете.
+
+9
+00:00:24,960 --> 00:00:26,267
+Если вы используете возобновляемые источники энергии, такие как
+
+10
+00:00:26,267 --> 00:00:30,670
+солнце, ветер, гидроэлектроэнергия, вы действительно
+
+11
+00:00:30,670 --> 00:00:33,810
+не выбрасываете углерод вообще, очень, очень мало.
+
+12
+00:00:33,810 --> 00:00:36,769
+Если вы используете невозобновляемые источники энергии, такие как уголь
+
+13
+00:00:36,769 --> 00:00:39,570
+то их углеродный след намного выше
+
+14
+00:00:39,570 --> 00:00:43,260
+потому что, по сути, вы выделяете большое количество парниковых газов.
+
+15
+00:00:43,260 --> 00:00:44,670
+Другой аспект - время обучения.
+
+16
+00:00:44,670 --> 00:00:47,232
+Поэтому чем дольше вы обучаете, тем больше энергии вы используете,
+
+17
+00:00:47,232 --> 00:00:50,250
+тем больше углерода вы выбрасываете, верно?
+
+18
+00:00:50,250 --> 00:00:51,270
+Таким образом, это действительно увеличивает
+
+19
+00:00:51,270 --> 00:00:53,520
+особенно если вы тренируете большие модели
+
+20
+00:00:53,520 --> 00:00:56,460
+в течение часов, дней и недель.
+
+21
+00:00:56,460 --> 00:00:58,380
+Используемое вами оборудование также имеет значение
+
+22
+00:00:58,380 --> 00:01:00,930
+потому что некоторые GPU, например, более эффективны
+
+23
+00:01:00,930 --> 00:01:05,460
+чем другие и правильно используют эффективность.
+
+24
+00:01:05,460 --> 00:01:07,500
+Поэтому их постоянное использование на сто процентов
+
+25
+00:01:07,500 --> 00:01:10,650
+может реально снизить потребление энергии.
+
+26
+00:01:10,650 --> 00:01:13,290
+И опять же, уменьшить углеродный след.
+
+27
+00:01:13,290 --> 00:01:15,870
+Есть и другие аспекты, такие как ввод/вывод,
+
+28
+00:01:15,870 --> 00:01:17,730
+такие как данные, и так далее, и тому подобное.
+
+29
+00:01:17,730 --> 00:01:20,940
+Но это основные три, на которых вам следует сосредоточиться.
+
+30
+00:01:20,940 --> 00:01:23,340
+Поэтому, когда я говорю об источниках энергии и углеродоемкости,
+
+31
+00:01:23,340 --> 00:01:24,420
+что это означает на самом деле?
+
+32
+00:01:24,420 --> 00:01:27,480
+Итак, если вы посмотрите на верхнюю часть экрана, вы
+
+33
+00:01:27,480 --> 00:01:30,480
+вы увидите углеродный след
+
+34
+00:01:30,480 --> 00:01:33,860
+облачного вычислительного центра в Мумбаи, Индия,
+
+35
+00:01:33,860 --> 00:01:38,700
+который выбрасывает 920 граммов CO2 на киловатт-час.
+
+36
+00:01:38,700 --> 00:01:40,110
+Это почти один килограмм
+
+37
+00:01:40,110 --> 00:01:43,680
+CO2 на киловатт-час используемой электроэнергии.
+
+38
+00:01:43,680 --> 00:01:45,150
+Если сравнить с Канадой, Монреалем,
+
+39
+00:01:45,150 --> 00:01:48,720
+где я сейчас нахожусь, то 20 граммов CO2 на килограмм-час.
+
+40
+00:01:48,720 --> 00:01:50,040
+Так что это очень, очень большая разница.
+
+41
+00:01:50,040 --> 00:01:54,240
+Почти в 40 раз больше углерода выбрасывается
+
+42
+00:01:54,240 --> 00:01:55,950
+в Мумбаи по сравнению с Монреалем.
+
+43
+00:01:55,950 --> 00:01:57,720
+И это может очень, очень сильно увеличиться.
+
+44
+00:01:57,720 --> 00:01:59,820
+Например, если вы обучаете модель в течение нескольких недель
+
+45
+00:01:59,820 --> 00:02:01,920
+вы умножаете в 40 раз
+
+46
+00:02:01,920 --> 00:02:03,450
+углерод, который вы выбрасываете.
+
+47
+00:02:03,450 --> 00:02:05,070
+Поэтому выбор правильного экземпляра
+
+48
+00:02:05,070 --> 00:02:07,080
+выбор низкоуглеродного компьютерного экземпляра
+
+49
+00:02:07,080 --> 00:02:09,690
+это действительно самая важная вещь, которую вы можете сделать.
+
+50
+00:02:09,690 --> 00:02:13,020
+И вот тут-то и может возникнуть реальная проблема
+
+51
+00:02:13,020 --> 00:02:15,930
+если вы обучаете в очень интенсивном
+
+52
+00:02:15,930 --> 00:02:17,580
+регионе с высоким выбросом углерода
+
+53
+00:02:19,170 --> 00:02:21,750
+другие элементы, которые следует рассмотреть, например
+
+54
+00:02:21,750 --> 00:02:22,770
+использование предварительно обученных моделей
+
+55
+00:02:22,770 --> 00:02:25,590
+это эквивалент повторного использования в машинном обучении.
+
+56
+00:02:25,590 --> 00:02:28,292
+Когда у вас есть предварительно обученные модели, используя их,
+
+57
+00:02:28,292 --> 00:02:30,120
+вы вообще не выбрасываете углерод, верно?
+
+58
+00:02:30,120 --> 00:02:31,230
+Вы ничего не переобучаете.
+
+59
+00:02:31,230 --> 00:02:33,450
+Так что это еще и выполнение домашней работы
+
+60
+00:02:33,450 --> 00:02:35,574
+и изучие того, что уже существует.
+
+61
+00:02:35,574 --> 00:02:37,890
+Дообучение вместо обучения с нуля.
+
+62
+00:02:37,890 --> 00:02:38,723
+Поэтому еще раз,
+
+63
+00:02:38,723 --> 00:02:40,590
+если вы нашли модель, которая почти то, что вам нужно,
+
+64
+00:02:40,590 --> 00:02:43,530
+но не совсем, то добучение последней пары слоев,
+
+65
+00:02:43,530 --> 00:02:45,210
+чтобы она действительно соответствовала вашей цели, вместо того,
+
+66
+00:02:45,210 --> 00:02:46,500
+чтобы обучать большой трансформер
+
+67
+00:02:46,500 --> 00:02:48,810
+с нуля, может действительно помочь,
+
+68
+00:02:48,810 --> 00:02:51,270
+начинайте с небольших экспериментов
+
+69
+00:02:51,270 --> 00:02:52,800
+и отлаживайте по ходу дела.
+
+70
+00:02:52,800 --> 00:02:54,630
+Это означает, что, например,
+
+71
+00:02:54,630 --> 00:02:58,770
+вы убедитесь в правильности кодировки данных, убедитесь в
+
+72
+00:02:58,770 --> 00:03:01,170
+том, что нет мелких ошибок, которые
+
+73
+00:03:01,170 --> 00:03:03,840
+могут появиться после 16 часов обучения,
+
+74
+00:03:03,840 --> 00:03:05,820
+начинайте с малого и убедитесь
+
+75
+00:03:05,820 --> 00:03:08,760
+в том, что то что вы делаете, что делает ваш код, является стабильным.
+
+76
+00:03:08,760 --> 00:03:11,430
+И, наконец, сделайте обзор литературы,
+
+77
+00:03:11,430 --> 00:03:13,740
+чтобы выбрать диапазоны гиперпараметров, а затем
+
+78
+00:03:13,740 --> 00:03:15,900
+выполнить случайный поиск вместо поиска по сетке.
+
+79
+00:03:15,900 --> 00:03:18,420
+Так, случайный поиск комбинаций гиперпараметров
+
+80
+00:03:18,420 --> 00:03:21,300
+на самом деле оказался столь же эффективным
+
+81
+00:03:21,300 --> 00:03:24,000
+в поиске оптимальной конфигурации, как и поиск по сетке.
+
+82
+00:03:24,000 --> 00:03:27,510
+Но очевидно, что вы не проверяете все возможные комбинации,
+
+83
+00:03:27,510 --> 00:03:29,520
+а только их подмножество.
+
+84
+00:03:29,520 --> 00:03:31,800
+Так что это тоже может помочь.
+
+85
+00:03:31,800 --> 00:03:32,760
+Итак, если мы вернемся
+
+86
+00:03:32,760 --> 00:03:36,300
+к оригинальной статье Струбелла и других в 2019 году
+
+87
+00:03:36,300 --> 00:03:39,180
+печально известной статье о пяти автомобилях за время их эксплуатации.
+
+88
+00:03:39,180 --> 00:03:40,013
+Если вы просто посмотрите
+
+89
+00:03:40,013 --> 00:03:43,606
+на трансформер с 200 миллионами параметров,
+
+90
+00:03:43,606 --> 00:03:46,950
+то его углеродный след составит около 200 фунтов CO2,
+
+91
+00:03:46,950 --> 00:03:47,940
+что значительно
+
+92
+00:03:47,940 --> 00:03:49,980
+но это не больше, чем у пяти автомобилей, верно?
+
+93
+00:03:49,980 --> 00:03:52,893
+Это даже не трансатлантический перелет.
+
+94
+00:03:52,893 --> 00:03:55,020
+Как это действительно увеличивается, когда вы делаете
+
+95
+00:03:55,020 --> 00:03:56,190
+поиск архитектуры нейронной сети,
+
+96
+00:03:56,190 --> 00:03:58,560
+когда вы делаете настройку гиперпараметров, и
+
+97
+00:03:58,560 --> 00:04:00,930
+это перебор всех возможных комбинаций
+
+98
+00:04:00,930 --> 00:04:01,763
+и так далее, и тому подобное.
+
+99
+00:04:01,763 --> 00:04:02,596
+И вот откуда
+
+100
+00:04:02,596 --> 00:04:05,400
+например, 600 000 фунтов CO2.
+
+101
+00:04:05,400 --> 00:04:08,490
+Так что здесь все действительно складывается.
+
+102
+00:04:08,490 --> 00:04:11,880
+Итак, если вы поступаете разумно и осознанно,
+
+103
+00:04:11,880 --> 00:04:16,410
+то ваш углеродный след не будет таким большим, как
+
+104
+00:04:16,410 --> 00:04:20,040
+предполагалось в статье, а некоторые инструменты помогут вам
+
+105
+00:04:20,040 --> 00:04:22,111
+определить, сколько CO2 выбрасываете именно вы.
+
+106
+00:04:22,111 --> 00:04:24,270
+Существует веб-инструмент под названием machine
+
+107
+00:04:24,270 --> 00:04:26,430
+learning submissions calculator, который позволяет вам
+
+108
+00:04:26,430 --> 00:04:29,010
+вручную ввести, например, какое оборудование вы использовали,
+
+109
+00:04:29,010 --> 00:04:30,488
+сколько часов вы его использовали,
+
+110
+00:04:30,488 --> 00:04:34,260
+где оно было расположено - локально или в облаке.
+
+111
+00:04:34,260 --> 00:04:35,640
+И затем он даст вам оценку того,
+
+112
+00:04:35,640 --> 00:04:37,560
+сколько CO2 вы выбросили.
+
+113
+00:04:37,560 --> 00:04:40,200
+Другой инструмент, который делает это программно,
+
+114
+00:04:40,200 --> 00:04:41,190
+называется Code Carbon.
+
+115
+00:04:41,190 --> 00:04:45,112
+Поэтому вы можете установить его с помощью PIP, вы можете зайти на GitHub
+
+116
+00:04:45,112 --> 00:04:48,120
+и, по сути, он работает параллельно с вашим кодом.
+
+117
+00:04:48,120 --> 00:04:49,085
+Так что, по сути, вы вызываете его
+
+118
+00:04:49,085 --> 00:04:51,060
+и затем проводите все свое обучение.
+
+119
+00:04:51,060 --> 00:04:53,760
+И в конце он предоставит вам оценку
+
+120
+00:04:53,760 --> 00:04:57,210
+CSV-файл с оценкой ваших выбросов.
+
+121
+00:04:57,210 --> 00:04:59,250
+И он даст вам несколько сравнений.
+
+122
+00:04:59,250 --> 00:05:01,230
+У него есть визуальный пользовательский интерфейс, где вы можете реально посмотреть
+
+123
+00:05:01,230 --> 00:05:04,680
+как это сравнимо с вождением автомобиля или просмотром телевизора.
+
+124
+00:05:04,680 --> 00:05:06,060
+Так что это может дать вам представление
+
+125
+00:05:06,060 --> 00:05:07,740
+о масштабах ваших выбросов.
+
+126
+00:05:07,740 --> 00:05:09,930
+И на самом деле, code carbon уже интегрирован в AutoML,
+
+127
+00:05:09,930 --> 00:05:12,270
+и, надеюсь, люди будут использовать его
+
+128
+00:05:12,270 --> 00:05:15,240
+из коробки и легко отслеживать свои выбросы на протяжении всего
+
+129
+00:05:15,240 --> 00:05:17,523
+процесса обучения и внедрения трансформеров.
+
diff --git a/subtitles/ru/03_what-is-transfer-learning.srt b/subtitles/ru/03_what-is-transfer-learning.srt
new file mode 100644
index 000000000..5ca2b54ba
--- /dev/null
+++ b/subtitles/ru/03_what-is-transfer-learning.srt
@@ -0,0 +1,360 @@
+1
+00:00:00,189 --> 00:00:02,856
+
+
+2
+00:00:05,550 --> 00:00:07,293
+Что такое трансфертное обучение?
+
+3
+00:00:09,480 --> 00:00:10,920
+Идея трансферного обучения
+
+4
+00:00:10,920 --> 00:00:12,570
+состоит в том, чтобы использовать знания, полученные
+
+5
+00:00:12,570 --> 00:00:15,543
+моделью, обученной на большом количестве данных для другой задачи.
+
+6
+00:00:16,410 --> 00:00:20,130
+Модель A будет обучена специально для задачи A.
+
+7
+00:00:20,130 --> 00:00:22,200
+Теперь предположим, что вы хотите обучить модель B
+
+8
+00:00:22,200 --> 00:00:23,970
+для другой задачи.
+
+9
+00:00:23,970 --> 00:00:27,330
+Одним из вариантов может быть обучение модели с нуля.
+
+10
+00:00:27,330 --> 00:00:30,633
+Это может потребовать большого количества вычислений, времени и данных.
+
+11
+00:00:31,470 --> 00:00:34,260
+Вместо этого мы можем инициализировать модель B
+
+12
+00:00:34,260 --> 00:00:36,570
+с теми же весами, что и модель A,
+
+13
+00:00:36,570 --> 00:00:39,213
+передавая знания модели A на задачу B.
+
+14
+00:00:41,040 --> 00:00:42,690
+При обучении с нуля,
+
+15
+00:00:42,690 --> 00:00:45,870
+все веса модели инициализируются случайным образом.
+
+16
+00:00:45,870 --> 00:00:48,870
+В этом примере мы обучаем модель BERT
+
+17
+00:00:48,870 --> 00:00:50,220
+на задаче распознавания того,
+
+18
+00:00:50,220 --> 00:00:52,203
+похожи или нет два предложения.
+
+19
+00:00:54,116 --> 00:00:56,730
+Слева - обучение с нуля,
+
+20
+00:00:56,730 --> 00:01:00,000
+а справа - дообучение предварительно обученной модели.
+
+21
+00:01:00,000 --> 00:01:02,220
+Как мы видим, использование трансфертного обучения
+
+22
+00:01:02,220 --> 00:01:05,160
+и предварительно обученной модели дает лучшие результаты.
+
+23
+00:01:05,160 --> 00:01:07,140
+И неважно, будем ли мы обучать дольше.
+
+24
+00:01:07,140 --> 00:01:10,620
+Точность обучения с нуля составляет около 70%,
+
+25
+00:01:10,620 --> 00:01:13,293
+в то время как предварительно обученная модель легко преодолевает отметку в 86%.
+
+26
+00:01:14,460 --> 00:01:16,140
+Это связано с тем, что предварительно обученные модели
+
+27
+00:01:16,140 --> 00:01:18,420
+обычно обучаются на больших объемах данных
+
+28
+00:01:18,420 --> 00:01:21,000
+которые обеспечивают модели статистическое понимание
+
+29
+00:01:21,000 --> 00:01:23,413
+языка, используемого во время предварительного обучения.
+
+30
+00:01:24,450 --> 00:01:25,950
+В компьютерном зрении
+
+31
+00:01:25,950 --> 00:01:28,080
+трансфертное обучение успешно применяется
+
+32
+00:01:28,080 --> 00:01:30,060
+уже почти десять лет.
+
+33
+00:01:30,060 --> 00:01:32,850
+Модели часто предварительно обучаются на наборе данных ImageNet,
+
+34
+00:01:32,850 --> 00:01:36,153
+содержащем 1,2 миллиона фотографий.
+
+35
+00:01:37,170 --> 00:01:41,130
+Каждое изображение классифицируется по одной из 1000 меток.
+
+36
+00:01:41,130 --> 00:01:44,010
+Подобное обучение на размеченных данных
+
+37
+00:01:44,010 --> 00:01:45,663
+называется обучением с учителем.
+
+38
+00:01:47,340 --> 00:01:49,140
+В обработке естественного языка (NLP),
+
+39
+00:01:49,140 --> 00:01:51,870
+трансфертное обучение появилось совсем недавно.
+
+40
+00:01:51,870 --> 00:01:54,480
+Ключевое отличие от ImageNet заключается в том, что предварительное обучение
+
+41
+00:01:54,480 --> 00:01:56,460
+обычно осуществляется самостоятельно,
+
+42
+00:01:56,460 --> 00:01:58,770
+что означает, что оно не требует аннотации от человека
+
+43
+00:01:58,770 --> 00:01:59,673
+для меток.
+
+44
+00:02:00,780 --> 00:02:02,700
+Очень распространенной целью предварительного обучения
+
+45
+00:02:02,700 --> 00:02:05,310
+является угадывание следующего слова в предложении.
+
+46
+00:02:05,310 --> 00:02:07,710
+Для этого нужно только много-много текста.
+
+47
+00:02:07,710 --> 00:02:10,710
+Например, GPT-2 была предварительно обучена таким образом
+
+48
+00:02:10,710 --> 00:02:12,900
+используя содержание 45 миллионов ссылок
+
+49
+00:02:12,900 --> 00:02:14,673
+размещенных пользователями в Reddit.
+
+50
+00:02:16,560 --> 00:02:19,590
+Другим примером задачи предварительного cамообучения под наблюдением
+
+51
+00:02:19,590 --> 00:02:22,470
+является предсказание значения случайно замаскированных слов.
+
+52
+00:02:22,470 --> 00:02:24,540
+Это похоже на тесты "заполни пустое место",
+
+53
+00:02:24,540 --> 00:02:26,760
+которые вы, возможно, выполняли в школе.
+
+54
+00:02:26,760 --> 00:02:29,880
+BERT был предварительно обучен таким образом, используя английскую Википедию
+
+55
+00:02:29,880 --> 00:02:31,893
+и 11 000 неопубликованных книг.
+
+56
+00:02:33,120 --> 00:02:36,450
+На практике трансферное обучение применяется к заданной модели
+
+57
+00:02:36,450 --> 00:02:39,090
+путем отбрасывания ее головы,
+
+58
+00:02:39,090 --> 00:02:42,150
+то есть последних слоев, сфокусированных на цели предварительного обучения,
+
+59
+00:02:42,150 --> 00:02:45,360
+и замены ее новой, случайно инициализированной головой,
+
+60
+00:02:45,360 --> 00:02:46,860
+подходящей для поставленной задачи.
+
+61
+00:02:47,970 --> 00:02:51,570
+Например, когда мы ранее проводили дообучение модели BERT,
+
+62
+00:02:51,570 --> 00:02:54,060
+мы удалили голову, которая классифицировала слова-маски,
+
+63
+00:02:54,060 --> 00:02:56,790
+и заменили ее классификатором с двумя выходами.
+
+64
+00:02:56,790 --> 00:02:58,563
+Поскольку наша задача имеет две метки.
+
+65
+00:02:59,700 --> 00:03:02,490
+Чтобы быть максимально эффективной, используемая предварительно обученная модель
+
+66
+00:03:02,490 --> 00:03:03,770
+должна быть максимально похожа
+
+67
+00:03:03,770 --> 00:03:06,270
+на задачу, для которой она дообучается.
+
+68
+00:03:06,270 --> 00:03:08,190
+Например, если проблема
+
+69
+00:03:08,190 --> 00:03:10,860
+состоит в классификации немецких предложений,
+
+70
+00:03:10,860 --> 00:03:13,053
+лучше всего использовать предварительно обученную немецкую модель.
+
+71
+00:03:14,370 --> 00:03:16,649
+Но вместе с хорошим приходит и плохое.
+
+72
+00:03:16,649 --> 00:03:19,380
+Предварительно обученная модель передает не только свои знания,
+
+73
+00:03:19,380 --> 00:03:21,693
+но и любую предвзятость, которую она может содержать.
+
+74
+00:03:22,530 --> 00:03:24,300
+ImageNet в основном содержит изображения
+
+75
+00:03:24,300 --> 00:03:26,850
+из Соединенных Штатов и Западной Европы.
+
+76
+00:03:26,850 --> 00:03:28,020
+Поэтому модели, дообученные с его помощью
+
+77
+00:03:28,020 --> 00:03:31,710
+обычно лучше работают с изображениями из этих стран.
+
+78
+00:03:31,710 --> 00:03:33,690
+OpenAI также изучил смещение
+
+79
+00:03:33,690 --> 00:03:36,120
+в прогнозах своей модели GPT-3
+
+80
+00:03:36,120 --> 00:03:36,953
+которая была предварительно обучена
+
+81
+00:03:36,953 --> 00:03:38,750
+с использованием задачи "Угадай следующее слово".
+
+82
+00:03:39,720 --> 00:03:41,040
+Изменение пола в строке подсказке
+
+83
+00:03:41,040 --> 00:03:44,250
+с "He was very" на "She was very"
+
+84
+00:03:44,250 --> 00:03:47,550
+изменило предсказания с преимущественно нейтральных прилагательных
+
+85
+00:03:47,550 --> 00:03:49,233
+на почти только физические.
+
+86
+00:03:50,400 --> 00:03:52,367
+В карточке модели GPT-2
+
+87
+00:03:52,367 --> 00:03:54,990
+OpenAI также признает ее необъективность
+
+88
+00:03:54,990 --> 00:03:56,730
+и не рекомендует использовать ее
+
+89
+00:03:56,730 --> 00:03:58,803
+в системах, взаимодействующих с людьми.
+
+90
+00:04:01,040 --> 00:04:03,707
+
+
diff --git a/subtitles/ru/04_the-transformer-architecture.srt b/subtitles/ru/04_the-transformer-architecture.srt
new file mode 100644
index 000000000..bc8dd997f
--- /dev/null
+++ b/subtitles/ru/04_the-transformer-architecture.srt
@@ -0,0 +1,256 @@
+1
+00:00:00,000 --> 00:00:02,750
+
+
+2
+00:00:05,010 --> 00:00:07,323
+- Давайте изучим архитектуру трансформера.
+
+3
+00:00:09,150 --> 00:00:12,030
+Этот видео является вводным в серию видео о кодерах,
+
+4
+00:00:12,030 --> 00:00:15,510
+декодерах и кодер-декодерах.
+
+5
+00:00:15,510 --> 00:00:16,343
+В этой серии,
+
+6
+00:00:16,343 --> 00:00:18,900
+мы попытаемся понять, что представляет собой трансформерная сеть,
+
+7
+00:00:18,900 --> 00:00:22,770
+и постараемся объяснить это простыми, высокоуровневыми терминами.
+
+8
+00:00:22,770 --> 00:00:25,800
+Понимание нейронных сетей не требуется,
+
+9
+00:00:25,800 --> 00:00:29,343
+может помочь только понимание основ векторов и тензоров.
+
+10
+00:00:32,250 --> 00:00:33,270
+Для начала
+
+11
+00:00:33,270 --> 00:00:34,530
+мы возьмем эту диаграмму
+
+12
+00:00:34,530 --> 00:00:36,630
+из оригинальной статьи о трансформерах,
+
+13
+00:00:36,630 --> 00:00:40,140
+озаглавленной "Внимание - все, что вам нужно".
+
+14
+00:00:40,140 --> 00:00:41,010
+Как мы увидим здесь,
+
+15
+00:00:41,010 --> 00:00:42,780
+мы можем использовать только некоторые его части,
+
+16
+00:00:42,780 --> 00:00:44,630
+в зависимости от того, что мы пытаемся сделать.
+
+17
+00:00:45,480 --> 00:00:47,610
+Мы не будем углубляться в конкретные слои,
+
+18
+00:00:47,610 --> 00:00:48,990
+составляющие эту архитектуру,
+
+19
+00:00:48,990 --> 00:00:51,390
+но попытаемся понять различные способы
+
+20
+00:00:51,390 --> 00:00:52,893
+использования этой архитектуры.
+
+21
+00:00:55,170 --> 00:00:56,003
+Для начала давайте
+
+22
+00:00:56,003 --> 00:00:58,260
+разделим эту архитектуру на две части.
+
+23
+00:00:58,260 --> 00:00:59,910
+Слева находится кодер,
+
+24
+00:00:59,910 --> 00:01:01,980
+а справа - декодер.
+
+25
+00:01:01,980 --> 00:01:03,330
+Их можно использовать вместе,
+
+26
+00:01:03,330 --> 00:01:05,330
+но можно и независимо.
+
+27
+00:01:06,180 --> 00:01:08,610
+Давайте разберемся, как они работают.
+
+28
+00:01:08,610 --> 00:01:11,460
+Кодер принимает входные данные, представляющие собой текст.
+
+29
+00:01:11,460 --> 00:01:13,620
+Он преобразует этот текст, эти слова,
+
+30
+00:01:13,620 --> 00:01:15,675
+в числовые представления.
+
+31
+00:01:15,675 --> 00:01:17,400
+Эти числовые представления
+
+32
+00:01:17,400 --> 00:01:20,460
+могут также называться эмбеддингами, или признаками.
+
+33
+00:01:20,460 --> 00:01:23,100
+Мы увидим, что он использует механизм самовнимания
+
+34
+00:01:23,100 --> 00:01:24,483
+в качестве основного компонента.
+
+35
+00:01:25,500 --> 00:01:27,120
+Мы рекомендуем вам посмотреть видео
+
+36
+00:01:27,120 --> 00:01:29,700
+о кодерах специально для того, чтобы понять
+
+37
+00:01:29,700 --> 00:01:31,680
+что такое это числовое представление,
+
+38
+00:01:31,680 --> 00:01:33,690
+а также как оно работает.
+
+39
+00:01:33,690 --> 00:01:36,660
+Мы изучим механизм самовнимания более подробно,
+
+40
+00:01:36,660 --> 00:01:38,913
+а также его двунаправленные свойства.
+
+41
+00:01:40,650 --> 00:01:42,780
+Декодер аналогичен кодеру.
+
+42
+00:01:42,780 --> 00:01:45,630
+Он также может принимать текстовые входы.
+
+43
+00:01:45,630 --> 00:01:48,210
+Он использует аналогичный механизм, что и кодер,
+
+44
+00:01:48,210 --> 00:01:51,150
+который также является маскированным самовниманием.
+
+45
+00:01:51,150 --> 00:01:52,590
+Он отличается от кодера
+
+46
+00:01:52,590 --> 00:01:54,990
+своим однонаправленным свойством
+
+47
+00:01:54,990 --> 00:01:58,590
+и традиционно используется в авторегрессионной манере.
+
+48
+00:01:58,590 --> 00:02:01,650
+Здесь мы также рекомендуем вам посмотреть видео о декодерах,
+
+49
+00:02:01,650 --> 00:02:04,000
+особенно для того, чтобы понять, как все это работает.
+
+50
+00:02:06,810 --> 00:02:07,890
+Комбинирование этих двух частей
+
+51
+00:02:07,890 --> 00:02:10,200
+дает так называемый кодер-декодер,
+
+52
+00:02:10,200 --> 00:02:12,720
+или трансформер последовательности в последовательность.
+
+53
+00:02:12,720 --> 00:02:14,280
+Кодер принимает входные данные
+
+54
+00:02:14,280 --> 00:02:17,850
+и вычисляет высокоуровневое представление этих входов.
+
+55
+00:02:17,850 --> 00:02:20,252
+Эти выходы затем передаются в декодер.
+
+56
+00:02:20,252 --> 00:02:22,860
+Декодер использует выход кодера,
+
+57
+00:02:22,860 --> 00:02:26,370
+наряду с другими входными данными для создания прогноза.
+
+58
+00:02:26,370 --> 00:02:27,900
+Затем он прогнозирует выход,
+
+59
+00:02:27,900 --> 00:02:30,248
+который он будет повторно использовать в будущих итерациях,
+
+60
+00:02:30,248 --> 00:02:32,662
+отсюда и термин "авторегрессивный".
+
+61
+00:02:32,662 --> 00:02:34,740
+Наконец, чтобы получить представление
+
+62
+00:02:34,740 --> 00:02:36,690
+о кодерах-декодерах в целом,
+
+63
+00:02:36,690 --> 00:02:39,670
+мы рекомендуем вам ознакомиться с видео о кодерах-декодерах.
+
+64
+00:02:39,670 --> 00:02:42,420
+
+
diff --git a/subtitles/ru/05_transformer-models-encoders.srt b/subtitles/ru/05_transformer-models-encoders.srt
new file mode 100644
index 000000000..0f5ee4cf3
--- /dev/null
+++ b/subtitles/ru/05_transformer-models-encoders.srt
@@ -0,0 +1,407 @@
+1
+00:00:00,253 --> 00:00:03,003
+
+2
+00:00:04,440 --> 00:00:07,830
+- В этом видео мы изучим архитектуру кодера.
+
+3
+00:00:07,830 --> 00:00:11,070
+Примером популярной архитектуры, использующей только кодер, является BERT,
+
+4
+00:00:11,070 --> 00:00:13,323
+который является самой популярной моделью такого рода.
+
+5
+00:00:14,550 --> 00:00:16,950
+Для начала давайте разберемся, как это работает.
+
+6
+00:00:18,360 --> 00:00:20,910
+Мы воспользуемся небольшим примером, используя три слова.
+
+7
+00:00:20,910 --> 00:00:23,823
+Мы используем их в качестве входных данных и пропустим через кодер.
+
+8
+00:00:25,290 --> 00:00:28,173
+Мы получили числовое представление каждого слова.
+
+9
+00:00:29,970 --> 00:00:32,700
+Вот, например, кодер преобразует три слова
+
+10
+00:00:32,700 --> 00:00:37,350
+"Welcome to NYC" в эти три последовательности цифр.
+
+11
+00:00:37,350 --> 00:00:40,350
+Кодер выдает ровно одну последовательность чисел
+
+12
+00:00:40,350 --> 00:00:41,493
+на каждое входное слово.
+
+13
+00:00:42,330 --> 00:00:44,880
+Это числовое представление можно также назвать
+
+14
+00:00:44,880 --> 00:00:47,163
+вектор признаков или тензор признаков.
+
+15
+00:00:49,080 --> 00:00:51,030
+Давайте погрузимся в это представление.
+
+16
+00:00:51,030 --> 00:00:52,740
+Он содержит один вектор на каждое слово
+
+17
+00:00:52,740 --> 00:00:54,540
+которое было пропущено через кодер.
+
+18
+00:00:56,130 --> 00:00:58,620
+Каждый из этих векторов является числовым представлением
+
+19
+00:00:58,620 --> 00:01:00,033
+рассматриваемого слова.
+
+20
+00:01:01,080 --> 00:01:03,300
+Размерность этого вектора определяется
+
+21
+00:01:03,300 --> 00:01:05,520
+архитектурой модели.
+
+22
+00:01:05,520 --> 00:01:08,703
+Для базовой модели BERT это значение равно 768.
+
+23
+00:01:10,650 --> 00:01:13,230
+Эти представления содержат значение слова,
+
+24
+00:01:13,230 --> 00:01:15,240
+но с учетом контекста.
+
+25
+00:01:15,240 --> 00:01:18,570
+Например, вектор, приписываемый слову "to"
+
+26
+00:01:18,570 --> 00:01:22,290
+не является представлением только слова "to".
+
+27
+00:01:22,290 --> 00:01:25,650
+Он также учитывает окружающие слова,
+
+28
+00:01:25,650 --> 00:01:27,363
+которые мы называем контекстом.
+
+29
+00:01:28,650 --> 00:01:30,780
+Например, он смотрит на левый контекст,
+
+30
+00:01:30,780 --> 00:01:32,970
+слова слева от изучаемого нами,
+
+31
+00:01:32,970 --> 00:01:34,980
+здесь слово "Welcome",
+
+32
+00:01:34,980 --> 00:01:37,497
+и контекст справа, здесь слово "NYC",
+
+33
+00:01:38,348 --> 00:01:42,000
+и выводит значение для слова с учетом его контекста.
+
+34
+00:01:42,000 --> 00:01:45,420
+Таким образом, это контекстуализированное значение.
+
+35
+00:01:45,420 --> 00:01:48,810
+Можно сказать, что вектор из 768 значений
+
+36
+00:01:48,810 --> 00:01:51,993
+хранит значение слова в тексте.
+
+37
+00:01:53,310 --> 00:01:56,073
+Это происходит благодаря механизму самовнимания.
+
+38
+00:01:57,240 --> 00:02:00,630
+Механизм самовнимания связан с различными позициями,
+
+39
+00:02:00,630 --> 00:02:02,850
+или различным словам в одной последовательности
+
+40
+00:02:02,850 --> 00:02:06,003
+для того, чтобы вычислить представление этой последовательности.
+
+41
+00:02:07,200 --> 00:02:09,000
+Как мы уже видели, это означает, что
+
+42
+00:02:09,000 --> 00:02:11,130
+на результирующее представление слова
+
+43
+00:02:11,130 --> 00:02:13,983
+повлияли другие слова в последовательности.
+
+44
+00:02:15,840 --> 00:02:18,030
+Мы не будем углубляться в детали,
+
+45
+00:02:18,030 --> 00:02:19,680
+но предлагаем вам ознакомиться с некоторыми дополнительными материалами,
+
+46
+00:02:19,680 --> 00:02:21,330
+если вы хотите лучше понять,
+
+47
+00:02:21,330 --> 00:02:22,953
+что происходит под капотом.
+
+48
+00:02:25,050 --> 00:02:27,480
+Так почему же следует использовать кодер?
+
+49
+00:02:27,480 --> 00:02:29,370
+Кодеры могут использоваться в качестве автономных моделей
+
+50
+00:02:29,370 --> 00:02:31,263
+в самых разнообразных задачах.
+
+51
+00:02:32,100 --> 00:02:33,360
+Например, BERT,
+
+52
+00:02:33,360 --> 00:02:35,670
+возможно, самая известная модель трансформера,
+
+53
+00:02:35,670 --> 00:02:37,590
+является отдельной моделью кодера,
+
+54
+00:02:37,590 --> 00:02:38,820
+и на момент выпуска
+
+55
+00:02:38,820 --> 00:02:40,440
+она была передовой
+
+56
+00:02:40,440 --> 00:02:42,780
+во многих задачах классификации последовательностей,
+
+57
+00:02:42,780 --> 00:02:44,190
+задачах ответа на вопросы,
+
+58
+00:02:44,190 --> 00:02:46,743
+и моделировании языка с маской, и это лишь некоторые из них.
+
+59
+00:02:48,150 --> 00:02:50,460
+Идея заключается в том, что кодеры очень сильны
+
+60
+00:02:50,460 --> 00:02:52,470
+в извлечении векторов, которые несут
+
+61
+00:02:52,470 --> 00:02:55,350
+значимую информацию о последовательности.
+
+62
+00:02:55,350 --> 00:02:57,870
+Этот вектор затем может быть обработан в дальнейшем
+
+63
+00:02:57,870 --> 00:03:00,070
+дополнительными нейронами, чтобы понять его смысл.
+
+64
+00:03:01,380 --> 00:03:02,850
+Давайте рассмотрим несколько примеров
+
+65
+00:03:02,850 --> 00:03:04,563
+где кодер действительно блистает.
+
+66
+00:03:06,210 --> 00:03:09,900
+Прежде всего, Masked Language Modeling, или MLM.
+
+67
+00:03:09,900 --> 00:03:11,970
+Это задача предсказания скрытого слова
+
+68
+00:03:11,970 --> 00:03:13,590
+в последовательности слов.
+
+69
+00:03:13,590 --> 00:03:15,630
+Здесь, например, мы скрыли слово
+
+70
+00:03:15,630 --> 00:03:17,247
+между "My" и "is".
+
+71
+00:03:18,270 --> 00:03:21,120
+Это одна из целей обучения BERT.
+
+72
+00:03:21,120 --> 00:03:24,393
+Он был обучен предсказывать скрытые слова в последовательности.
+
+73
+00:03:25,230 --> 00:03:27,930
+В этом сценарии кодеры проявляют себя особенно ярко, поскольку
+
+74
+00:03:27,930 --> 00:03:31,140
+двунаправленная информация имеет здесь решающее значение.
+
+75
+00:03:31,140 --> 00:03:32,947
+Если бы у нас не было слов справа,
+
+76
+00:03:32,947 --> 00:03:34,650
+это "Sylvain" и ".",
+
+77
+00:03:34,650 --> 00:03:35,940
+то очень мало шансов,
+
+78
+00:03:35,940 --> 00:03:38,580
+что BERT смог бы определить имя
+
+79
+00:03:38,580 --> 00:03:40,500
+как правильное слово.
+
+80
+00:03:40,500 --> 00:03:42,270
+Кодер должен хорошо понимать
+
+81
+00:03:42,270 --> 00:03:45,360
+последовательности, чтобы предсказать замаскированное слово
+
+82
+00:03:45,360 --> 00:03:48,840
+поскольку даже если текст грамматически правильный,
+
+83
+00:03:48,840 --> 00:03:50,610
+он не обязательно имеет смысл
+
+84
+00:03:50,610 --> 00:03:52,413
+в контексте последовательности.
+
+85
+00:03:55,230 --> 00:03:56,580
+Как упоминалось ранее,
+
+86
+00:03:56,580 --> 00:03:59,520
+кодеры хорошо справляются с классификацией последовательностей.
+
+87
+00:03:59,520 --> 00:04:02,883
+Анализ настроений является примером классификации последовательностей.
+
+88
+00:04:04,410 --> 00:04:09,410
+Цель модели - определить настроение последовательности.
+
+89
+00:04:09,540 --> 00:04:11,280
+Это может варьироваться от присвоения последовательности
+
+90
+00:04:11,280 --> 00:04:12,960
+рейтинга от одной до пяти звезд
+
+91
+00:04:12,960 --> 00:04:15,900
+если проводится анализ отзывов, до присвоения положительного
+
+92
+00:04:15,900 --> 00:04:17,820
+или отрицательного рейтинга последовательности
+
+93
+00:04:17,820 --> 00:04:19,220
+что и показано здесь.
+
+94
+00:04:20,280 --> 00:04:22,950
+Например, здесь, даны две последовательности,
+
+95
+00:04:22,950 --> 00:04:25,860
+мы используем модель для вычисления прогноза,
+
+96
+00:04:25,860 --> 00:04:27,420
+и классифицируем последовательности
+
+97
+00:04:27,420 --> 00:04:30,393
+между двумя классами, положительным и отрицательным.
+
+98
+00:04:31,230 --> 00:04:33,450
+Хотя эти две последовательности очень похожи
+
+99
+00:04:33,450 --> 00:04:35,220
+и содержат одни и те же слова,
+
+100
+00:04:35,220 --> 00:04:37,170
+смысл совершенно разный,
+
+101
+00:04:37,170 --> 00:04:40,143
+и модель кодера способна уловить эту разницу.
+
+102
+00:04:41,404 --> 00:04:44,154
+
+
diff --git a/subtitles/ru/06_transformer-models-decoders.srt b/subtitles/ru/06_transformer-models-decoders.srt
new file mode 100644
index 000000000..54ecf410b
--- /dev/null
+++ b/subtitles/ru/06_transformer-models-decoders.srt
@@ -0,0 +1,348 @@
+1
+00:00:03,750 --> 00:00:07,140
+- В этом видео мы изучим архитектуру декодера.
+
+2
+00:00:07,140 --> 00:00:07,973
+Примером
+
+3
+00:00:07,973 --> 00:00:11,338
+популярной архитектуры только декодера является GPT-2.
+
+4
+00:00:11,338 --> 00:00:14,160
+Для того чтобы понять, как работают декодеры
+
+5
+00:00:14,160 --> 00:00:17,430
+мы рекомендуем посмотреть видео о кодерах.
+
+6
+00:00:17,430 --> 00:00:19,980
+Они чрезвычайно похожи на декодеры.
+
+7
+00:00:19,980 --> 00:00:21,210
+Декодер можно использовать
+
+8
+00:00:21,210 --> 00:00:23,760
+большинства тех же задач, что и кодер,
+
+9
+00:00:23,760 --> 00:00:27,330
+хотя, как правило, с небольшой потерей производительности.
+
+10
+00:00:27,330 --> 00:00:28,890
+Давайте воспользуемся тем же подходом, который мы использовали
+
+11
+00:00:28,890 --> 00:00:30,300
+с кодером, чтобы попытаться
+
+12
+00:00:30,300 --> 00:00:32,670
+понять архитектурные различия
+
+13
+00:00:32,670 --> 00:00:34,803
+между кодером и декодером.
+
+14
+00:00:35,777 --> 00:00:38,910
+Мы используем небольшой пример, используя три слова.
+
+15
+00:00:38,910 --> 00:00:41,050
+Мы пропускаем их через декодер.
+
+16
+00:00:41,050 --> 00:00:44,793
+Мы получаем числовое представление для каждого слова.
+
+17
+00:00:46,410 --> 00:00:49,350
+Здесь, например, декодер преобразует три слова.
+
+18
+00:00:49,350 --> 00:00:53,545
+"Welcome to NYC" в эти три последовательности цифр.
+
+19
+00:00:53,545 --> 00:00:56,040
+Декодер выдает ровно одну последовательность
+
+20
+00:00:56,040 --> 00:00:58,740
+чисел на каждое входное слово.
+
+21
+00:00:58,740 --> 00:01:00,630
+Это числовое представление может также
+
+22
+00:01:00,630 --> 00:01:03,783
+назвать вектором признаков или тензором признаков.
+
+23
+00:01:04,920 --> 00:01:07,200
+Давайте погрузимся в это представление.
+
+24
+00:01:07,200 --> 00:01:08,490
+Оно содержит один вектор
+
+25
+00:01:08,490 --> 00:01:11,340
+на каждое слово, прошедшее через декодер.
+
+26
+00:01:11,340 --> 00:01:14,250
+Каждый из этих векторов является числовым представлением
+
+27
+00:01:14,250 --> 00:01:15,573
+рассматриваемого слова.
+
+28
+00:01:16,920 --> 00:01:18,562
+Размерность этого вектора определяется
+
+29
+00:01:18,562 --> 00:01:20,703
+архитектурой модели.
+
+30
+00:01:22,860 --> 00:01:26,040
+Декодер отличается от кодера главным образом
+
+31
+00:01:26,040 --> 00:01:28,200
+своим механизмом самовнимания.
+
+32
+00:01:28,200 --> 00:01:30,843
+Он использует так называемое маскированное самовнимание.
+
+33
+00:01:31,860 --> 00:01:34,650
+Здесь, например, если мы сосредоточимся на слове "to"
+
+34
+00:01:34,650 --> 00:01:37,620
+мы увидим, что вектор абсолютно не изменен
+
+35
+00:01:37,620 --> 00:01:39,690
+словом "NYC".
+
+36
+00:01:39,690 --> 00:01:41,731
+Это происходит потому, что все слова справа, также известные
+
+37
+00:01:41,731 --> 00:01:45,276
+как правильный контекст слова, маскируются, а
+
+38
+00:01:45,276 --> 00:01:49,230
+вместо того чтобы извлекать пользу из всех слов слева и справа.
+
+39
+00:01:49,230 --> 00:01:51,600
+Таким образом, двунаправленный контекст.
+
+40
+00:01:51,600 --> 00:01:55,020
+Декодеры имеют доступ только к одному контексту
+
+41
+00:01:55,020 --> 00:01:58,203
+который может быть левым или правым контекстом.
+
+42
+00:01:59,539 --> 00:02:03,356
+Механизм маскированного самовнимания отличается
+
+43
+00:02:03,356 --> 00:02:04,320
+от механизма самовнимания тем,
+
+44
+00:02:04,320 --> 00:02:07,110
+что использует дополнительную маску, скрывающую контекст
+
+45
+00:02:07,110 --> 00:02:09,390
+по обе стороны от слова,
+
+46
+00:02:09,390 --> 00:02:12,810
+при этом на числовое представление слова не влияют
+
+47
+00:02:12,810 --> 00:02:14,853
+слова в скрытом контексте.
+
+48
+00:02:16,260 --> 00:02:18,330
+Так когда же следует использовать декодер?
+
+49
+00:02:18,330 --> 00:02:22,380
+Декодеры, как и кодеры, могут быть использованы как самостоятельные модели
+
+50
+00:02:22,380 --> 00:02:25,020
+поскольку они генерируют числовое представление.
+
+51
+00:02:25,020 --> 00:02:28,320
+Они также могут использоваться для решения самого широкого круга задач.
+
+52
+00:02:28,320 --> 00:02:31,260
+Однако сила декодера заключается в том, что
+
+53
+00:02:31,260 --> 00:02:34,530
+слово может иметь доступ только к своему левому контексту.
+
+54
+00:02:34,530 --> 00:02:36,690
+
+
+55
+00:02:36,690 --> 00:02:39,120
+Они по своей природе хороши в генерации текста:
+
+56
+00:02:39,120 --> 00:02:41,010
+способности генерировать слово
+
+57
+00:02:41,010 --> 00:02:45,000
+или последовательность слов, учитывая известную последовательность слов.
+
+58
+00:02:45,000 --> 00:02:45,833
+Это известно как
+
+59
+00:02:45,833 --> 00:02:49,083
+каузальное языковое моделирование или генерация естественного языка.
+
+60
+00:02:50,430 --> 00:02:53,520
+Вот пример того, как работает каузальное языковое моделирование.
+
+61
+00:02:53,520 --> 00:02:56,410
+Мы начинаем с вводного слова, которым является "my",
+
+62
+00:02:57,339 --> 00:02:59,973
+используем его в качестве входного сигнала для декодера.
+
+63
+00:03:00,810 --> 00:03:04,260
+Модель выводит вектор чисел
+
+64
+00:03:04,260 --> 00:03:07,230
+и этот вектор содержит информацию о последовательности,
+
+65
+00:03:07,230 --> 00:03:08,733
+которая здесь является одним словом.
+
+66
+00:03:09,780 --> 00:03:11,430
+Мы применяем небольшое преобразование
+
+67
+00:03:11,430 --> 00:03:13,110
+к этому вектору так, чтобы он отображался
+
+68
+00:03:13,110 --> 00:03:16,500
+на все слова, известные модели, это отображение
+
+69
+00:03:16,500 --> 00:03:19,890
+которое, как мы увидим позже, называется "голова языкового моделирования".
+
+70
+00:03:19,890 --> 00:03:21,930
+Мы определили, что модель считает,
+
+71
+00:03:21,930 --> 00:03:25,053
+что наиболее вероятное следующее слово это "name".
+
+72
+00:03:26,250 --> 00:03:28,710
+Затем мы берем это новое слово и добавляем его
+
+73
+00:03:28,710 --> 00:03:33,480
+к начальной последовательности из "my", и теперь у нас есть "my name".
+
+74
+00:03:33,480 --> 00:03:36,870
+Именно здесь возникает авторегрессивный аспект.
+
+75
+00:03:36,870 --> 00:03:38,490
+Авторегрессионные модели
+
+76
+00:03:38,490 --> 00:03:42,513
+повторно используют свои прошлые выходы в качестве входов на следующих этапах.
+
+77
+00:03:43,452 --> 00:03:46,980
+И снова мы выполняем точно такую же операцию.
+
+78
+00:03:46,980 --> 00:03:49,500
+Мы пропускаем эту последовательность через декодер
+
+79
+00:03:49,500 --> 00:03:51,993
+и извлекаем наиболее вероятное следующее слово.
+
+80
+00:03:52,978 --> 00:03:57,978
+В данном случае это слово "is", мы повторяем операцию
+
+81
+00:03:58,230 --> 00:04:02,040
+пока не будем удовлетворены, начиная с одного слова.
+
+82
+00:04:02,040 --> 00:04:04,590
+Теперь мы сгенерировали полное предложение.
+
+83
+00:04:04,590 --> 00:04:07,890
+Мы решаем остановиться на этом, но могли бы продолжать еще какое-то время.
+
+84
+00:04:07,890 --> 00:04:12,890
+GPT-2, например, имеет максимальный размер контекста 1024.
+
+85
+00:04:13,170 --> 00:04:16,830
+В конечном итоге мы могли бы сгенерировать до 1024 слов,
+
+86
+00:04:16,830 --> 00:04:19,050
+и декодер все еще будет помнить о
+
+87
+00:04:19,050 --> 00:04:21,003
+первых словах в этой последовательности.
+
diff --git a/subtitles/ru/07_transformer-models-encoder-decoders.srt b/subtitles/ru/07_transformer-models-encoder-decoders.srt
new file mode 100644
index 000000000..37003b346
--- /dev/null
+++ b/subtitles/ru/07_transformer-models-encoder-decoders.srt
@@ -0,0 +1,260 @@
+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
+в этих конкретных задачах. На этом мы завершаем разговор о кодерах-декодерах. Спасибо за просмотр!
+
diff --git a/subtitles/zh-CN/03_what-is-transfer-learning.srt b/subtitles/zh-CN/03_what-is-transfer-learning.srt
index 8a8a0b509..4ddaf9c5d 100644
--- a/subtitles/zh-CN/03_what-is-transfer-learning.srt
+++ b/subtitles/zh-CN/03_what-is-transfer-learning.srt
@@ -5,22 +5,22 @@
2
00:00:05,550 --> 00:00:07,293
-- 什么是迁移学习?
+- 什么是转移学习?
- What is transfer learning?
3
00:00:09,480 --> 00:00:10,920
-迁移学习的思想
+转移学习的思想
The idea of transfer learning
4
00:00:10,920 --> 00:00:12,570
-是利用所获得的知识
+是利用在另一项任务上使用大量数据训练的模型结果
is to leverage the knowledge acquired
5
00:00:12,570 --> 00:00:15,543
-通过在另一项任务上使用大量数据训练的模型。
+来获取知识。
by a model trained with lots of data on another task.
6
@@ -30,12 +30,12 @@ The model A will be trained specifically for task A.
7
00:00:20,130 --> 00:00:22,200
-现在假设你想训练模型 B
+现在假设您想为了另一个任务
Now let's say you want to train a model B
8
00:00:22,200 --> 00:00:23,970
-为了不同的任务。
+训练模型 B。
for a different task.
9
@@ -45,17 +45,17 @@ One option would be to train the model from scratch.
10
00:00:27,330 --> 00:00:30,633
-这可能需要大量的计算、时间和数据。
+但这可能需要大量的计算、时间和数据。
This could take lots of computation, time and data.
11
00:00:31,470 --> 00:00:34,260
-相反,我们可以初始化模型 B
+我们可以有另一种选择,初始化模型 B
Instead, we could initialize model B
12
00:00:34,260 --> 00:00:36,570
-与模型 A 具有相同的权重,
+它与模型 A 具有相同的权重,
with the same weights as model A,
13
@@ -75,37 +75,37 @@ all the model's weight are initialized randomly.
16
00:00:45,870 --> 00:00:48,870
-在这个例子中,我们正在训练一个 BERT 模型
+在这个例子中,我们正在基于识别任务上
In this example, we are training a BERT model
17
00:00:48,870 --> 00:00:50,220
-在识别任务上
+训练一个 BERT 模型
on the task of recognizing
18
00:00:50,220 --> 00:00:52,203
-两个句子是否相似。
+来判断两个句子是否相似。
if two sentences are similar or not.
19
00:00:54,116 --> 00:00:56,730
-在左边,它是从头开始训练的,
+左边的例子是从头开始训练的,
On the left, it's trained from scratch,
20
00:00:56,730 --> 00:01:00,000
-在右侧,它正在微调预训练模型。
+右边则代表正在微调预训练模型。
and on the right it's fine-tuning a pretrained model.
21
00:01:00,000 --> 00:01:02,220
-正如我们所见,使用迁移学习
+正如我们所见,使用转移学习
As we can see, using transfer learning
22
00:01:02,220 --> 00:01:05,160
-并且预训练模型产生了更好的结果。
+和预训练模型产生了更好的结果。
and the pretrained model yields better results.
23
@@ -120,7 +120,7 @@ The training from scratch is capped around 70% accuracy
25
00:01:10,620 --> 00:01:13,293
-而预训练模型轻松击败了 86%。
+而预训练模型轻松达到了 86%。
while the pretrained model beats the 86% easily.
26
@@ -130,17 +130,17 @@ This is because pretrained models
27
00:01:16,140 --> 00:01:18,420
-通常接受大量数据的训练
+通常基于大量数据进行训练
are usually trained on large amounts of data
28
00:01:18,420 --> 00:01:21,000
-为模型提供统计理解
+这些数据为模型在预训练期间
that provide the model with a statistical understanding
29
00:01:21,000 --> 00:01:23,413
-预训练期间使用的语言。
+提供了对语言使用的统计理解。
of the language used during pretraining.
30
@@ -150,7 +150,7 @@ In computer vision,
31
00:01:25,950 --> 00:01:28,080
-迁移学习已成功应用
+转移学习已成功应用
transfer learning has been applied successfully
32
@@ -165,7 +165,7 @@ Models are frequently pretrained on ImageNet,
34
00:01:32,850 --> 00:01:36,153
-包含 120 万张照片图像的数据集。
+它是一种包含 120 万张照片图像的数据集。
a dataset containing 1.2 millions of photo images.
35
@@ -190,12 +190,12 @@ In Natural Language Processing,
39
00:01:49,140 --> 00:01:51,870
-迁移学习是最近才出现的。
+转移学习是最近才出现的。
transfer learning is a bit more recent.
40
00:01:51,870 --> 00:01:54,480
-与 ImageNet 的一个关键区别是预训练
+它与 ImageNet 的一个关键区别是预训练
A key difference with ImageNet is that the pretraining
41
@@ -205,12 +205,12 @@ is usually self-supervised,
42
00:01:56,460 --> 00:01:58,770
-这意味着它不需要人工注释
+这意味着它不需要人工对标签
which means it doesn't require humans annotations
43
00:01:58,770 --> 00:01:59,673
-对于标签。
+进行注释。
for the labels.
44
@@ -225,7 +225,7 @@ is to guess the next word in a sentence.
46
00:02:05,310 --> 00:02:07,710
-这只需要大量的文本。
+它只需要大量的输入文本。
Which only requires lots and lots of text.
47
@@ -235,12 +235,12 @@ GPT-2 for instance, was pretrained this way
48
00:02:10,710 --> 00:02:12,900
-使用 4500 万个链接的内容
+它使用 4500 万个用户在 Reddit 上发布的
using the content of 45 millions links
49
00:02:12,900 --> 00:02:14,673
-用户在 Reddit 上发布。
+链接的内容。
posted by users on Reddit.
50
@@ -260,42 +260,42 @@ Which is similar to fill-in-the-blank tests
53
00:02:24,540 --> 00:02:26,760
-你可能在学校做过。
+您可能在学校做过。
you may have done in school.
54
00:02:26,760 --> 00:02:29,880
-BERT 是使用英文维基百科以这种方式进行预训练的
+BERT 是使用英文维基百科和 11,000 本未出版的书籍
BERT was pretrained this way using the English Wikipedia
55
00:02:29,880 --> 00:02:31,893
-和 11,000 本未出版的书籍。
+进行预训练的。
and 11,000 unpublished books.
56
00:02:33,120 --> 00:02:36,450
-在实践中,迁移学习应用于给定模型
+在实践中,转移学习是通过抛弃原模型的头部
In practice, transfer learning is applied on a given model
57
00:02:36,450 --> 00:02:39,090
-通过扔掉它的头,也就是说,
+即其针对预训练目标的最后几层
by throwing away its head, that is,
58
00:02:39,090 --> 00:02:42,150
-它的最后一层专注于预训练目标,
+并用一个新的、随机初始化的头部
its last layers focused on the pretraining objective,
59
00:02:42,150 --> 00:02:45,360
-并用一个新的、随机初始化的头替换它
+来替换它来应用的
and replacing it with a new, randomly initialized head
60
00:02:45,360 --> 00:02:46,860
-适合手头的任务。
+这个新的头部适用于当前的任务。
suitable for the task at hand.
61
@@ -320,37 +320,37 @@ Since our task had two labels.
65
00:02:59,700 --> 00:03:02,490
-为了尽可能高效,使用预训练模型
+为了尽可能高效
To be as efficient as possible, the pretrained model used
66
00:03:02,490 --> 00:03:03,770
-应该尽可能相似
+所使用的预训练模型
should be as similar as possible
67
00:03:03,770 --> 00:03:06,270
-对其进行微调的任务。
+应尽可能与其微调的任务相似。
to the task it's fine-tuned on.
68
00:03:06,270 --> 00:03:08,190
-例如,如果问题
+例如,如果当前需要
For instance, if the problem
69
00:03:08,190 --> 00:03:10,860
-是对德语句子进行分类,
+对德语句子进行分类,
is to classify German sentences,
70
00:03:10,860 --> 00:03:13,053
-最好使用德国预训练模型。
+最好使用德语预训练模型。
it's best to use a German pretrained model.
71
00:03:14,370 --> 00:03:16,649
-但好事也有坏事。
+但有好事也有坏事。
But with the good comes the bad.
72
@@ -360,87 +360,87 @@ The pretrained model does not only transfer its knowledge,
73
00:03:19,380 --> 00:03:21,693
-以及它可能包含的任何偏见。
+同时也转移了它可能包含的任何偏见。
but also any bias it may contain.
74
00:03:22,530 --> 00:03:24,300
-ImageNet 主要包含图像
+ImageNet 主要包含来自美国和西欧
ImageNet mostly contains images
75
00:03:24,300 --> 00:03:26,850
-来自美国和西欧。
+的图像。
coming from the United States and Western Europe.
76
00:03:26,850 --> 00:03:28,020
-所以模型用它微调
+所以基于它进行微调的模型
So models fine-tuned with it
77
00:03:28,020 --> 00:03:31,710
-通常会在来自这些国家 / 地区的图像上表现更好。
+通常会在来自这些国家或地区的图像上表现更好。
usually will perform better on images from these countries.
78
00:03:31,710 --> 00:03:33,690
-OpenAI 还研究了偏差
+OpenAI 还研究了
OpenAI also studied the bias
79
00:03:33,690 --> 00:03:36,120
-在其 GPT-3 模型的预测中
+其使用猜测下一个单词目标
in the predictions of its GPT-3 model
80
00:03:36,120 --> 00:03:36,953
-这是预训练的
+预训练的 GPT-3 模型中
which was pretrained
81
00:03:36,953 --> 00:03:38,750
-使用猜测下一个单词目标。
+预测的偏差。
using the guess the next word objective.
82
00:03:39,720 --> 00:03:41,040
-更改提示的性别
+将提示的性别
Changing the gender of the prompt
83
00:03:41,040 --> 00:03:44,250
-从他非常到她非常
+从“他”更改到“她”
from he was very to she was very
84
00:03:44,250 --> 00:03:47,550
-改变了大多数中性形容词的预测
+会使预测从主要是中性形容词
changed the predictions from mostly neutral adjectives
85
00:03:47,550 --> 00:03:49,233
-几乎只有物理的。
+变为几乎只有物理上的形容词。
to almost only physical ones.
86
00:03:50,400 --> 00:03:52,367
-在他们的 GPT-2 模型的模型卡中,
+在他们的 GPT-2 的模型卡中,
In their model card of the GPT-2 model,
87
00:03:52,367 --> 00:03:54,990
-OpenAI 也承认它的偏见
+OpenAI 也承认了它的偏见
OpenAI also acknowledges its bias
88
00:03:54,990 --> 00:03:56,730
-并且不鼓励使用它
+并且不鼓励在与人类交互的系统中
and discourages its use
89
00:03:56,730 --> 00:03:58,803
-在与人类交互的系统中。
+使用它。
in systems that interact with humans.
90
diff --git a/subtitles/zh-CN/05_transformer-models-encoders.srt b/subtitles/zh-CN/05_transformer-models-encoders.srt
index 7c3118cf1..f75cd6686 100644
--- a/subtitles/zh-CN/05_transformer-models-encoders.srt
+++ b/subtitles/zh-CN/05_transformer-models-encoders.srt
@@ -1,6 +1,6 @@
1
00:00:00,253 --> 00:00:03,003
-(介绍引人注目)
+(引人注目的介绍)
(intro striking)
2
@@ -10,12 +10,12 @@
3
00:00:07,830 --> 00:00:11,070
-一个流行的仅编码器架构的例子是 BURT
+一个流行的仅使用编码器架构的例子是 BURT
An example of a popular encoder only architecture is BURT
4
00:00:11,070 --> 00:00:13,323
-这是同类产品中最受欢迎的型号。
+这是同类产品中最受欢迎的模型。
which is the most popular model of its kind.
5
@@ -25,37 +25,37 @@ Let's first start by understanding how it works.
6
00:00:18,360 --> 00:00:20,910
-我们将使用一个使用三个词的小例子。
+我们将使用一个三个单词的小例子。
We'll use a small example using three words.
7
00:00:20,910 --> 00:00:23,823
-我们使用这些作为输入并将它们传递给编码器。
+我们使用这些作为输入传递给编码器。
We use these as inputs and pass them through the encoder.
8
00:00:25,290 --> 00:00:28,173
-我们检索每个单词的数字表示。
+得到了每个单词的数值表示。
We retrieve a numerical representation of each word.
9
00:00:29,970 --> 00:00:32,700
-例如,在这里,编码器转换这三个词,
+例如,在这里,编码器将这三个词,
Here, for example, the encoder converts those three words,
10
00:00:32,700 --> 00:00:37,350
-欢迎来到纽约,在这三个数字序列中。
+welcome to NYC,转换为这三个数字序列。
welcome to NYC, in these three sequences of numbers.
11
00:00:37,350 --> 00:00:40,350
-编码器只输出一个数字序列
+编码器对于每个输入单词
The encoder outputs exactly one sequence of numbers
12
00:00:40,350 --> 00:00:41,493
-每个输入词。
+精确输出一个数字序列。
per input word.
13
@@ -65,7 +65,7 @@ This numerical representation can also be called
14
00:00:44,880 --> 00:00:47,163
-特征向量或特征张量。
+特征向量(feature vector)或特征张量(feature tensor)。
a feature vector, or a feature tensor.
15
@@ -85,22 +85,22 @@ that was passed through the encoder.
18
00:00:56,130 --> 00:00:58,620
-这些向量中的每一个都是一个数字表示
+每个向量都是
Each of these vector is a numerical representation
19
00:00:58,620 --> 00:01:00,033
-有问题的词。
+该词的数字表示。
of the word in question.
20
00:01:01,080 --> 00:01:03,300
-该向量的维度被定义
+该向量的维度由
The dimension of that vector is defined
21
00:01:03,300 --> 00:01:05,520
-通过模型的架构。
+模型的架构所决定。
by the architecture of the model.
22
@@ -115,17 +115,17 @@ These representations contain the value of a word,
24
00:01:13,230 --> 00:01:15,240
-但语境化。
+但包含上下文化的处理。
but contextualized.
25
00:01:15,240 --> 00:01:18,570
-例如,归因于单词 “to” 的向量
+例如,与单词 "to" 相关联的向量
For example, the vector attributed to the word "to"
26
00:01:18,570 --> 00:01:22,290
-不只是 “to” 这个词的代表。
+不只是 “to” 这个词的表示。
isn't the representation of only the "to" word.
27
@@ -150,7 +150,7 @@ the words on the left of the one we're studying,
31
00:01:32,970 --> 00:01:34,980
-这里是 “欢迎” 这个词,
+这里是 “Welcome” 这个词,
here the word "Welcome",
32
@@ -180,22 +180,22 @@ holds the meaning of the word within the text.
37
00:01:53,310 --> 00:01:56,073
-由于自我注意机制,它做到了这一点。
+由于自注意力机制,它做到了这一点。
It does this thanks to the self-attention mechanism.
38
00:01:57,240 --> 00:02:00,630
-自注意力机制涉及到不同的位置,
+自注意力机制指的是与单个序列中的不同位置
The self-attention mechanism relates to different positions,
39
00:02:00,630 --> 00:02:02,850
-或单个序列中的不同单词
+或不同单词相关联
or different words in a single sequence
40
00:02:02,850 --> 00:02:06,003
-为了计算该序列的表示。
+以计算该序列的表示形式。
in order to compute a representation of that sequence.
41
@@ -220,17 +220,17 @@ We won't dive into the specifics here
45
00:02:18,030 --> 00:02:19,680
-这将提供一些进一步的阅读
+我们会提供一些进一步的阅读资料
which will offer some further readings
46
00:02:19,680 --> 00:02:21,330
-如果你想获得更好的理解
+如果您想对底层发生了什么
if you want to get a better understanding
47
00:02:21,330 --> 00:02:22,953
-在引擎盖下发生的事情。
+有更好的理解。
at what happens under the hood.
48
@@ -250,17 +250,17 @@ in a wide variety of tasks.
51
00:02:32,100 --> 00:02:33,360
-例如,伯特,
+例如,BERT,
For example, BERT,
52
00:02:33,360 --> 00:02:35,670
-可以说是最著名的变压器模型,
+可以说是最著名的 transformer 模型,
arguably the most famous transformer model,
53
00:02:35,670 --> 00:02:37,590
-是一个独立的编码器模型,
+它是一个独立的编码器模型,
is a standalone encoder model,
54
@@ -270,12 +270,12 @@ and at the time of release,
55
00:02:38,820 --> 00:02:40,440
-这将是最先进的
+它是许多
it'd be the state of the art
56
00:02:40,440 --> 00:02:42,780
-在许多序列分类任务中,
+序列分类任务
in many sequence classification tasks,
57
@@ -285,32 +285,32 @@ question answering tasks,
58
00:02:44,190 --> 00:02:46,743
-掩码语言建模仅举几例。
+和掩码语言建模等任务中的最先进技术。
and mask language modeling to only cite of few.
59
00:02:48,150 --> 00:02:50,460
-这个想法是编码器非常强大
+编码器非常擅长
The idea is that encoders are very powerful
60
00:02:50,460 --> 00:02:52,470
-在提取携带载体
+提取包含有意义信息的
at extracting vectors that carry
61
00:02:52,470 --> 00:02:55,350
-关于序列的有意义的信息。
+关于序列的向量。
meaningful information about a sequence.
62
00:02:55,350 --> 00:02:57,870
-然后可以在路上处理这个向量
+这个向量可以被传递给后续的神经元来进一步处理
This vector can then be handled down the road
63
00:02:57,870 --> 00:03:00,070
-通过额外的神经元来理解它们。
+以便理解其中包含的信息。
by additional neurons to make sense of them.
64
@@ -330,22 +330,22 @@ First of all, Masked Language Modeling, or MLM.
67
00:03:09,900 --> 00:03:11,970
-这是预测隐藏词的任务
+这是在一个单词序列中
It's the task of predicting a hidden word
68
00:03:11,970 --> 00:03:13,590
-在一个单词序列中。
+预测隐藏词的任务。
in a sequence of word.
69
00:03:13,590 --> 00:03:15,630
-在这里,例如,我们隐藏了这个词
+在这里,例如,我们在 “My” 和 “is” 之间
Here, for example, we have hidden the word
70
00:03:15,630 --> 00:03:17,247
-在 “我的” 和 “是” 之间。
+隐藏了这个词。
between "My" and "is".
71
@@ -360,7 +360,7 @@ It was trained to predict hidden words in a sequence.
73
00:03:25,230 --> 00:03:27,930
-编码器尤其在这种情况下大放异彩
+编码器在这种情况下尤其大放异彩
Encoders shine in this scenario in particular
74
@@ -375,32 +375,32 @@ If we didn't have the words on the right,
76
00:03:32,947 --> 00:03:34,650
-“是”、“Sylvain” 和 “.”,
+“is”、“Sylvain” 和 “.”,
"is", "Sylvain" and the ".",
77
00:03:34,650 --> 00:03:35,940
-那么机会就很小
+那么BERT 将能够识别名称的
then there is very little chance
78
00:03:35,940 --> 00:03:38,580
-BERT 将能够识别名称
+作为正确的词
that BERT would have been able to identify name
79
00:03:38,580 --> 00:03:40,500
-作为正确的词。
+的机会就很小。
as the correct word.
80
00:03:40,500 --> 00:03:42,270
-编码器需要有很好的理解
+为了预测一个掩码单词
The encoder needs to have a good understanding
81
00:03:42,270 --> 00:03:45,360
-序列以预测掩码词
+编码器需要对序列有很好的理解
of the sequence in order to predict a masked word
82
@@ -410,12 +410,12 @@ as even if the text is grammatically correct,
83
00:03:48,840 --> 00:03:50,610
-它不一定有意义
+但不一定符合
it does not necessarily make sense
84
00:03:50,610 --> 00:03:52,413
-在序列的上下文中。
+序列的上下文。
in the context of the sequence.
85
@@ -440,22 +440,22 @@ The model's aim is to identify the sentiment of a sequence.
89
00:04:09,540 --> 00:04:11,280
-它的范围可以从给出一个序列,
+它可以从给出的一个序列,
It can range from giving a sequence,
90
00:04:11,280 --> 00:04:12,960
-从一颗星到五颗星的评级
+做出一颗星到五颗星的评级
a rating from one to five stars
91
00:04:12,960 --> 00:04:15,900
-如果进行评论分析以给予肯定,
+如果进行评论分析
if doing review analysis to giving a positive,
92
00:04:15,900 --> 00:04:17,820
-或对序列的负面评价
+来对一个序列进行积极或消极的评级
or negative rating to a sequence
93
@@ -495,7 +495,7 @@ containing the same words,
100
00:04:35,220 --> 00:04:37,170
-意义完全不同,
+意义却完全不同,
the meaning is entirely different,
101
@@ -505,6 +505,6 @@ and the encoder model is able to grasp that difference.
102
00:04:41,404 --> 00:04:44,154
-(结尾引人注目)
+(引人注目的结尾)
(outro striking)
diff --git a/subtitles/zh-CN/06_transformer-models-decoders.srt b/subtitles/zh-CN/06_transformer-models-decoders.srt
index 4f81ed010..7a22241f2 100644
--- a/subtitles/zh-CN/06_transformer-models-decoders.srt
+++ b/subtitles/zh-CN/06_transformer-models-decoders.srt
@@ -5,13 +5,13 @@
2
00:00:07,140 --> 00:00:07,973
-一个例子
+一种流行的仅包含解码器架构
An example
3
00:00:07,973 --> 00:00:11,338
-一种流行的解码器唯一架构是 GPT 两种。
-of a popular decoder only architecture is GPT two.
+的例子是 GPT-2。
+of a popular decoder only architecture is GPT-2.
4
00:00:11,338 --> 00:00:14,160
@@ -20,7 +20,7 @@ In order to understand how decoders work
5
00:00:14,160 --> 00:00:17,430
-我们建议你观看有关编码器的视频。
+我们建议您观看有关编码器的视频。
we recommend taking a look at the video regarding encoders.
6
@@ -35,7 +35,7 @@ One can use a decoder
8
00:00:21,210 --> 00:00:23,760
-对于大多数与编码器相同的任务
+执行与编码器相同的大多数任务
for most of the same tasks as an encoder
9
@@ -55,12 +55,12 @@ with the encoder to try
12
00:00:30,300 --> 00:00:32,670
-并了解架构差异
+并了解在编码器和解码器之间
and understand the architectural differences
13
00:00:32,670 --> 00:00:34,803
-在编码器和解码器之间。
+的架构差异。
between an encoder and decoder.
14
@@ -70,12 +70,12 @@ We'll use a small example using three words.
15
00:00:38,910 --> 00:00:41,050
-我们通过他们的解码器传递它们。
+我们通过解码器传递它们。
We pass them through their decoder.
16
00:00:41,050 --> 00:00:44,793
-我们检索每个单词的数字表示。
+我们检索每个单词的数值表示。
We retrieve a numerical representation for each word.
17
@@ -85,17 +85,17 @@ Here for example, the decoder converts the three words.
18
00:00:49,350 --> 00:00:53,545
-欢迎来到纽约,欢迎来到这三个数字序列。
+Welcome to NYC,这三个数字序列。
Welcome to NYC, and these three sequences of numbers.
19
00:00:53,545 --> 00:00:56,040
-解码器只输出一个序列
+解码器针对每个输入词汇
The decoder outputs exactly one sequence
20
00:00:56,040 --> 00:00:58,740
-每个输入词的数字。
+只输出一个数列。
of numbers per input word.
21
@@ -105,7 +105,7 @@ This numerical representation can also
22
00:01:00,630 --> 00:01:03,783
-称为特征向量或特征传感器。
+称为特征向量(feature vector)或特征传感器(feature sensor)。
be called a feature vector or a feature sensor.
23
@@ -115,32 +115,32 @@ Let's dive in this representation.
24
00:01:07,200 --> 00:01:08,490
-它包含一个向量
+它包含了每个通过解码器
It contains one vector
25
00:01:08,490 --> 00:01:11,340
-每个通过解码器的单词。
+传递的单词的一个向量。
per word that was passed through the decoder.
26
00:01:11,340 --> 00:01:14,250
-这些向量中的每一个都是一个数字表示
+这些向量中的每一个单词
Each of these vectors is a numerical representation
27
00:01:14,250 --> 00:01:15,573
-有问题的词。
+都是一个数值表示。
of the word in question.
28
00:01:16,920 --> 00:01:18,562
-该向量的维度被定义
+这个向量的维度
The dimension of that vector is defined
29
00:01:18,562 --> 00:01:20,703
-通过模型的架构。
+由模型的架构所决定。
by the architecture of the model.
30
@@ -150,12 +150,12 @@ Where the decoder differs from the encoder is principally
31
00:01:26,040 --> 00:01:28,200
-具有自我注意机制。
+具有自注意力机制。
with its self attention mechanism.
32
00:01:28,200 --> 00:01:30,843
-它使用所谓的掩蔽自我关注。
+它使用所谓的掩蔽自注意力。
It's using what is called masked self attention.
33
@@ -165,27 +165,27 @@ Here, for example, if we focus on the word "to"
34
00:01:34,650 --> 00:01:37,620
-我们会看到 vector 是绝对未修改的
+我们会发现它的向量
we'll see that is vector is absolutely unmodified
35
00:01:37,620 --> 00:01:39,690
-用纽约的话来说。
+完全未被 NYC 单词修改。
by the NYC word.
36
00:01:39,690 --> 00:01:41,731
-那是因为右边所有的话,也都知道
+那是因为右边所有的话,即
That's because all the words on the right, also known
37
00:01:41,731 --> 00:01:45,276
-因为这个词的正确上下文被掩盖了
+单词的右侧上下文都被屏蔽了
as the right context of the word is masked rather
38
00:01:45,276 --> 00:01:49,230
-而不是受益于左右所有的话。
+而没有从左侧和右侧的所有单词中受益。
than benefiting from all the words on the left and right.
39
@@ -205,32 +205,32 @@ which can be the left context or the right context.
42
00:01:59,539 --> 00:02:03,356
-Masked self attention 机制不同
+掩蔽自注意力机制不同于
The masked self attention mechanism differs
43
00:02:03,356 --> 00:02:04,320
-来自 self attention 机制
+自注意力机制
from the self attention mechanism
44
00:02:04,320 --> 00:02:07,110
-通过使用额外的掩码来隐藏上下文
+通过使用额外的掩码在单词的两边
by using an additional mask to hide the context
45
00:02:07,110 --> 00:02:09,390
-在单词的两边
+来隐藏上下文
on either side of the word
46
00:02:09,390 --> 00:02:12,810
-单词数值表示不会受到影响
+通过隐藏上下文中的单词
the words numerical representation will not be affected
47
00:02:12,810 --> 00:02:14,853
-通过隐藏上下文中的单词。
+单词数值表示不会受到影响。
by the words in the hidden context.
48
@@ -245,7 +245,7 @@ Decoders like encoders can be used as standalone models
50
00:02:22,380 --> 00:02:25,020
-因为它们生成数字表示。
+因为它们生成数值表示。
as they generate a numerical representation.
51
@@ -265,42 +265,42 @@ A word can only have access to its left context
54
00:02:34,530 --> 00:02:36,690
-只能访问他们的左上下文。
+因为它只有左侧的上下文信息。
having only access to their left context.
55
00:02:36,690 --> 00:02:39,120
-他们天生擅长文本生成
+它们天生擅长文本生成
They're inherently good at text generation
56
00:02:39,120 --> 00:02:41,010
-生成单词的能力
+即在已知的词序列基础上生成一个单词
the ability to generate a word
57
00:02:41,010 --> 00:02:45,000
-或给定已知单词序列的单词序列。
+或单词序列的能力。
or a sequence of words given a known sequence of words.
58
00:02:45,000 --> 00:02:45,833
-这是众所周知的
+这被称为
This is known
59
00:02:45,833 --> 00:02:49,083
-作为因果语言建模或自然语言生成。
+因果语言建模或自然语言生成。
as causal language modeling or natural language generation.
60
00:02:50,430 --> 00:02:53,520
-这是因果语言建模如何工作的示例。
+下面是一个展示因果语言模型的工作原理的示例。
Here's an example of how causal language modeling works.
61
00:02:53,520 --> 00:02:56,410
-我们从一个词开始,这是我的
+我们从一个词 my 开始,
We start with an initial word, which is my
62
@@ -320,52 +320,52 @@ and this vector contains information about the sequence
65
00:03:07,230 --> 00:03:08,733
-这是一个词。
+这里的序列是一个单词。
which is here a single word.
66
00:03:09,780 --> 00:03:11,430
-我们应用一个小的转换
+我们对该向量
We apply a small transformation
67
00:03:11,430 --> 00:03:13,110
-到那个向量,以便它映射
+应用一个小的转换
to that vector so that it maps
68
00:03:13,110 --> 00:03:16,500
-到模型已知的所有单词,这是一个映射
+使其映射到模型已知的所有单词
to all the words known by the model, which is a mapping
69
00:03:16,500 --> 00:03:19,890
-我们稍后会看到称为语言建模头。
+这个映射我们稍后会看到,称为语言模型头部信息
that we'll see later called a language modeling head.
70
00:03:19,890 --> 00:03:21,930
-我们确定该模型相信
+我们发现模型认为
We identify that the model believes
71
00:03:21,930 --> 00:03:25,053
-最有可能的后续单词是 name。
+接下来最有可能的单词是 “name”。
that the most probable following word is name.
72
00:03:26,250 --> 00:03:28,710
-然后我们取那个新词并添加它
+然后我们把这个新单词加到原始的序列 my 后面
We then take that new word and add it
73
00:03:28,710 --> 00:03:33,480
-到我的初始序列,我们现在以我的名字命名。
+我们得到了 my name。
to the initial sequence from my, we are now at my name.
74
00:03:33,480 --> 00:03:36,870
-这就是自回归方面的用武之地。
+这就是自回归(auto-regressive)的作用所在。
This is where the auto regressive aspect comes in.
75
@@ -375,7 +375,7 @@ Auto regressive models.
76
00:03:38,490 --> 00:03:42,513
-我们使用他们过去的输出作为输入和以下步骤。
+我们使用它们过去的输出作为输入和接下来的步骤。
We use their past outputs as inputs and the following steps.
77
@@ -395,7 +395,7 @@ and retrieve the most probable following word.
80
00:03:52,978 --> 00:03:57,978
-本例中就是 “是” 这个词,我们重复操作
+本例中就是 “is” 这个词,我们重复操作
In this case, it is the word "is", we repeat the operation
81
@@ -410,13 +410,13 @@ We've now generated a full sentence.
83
00:04:04,590 --> 00:04:07,890
-我们决定就此打住,但我们可以继续一段时间。
+我们决定就此打住,但我们也可以继续一段时间。
We decide to stop there, but we could continue for a while.
84
00:04:07,890 --> 00:04:12,890
-例如,GPT 2 的最大上下文大小为 1,024。
-GPT two, for example, has a maximum context size of 1,024.
+例如,GPT-2 的最大上下文大小为 1,024。
+GPT-2, for example, has a maximum context size of 1,024.
85
00:04:13,170 --> 00:04:16,830
@@ -425,11 +425,11 @@ We could eventually generate up to a 1,024 words
86
00:04:16,830 --> 00:04:19,050
-并且解码器仍然会有一些记忆
+并且解码器仍然会对这个序列的前几个单词
and the decoder would still have some memory
87
00:04:19,050 --> 00:04:21,003
-这个序列中的第一个单词。
+有一些记忆。
of the first words in this sequence.
diff --git a/subtitles/zh-CN/07_transformer-models-encoder-decoders.srt b/subtitles/zh-CN/07_transformer-models-encoder-decoders.srt
index 28b847a27..c4303f575 100644
--- a/subtitles/zh-CN/07_transformer-models-encoder-decoders.srt
+++ b/subtitles/zh-CN/07_transformer-models-encoder-decoders.srt
@@ -10,42 +10,42 @@
3
00:00:05,063 --> 00:00:07,638
-我们将研究编码器 - 解码器架构。
+我们将研究编码-解码器架构。
we'll study the encoder-decoder architecture.
4
00:00:07,638 --> 00:00:12,243
-流行的编码器 - 解码器模型的一个示例是 T5。
+流行的编码-解码器模型的一个示例是 T5。
An example of a popular encoder-decoder model is T5.
5
00:00:13,770 --> 00:00:16,980
-为了理解编码器 - 解码器是如何工作的,
+为了理解编码-解码器是如何工作的,
In order to understand how the encoder-decoder works,
6
00:00:16,980 --> 00:00:18,630
-我们建议你查看视频
+我们建议您查看
we recommend you check out the videos
7
00:00:18,630 --> 00:00:22,590
-“Encoders and Decoders as standalone models”。
+将编码-解码器作为独立的模型(Encoders and Decoders as standalone models)这一视频。
on encoders and decoders as standalone models.
8
00:00:22,590 --> 00:00:24,990
-了解他们如何单独工作
+了解它们如何单独工作
Understanding how they work individually
9
00:00:24,990 --> 00:00:28,323
-将有助于理解编码器 - 解码器的工作原理。
+将有助于理解编码-解码器的工作原理。
will help understanding how an encoder-decoder works.
10
00:00:30,510 --> 00:00:33,390
-让我们从我们所看到的编码器开始。
+让我们从我们已了解的编码器开始。
Let's start from what we've seen about the encoder.
11
@@ -55,27 +55,27 @@ The encoder takes words as inputs,
12
00:00:36,240 --> 00:00:38,520
-通过编码器投射它们,
+通过编码器进行转换,
casts them through the encoder,
13
00:00:38,520 --> 00:00:40,800
-并检索数字表示
+并检索每个单词的
and retrieves a numerical representation
14
00:00:40,800 --> 00:00:42,663
-对于通过它的每个单词。
+数值表示。
for each word cast through it.
15
00:00:43,560 --> 00:00:46,470
-我们现在知道这个数字表示
+我们现在知道这个数值表示
We now know that this numerical representation
16
00:00:46,470 --> 00:00:49,473
-包含有关序列含义的信息。
+包含关于序列意义的信息。
holds information about the meaning of the sequence.
17
@@ -90,12 +90,12 @@ In this scenario,
19
00:00:57,510 --> 00:00:59,190
-我们以某种方式使用解码器
+我们以某种我们以前没见过的方式
we're using the decoder in a manner
20
00:00:59,190 --> 00:01:00,960
-我们以前没见过。
+使用解码器。
that we haven't seen before.
21
@@ -105,37 +105,37 @@ We're passing the outputs of the encoder directly to it.
22
00:01:05,356 --> 00:01:07,770
-除了编码器输出,
+另外,在给解码器输入序列的同时
Additionally to the encoder outputs,
23
00:01:07,770 --> 00:01:10,800
-我们还给解码器一个序列。
+我们还需要编码器的输出。
we also give the decoder a sequence.
24
00:01:10,800 --> 00:01:12,840
-当提示解码器输出时
+在不给定初始序列的情况下
When prompting the decoder for an output
25
00:01:12,840 --> 00:01:14,190
-没有初始序列,
+向解码器提示输出时,
with no initial sequence,
26
00:01:14,190 --> 00:01:16,140
-我们可以给它指示的值
+我们可以给它一个
we can give it the value that indicates
27
00:01:16,140 --> 00:01:18,060
-序列的开始。
+表示序列开头的值。
the start of a sequence.
28
00:01:18,060 --> 00:01:20,919
-这就是编码器 - 解码器魔术发生的地方。
+这就是编码-解码器魔术发生的地方。
And that's where the encoder-decoder magic happens.
29
@@ -150,7 +150,7 @@ It computes a prediction,
31
00:01:25,980 --> 00:01:28,858
-并输出一个数字表示。
+并输出一个数值表示。
and outputs a numerical representation.
32
@@ -165,7 +165,7 @@ It has, in a sense, encoded that sequence.
34
00:01:36,300 --> 00:01:38,130
-反过来,解码器,
+反过来,解码器
And the decoder, in turn,
35
@@ -235,7 +235,7 @@ As we have seen before with the decoder,
48
00:02:15,540 --> 00:02:18,720
-它可以以自动回归的方式起作用。
+它可以以自回归的方式起作用。
it can act in an auto-regressive manner.
49
@@ -245,17 +245,17 @@ The word it has just output can now be used as an input.
50
00:02:22,933 --> 00:02:26,188
-这个,结合数值表示
+这个编码器输出的数值表示
This, in combination with the numerical representation
51
00:02:26,188 --> 00:02:28,560
-编码器输出,
+和初始化的值结合,
output by the encoder,
52
00:02:28,560 --> 00:02:31,203
-现在可用于生成第二个单词。
+可以被用于生成第二个单词。
can now be used to generate a second word.
53
@@ -285,27 +285,27 @@ We can continue on and on, for example,
58
00:02:44,070 --> 00:02:46,320
-直到解码器输出一个值
+直到解码器输出一个
until the decoder outputs a value
59
00:02:46,320 --> 00:02:48,540
-我们考虑一个停止值,
+我们认为是停止值的数值,
that we consider a stopping value,
60
00:02:48,540 --> 00:02:51,093
-就像一个点,表示序列的结尾。
+比如句号表示序列的结束。
like a dot meaning the end of a sequence.
61
00:02:53,580 --> 00:02:55,926
-在这里,我们已经看到了完整的机制
+在这里,我们已经看到了编码-解码 transformer
Here, we've seen the full mechanism
62
00:02:55,926 --> 00:02:57,540
-编码器 - 解码器变压器。
+完整的机制。
of the encoder-decoder transformer.
63
@@ -315,12 +315,12 @@ Let's go over it one more time.
64
00:02:59,280 --> 00:03:02,773
-我们有一个发送到编码器的初始序列。
+我们有一个初始序列被送到编码器中。
We have an initial sequence that is sent to the encoder.
65
00:03:02,773 --> 00:03:06,450
-然后将该编码器输出发送到解码器
+编码器的输出发送到解码器
That encoder output is then sent to the decoder
66
@@ -330,32 +330,32 @@ for it to be decoded.
67
00:03:08,760 --> 00:03:12,450
-虽然它现在可以在一次使用后丢弃编码器,
+虽然在一次使用后可以丢弃编码器,
While it can now discard the encoder after a single use,
68
00:03:12,450 --> 00:03:14,427
-解码器将被多次使用
+但解码器将被多次使用
the decoder will be used several times
69
00:03:14,427 --> 00:03:17,763
-直到我们生成了我们需要的每一个词。
+直到我们生成了所需要的每一个词。
until we have generated every word that we need.
70
00:03:19,288 --> 00:03:21,510
-那么让我们看一个具体的例子
+那么让我们结合翻译语言建模
So let's see a concrete example
71
00:03:21,510 --> 00:03:23,460
-与翻译语言建模。
+看一个具体的例子。
with Translation Language Modeling.
72
00:03:23,460 --> 00:03:24,930
-也称为转导,
+也称为传导,
Also called transduction,
73
@@ -370,42 +370,42 @@ Here, we would like to translate this English sequence
75
00:03:30,577 --> 00:03:33,067
-法语 “欢迎来到纽约”。
+“Welcome to NYC”到法语。
"Welcome to NYC" in French.
76
00:03:33,067 --> 00:03:35,460
-我们正在使用变压器模型
+我们正在使用 transformer 模型
We're using a transformer model
77
00:03:35,460 --> 00:03:38,070
-明确针对该任务进行了培训。
+明确针对该任务进行了训练。
that is trained for that task explicitly.
78
00:03:38,070 --> 00:03:40,560
-我们使用编码器来创建表示
+我们使用编码器来创建英语句子
We use the encoder to create a representation
79
00:03:40,560 --> 00:03:42,240
-的英语句子。
+的表示。
of the English sentence.
80
00:03:42,240 --> 00:03:44,730
-我们把它投给解码器,
+我们使用编码器来创建英语句子的表示形式,
We cast this to the decoder,
81
00:03:44,730 --> 00:03:46,620
-使用序列字的开头,
+然后将其传递给解码器,
with the use of the start of sequence word,
82
00:03:46,620 --> 00:03:49,173
-我们要求它输出第一个单词。
+在使用开始序列单词的情况下,请求它输出第一个单词。
we ask it to output the first word.
83
@@ -445,7 +445,7 @@ Finally, we ask the decoder to predict a third word
90
00:04:13,590 --> 00:04:15,330
-它预测纽约市,这是正确的。
+它预测 NYC,这是正确的。
It predicts NYC, which is correct.
91
@@ -455,7 +455,7 @@ We've translated the sentence.
92
00:04:18,288 --> 00:04:20,760
-编码器 - 解码器真正发挥作用的地方,
+编码-解码器真正发挥作用的地方,
Where the encoder-decoder really shines,
93
@@ -475,7 +475,7 @@ Therefore, we have an entire block, the encoder,
96
00:04:29,460 --> 00:04:31,650
-可以训练以理解序列
+可以被训练,从而理解序列
that can be trained to understand the sequence
97
@@ -515,12 +515,12 @@ On the other hand, we have the decoder,
104
00:04:53,370 --> 00:04:56,850
-其唯一目的是解码数字表示
+它的唯一目的是解码
whose sole purpose is to decode the numerical representation
105
00:04:56,850 --> 00:04:58,203
-编码器输出。
+编码器输出的数值表示。
output by the encoder.
106
@@ -540,12 +540,12 @@ or even modality like images or speech.
109
00:05:07,170 --> 00:05:10,473
-编码器 - 解码器之所以特殊,有几个原因。
+编码-解码器之所以特殊,有几个原因。
Encoders-decoders are special for several reasons.
110
00:05:11,310 --> 00:05:15,570
-首先,他们能够管理任务的顺序,
+首先,它们能够管理任务的顺序,
Firstly, they're able to manage sequence to sequence tasks,
111
@@ -555,12 +555,12 @@ like translation that we have just seen.
112
00:05:18,358 --> 00:05:20,940
-其次,编码器之间的权重
+其次,编码器和解码器之间的权重
Secondly, the weights between the encoder
113
00:05:20,940 --> 00:05:24,540
-并且解码器部分不一定共享。
+并不一定共享。
and the decoder parts are not necessarily shared.
114
@@ -570,12 +570,12 @@ Let's take another example of translation.
115
00:05:27,172 --> 00:05:30,810
-这里我们用法语翻译 Transformers are powerful
+这里我们用法语
Here we're translating "Transformers are powerful"
116
00:05:30,810 --> 00:05:32,048
-这里我们用法语翻译 Transformers are powerful
+翻译 Transformers are powerful
in French.
117
@@ -595,12 +595,12 @@ One could argue that this could be handled with a decoder
120
00:05:42,480 --> 00:05:44,160
-那会产生翻译
+那会以自回归的方式
that would generate the translation
121
00:05:44,160 --> 00:05:46,260
-以自回归的方式,
+生成翻译结果,
in an auto-regressive manner,
122
@@ -610,12 +610,12 @@ and they would be right.
123
00:05:49,980 --> 00:05:51,930
-基于 Transformers 的 Seq2Seq 模型的
+基于 Transformers Seq2Seq 模型的
Another example of where sequence to sequence
124
00:05:51,930 --> 00:05:54,810
-另一个亮点是总结
+另一个亮点是进行总结的能力
transformers shine is in summarization.
125
@@ -650,7 +650,7 @@ which handles the text,
131
00:06:10,230 --> 00:06:12,210
-和解码器的较小上下文
+尔解码器上下文则较小
and a smaller context for the decoder
132
@@ -660,47 +660,47 @@ which handles the summarized sequence.
133
00:06:16,470 --> 00:06:18,840
-有很多序列模型。
+有很多序列到序列的模型。
There are a lot of sequence to sequence models.
134
00:06:18,840 --> 00:06:20,310
-这包含一些例子
+这包含了 Transformers 库中
This contains a few examples
135
00:06:20,310 --> 00:06:22,500
-流行的编码器 - 解码器模型
+几个受欢迎的
of popular encoder-decoder models
136
00:06:22,500 --> 00:06:24,400
-在 Transformers 库中可用。
+编码-解码器模型的示例。
available in the transformers library.
137
00:06:25,829 --> 00:06:29,940
-此外,你可以加载编码器和解码器
+此外,您可以在编码-解码器模型中
Additionally, you can load an encoder and a decoder
138
00:06:29,940 --> 00:06:32,130
-在编码器 - 解码器模型中。
+加载编码器和解码器。
inside an encoder-decoder model.
139
00:06:32,130 --> 00:06:35,190
-因此,根据你针对的具体任务,
+因此,根据您要解决的具体任务,
Therefore, according to the specific task you are targeting,
140
00:06:35,190 --> 00:06:38,700
-你可以选择使用特定的编码器和解码器,
+您可能会选择使用在这些具体任务上证明
you may choose to use specific encoders and decoders,
141
00:06:38,700 --> 00:06:42,613
-在这些特定任务中证明了它们的价值。
+其价值的特定编码器和解码器。
which have proven their worth on these specific tasks.
142
diff --git a/subtitles/zh-CN/08_what-happens-inside-the-pipeline-function-(pytorch).srt b/subtitles/zh-CN/08_what-happens-inside-the-pipeline-function-(pytorch).srt
index ca6c0276f..48d021499 100644
--- a/subtitles/zh-CN/08_what-happens-inside-the-pipeline-function-(pytorch).srt
+++ b/subtitles/zh-CN/08_what-happens-inside-the-pipeline-function-(pytorch).srt
@@ -5,7 +5,8 @@
2
00:00:05,340 --> 00:00:07,563
-- 管道函数内部发生了什么?
+- pipeline 函数内部发生了什么?
+*[译者注: pipeline 作为 流水线 的意思]
- What happens inside the pipeline function?
3
@@ -25,22 +26,22 @@ of the Transformers library.
6
00:00:15,090 --> 00:00:16,860
-更具体地说,我们将看看
+详细来讲,我们将看
More specifically, we will look
7
00:00:16,860 --> 00:00:19,200
-在情绪分析管道中,
+在情绪分析的 pipeline 中,
at the sentiment analysis pipeline,
8
00:00:19,200 --> 00:00:22,020
-以及它是如何从以下两个句子开始的,
+它是如何从以下两个句子开始的,
and how it went from the two following sentences,
9
00:00:22,020 --> 00:00:23,970
-正负标签
+将正负标签
to the positive and negative labels
10
@@ -50,12 +51,12 @@ with their respective scores.
11
00:00:26,760 --> 00:00:29,190
-正如我们在管道演示中看到的那样,
+正如我们在 pipeline 展示中看到的那样,
As we have seen in the pipeline presentation,
12
00:00:29,190 --> 00:00:31,860
-管道分为三个阶段。
+pipeline 分为三个阶段。
there are three stages in the pipeline.
13
@@ -65,7 +66,7 @@ First, we convert the raw texts to numbers
14
00:00:34,620 --> 00:00:37,173
-该模型可以理解使用分词器。
+该模型可以通过使用分词器理解。
the model can make sense of using a tokenizer.
15
@@ -75,17 +76,17 @@ Then those numbers go through the model,
16
00:00:40,530 --> 00:00:41,943
-输出逻辑。
+输出 logits 。
which outputs logits.
17
00:00:42,780 --> 00:00:45,600
-最后,后处理步骤变换
+最后,后处理步骤转换
Finally, the post-processing steps transforms
18
00:00:45,600 --> 00:00:48,150
-那些登录到标签和分数。
+那些 logits 包含标签和分数。
those logits into labels and scores.
19
@@ -100,17 +101,18 @@ and how to replicate them using the Transformers library,
21
00:00:53,640 --> 00:00:56,043
-从第一阶段开始,标记化。
+从第一阶段开始,分词化。
beginning with the first stage, tokenization.
22
00:00:57,915 --> 00:01:00,360
-令牌化过程有几个步骤。
+分词化过程有几个步骤。
The tokenization process has several steps.
23
00:01:00,360 --> 00:01:04,950
-首先,文本被分成称为标记的小块。
+首先,文本被分成小块, 称之为 token。
+*[译者注: 后面 token-* 均翻译成 分词-*]
First, the text is split into small chunks called tokens.
24
@@ -120,7 +122,7 @@ They can be words, parts of words or punctuation symbols.
25
00:01:08,550 --> 00:01:11,580
-然后 tokenizer 将有一些特殊的标记,
+然后分词器将有一些特殊的 token ,
Then the tokenizer will had some special tokens,
26
@@ -130,17 +132,17 @@ if the model expect them.
27
00:01:13,500 --> 00:01:16,860
-这里的模型在开头使用期望 CLS 令牌
+这里的模型在开头使用期望 CLS token
Here the model uses expects a CLS token at the beginning
28
00:01:16,860 --> 00:01:19,743
-以及用于分类的句子末尾的 SEP 标记。
+以及用于分类的句子末尾的 SEP token。
and a SEP token at the end of the sentence to classify.
29
00:01:20,580 --> 00:01:24,180
-最后,标记器将每个标记与其唯一 ID 匹配
+最后,分词器将每个 token 与其唯一 ID 匹配
Lastly, the tokenizer matches each token to its unique ID
30
@@ -180,7 +182,7 @@ Here the checkpoint used by default
37
00:01:45,360 --> 00:01:47,280
-用于情绪分析管道
+用于情绪分析的 pipeline
for the sentiment analysis pipeline
38
@@ -250,7 +252,7 @@ Looking at the result, we see we have a dictionary
51
00:02:25,590 --> 00:02:26,670
-用两把钥匙。
+和两个主键
with two keys.
52
@@ -265,7 +267,7 @@ with zero where the padding is applied.
54
00:02:32,550 --> 00:02:34,260
-第二把钥匙,注意面具,
+第二个键值,注意力掩码,
The second key, attention mask,
55
@@ -280,7 +282,7 @@ so the model does not pay attention to it.
57
00:02:38,940 --> 00:02:42,090
-这就是标记化步骤中的全部内容。
+这就是分词化步骤中的全部内容。
This is all what is inside the tokenization step.
58
@@ -350,7 +352,7 @@ for our classification problem.
71
00:03:15,030 --> 00:03:19,230
-这里的张量有两个句子,每个句子有 16 个标记,
+这里的张量有两个句子,每个句子有 16 个 token ,
Here the tensor has two sentences, each of 16 tokens,
72
@@ -425,12 +427,12 @@ This is because each model
86
00:03:57,270 --> 00:04:00,810
-每个模型都会返回 logits。
+每个模型都会返回 logits 。
of the Transformers library returns logits.
87
00:04:00,810 --> 00:04:02,250
-为了理解这些逻辑,
+为了理解这些 logits ,
To make sense of those logits,
88
@@ -490,7 +492,7 @@ correspond to the negative label,
99
00:04:32,250 --> 00:04:34,140
-秒,索引一,
+然后第二个,索引一,
and the seconds, index one,
100
@@ -505,7 +507,7 @@ This is how our classifier built
102
00:04:37,950 --> 00:04:40,230
-使用管道功能选择了那些标签
+使用 pipeline 功能选择了那些标签
with the pipeline function picked those labels
103
diff --git a/subtitles/zh-CN/09_what-happens-inside-the-pipeline-function-(tensorflow).srt b/subtitles/zh-CN/09_what-happens-inside-the-pipeline-function-(tensorflow).srt
index 1983a6ea6..4e6d58930 100644
--- a/subtitles/zh-CN/09_what-happens-inside-the-pipeline-function-(tensorflow).srt
+++ b/subtitles/zh-CN/09_what-happens-inside-the-pipeline-function-(tensorflow).srt
@@ -75,7 +75,8 @@ Then, those numbers go through the model,
16
00:00:42,600 --> 00:00:44,550
-输出逻辑。
+输出 logits 。
+*[译者注: logits 作为逻辑值的意思]
which outputs logits.
17
@@ -95,22 +96,22 @@ Let's look in detail at those three steps,
20
00:00:52,590 --> 00:00:55,200
-以及如何使用 Transformers 库复制它们,
+以及如何使用 Transformers 库复现它们,
and how to replicate them using the Transformers library,
21
00:00:55,200 --> 00:00:57,903
-从第一阶段开始,标记化。
+从第一阶段开始,分词化。
beginning with the first stage, tokenization.
22
00:00:59,905 --> 00:01:02,520
-令牌化过程有几个步骤。
+分词化过程有几个步骤。
The tokenization process has several steps.
23
00:01:02,520 --> 00:01:06,900
-首先,文本被分成称为标记的小块。
+首先,文本被分成称为 token 的小块。
First, the text is split into small chunks called token.
24
@@ -120,7 +121,7 @@ They can be words, parts of words or punctuation symbols.
25
00:01:10,800 --> 00:01:14,310
-然后 tokenizer 将有一些特殊的标记
+然后分词器将有一些特殊的 token
Then the tokenizer will had some special tokens
26
@@ -130,12 +131,12 @@ if the model expect them.
27
00:01:16,440 --> 00:01:20,430
-在这里,所使用的模型在开头需要一个 CLS 令牌
+在这里,所使用的模型在开头需要一个 CLS token
Here, the model used expects a CLS token at the beginning
28
00:01:20,430 --> 00:01:23,910
-以及用于分类的句子末尾的 SEP 标记。
+以及用于分类的句子末尾的 SEP token。
and a SEP token at the end of the sentence to classify.
29
@@ -170,7 +171,8 @@ which will download and cache the configuration
35
00:01:41,940 --> 00:01:44,913
-以及与给定检查点相关联的词汇表。
+以及与给定 checkpoint 相关联的词汇表。
+*[译者注: 在深度学习中, checkpoint 作为检查点是用来备份模型的, 后不翻译]
and the vocabulary associated to a given checkpoint.
36
@@ -180,13 +182,13 @@ Here, the checkpoint used by default
37
00:01:48,180 --> 00:01:50,310
-用于情绪分析管道
+用于情绪分析的 pipeline
for the sentiment analysis pipeline
38
00:01:50,310 --> 00:01:54,510
-是 distilbert base uncased finetuned sst2 英语,
-is distilbert base uncased finetuned sst2 English,
+是 distilbert-base-uncased-finetuned-sst2-English,
+is distilbert-base-uncased-finetuned-sst2-English,
39
00:01:54,510 --> 00:01:55,960
@@ -195,7 +197,7 @@ which is a bit of a mouthful.
40
00:01:56,820 --> 00:01:59,760
-我们实例化一个与该检查点关联的分词器,
+我们实例化一个与该 checkpoint 关联的分词器,
We instantiate a tokenizer associated with that checkpoint,
41
@@ -270,7 +272,7 @@ with zeros where the padding is applied.
55
00:02:36,750 --> 00:02:38,550
-第二把钥匙,注意面具,
+第二把钥匙,注意力掩码,
The second key, attention mask,
56
@@ -320,7 +322,7 @@ However, the AutoModel API will only instantiate
65
00:03:04,830 --> 00:03:06,540
-模特的身体,
+模型的主体,
the body of the model,
66
@@ -360,7 +362,7 @@ Here the tensor has two sentences,
73
00:03:24,210 --> 00:03:26,070
-每十六个令牌,
+每十六个 token,
each of sixteen token,
74
@@ -435,12 +437,12 @@ This is because each model of the Transformers library
88
00:04:06,090 --> 00:04:07,830
-返回逻辑。
+返回 logits 。
returns logits.
89
00:04:07,830 --> 00:04:09,480
-为了理解这些逻辑,
+为了理解这些 logits ,
To make sense of those logits,
90
diff --git a/subtitles/zh-CN/10_instantiate-a-transformers-model-(pytorch).srt b/subtitles/zh-CN/10_instantiate-a-transformers-model-(pytorch).srt
index f058fdebf..efa2fc2d7 100644
--- a/subtitles/zh-CN/10_instantiate-a-transformers-model-(pytorch).srt
+++ b/subtitles/zh-CN/10_instantiate-a-transformers-model-(pytorch).srt
@@ -10,107 +10,108 @@
3
00:00:08,483 --> 00:00:11,790
-在本视频中,我们将了解如何创建用户模型
+在本视频中,我们会带您了解我们如何能创建自己的模型
In this video, we'll look at how we can create a user model
4
00:00:11,790 --> 00:00:13,290
-来自变形金刚图书馆。
+用 Transformers 库创。
from the Transformers library.
5
00:00:14,310 --> 00:00:17,100
-正如我们之前看到的 AutoModel 类允许
+正如我们之前看到的,AutoModel 类允许
As we have seen before the AutoModel class allows
6
00:00:17,100 --> 00:00:19,140
-你实例化一个预训练模型
+您去实例化一个预训练的模型。
you to instantiate a pretrained model
7
00:00:19,140 --> 00:00:21,513
-从 Hugging Face Hub 上的任何检查站。
+从 Hugging Face Hub 的任何 checkpoint
+*[译者注: checkpoint 意思是 检查点, 作为训练模型在训练时的备份]
from any checkpoint on the Hugging Face Hub.
8
00:00:22,350 --> 00:00:23,910
-它会选择正确的模型类
+它会挑选合适的模型类
It'll pick the right model class
9
00:00:23,910 --> 00:00:26,654
-从库中实例化适当的体系结构
+从开源库中, 以实例化对应的结构
from the library to instantiate the proper architecture
10
00:00:26,654 --> 00:00:29,793
-和大量的权重作为内部的预训练模型。
+和权重来作为预训练模型。
and loads of weights as the pretrained model inside.
11
00:00:30,690 --> 00:00:33,810
-正如我们所见,当给定一个 BERT 检查点时
+正如我们所见,当给定一个 BERT checkpoint 时,
As we can see, when given a BERT checkpoint
12
00:00:33,810 --> 00:00:38,043
-我们最终得到一个 BertModel,类似地,对于 GPT-2 或 BART。
-we end up with a BertModel and similarly, for GPT-2 or BART.
+我们最终会得到一个 BertModel ,类似地,模型 GPT-2 或 BERT 也可以这么做。
+we end up with a BertModel and similarly, for GPT-2 or BERT.
13
00:00:40,020 --> 00:00:42,360
-在幕后,这个 API 可以取名字
+背后的信息是,这个 API 可以接受
Behind the scenes,this API can take the name
14
00:00:42,360 --> 00:00:44,250
-集线器上的检查点
+Hub 上一个 checkpoint 的名字
of a checkpoint on the Hub
15
00:00:44,250 --> 00:00:46,980
-在这种情况下,它将下载并缓存配置
-in which case it will download and cache the configuration
+在这种情况下,它将下载和缓存配置文件
+in which case it will download and cache the configuration file
16
00:00:46,980 --> 00:00:48,843
-文件以及模型权重文件。
-file as well as a model weights file.
+以及模型权重文件。
+as well as a model weights file.
17
00:00:49,698 --> 00:00:52,710
-你还可以指定本地文件夹的路径
+您也可以指定一个本地文件夹的路径,
You can also specify the path to a local folder
18
00:00:52,710 --> 00:00:55,290
-包含一个有效的配置文件和一个
-that contains a valid configuration file and a
+这个文件夹包含一个有效的配置文件和
+that contains a valid configuration file and
19
00:00:55,290 --> 00:00:56,390
-权重文件的模型。
-model of weights file.
+一个权重模型文件。
+a model of weights file.
20
00:00:57,600 --> 00:00:59,479
-要实例化预训练模型,
+为了实例化预训练的模型,
To instantiate the pretrained model,
21
00:00:59,479 --> 00:01:01,950
-AutoModel API 将首先打开配置
+AutoModel API 会先打开配置文件
the AutoModel API will first open the configuration
22
00:01:01,950 --> 00:01:05,403
-文件来查看应该使用的配置类。
+查看应该使用的配置类。
file to look at a configuration class that should be used.
23
00:01:06,420 --> 00:01:08,580
-配置类取决于类型
+配置类取决于模型的类型,
The configuration class depends on the type
24
@@ -120,42 +121,42 @@ of the model BERT, GPT-2 or BART for instance.
25
00:01:13,680 --> 00:01:15,930
-一旦它有一个合适的配置类,
+一旦有了一个合适的配置类,
Once it has a proper configuration class,
26
00:01:15,930 --> 00:01:18,390
-它可以实例化该配置
+就可以实例化那个配置,
it can instantiate that configuration
27
00:01:18,390 --> 00:01:21,900
-这是了解如何创建模型的蓝图。
+其包含一张关于如何创建模型的蓝图。
which is a blueprint to know how to create the model.
28
00:01:21,900 --> 00:01:24,240
-它还使用这个配置类来
+它还使用这个配置类
It also uses this configuration class to
29
00:01:24,240 --> 00:01:27,150
-找到合适的模型类,然后合并
+去寻找合适的模型类,其然后被
find the proper model class, which is then combined
30
00:01:27,150 --> 00:01:29,823
-使用加载的配置加载模型。
+和加载后的配置一起来加载模型。
with the loaded configuration to load the model.
31
00:01:30,904 --> 00:01:33,210
-该模型还不是预训练模型
+这个模型还不是一个预训练模型,
This model is not yet a pretrained model
32
00:01:33,210 --> 00:01:35,883
-因为它刚刚用随机权重初始化。
+因为它刚刚用随机权重完成了初始化。
as it has just been initialized with random weights.
33
@@ -165,23 +166,23 @@ The last step is to load the weight from the model file
34
00:01:39,810 --> 00:01:40,923
-在这个模型里面。
+到模型里
inside this model.
35
00:01:42,330 --> 00:01:44,250
-轻松加载模型的配置
+为了方便地加载一个模型的配置
To easily load the configuration of a model
36
-00:01:44,250 --> 00:01:46,410
-从任何检查点或文件夹包含
-from any checkpoint or folder containing
+00:01:44,250 --> 00:01:48,210
+从任何 checkpoint 或包含配置文件的文件夹中
+from any checkpoint or folder containing the configuration file.
37
-00:01:46,410 --> 00:01:48,210
-配置文件。
-the configuration file.
+00:01:48,210 --> 00:01:48,210
+.
+.
38
00:01:48,210 --> 00:01:50,373
@@ -195,52 +196,52 @@ Like the AutoModel class,
40
00:01:52,693 --> 00:01:55,693
-它将从库中选择正确的配置类。
+它将从开源库中挑选合适的配置类。
it will pick the right configuration class from the library.
41
00:01:57,060 --> 00:01:59,220
-我们也可以使用特定的类对应
+我们也可以使用一个特定的类来对应
We can also use a specific class corresponding
42
00:01:59,220 --> 00:02:01,470
-到一个检查站,但我们需要改变
+一个 checkpoint ,但每次我们需要
to a checkpoint, but we will need to change
43
00:02:01,470 --> 00:02:03,000
-每次我们想尝试的代码
+改代码, 每当我们想尝试
the code each time we want to try
44
00:02:03,000 --> 00:02:04,550
-不同的模型架构。
+不同的模型结构时.
a different model architecture.
45
00:02:06,030 --> 00:02:07,860
-正如我们之前所说,配置
+正如我们刚才所说的,一个模型的配置就是
As we said before, the configuration
46
00:02:07,860 --> 00:02:10,350
-模型的蓝图包含所有
+一张蓝图,其包括了
of a model is a blueprint that contains all the
47
00:02:10,350 --> 00:02:13,830
-创建模型架构所需的信息。
+创建模型架构所需的所有信息。
information necessary to create the model architecture.
48
00:02:13,830 --> 00:02:15,990
-例如,关联的 BERT 模型
+例如,关联到 bert-base-cased checkpoint 的
For instance, the BERT model associated
49
00:02:15,990 --> 00:02:19,980
-bert-base-cased 检查点有 12 层,
+BERT 模型有 12 层,
with the bert-base-cased checkpoint has 12 layers,
50
@@ -255,52 +256,52 @@ Once we have the configuration,
52
00:02:29,910 --> 00:02:31,950
-我们可以创建一个具有相同架构的模型
-we can create a model that does the same architecture
+我们就可以创建一个和 checkpoint 有着同样架构的模型,
+we can create a model that does the same architecture as our checkpoint,
53
00:02:31,950 --> 00:02:35,280
-作为我们的检查点,但是是随机初始化的。
-as our checkpoint, but is randomly initialized.
+但是模型是随机初始化的。
+but is randomly initialized.
54
00:02:35,280 --> 00:02:36,660
-然后我们可以从头开始训练它。
+然后我们可以从头开始训练它,
We can then train it from scratch.
55
00:02:36,660 --> 00:02:38,010
-像任何生物 PyTorch 模块一样
+就像任何 bio PyTorch 模块一样
Like any bio PyTorch module
56
00:02:39,497 --> 00:02:40,380
-我们也可以改变任何部分
+我们也可以通过改变
We can also change any part
57
00:02:40,380 --> 00:02:43,200
-通过使用关键字参数的配置。
+配置的任何部分, 使用关键字参数
of the configuration by using keyword arguments.
58
00:02:43,200 --> 00:02:46,138
-第二段代码实例化
+第二段代码实例化了
The second snippet of code instantiates
59
00:02:46,138 --> 00:02:48,360
-随机初始化的 BERT 模型
+一个随机初始化的 BERT 模型,
a randomly initialized BERT model
60
00:02:48,360 --> 00:02:50,403
-有 10 层而不是 12 层。
+这个模型有 10 层而非 12 层。
with 10 layers instead of 12.
61
00:02:51,409 --> 00:02:55,051
-训练或微调后保存模型非常容易。
+一个模型被训练或微调后,想要保存这个模型是很容易的。
Saving a model once it's trained or fine-tuned is very easy.
62
@@ -310,31 +311,31 @@ We just have to use a safe pretrained method.
63
00:02:58,500 --> 00:03:01,417
-此处模型将保存在名为
+这里模型将保存在当前工作目录下
Here the model will be saved in a folder named
64
00:03:01,417 --> 00:03:04,473
-当前工作目录中的 “my-bert-model”。
+一个名为 "my-bert-model" 的文件夹中。
"my-bert-model" inside the current working directory.
65
00:03:05,400 --> 00:03:08,255
-然后可以使用表单重新加载这样的模型
+然后,已保存的模型可以使用
Such a model can then be reloaded using the form
66
00:03:08,255 --> 00:03:09,596
-预训练方法。
+from_pretrained 函数重新加载进来。
pretrained method.
67
00:03:09,596 --> 00:03:11,250
-了解如何轻松处理此模型
+如果您要学习如何轻松地应用这个模型,
To learn how to easily approach this model
68
00:03:11,250 --> 00:03:13,473
-为此,请查看对视频的推送。
+请查看课程中的相关视频。
to that, check out the push to a video.
diff --git a/subtitles/zh-CN/11_instantiate-a-transformers-model-(tensorflow).srt b/subtitles/zh-CN/11_instantiate-a-transformers-model-(tensorflow).srt
index c14d2347f..07dae038e 100644
--- a/subtitles/zh-CN/11_instantiate-a-transformers-model-(tensorflow).srt
+++ b/subtitles/zh-CN/11_instantiate-a-transformers-model-(tensorflow).srt
@@ -25,12 +25,12 @@ As we've seen before, the TFAutoModel class
6
00:00:17,850 --> 00:00:20,100
-允许你实例化预训练模型
+允许你实例化预训练模型,
allows you to instantiate a pre-trained model
7
00:00:20,100 --> 00:00:22,503
-从 Hugging Face Hub 上的任何检查站。
+从 Hugging Face Hub 上的任何一个 checkpoint。
from any checkpoint on the Hugging Face Hub.
8
@@ -40,7 +40,7 @@ It will pick the right model class from the library
9
00:00:25,620 --> 00:00:27,750
-实例化适当的架构
+来实例化适当的结构
to instantiate the proper architecture
10
@@ -50,7 +50,7 @@ and load the weights of the pre-trained model inside.
11
00:00:31,200 --> 00:00:34,020
-正如我们所见,当给定一个 BERT 检查点时,
+正如我们所见,当给定一个 BERT 的 checkpoint 时,
As we can see, when given a BERT checkpoint,
12
@@ -65,12 +65,12 @@ and similarly for GPT2 or BART.
14
00:00:40,170 --> 00:00:42,510
-在幕后,这个 API 可以取名字
+在幕后,这个 API 接受
Behind the scenes, this API can take the name
15
00:00:42,510 --> 00:00:44,040
-集线器上的检查点,
+Hub 上的一个 checkpoint 的名字,
of a checkpoint on the Hub,
16
@@ -95,7 +95,7 @@ that contains a valid configuration file
20
00:00:54,090 --> 00:00:55,340
-和模型权重文件。
+和模型的权重文件。
and a model weights file.
21
@@ -105,12 +105,12 @@ To instantiate the pre-trained model,
22
00:00:58,167 --> 00:01:02,400
-TFAutoModel API 将首先打开配置文件
+TFAutoModel API 会首先打开配置文件
the TFAutoModel API will first open the configuration file
23
00:01:02,400 --> 00:01:05,253
-查看应该使用的配置类。
+以查看应该使用的配置类。
to look at the configuration class that should be used.
24
@@ -145,7 +145,7 @@ It also uses this configuration class
30
00:01:22,770 --> 00:01:24,750
-找到合适的模型类,
+来找到合适的模型类,
to find the proper model class,
31
@@ -175,23 +175,22 @@ The last step is to load the weights
36
00:01:36,690 --> 00:01:38,973
-来自该模型中的模型文件。
+从该模型中的模型文件中。
from the model file inside this model.
37
00:01:40,230 --> 00:01:42,270
-轻松加载模型的配置
+为了轻松加载模型的配置,
To easily load the configuration of a model
38
00:01:42,270 --> 00:01:44,220
-从任何检查点或文件夹
-from any checkpoint or a folder
-
+从任何 checkpoint 或
+from any checkpoint or
39
00:01:44,220 --> 00:01:46,170
-包含配置文件,
-containing the configuration file,
+包含配置文件的文件夹,
+a folder containing the configuration file,
40
00:01:46,170 --> 00:01:47,790
@@ -215,7 +214,7 @@ We can also use the specific class
44
00:01:56,040 --> 00:01:57,840
-对应一个检查点,
+对应一个 checkpoint ,
corresponding to a checkpoint,
45
@@ -225,7 +224,7 @@ but we will need to change the code
46
00:01:59,430 --> 00:02:02,230
-每次我们都想尝试不同的模型架构。
+每当我们想尝试不同的模型结构时。
each time we want to try a different model architecture.
47
@@ -240,7 +239,7 @@ is a blueprint that contains all the information necessary
49
00:02:08,610 --> 00:02:11,070
-创建模型架构。
+以创建模型结构。
to create the model architecture.
50
@@ -250,7 +249,7 @@ For instance, the BERT model
51
00:02:12,750 --> 00:02:15,510
-与 bert-base-cased 检查点关联
+与 bert-base-cased 的 checkpoint 关联
associated with the bert-base-cased checkpoint
52
@@ -270,17 +269,17 @@ Once we have the configuration,
55
00:02:26,670 --> 00:02:28,890
-我们可以创建一个具有相同架构的模型
+我们可以创建一个具有相同结构的模型
we can create a model that has the same architecture
56
00:02:28,890 --> 00:02:32,160
-作为我们的检查点,但随机初始化。
+作为我们的 checkpoint ,但是随机初始化的。
as our checkpoint but is randomly initialized.
57
00:02:32,160 --> 00:02:36,030
-然后我们可以像任何 TensorFlow 模型一样从头开始训练它。
+我们然后就可以像任何 TensorFlow 模型一样从头开始训练它。
We can then train it from scratch like any TensorFlow model.
58
@@ -300,7 +299,7 @@ The second snippet of code instantiates
61
00:02:43,110 --> 00:02:44,970
-随机初始化的 BERT 模型
+一个随机初始化的 BERT 模型
a randomly initialized BERT model
62
diff --git a/subtitles/zh-CN/12_tokenizers-overview.srt b/subtitles/zh-CN/12_tokenizers-overview.srt
index 92326f9b7..7940fd193 100644
--- a/subtitles/zh-CN/12_tokenizers-overview.srt
+++ b/subtitles/zh-CN/12_tokenizers-overview.srt
@@ -20,7 +20,8 @@
5
00:00:04,920 --> 00:00:06,720
-我们将看一下分词器。
+我们将看一下分词器
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
we'll take a look at the tokenizers.
6
@@ -45,7 +46,7 @@ cannot read or understand text in its raw form,
10
00:00:18,540 --> 00:00:20,253
-他们只能使用数字。
+他们只能理解数字。
they can only work with numbers.
11
@@ -55,7 +56,7 @@ So the tokenizer's objective
12
00:00:23,220 --> 00:00:25,923
-将文本翻译成数字。
+将是把文本翻译成数字。
will be to translate the text into numbers.
13
@@ -65,22 +66,22 @@ There are several possible approaches to this conversion,
14
00:00:30,240 --> 00:00:31,110
-和目标
+并且目标
and the objective
15
00:00:31,110 --> 00:00:33,453
-就是找到最有意义的表示。
+是找到最有意义的表示。
is to find the most meaningful representation.
16
00:00:36,240 --> 00:00:39,390
-我们将看看三种不同的标记化算法。
+我们将看看三种不同的分词化算法。
We'll take a look at three distinct tokenization algorithms.
17
00:00:39,390 --> 00:00:40,530
-我们一对一比较,
+我们对其一对一比较,
We compare them one to one,
18
diff --git a/subtitles/zh-CN/13_word-based-tokenizers.srt b/subtitles/zh-CN/13_word-based-tokenizers.srt
index 2fcf95891..7a8104067 100644
--- a/subtitles/zh-CN/13_word-based-tokenizers.srt
+++ b/subtitles/zh-CN/13_word-based-tokenizers.srt
@@ -16,11 +16,12 @@
4
00:00:03,549 --> 00:00:05,603
- 让我们来看看基于单词的分词。
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
- Let's take a look at word-based tokenization.
5
00:00:07,650 --> 00:00:09,780
-基于单词的标记化是这个想法
+基于单词的分词化的想法是
Word-based tokenization is the idea
6
@@ -35,7 +36,7 @@ by splitting on spaces or other specific rules,
8
00:00:16,020 --> 00:00:17,163
-像标点符号。
+比如标点符号。
like punctuation.
9
@@ -45,22 +46,22 @@ In this algorithm, each word has a specific number
10
00:00:21,810 --> 00:00:23,463
-或归因于它的 ID。
+或者说他的 ID。
or ID attributed to it.
11
00:00:24,360 --> 00:00:27,270
-在这里,我们有 ID 250,
+在这里,"let's" 的 ID 是 250,
Here, let's has the ID 250,
12
00:00:27,270 --> 00:00:30,150
-确实有 861,并且标记化
+ "do" 是 861,并且分词化
do has 861, and tokenization
13
00:00:30,150 --> 00:00:33,393
-后面跟感叹号的有 345。
+后面跟感叹号的是 345。
followed by an exclamation mark has 345.
14
@@ -110,7 +111,7 @@ and their meaning is close.
23
00:01:03,210 --> 00:01:05,550
-然而,基于单词的标记化,
+然而,基于单词的分词化,
The word-based tokenization, however,
24
@@ -135,7 +136,7 @@ This is unfortunate as we would like the model
28
00:01:15,090 --> 00:01:18,240
-了解这些词确实相关,
+理解这些词是确实相关的,
to understand that these words are indeed related,
29
@@ -195,12 +196,12 @@ that represents the word's meaning,
40
00:01:50,190 --> 00:01:52,170
-并跟踪这些映射
+并实现保持这些映射
and keeping track of these mappings
41
00:01:52,170 --> 00:01:54,990
-需要大量的权重
+需要很大的模型
requires an enormous number of weights
42
@@ -220,7 +221,7 @@ we can opt for our tokenizer to ignore certain words
45
00:02:04,440 --> 00:02:06,093
-我们不一定需要。
+我们不一定需要的。
that we don't necessarily need.
46
@@ -260,7 +261,7 @@ into numbers, but any other word will be converted
53
00:02:29,370 --> 00:02:31,530
-到词汇外的词,
+作为词汇外的词,
to the out-of-vocabulary word,
54
@@ -280,7 +281,7 @@ The model will have the exact same representation
57
00:02:39,900 --> 00:02:42,390
-对于它不知道的所有单词,
+对于所有它不知道的单词,
for all words that it doesn't know,
58
diff --git a/subtitles/zh-CN/14_character-based-tokenizers.srt b/subtitles/zh-CN/14_character-based-tokenizers.srt
index 0b07937f9..ea74b563f 100644
--- a/subtitles/zh-CN/14_character-based-tokenizers.srt
+++ b/subtitles/zh-CN/14_character-based-tokenizers.srt
@@ -5,22 +5,23 @@
2
00:00:04,260 --> 00:00:07,200
-- 在深入研究基于字符的标记化之前,
+- 在深入研究基于字符的分词化之前,
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
- Before diving in character-based tokenization,
3
00:00:07,200 --> 00:00:10,350
-理解为什么这种标记化很有趣
+理解为什么这种分词化很有趣
understanding why this kind of tokenization is interesting
4
00:00:10,350 --> 00:00:13,533
-需要了解基于单词的标记化的缺陷。
+需要了解基于单词的分词化的缺陷。
requires understanding the flaws of word-based tokenization.
5
00:00:14,640 --> 00:00:16,320
-如果你还没有看过第一个视频
+如果你还没有看过第一个视频,
If you haven't seen the first video
6
@@ -30,12 +31,12 @@ on word-based tokenization
7
00:00:17,880 --> 00:00:21,450
-我们建议你在观看此视频之前检查一下。
+我们建议你在观看此视频之前看一下。
we recommend you check it out before looking at this video.
8
00:00:21,450 --> 00:00:24,250
-好的,让我们看一下基于字符的标记化。
+好的,让我们看一下基于字符的分词化。
Okay, let's take a look at character-based tokenization.
9
@@ -60,7 +61,7 @@ while the number of characters stays low.
13
00:00:38,610 --> 00:00:41,313
-首先让我们看一下英语,
+首先, 让我们看一下英语,
To begin let's take a look at the English language,
14
@@ -75,7 +76,7 @@ so we would need a very large vocabulary
16
00:00:47,730 --> 00:00:49,413
-包含所有单词。
+来包含所有单词。
to encompass all words.
17
@@ -95,7 +96,7 @@ which includes letters, numbers and special characters.
20
00:00:59,760 --> 00:01:02,190
-即使是有很多不同字符的语言
+即使是有大量不同字符的语言
Even languages with a lot of different characters
21
@@ -105,12 +106,12 @@ like the Chinese languages can have dictionaries
22
00:01:04,800 --> 00:01:08,130
-多达 20,000 个不同的字符
+多达 20,000 个不同的汉字
with up to 20,000 different characters
23
00:01:08,130 --> 00:01:11,523
-但超过 375,000 个不同的单词。
+超过 375,000 个不同的词语。
but more than 375,000 different words.
24
@@ -120,7 +121,7 @@ So character-based vocabularies
25
00:01:14,310 --> 00:01:16,293
-让我们使用更少的不同标记
+让我们使用更少的不同分词
let us use fewer different tokens
26
@@ -135,12 +136,12 @@ we would otherwise use.
28
00:01:23,250 --> 00:01:25,830
-这些词汇也比较全
+这些词汇也更全面
These vocabularies are also more complete
29
00:01:25,830 --> 00:01:28,950
-比他们基于单词的词汇对应物。
+相较于其基于单词的词汇。
than their word-based vocabularies counterparts.
30
@@ -150,7 +151,7 @@ As our vocabulary contains all characters
31
00:01:31,410 --> 00:01:33,960
-用在一种语言中,甚至是看不见的词
+在一种语言中的,甚至是看不见的词
used in a language, even words unseen
32
@@ -160,12 +161,12 @@ during the tokenizer training can still be tokenized,
33
00:01:36,990 --> 00:01:39,633
-因此词汇表外的标记将不那么频繁。
+因此溢出的分词将不那么频繁。
so out-of-vocabulary tokens will be less frequent.
34
00:01:40,680 --> 00:01:42,840
-这包括正确标记化的能力
+这包括正确分词化
This includes the ability to correctly tokenize
35
@@ -175,7 +176,7 @@ misspelled words, rather than discarding them
36
00:01:45,210 --> 00:01:46,623
-立即未知。
+作为未知的。
as unknown straight away.
37
@@ -220,22 +221,22 @@ have a lot of information held in single characters,
45
00:02:12,750 --> 00:02:15,360
-但对于其他像基于罗马的语言,
+但对于其他像基于字母的语言,
but for others like roman-based languages,
46
00:02:15,360 --> 00:02:17,760
-该模型必须理解多个标记
-the model will have to make sense of multiple tokens
+该模型必须一次性理解多个分词
+the model will have to make sense of multiple tokens at a time
47
00:02:17,760 --> 00:02:20,670
-一次获取以其他方式持有的信息
-at a time to get the information otherwise held
+以获取信息
+to get the information otherwise held
48
00:02:20,670 --> 00:02:21,753
-一句话。
+在一句话中。
in a single word.
49
@@ -250,7 +251,7 @@ their sequences are translated into very large amount
51
00:02:29,520 --> 00:02:31,593
-模型要处理的标记数。
+模型要处理的分词。
of tokens to be processed by the model.
52
@@ -260,12 +261,12 @@ And this can have an impact on the size of the context
53
00:02:36,810 --> 00:02:40,020
-该模型将随身携带,并会减小尺寸
+该模型将装载,并会减小
the model will carry around, and will reduce the size
54
00:02:40,020 --> 00:02:42,030
-我们可以用作模型输入的文本,
+可以用作模型输入文本的尺寸,
of the text we can use as input for our model,
55
@@ -280,22 +281,21 @@ This tokenization, while it has some issues,
57
00:02:46,650 --> 00:02:48,720
-在过去看到了一些非常好的结果
+但在过去看到了一些非常好的结果
has seen some very good results in the past
58
00:02:48,720 --> 00:02:50,490
-所以在接近时应该考虑
-and so it should be considered when approaching
-
+所以应该被考虑
+and so it should be considered
59
00:02:50,490 --> 00:02:52,680
-解决问题的新问题
-a new problem as it solves issues
+当碰到新问题时, 来解决问题.
+when approaching a new problem as it solves issues
60
00:02:52,680 --> 00:02:54,843
-在基于词的算法中遇到。
+在基于词的算法中遇到的。
encountered in the word-based algorithm.
61
diff --git a/subtitles/zh-CN/15_subword-based-tokenizers.srt b/subtitles/zh-CN/15_subword-based-tokenizers.srt
index 2fa836c93..7b53f8219 100644
--- a/subtitles/zh-CN/15_subword-based-tokenizers.srt
+++ b/subtitles/zh-CN/15_subword-based-tokenizers.srt
@@ -1,21 +1,23 @@
1
00:00:06,450 --> 00:00:09,540
- 让我们来看看基于子词的分词。
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
- Let's take a look at subword based tokenization.
2
00:00:09,540 --> 00:00:11,610
了解为什么基于子词的分词是
-Understanding why subword based tokenization is
+Understanding why subword based tokenization
3
00:00:11,610 --> 00:00:13,980
-有趣需要理解缺陷
-interesting requires understanding the flaws
+是有趣的需要理解
+is interesting requires understanding the flaws
+
4
00:00:13,980 --> 00:00:17,340
-基于单词和基于校正器的标记化。
+基于单词和基于校正器分词化的缺陷。
of word based and corrector based tokenization.
5
@@ -25,63 +27,63 @@ If you haven't seen the first videos
6
00:00:18,780 --> 00:00:22,020
-基于单词和基于字符的标记化
+关于基于单词和基于字符的标记化
on word based and character based tokenization
7
00:00:22,020 --> 00:00:23,130
-我们建议你检查它们
-we recommend you check them
+我们建议你观看它们
+we recommend you check them out
8
00:00:23,130 --> 00:00:24,780
在看这个视频之前。
-out before looking at this video.
+before looking at this video.
9
00:00:27,840 --> 00:00:31,493
-基于子词的标记化介于基于字符之间
+基于子词的分词化介于基于字符
Subword based tokenization lies in between character based
10
00:00:31,493 --> 00:00:35,280
-和基于词的分词算法。
+和基于单词的分词算法之间。
and word based tokenization algorithms.
11
00:00:35,280 --> 00:00:37,410
-这个想法是找到一个中间立场
+这个想法是找到一个中间场
The idea is to find a middle ground
12
00:00:37,410 --> 00:00:39,486
-在非常大的词汇表之间
-between very large vocabularies
+在很大的词汇表,
+between very large vocabularies,
13
00:00:39,486 --> 00:00:42,600
-大量的词汇标记
+大量的词汇分词
a large quantity of out vocabulary tokens
14
00:00:42,600 --> 00:00:45,360
-并且在非常相似的词中失去意义
+还有在非常相似的词之间意义差
and a loss of meaning across very similar words
15
00:00:45,360 --> 00:00:48,630
-用于基于词的分词器和非常长的序列
+对基于单词的分词器和非常长的序列
for word based tokenizers and very long sequences
16
00:00:48,630 --> 00:00:51,330
-以及意义不大的单个标记。
-as well as less meaningful individual tokens.
+以及意义不大的单个标记
+as well as less meaningful individual tokens
17
00:00:51,330 --> 00:00:53,133
-对于基于字符的分词器。
-For character based tokenizers.
+对于基于字符的分词器之间。
+for character based tokenizers.
18
00:00:54,840 --> 00:00:57,960
@@ -95,7 +97,7 @@ Frequently used words should not be split
20
00:01:00,000 --> 00:01:01,500
-分成更小的子词
+成更小的子词
into smaller subwords
21
@@ -110,7 +112,7 @@ into meaningful subwords.
23
00:01:06,510 --> 00:01:08,460
-一个例子是狗这个词。
+一个例子是 dog 这个词。
An example is the word dog.
24
@@ -120,42 +122,42 @@ We would like to have our tokenizer to have a single ID
25
00:01:11,190 --> 00:01:12,600
-对于狗这个词
+对于 dog 这个词
for the word dog rather
26
00:01:12,600 --> 00:01:15,363
-而不是将其拆分为校正器 DO 和 G。
-than splitting it into correctors D O and G.
+而不是将其拆分为字母 d o 和 g。
+than splitting it into characters d o and g.
27
00:01:16,650 --> 00:01:19,260
-然而,当遇到狗这个词时
+然而,当遇到 dog 这个词时
However, when encountering the word dogs
28
00:01:19,260 --> 00:01:22,710
-我们希望我们的标记化从根本上理解这一点
+我们希望我们的分词从词根上理解这一点
we would like our tokenize to understand that at the root
29
00:01:22,710 --> 00:01:24,120
-这还是狗这个词。
+这还是 dog 这个词。
this is still the word dog.
30
00:01:24,120 --> 00:01:27,030
-添加 S 后,意思略有改变
-With an added S, that slightly changes the meaning
+添加 s 后,意思略有改变
+With an added "s", that slightly changes the meaning
31
00:01:27,030 --> 00:01:28,923
-同时保持最初的想法。
+同时保持最初的意思。
while keeping the original idea.
32
00:01:30,600 --> 00:01:34,080
-另一个例子是像标记化这样的复杂词
+另一个例子是像 tokenization 这样的复杂词
Another example is a complex word like tokenization
33
@@ -165,17 +167,17 @@ which can be split into meaningful subwords.
34
00:01:37,140 --> 00:01:37,973
-根
-The root
+这个词的根
+The root of the word
35
00:01:37,973 --> 00:01:40,590
-这个词的是记号,-ization 完成根
-of the word is token and -ization completes the root
+是 token ,以及 -ization 完整了这个词
+is token and -ization completes the root
36
00:01:40,590 --> 00:01:42,870
-赋予它稍微不同的含义。
+以赋予它稍微不同的含义。
to give it a slightly different meaning.
37
@@ -195,42 +197,42 @@ labeled as the start of the word
40
00:01:49,950 --> 00:01:52,530
-和化作为标记的附加信息
-and ization as additional information labeled
+和 -ization 作为标记的附加信息
+and -ization as additional information labeled
41
00:01:52,530 --> 00:01:54,393
-作为单词的完成。
+作为单词的完整化。
as a completion of the word.
42
00:01:55,826 --> 00:01:58,740
-反过来,该模型现在将能够有意义
+如此一来,该模型现在将能够有作用
In turn, the model will now be able to make sense
43
00:01:58,740 --> 00:02:01,080
-不同情况下的令牌。
+在不同情况下的分词。
of token in different situations.
44
00:02:01,080 --> 00:02:04,602
-它会理解这个词的 token, tokens, tokenizing
+它会理解这个词的形式: token, tokens, tokenizing
It will understand that the word's token, tokens, tokenizing
45
00:02:04,602 --> 00:02:08,760
-和标记化具有相似的含义并且是相关联的。
+和 tokenization 具有相似的含义并且是相关联的。
and tokenization have a similar meaning and are linked.
46
00:02:08,760 --> 00:02:12,450
-它还将理解标记化、现代化
+它还将理解 tokenization 、modernization
It's will also understand that tokenization, modernization
47
00:02:12,450 --> 00:02:16,200
-和免疫,它们都有相同的后缀
+和 immunization ,都有相同的后缀
and immunization, which all have the same suffixes
48
@@ -240,62 +242,62 @@ are probably used in the same syntactic situations.
49
00:02:20,610 --> 00:02:23,130
-基于子词的分词器通常有办法
+基于子词的分词器通常有办法来
Subword based tokenizers generally have a way to
50
00:02:23,130 --> 00:02:25,890
-识别哪些标记是单词的开头
+识别哪些分词是单词的开头
identify which tokens are a start of word
51
00:02:25,890 --> 00:02:28,443
-以及哪些标记完成单词的开头。
+以及哪些分词完成了单词的开始。
and which tokens complete start of words.
52
00:02:29,520 --> 00:02:31,140
-所以这里以令牌为开始
-So here token as the start
+所以这里以分词作为单词的开始
+So here token as the start of a word
-53
+53
00:02:31,140 --> 00:02:35,100
-病房和哈希哈希化作为奖励的完成。
-of a ward and hash hash ization as completion of award.
+以及 ##ization 的开始作为单词的完成。
+and ##ization as completion of a word.
54
00:02:35,100 --> 00:02:38,103
-这里 hash 哈希前缀表示化是一部分
-Here, the hash hash prefix indicates that ization is part
+这里 ## 表示 -ization 是单词的一部分
+Here, the ## prefix indicates that ization is part of a word
55
00:02:38,103 --> 00:02:41,013
-奖项而不是它的开始。
-of award rather than the beginning of it.
+而不是它的开始。
+rather than the beginning of it.
56
00:02:41,910 --> 00:02:43,110
-hash 散列来了
-The hash hash comes
+ ## 记号
+The ## comes
57
00:02:43,110 --> 00:02:47,013
-来自基于词片算法的 BERT 分词器。
+来自基于单词片算法的 BERT 分词器。
from the BERT tokenizer based on the word piece algorithm.
58
00:02:47,850 --> 00:02:50,700
-其他标记化使用其他前缀可以是
+其他分词器使用其他前缀, 可以是
Other tokenizes use other prefixes which can be
59
00:02:50,700 --> 00:02:52,200
-放置以表示单词的一部分
+用来表示单词的一部分
placed to indicate part of words
60
00:02:52,200 --> 00:02:55,083
-喜欢在这里或单词的开头。
+比如在这里或单词的开头。
like in here or start of words instead.
61
@@ -310,12 +312,11 @@ of different algorithms that can be used
63
00:02:58,740 --> 00:03:00,090
-用于子词标记化
+用于子词分词化
for subword tokenization
-
64
00:03:00,090 --> 00:03:02,670
-大多数模型都获得了最先进的结果
+大多数模型都获得了目前最先进的结果
and most models obtaining state-of-the-art results
65
@@ -325,7 +326,7 @@ in English today
66
00:03:03,780 --> 00:03:06,663
-使用某种子词标记化算法。
+使用一些子词标记化算法。
use some kind of subword tokenization algorithms.
67
@@ -335,17 +336,17 @@ These approaches help in reducing the vocabulary sizes
68
00:03:10,953 --> 00:03:13,636
-通过跨不同的词共享信息
+通过不同词之间共享的信息
by sharing information across different words
69
00:03:13,636 --> 00:03:15,960
-有前缀的能力
+有能力以理解前缀
having the ability to have prefixes
70
00:03:15,960 --> 00:03:18,630
-和后缀这样理解。
+和后缀如斯。
and suffixes understood as such.
71
@@ -355,6 +356,6 @@ They keep meaning across very similar words
72
00:03:20,700 --> 00:03:23,103
-通过识别相似的标记,将它们组合起来。
+通过识别相似的分词,将它们组合起来。
by recognizing similar tokens, making them up.
diff --git a/subtitles/zh-CN/16_the-tokenization-pipeline.srt b/subtitles/zh-CN/16_the-tokenization-pipeline.srt
index a359fd213..4db8dcce1 100644
--- a/subtitles/zh-CN/16_the-tokenization-pipeline.srt
+++ b/subtitles/zh-CN/16_the-tokenization-pipeline.srt
@@ -5,22 +5,23 @@
2
00:00:05,610 --> 00:00:06,873
-- 分词器管道。
+- 分词器的 pipeline 。
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
- The tokenizer pipeline.
3
00:00:07,920 --> 00:00:10,570
-在本视频中,我们将了解分词器如何将
+在本视频中,我们将了解分词器如何转换
In this video, we'll look at how a tokenizer converts
4
00:00:11,433 --> 00:00:12,480
-原始文本到数字,
+从原始文本到数字,
raw texts to numbers,
5
00:00:12,480 --> 00:00:14,970
-Transformer 模型可以理解,
+Transformer 模型可以理解成,
that a Transformer model can make sense of,
6
@@ -35,12 +36,12 @@ Here is a quick overview
8
00:00:18,690 --> 00:00:21,630
-tokenizer 对象内部发生的事情:
+对于 tokenizer 对象内部发生的事情:
of what happens inside the tokenizer object:
9
00:00:21,630 --> 00:00:24,360
-首先,文本被分成标记,
+首先,文本被分成分词,
first, the text is split into tokens,
10
@@ -50,12 +51,12 @@ which are words, parts of words, or punctuation symbols.
11
00:00:28,440 --> 00:00:31,500
-然后标记器添加潜在的特殊标记
+然后分词器添加潜在的特殊分词
Then the tokenizer adds potential special tokens
12
00:00:31,500 --> 00:00:34,680
-并将每个令牌转换为各自唯一的 ID
+并将每个分词转换为各自唯一的 ID
and converts each token to their unique respective ID
13
@@ -65,17 +66,17 @@ as defined by the tokenizer's vocabulary.
14
00:00:37,710 --> 00:00:40,380
-正如我们将要看到的,它并不是按照这个顺序发生的,
+正如我们将要看到的,它并不完全是按照这个顺序发生的,
As we'll see, it doesn't quite happen in this order,
15
00:00:40,380 --> 00:00:43,233
-但这样做更利于理解。
+但这样更利于理解。
but doing it like this is better for understandings.
16
00:00:44,280 --> 00:00:47,670
-第一步是将我们的输入文本拆分为标记。
+第一步是将我们的输入文本拆分为分词。
The first step is to split our input text into tokens.
17
@@ -90,7 +91,7 @@ To do that, the tokenizer may first perform some operations,
19
00:00:54,030 --> 00:00:56,880
-喜欢将所有单词小写,然后遵循一组规则
+比如将所有单词小写,然后遵循一组规则
like lowercasing all words, then follow a set of rules
20
@@ -105,7 +106,7 @@ Most of the Transformer models uses
22
00:01:02,286 --> 00:01:04,890
-单词标记化算法,这意味着
+单词分词化算法,这意味着
a word tokenization algorithm, which means
23
@@ -115,12 +116,12 @@ that one given word can be split
24
00:01:06,750 --> 00:01:10,050
-在几个标记中,例如 tokenize here。
+在几个分词中,例如这里的分词。
in several tokens like tokenize here.
25
00:01:10,050 --> 00:01:12,570
-查看下面的“标记化算法”视频链接
+查看下面的 “分词化算法” 视频链接
Look at the "Tokenization algorithms" video link below
26
@@ -130,17 +131,17 @@ for more information.
27
00:01:14,760 --> 00:01:17,820
-我们在ize前面看到的##前缀是
-The # # prefix we see in front of ize is
+我们在 ize 前面看到的 ## 前缀是
+The ## prefix we see in front of ize is
28
00:01:17,820 --> 00:01:19,830
-Bert 用来表示的约定
-a convention used by Bert to indicate
+BERT 的约定, 用来表示
+a convention used by BERT to indicate
29
00:01:19,830 --> 00:01:22,762
-这个标记不是单词的开头。
+这个分词不是单词的开头。
this token is not the beginning of the word.
30
@@ -155,7 +156,7 @@ for instance, ALBERT tokenizers will add a long underscore
32
00:01:29,984 --> 00:01:31,620
-在所有令牌前
+在所有分词前
in front of all the tokens
33
@@ -170,17 +171,17 @@ by all sentencepiece tokenizers.
35
00:01:38,580 --> 00:01:41,040
-标记化管道的第二步是
+分词化管道的第二步是
The second step of the tokenization pipeline is
36
00:01:41,040 --> 00:01:43,470
-将这些令牌映射到它们各自的 ID
+将这些分词映射到它们各自的 ID
to map those tokens to their respective IDs
37
00:01:43,470 --> 00:01:45,770
-由分词器的词汇定义。
+由分词器的词汇定义的。
as defined by the vocabulary of the tokenizer.
38
@@ -205,7 +206,7 @@ We have to make sure we use the same mapping
42
00:01:54,390 --> 00:01:56,520
-就像模型被预训练时一样。
+和模型被预训练时一致。
as when the model was pretrained.
43
@@ -225,7 +226,7 @@ that we don't have the exact same results
46
00:02:03,540 --> 00:02:05,580
-就像我们的第一张幻灯片一样
+就像我们的第一张幻灯片一样, 或许
as in our first slide, or not
47
@@ -235,18 +236,18 @@ as this looks like a list of random numbers anyway,
48
00:02:07,920 --> 00:02:10,680
-在这种情况下,请允许我重温一下你的记忆。
+在这种情况下,请允许我重温一下你的回忆。
in which case, allow me to refresh your memory.
49
-00:02:10,680 --> 00:02:12,350
-我们有一个开头的数字和一个数字
-We had a the number at the beginning and a number
+00:02:10,680 --> 00:02:15,350
+我们有缺少开头的数字和一个结尾的数字
+We had a the number at the beginning and a number at the end, that are missing,
50
-00:02:12,350 --> 00:02:17,130
-最后缺少的是特殊标记。
-at the end that are missing, those are the special tokens.
+00:02:15,350 --> 00:02:17,130
+是特殊标记。
+those are the special tokens.
51
00:02:17,130 --> 00:02:20,340
@@ -255,12 +256,12 @@ The special tokens are added by the prepare_for_model method
52
00:02:20,340 --> 00:02:22,350
-它知道这个令牌的索引
+它知道这个分词的索引
which knows the indices of this token
53
00:02:22,350 --> 00:02:25,680
-在词汇表中并添加适当的数字。
+在词汇表中, 并仅添加适当的数字。
in the vocabulary and just adds the proper numbers.
54
@@ -285,7 +286,7 @@ at how the tokenizer has changed your text,
58
00:02:33,870 --> 00:02:35,280
-通过使用解码方法
+通过使用 decode 方法
by using the decode method
59
@@ -300,7 +301,7 @@ As for the prefix for beginning
61
00:02:39,423 --> 00:02:44,160
-词的/词的一部分,特殊标记因情况而异
+词的/词的部分,对于特殊标记, 依赖于
of words/ part of words, for special tokens vary depending
62
@@ -315,8 +316,8 @@ So that tokenizer uses CLS and SEP,
64
00:02:48,810 --> 00:02:52,417
-但是 roberta tokenizer 使用类似 HTML 的锚点
-but the roberta tokenizer uses HTML-like anchors
+但是 RoBERTa 分词器使用类似 HTML 的锚点
+but the RoBERTa tokenizer uses HTML-like anchors
65
00:02:52,417 --> 00:02:55,230
@@ -345,12 +346,12 @@ on your input texts.
70
00:03:03,870 --> 00:03:05,310
-分词器的输出不
+分词器的输出不只是
The output of a tokenizer don't
71
00:03:05,310 --> 00:03:07,853
-但是,只包含输入 ID。
+仅包含输入 ID, 然而.
just contain the input IDs, however.
72
@@ -360,17 +361,17 @@ To learn what the attention mask is,
73
00:03:09,750 --> 00:03:12,360
-查看“一起批量输入”视频。
+查看 “一起批量输入” 视频。
check out the "Batch input together" video.
74
00:03:12,360 --> 00:03:14,220
-要了解令牌类型 ID,
+要了解分词类型 ID,
To learn about token type IDs,
75
00:03:14,220 --> 00:03:16,570
-观看“处理句子对”视频。
+观看 “处理句子对” 视频。
look at the "Process pairs of sentences" video.
76
diff --git a/subtitles/zh-CN/17_batching-inputs-together-(pytorch).srt b/subtitles/zh-CN/17_batching-inputs-together-(pytorch).srt
index b4fdd4d2b..885fc5296 100644
--- a/subtitles/zh-CN/17_batching-inputs-together-(pytorch).srt
+++ b/subtitles/zh-CN/17_batching-inputs-together-(pytorch).srt
@@ -20,7 +20,7 @@ to batch input sequences together.
5
00:00:12,137 --> 00:00:15,420
-一般来说,我们想要通过我们的模型的句子
+一般来说,我们想要输入模型的句子
In general, the sentences we want to pass through our model
6
@@ -30,12 +30,12 @@ won't all have the same lengths.
7
00:00:17,670 --> 00:00:19,740
-在这里,我们使用我们看到的模型
+在这里,我们使用模型
Here, we are using the model we saw
8
00:00:19,740 --> 00:00:22,080
-在情绪分析管道中
+在情绪分析 pipeline 中讲的
in the sentiment analysis pipeline
9
@@ -45,7 +45,8 @@ and want to classify two sentences.
10
00:00:24,900 --> 00:00:27,360
-将它们标记化并映射每个标记时
+将它们分词化并映射每个分词时
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
When tokenizing them and mapping each token
11
@@ -60,12 +61,12 @@ we get two lists of different lengths.
13
00:00:33,240 --> 00:00:35,340
-尝试创建张量或 NumPy 数组
+尝试创建 tensor 或 NumPy 数组
Trying to create a tensor or a NumPy array
14
00:00:35,340 --> 00:00:38,220
-从这两个列表中将导致错误,
+从这两个列表中, 将导致错误,
from those two lists will result in an error,
15
@@ -75,12 +76,12 @@ because all arrays and tensors should be rectangular.
16
00:00:42,240 --> 00:00:44,160
-克服此限制的一种方法
+突破此限制的一种方法
One way to overcome this limit
17
00:00:44,160 --> 00:00:45,690
-是造第二句
+是让第二句
is to make the second sentence
18
@@ -90,7 +91,7 @@ the same length as the first
19
00:00:47,640 --> 00:00:50,463
-通过根据需要多次添加特殊令牌。
+通过根据需要多次添加特殊分词。
by adding a special token as many times as necessary.
20
@@ -105,12 +106,12 @@ to the length of the second,
22
00:00:55,710 --> 00:00:58,140
-但我们会让他们失去很多信息
-but we would them lose a lot of information
+但我们会失去很多信息
+but we would then lose a lot of information
23
00:00:58,140 --> 00:01:01,083
-这可能是正确分类句子所必需的。
+而这可能是正确分类句子所必需的。
that might be necessary to properly classify the sentence.
24
@@ -135,7 +136,7 @@ The value used to pad the second sentence
28
00:01:11,850 --> 00:01:13,740
-不应随意挑选;
+不应被随意挑选;
should not be picked randomly;
29
@@ -155,7 +156,7 @@ Now that we have padded our sentences,
32
00:01:22,800 --> 00:01:24,303
-我们可以和他们一起做一批。
+我们可以和他们做成一批。
we can make a batch with them.
33
@@ -165,7 +166,7 @@ If we pass the two sentences to the model separately
34
00:01:28,320 --> 00:01:30,120
-然而,并批在一起,
+和并批在一起,然而
and batched together however,
35
@@ -185,9 +186,8 @@ here, the second one.
38
00:01:36,390 --> 00:01:39,420
-它在 Transformers 库的后面?不。
-这是 Transformers
-It's at the back in the Transformers Library? No.
+是 Transformers 有问题?不。
+It's at the backend in the Transformers Library? No.
39
00:01:39,420 --> 00:01:40,770
@@ -206,7 +206,7 @@ this should not come as a total surprise;
42
00:01:45,210 --> 00:01:48,277
-在计算每个标记的上下文表示时,
+在计算每个分词的上下文表示时,
when computing the contextual representation of each token,
43
@@ -226,7 +226,7 @@ If we have just the sentence
46
00:01:53,850 --> 00:01:56,970
-或者添加了几个填充标记的句子,
+或者添加了几个填充 token 的句子,
or the sentence with several padding tokens added,
47
@@ -246,7 +246,7 @@ we need to indicate to the attention layers
50
00:02:05,340 --> 00:02:08,070
-他们应该忽略那些填充标记。
+他们应该忽略那些填充 token 。
that they should ignore those padding tokens.
51
@@ -261,27 +261,27 @@ a tensor with the same shape as the input IDs,
53
00:02:13,320 --> 00:02:14,733
-用零和一个。
+用 0 和 1 。
with zeros and ones.
54
00:02:15,780 --> 00:02:18,120
-那些表示注意层的标记
+1 的分词表示注意层
Ones indicate the tokens the attention layers
55
00:02:18,120 --> 00:02:20,100
-应结合上下文考虑
+应该结合上下文考虑
should consider in the context
56
00:02:20,100 --> 00:02:22,100
-并将他们应该忽略的标记归零。
+并且 0 的分词他们应该忽略。
and zeros the tokens they should ignore.
57
00:02:23,520 --> 00:02:26,760
-现在,将这个注意掩码与输入 ID 一起传递
+现在,将这个注意掩码与输入 ID 一起传入
Now, passing this attention mask along with the input ID
58
@@ -291,7 +291,7 @@ will give us the same results
59
00:02:28,170 --> 00:02:31,170
-就像我们将两个句子分别发送给模型一样。
+就像我们将两个句子单独发送给模型一样。
as when we sent the two sentences individually to the model.
60
@@ -306,7 +306,7 @@ when you apply it to several sentences
62
00:02:36,900 --> 00:02:38,613
-标志 padding=True。
+设参数 padding=True。
with the flag padding=True.
63
@@ -316,7 +316,7 @@ It will apply the padding with the proper value
64
00:02:41,490 --> 00:02:43,140
-到较小的句子
+对较小的句子
to the smaller sentences
65
diff --git a/subtitles/zh-CN/18_batching-inputs-together-(tensorflow).srt b/subtitles/zh-CN/18_batching-inputs-together-(tensorflow).srt
index a672d8f66..fbbb2b247 100644
--- a/subtitles/zh-CN/18_batching-inputs-together-(tensorflow).srt
+++ b/subtitles/zh-CN/18_batching-inputs-together-(tensorflow).srt
@@ -5,17 +5,17 @@
2
00:00:05,310 --> 00:00:07,590
-- 如何一起批量输入。
+- 如何批量一起输入。
- How to batch inputs together.
3
00:00:07,590 --> 00:00:09,150
-在这个视频中,我们将看到
+在本视频中,我们将看到
In this video, we'll see
4
00:00:09,150 --> 00:00:11,050
-如何将输入序列一起批处理。
+如何将输入序列一起批量处理。
how to batch input sequences together.
5
@@ -25,17 +25,17 @@ In general, the sentences we want to pass
6
00:00:14,910 --> 00:00:18,000
-通过我们的模型不会都具有相同的长度。
+进入我们的模型不会都具有相同的长度。
through our model won't all have the same lengths.
7
00:00:18,000 --> 00:00:20,310
-在这里,我们使用我们看到的模型
+在这里,我们使用模型
Here, we are using the model we saw
8
00:00:20,310 --> 00:00:22,650
-在情绪分析管道中
+在情绪分析 pipeline 中的
in the sentiment analysis pipeline
9
@@ -45,7 +45,8 @@ and want to classify two sentences.
10
00:00:25,860 --> 00:00:27,870
-将它们标记化并映射每个标记时
+将它们分词化并映射每个标记时
+*[译者注: token, tokenization, tokenizer 等词均译成了 分词*, 实则不翻译最佳]
When tokenizing them and mapping each token
11
@@ -60,7 +61,7 @@ we get two lists of different lengths.
13
00:00:33,360 --> 00:00:35,070
-尝试创建张量和 NumPy 数组
+尝试创建 tensor 和 NumPy 数组
Trying to create a tensor and NumPy array
14
@@ -75,7 +76,7 @@ because all arrays and tensors should be rectangular.
16
00:00:42,510 --> 00:00:43,920
-克服此限制的一种方法
+克服此困难的一种方法
One way to overcome this limit
17
@@ -85,7 +86,7 @@ is to make the second sentence the same length as the first
18
00:00:47,340 --> 00:00:50,373
-通过根据需要多次添加特殊令牌。
+通过根据需要多次添加特殊分词。
by adding a special token as many times as necessary.
19
@@ -95,7 +96,7 @@ Another way would be to truncate the first sequence
20
00:00:53,340 --> 00:00:56,550
-到秒的长度,但我们会失去很多
+到第二个的长度,但我们会失去很多
to the length of the second, but we would then lose a lot
21
@@ -105,17 +106,17 @@ of information that may be necessary
22
00:00:58,590 --> 00:01:01,230
-正确地对句子进行分类。
+来正确地对句子进行分类。
to properly classify the sentence.
23
00:01:01,230 --> 00:01:04,710
-一般来说,我们只会截断更长的句子
+一般来说,我们只会截断句子
In general, we only truncate sentences when they are longer
24
00:01:04,710 --> 00:01:07,083
-超过模型可以处理的最大长度。
+超过模型可以处理的最大长度的。
than the maximum length the model can handle.
25
@@ -125,7 +126,7 @@ The value used to pad the second sentence
26
00:01:10,320 --> 00:01:12,390
-不应随意挑选。
+不应被随意挑选。
should not be picked randomly.
27
@@ -155,7 +156,7 @@ If we pass the two sentences to the model separately
32
00:01:26,730 --> 00:01:29,130
-或批在一起,但是,我们注意到
+或并批在一起,但是,我们注意到
or batched together, however, we notice
33
@@ -175,7 +176,7 @@ Here, the second one.
36
00:01:34,440 --> 00:01:36,690
-期待 transformer 库中的单词?
+希望是 transformer 库中的单词?
Expect the word in the transformer library?
37
@@ -190,12 +191,12 @@ If you remember that Transformer models make heavy use
39
00:01:39,720 --> 00:01:43,800
-注意力层,它不应该完全令人惊讶。
+注意力层,它应该不足为奇。
of attention layers, it should not come as a total surprise.
40
00:01:43,800 --> 00:01:47,100
-在计算每个标记的上下文表示时,
+在计算每个分词的上下文表示时,
When computing the contextual representation of each token,
41
@@ -215,7 +216,7 @@ If we have just a sentence
44
00:01:52,252 --> 00:01:55,650
-或者添加了几个填充标记的句子,
+或者添加了几个填充 token 的句子,
or the sentence with several padding tokens added,
45
@@ -235,7 +236,7 @@ we need to indicate to the attention layers
48
00:02:03,750 --> 00:02:06,660
-他们应该忽略那些填充标记。
+他们应该忽略那些填充 token 。
that they should ignore those padding tokens.
49
@@ -245,17 +246,17 @@ This is done by creating an attention mask,
50
00:02:08,970 --> 00:02:11,700
-与输入 ID 具有相同形状的张量
+与输入 ID 具有相同形状的 tensor
a tensor with the same shape as the input IDs
51
00:02:11,700 --> 00:02:13,173
-用零和一个。
+用 0 和 1 。
with zeros and ones.
52
00:02:14,640 --> 00:02:16,830
-那些表示注意层的标记
+1 的 token 表示注意层
Ones indicate the tokens the attention layers
53
@@ -265,12 +266,12 @@ should consider in the context,
54
00:02:18,660 --> 00:02:20,823
-和零,他们应该忽略的标记。
+并且 0 的 token 他们应该忽略。
and zeros, the tokens they should ignore.
55
00:02:21,810 --> 00:02:23,290
-现在,通过这个注意力面具
+现在,通过这个注意力掩码
Now, passing this attention mask
56
@@ -295,8 +296,8 @@ when you apply it to several sentences
60
00:02:35,583 --> 00:02:37,713
-标志填充等于 true。
-with the flag padding equals true.
+设置参数 padding=True。
+with the flag padding=True.
61
00:02:38,640 --> 00:02:39,690
@@ -305,7 +306,7 @@ It will apply the padding
62
00:02:39,690 --> 00:02:42,180
-对较小的句子具有适当的价值
+对较小的句子具有适当值
with the proper value to the smaller sentences
63
diff --git a/subtitles/zh-CN/20_hugging-face-datasets-overview-(tensorflow).srt b/subtitles/zh-CN/20_hugging-face-datasets-overview-(tensorflow).srt
index 8d655495b..dcc4aa9db 100644
--- a/subtitles/zh-CN/20_hugging-face-datasets-overview-(tensorflow).srt
+++ b/subtitles/zh-CN/20_hugging-face-datasets-overview-(tensorflow).srt
@@ -5,7 +5,7 @@
2
00:00:05,371 --> 00:00:09,690
-- 本节将带来 Hugging Face Datasets 库的快速概览。
+- Hugging Face Datasets 库: 快速概览。
- The Hugging Face Datasets library: A Quick overview.
3
@@ -15,12 +15,12 @@ The Hugging Face Datasets library
4
00:00:10,917 --> 00:00:12,870
-是一个提供 API 的库
+是一个库, 提供 API
is a library that provides an API
5
00:00:12,870 --> 00:00:15,150
-快速下载许多公共数据集
+来快速下载许多公共数据集
to quickly download many public datasets
6
@@ -45,12 +45,12 @@ you can directly download and cache a dataset
10
00:00:26,010 --> 00:00:28,023
-来自其在数据集中心的标识符。
+来自其在数据集 Hub 的 ID 。
from its identifier on the Dataset hub.
11
00:00:29,160 --> 00:00:33,690
-这里我们从 GLUE 基准中获取 MRPC 数据集,
+这里我们从 GLUE benchmark 中获取 MRPC 数据集,
Here we fetch the MRPC dataset from the GLUE benchmark,
12
@@ -75,7 +75,7 @@ is a DatasetDict, which is a sort of dictionary
16
00:00:45,090 --> 00:00:46,940
-包含我们数据集的每个分割。
+包含我们数据集的每个拆分。
containing each split of our dataset.
17
@@ -90,17 +90,17 @@ This split is then an instance of the Dataset class,
19
00:00:54,540 --> 00:00:57,423
-有列,这里是 sentence1,sentence2,
+有列: sentence1,sentence2,
with columns, here sentence1, sentence2,
20
00:00:58,350 --> 00:01:00,813
-标签和 idx,以及行。
+label 和 idx,以及行。
label and idx, and rows.
21
00:01:02,160 --> 00:01:05,220
-我们可以通过索引访问给定的元素。
+我们可以访问给定的元素, 通过索引。
We can access a given element by its index.
22
@@ -120,7 +120,7 @@ which means that even if your dataset is huge
25
00:01:14,460 --> 00:01:16,219
-你不会离开 RAM,
+你不会内存溢出,
you won't get out of RAM,
26
@@ -130,7 +130,7 @@ only the elements you request are loaded in memory.
27
00:01:19,920 --> 00:01:24,510
-访问数据集的一部分就像访问一个元素一样简单。
+访问数据集的一个切片就像访问一个元素一样简单。
Accessing a slice of your dataset is as easy as one element.
28
@@ -160,7 +160,7 @@ The features attribute of a Dataset
33
00:01:37,080 --> 00:01:39,840
-为我们提供有关其专栏的更多信息。
+为我们提供有关其列的更多信息。
gives us more information about its columns.
34
@@ -180,7 +180,7 @@ and names for the labels.
37
00:01:46,110 --> 00:01:49,623
-0 代表不等价,1 代表等价。
+0 代表不相等,1 代表相等。
0 stands for not equivalent and 1 for equivalent.
38
@@ -190,12 +190,12 @@ To pre-process all the elements of our dataset,
39
00:01:54,090 --> 00:01:55,980
-我们需要将它们标记化。
+我们需要将它们 token 化。
we need to tokenize them.
40
00:01:55,980 --> 00:01:58,470
-看看视频 “预处理句子对”
+看看视频 “Pre-process sentence pairs”
Have a look at the video "Pre-process sentence pairs"
41
@@ -205,7 +205,7 @@ for a refresher, but you just have to send the two sentences
42
00:02:01,800 --> 00:02:04,833
-带有一些额外的关键字参数的分词器。
+给 tokenizer, 带有一些额外的关键字参数。
to the tokenizer with some additional keyword arguments.
43
@@ -215,7 +215,7 @@ Here we indicate a maximum length of 128
44
00:02:09,300 --> 00:02:11,460
-和垫输入短于这个长度,
+和垫全输入短于这个长度的,
and pad inputs shorter than this length,
45
@@ -255,12 +255,12 @@ or update existing ones.
52
00:02:30,060 --> 00:02:32,520
-加快预处理并利用
+为加快预处理并利用
To speed up pre-processing and take advantage
53
00:02:32,520 --> 00:02:35,130
-事实上,我们的分词器由 Rust 支持
+我们的分词器由 Rust 支持的事实
of the fact our tokenizer is backed by Rust
54
@@ -280,12 +280,12 @@ in our tokenize function, using the batched=True argument.
57
00:02:45,300 --> 00:02:46,980
-由于分词器可以处理列表
+由于 tokenizer 可以处理列表
Since the tokenizer can handle a list
58
00:02:46,980 --> 00:02:50,280
-第一句话或第二句话的 tokenize_function
+第一句话或第二句话, tokenize_function
of first or second sentences, the tokenize_function
59
@@ -295,7 +295,7 @@ does not need to change for this.
60
00:02:52,740 --> 00:02:55,410
-你还可以将多处理与 map 方法一起使用,
+你还可以将多进程与 map 方法一起使用,
You can also use multiprocessing with the map method,
61
@@ -305,7 +305,7 @@ check out its documentation linked below.
62
00:02:58,740 --> 00:03:02,130
-完成后,我们几乎可以开始训练了,
+完成后,我们几乎准备好训练了,
Once this is done, we are almost ready for training,
63
@@ -320,12 +320,12 @@ with the remove_columns method,
65
00:03:06,120 --> 00:03:08,580
-将标签重命名为标签,因为模型
+将 label 重命名为 labels ,因为模型是
rename label to labels, since the models
66
00:03:08,580 --> 00:03:11,430
-从变形金刚图书馆期望,
+ transformers 库中的,期望如此
from the transformers library expect that,
67
@@ -335,7 +335,7 @@ and set the output format to our desired backend,
68
00:03:14,040 --> 00:03:15,893
-手电筒、tensorflow 或 numpy。
+torch、tensorflow 或 numpy。
torch, tensorflow or numpy.
69
diff --git a/subtitles/zh-CN/21_preprocessing-sentence-pairs-(pytorch).srt b/subtitles/zh-CN/21_preprocessing-sentence-pairs-(pytorch).srt
index 8541dbc5e..2e8e2d741 100644
--- a/subtitles/zh-CN/21_preprocessing-sentence-pairs-(pytorch).srt
+++ b/subtitles/zh-CN/21_preprocessing-sentence-pairs-(pytorch).srt
@@ -10,27 +10,27 @@
3
00:00:09,150 --> 00:00:11,340
-我们已经看到了如何标记单个句子
+我们已经看到了如何分词化单个句子
We have seen how to tokenize single sentences
4
00:00:11,340 --> 00:00:12,877
并将它们放在一起,
-and batch them together in the,
+and batch them together in the
5
00:00:12,877 --> 00:00:15,810
-“批量输入视频。”
-"Batching inputs together video."
+在 “Batching inputs together” 视频中
+"Batching inputs together" video.
6
00:00:15,810 --> 00:00:18,330
-如果你觉得这段代码不熟悉,
+如果这段代码对你而言不熟悉,
If this code look unfamiliar to you,
7
00:00:18,330 --> 00:00:20,030
-请务必再次检查该视频。
+请务必再次查看该视频。
be sure to check that video again.
8
@@ -40,23 +40,23 @@ Here will focus on tasks that classify pair of sentences.
9
00:00:25,620 --> 00:00:28,470
-例如,我们可能想要对两个文本进行分类
+例如,我们可能想要对两个文本是否被释义
For instance, we may want to classify whether two texts
10
00:00:28,470 --> 00:00:30,360
-是否被释义。
+进行分类。
are paraphrased or not.
11
00:00:30,360 --> 00:00:32,880
-这是从 Quora 问题对中获取的示例
-Here is an example taken from the Quora Question Pairs
+这是从 Quora Question Pairs 数据集中获取的示例
+Here is an example taken from the Quora Question Pairs dataset
12
00:00:32,880 --> 00:00:37,530
-数据集,它专注于识别重复的问题。
-dataset, which focuses on identifying duplicate questions.
+它专注于识别重复的问题。
+which focuses on identifying duplicate questions.
13
00:00:37,530 --> 00:00:40,650
@@ -65,7 +65,7 @@ In the first pair, the two questions are duplicates,
14
00:00:40,650 --> 00:00:42,000
-在第二个他们不是。
+在第二个它们不是。
in the second they are not.
15
@@ -75,7 +75,7 @@ Another pair classification problem is
16
00:00:45,540 --> 00:00:47,400
-当我们想知道两个句子是否
+当我们想知道两个句子是
when we want to know if two sentences are
17
@@ -90,7 +90,7 @@ a problem called natural language inference or NLI.
19
00:00:53,970 --> 00:00:57,000
-在这个例子中,取自 MultiNLI 数据集,
+在这个取自 MultiNLI 数据集的例子中,
In this example, taken from the MultiNLI data set,
20
@@ -100,7 +100,7 @@ we have a pair of sentences for each possible label.
21
00:00:59,880 --> 00:01:02,490
-矛盾,自然的或必然的,
+矛盾,自然的或蕴涵,
Contradiction, natural or entailment,
22
@@ -115,32 +115,32 @@ implies the second.
24
00:01:06,930 --> 00:01:08,820
-所以分类成对的句子是一个问题
+所以分类成对的句子是一个
So classifying pairs of sentences is a problem
25
00:01:08,820 --> 00:01:10,260
-值得研究。
+值得研究的问题。
worth studying.
26
00:01:10,260 --> 00:01:12,630
-事实上,在 GLUE 基准测试中,
+事实上,在 GLUE 基准中,
In fact, in the GLUE benchmark,
27
00:01:12,630 --> 00:01:15,750
-这是文本分类的学术基准
+这是文本分类问题的学术界基准
which is an academic benchmark for text classification
28
00:01:15,750 --> 00:01:17,910
-10 个数据集中有 8 个是重点
-eight of the 10 data sets are focused
+10 个数据集中有 8 个是关注
+8 of the 10 datasets are focused
29
00:01:17,910 --> 00:01:19,953
-在使用句子对的任务上。
+使用句子对的任务。
on tasks using pairs of sentences.
30
@@ -165,7 +165,7 @@ they often have an objective related to sentence pairs.
34
00:01:31,230 --> 00:01:34,320
-例如,在预训练期间显示 BERT
+例如,在预训练期间 BERT 见到
For instance, during pretraining BERT is shown
35
@@ -175,12 +175,12 @@ pairs of sentences and must predict both
36
00:01:36,810 --> 00:01:39,930
-随机屏蔽令牌的价值,以及第二个是否
+随机掩蔽的标记值,以及第二个是否
the value of randomly masked tokens, and whether the second
37
00:01:39,930 --> 00:01:41,830
-句子是否从头开始。
+句子是否接着第一个句子。
sentence follow from the first or not.
38
@@ -200,32 +200,32 @@ You just have to pass them as two arguments
41
00:01:51,270 --> 00:01:52,120
-到分词器。
+到 tokenizer 。
to the tokenizer.
42
00:01:53,430 --> 00:01:55,470
-在输入 ID 和注意掩码之上
+在我们已经研究过的输入 ID
On top of the input IDs and the attention mask
43
00:01:55,470 --> 00:01:56,970
-我们已经研究过,
+和注意掩码之上,
we studied already,
44
00:01:56,970 --> 00:01:59,910
-它返回一个名为令牌类型 ID 的新字段,
+它返回一个名为标记类型 ID 的新字段,
it returns a new field called token type IDs,
45
00:01:59,910 --> 00:02:01,790
-它告诉模型哪些令牌属于
+它告诉模型哪些标记属于
which tells the model which tokens belong
46
00:02:01,790 --> 00:02:03,630
-对于第一句话,
+第一句话,
to the first sentence,
47
@@ -240,32 +240,32 @@ Zooming in a little bit, here has an input IDs
49
00:02:09,840 --> 00:02:12,180
-与它们对应的标记对齐,
+与它们对应的 token 对齐,
aligned with the tokens they correspond to,
50
00:02:12,180 --> 00:02:15,213
-它们各自的令牌类型 ID 和注意掩码。
+它们各自的标记类型 ID 和注意掩码。
their respective token type ID and attention mask.
51
00:02:16,080 --> 00:02:19,260
-我们可以看到标记器还添加了特殊标记。
+我们可以看到分词器还添加了特殊标记。
We can see the tokenizer also added special tokens.
52
00:02:19,260 --> 00:02:22,620
-所以我们有一个 CLS 标记,来自第一句话的标记,
+所以我们有一个 CLS token ,来自第一句话的 token ,
So we have a CLS token, the tokens from the first sentence,
53
00:02:22,620 --> 00:02:25,770
-一个 SEP 令牌,第二句话中的令牌,
+一个 SEP 标记,第二句话中的标记,
a SEP token, the tokens from the second sentence,
54
00:02:25,770 --> 00:02:27,003
-和最终的 SEP 令牌。
+和最终的 SEP 标记。
and a final SEP token.
55
@@ -275,12 +275,12 @@ If we have several pairs of sentences,
56
00:02:30,570 --> 00:02:32,840
-我们可以通过传递列表将它们标记在一起
+我们可以通过第一句话的传递列表
we can tokenize them together by passing the list
57
00:02:32,840 --> 00:02:36,630
-第一句话,然后是第二句话的列表
+将它们标记在一起,然后是第二句话的列表
of first sentences, then the list of second sentences
58
@@ -290,7 +290,7 @@ and all the keyword arguments we studied already
59
00:02:39,300 --> 00:02:40,353
-像填充 = 真。
+例如 padding=True。
like padding=True.
60
@@ -300,17 +300,17 @@ Zooming in at the result,
61
00:02:43,140 --> 00:02:45,030
-我们还可以看到标记化添加的填充
-we can see also tokenize added padding
+我们可以看到分词器如何添加填充
+we can see how the tokenizer added padding
62
00:02:45,030 --> 00:02:48,090
-到第二对句子来制作两个输出
+到第二对句子使得两个输出的
to the second pair sentences to make the two outputs
63
00:02:48,090 --> 00:02:51,360
-相同的长度,并正确处理令牌类型 ID
+长度相同,并正确处理标记类型 ID
the same length, and properly dealt with token type IDs
64
diff --git a/subtitles/zh-CN/22_preprocessing-sentence-pairs-(tensorflow).srt b/subtitles/zh-CN/22_preprocessing-sentence-pairs-(tensorflow).srt
index 9bccf528e..cbc4612cc 100644
--- a/subtitles/zh-CN/22_preprocessing-sentence-pairs-(tensorflow).srt
+++ b/subtitles/zh-CN/22_preprocessing-sentence-pairs-(tensorflow).srt
@@ -20,7 +20,7 @@ and batch them together
5
00:00:13,020 --> 00:00:15,660
-在 “一起批量输入” 视频中。
+在 “Batching inputs together” 视频中。
in the "Batching inputs together" video.
6
@@ -75,7 +75,7 @@ In the first pair, the two questions are duplicates;
16
00:00:40,650 --> 00:00:43,620
-第二,他们不是。
+在第二对中,他们不是。
in the second, they are not.
17
@@ -90,7 +90,7 @@ is when we want to know if two sentences
19
00:00:46,980 --> 00:00:49,290
-逻辑上是否相关,
+逻辑上相关,或反之
are logically related or not,
20
@@ -185,7 +185,7 @@ BERT is shown pairs of sentences
38
00:01:36,690 --> 00:01:39,900
-并且必须预测随机屏蔽标记的值
+并且必须预测随机屏蔽 token 的值
and must predict both the value of randomly masked tokens
39
@@ -195,12 +195,12 @@ and whether the second sentence
40
00:01:41,250 --> 00:01:42,903
-是否从第一个开始。
+从第一个开始。
follows from the first or not.
41
00:01:44,070 --> 00:01:47,100
-幸运的是,来自 Transformers 库的分词器
+幸运的是,来自 Transformers 库的 tokenizer
Fortunately, the tokenizer from the Transformers library
42
@@ -215,7 +215,7 @@ you just have to pass them as two arguments
44
00:01:52,650 --> 00:01:53,613
-到分词器。
+到 tokenizer 。
to the tokenizer.
45
@@ -225,17 +225,17 @@ On top of the input IDs
46
00:01:56,040 --> 00:01:58,440
-和我们已经研究过的注意力面具,
+和我们已经研究过的注意力掩码,
and the attention mask we studied already,
47
00:01:58,440 --> 00:02:01,530
-它返回一个名为令牌类型 ID 的新字段,
+它返回一个名为 token 类型 ID 的新字段,
it returns a new field called token type IDs,
48
00:02:01,530 --> 00:02:03,210
-它告诉模型哪些标记
+它告诉模型哪些 token
which tells the model which tokens
49
@@ -255,32 +255,32 @@ Zooming in a little bit, here are the input IDs,
52
00:02:11,430 --> 00:02:13,710
-与它们对应的标记对齐,
+与它们对应的 token 对齐,
aligned with the tokens they correspond to,
53
00:02:13,710 --> 00:02:17,193
-它们各自的令牌类型 ID 和注意掩码。
+它们各自的 token 类型 ID 和注意掩码。
their respective token type ID and attention mask.
54
00:02:18,540 --> 00:02:21,300
-我们可以看到标记器还添加了特殊标记
+我们可以看到 tokenizer 还添加了特殊 token
We can see the tokenizer also added special tokens
55
00:02:21,300 --> 00:02:25,230
-所以我们有一个 CLS 标记,来自第一句话的标记,
+所以我们有一个 CLS token ,来自第一句话的 token ,
so we have a CLS token, the tokens from the first sentence,
56
00:02:25,230 --> 00:02:28,590
-一个 SEP 令牌,第二句话中的令牌,
+一个 SEP token ,第二句话中的 token ,
a SEP token, the tokens from the second sentence,
57
00:02:28,590 --> 00:02:30,153
-和最终的 SEP 令牌。
+和最终的 SEP token 。
and a final SEP token.
58
@@ -310,7 +310,7 @@ and all the keyword arguments we studied already,
63
00:02:43,050 --> 00:02:44,133
-像填充 = 真。
+像 padding=True 。
like padding=True.
64
@@ -320,7 +320,7 @@ Zooming in at the result,
65
00:02:46,770 --> 00:02:49,050
-我们可以看到分词器是如何添加填充的
+我们可以看到 tokenizer 是如何添加填充的
we can see how the tokenizer added padding
66
@@ -335,7 +335,7 @@ to make the two outputs the same length.
68
00:02:53,490 --> 00:02:55,620
-它还可以正确处理令牌类型 IDS
+它还可以正确处理 token 类型 IDS
It also properly dealt with token type IDS
69
diff --git a/subtitles/zh-CN/23_what-is-dynamic-padding.srt b/subtitles/zh-CN/23_what-is-dynamic-padding.srt
index 30efe21df..4dba99a5f 100644
--- a/subtitles/zh-CN/23_what-is-dynamic-padding.srt
+++ b/subtitles/zh-CN/23_what-is-dynamic-padding.srt
@@ -15,12 +15,12 @@ In the "Batching Inputs together" video,
4
00:00:10,890 --> 00:00:12,720
-我们已经看到能够对输入进行分组
+我们已经看到为了能够对(不同长度的同批次)输入进行分组
we have seen that to be able to group inputs
5
00:00:12,720 --> 00:00:15,300
-同一批不同长度的,
+(同一批不同长度的),
of different lengths in the same batch,
6
@@ -40,12 +40,12 @@ Here, for instance, the longest sentence is the third one,
9
00:00:24,600 --> 00:00:27,270
-我们需要添加五个、两个或七个填充令牌
+我们需要添加五个、两个或七个填充标记
and we need to add five, two, or seven pad tokens
10
00:00:27,270 --> 00:00:30,090
-到其他句子有四个句子
+到其他句子使得四个句子具有
to the other sentences to have four sentences
11
@@ -65,12 +65,12 @@ there are various padding strategies we can apply.
14
00:00:37,560 --> 00:00:39,540
-最明显的一种是填充所有元素
+最明显的一种是填充整个数据集所有的样本
The most obvious one is to pad all the elements
15
00:00:39,540 --> 00:00:40,923
-数据集的相同长度:
+达到相同的长度:
of the dataset to the same length:
16
@@ -80,67 +80,67 @@ the length of the longest sample.
17
00:00:44,070 --> 00:00:45,330
-这会给我们批次
+我们得到具有相同形状的批次
This will then give us batches
18
00:00:45,330 --> 00:00:46,890
-都具有相同的形状
+
that all have the same shape
19
00:00:46,890 --> 00:00:49,800
-由最大序列长度决定。
+(其长度)由最大序列长度决定。
determined by the maximum sequence length.
20
00:00:49,800 --> 00:00:52,893
-缺点是批次由短句组成
+缺点是(如果)批次样本由短句组成
The downside is that batches composed from short sentences
21
00:00:52,893 --> 00:00:54,960
-会有很多填充令牌
+将带来很多填充符号
will have a lot of padding tokens
22
00:00:54,960 --> 00:00:57,660
-这将在模型中引入更多计算
+并且在模型中引入更多不必要的计算。
which will introduce more computations in the model
23
00:00:57,660 --> 00:00:58,910
-我们最终不需要。
+
we ultimately don't need.
24
00:01:00,060 --> 00:01:03,300
-为了避免这种情况,另一种策略是填充元素
+为了避免这种情况,另一种策略是填充(短样本)符号
To avoid this, another strategy is to pad the elements
25
00:01:03,300 --> 00:01:05,280
-当我们把它们批在一起时,
+当把它们放在一批时,
when we batch them together,
26
00:01:05,280 --> 00:01:08,190
-到批次中最长的句子。
+达到本批次中最长句子的长度。
to the longest sentence inside the batch.
27
00:01:08,190 --> 00:01:12,000
-这样,由短输入组成的批次会更小
+这样,由短样本输入组成的批次大小
This way, batches composed of short inputs will be smaller
28
00:01:12,000 --> 00:01:13,920
-比包含最长句子的批次
+会比按整个数据集最长句子的长度(补齐)批次更小
than the batch containing the longest sentence
29
00:01:13,920 --> 00:01:15,510
-在数据集中。
+
in the dataset.
30
@@ -155,7 +155,7 @@ The downside is that all batches
32
00:01:20,490 --> 00:01:22,140
-然后会有不同的形状,
+会有不同的形状,
will then have different shapes,
33
@@ -170,7 +170,7 @@ Let's see how to apply both strategies in practice.
35
00:01:29,370 --> 00:01:31,280
-我们实际上已经看到了如何应用固定填充
+我们实际上已经知道了如何使用固定填充
We have actually seen how to apply fixed padding
36
@@ -190,22 +190,22 @@ after loading the dataset and tokenizer,
39
00:01:38,250 --> 00:01:40,680
-我们将标记化应用于所有数据集
+我们将符号化应用于所有数据集
we applied the tokenization to all the dataset
40
00:01:40,680 --> 00:01:42,480
-带填充和截断
+包括填充和截断
with padding and truncation
41
00:01:42,480 --> 00:01:45,273
-制作所有长度为 128 的样本。
+保证所有样本的长度为 128 。
to make all samples of length 128.
42
00:01:46,530 --> 00:01:48,360
-结果,如果我们传递这个数据集
+最后,如果我们传递这个数据集
As a result, if we pass this dataset
43
@@ -215,7 +215,8 @@ to a PyTorch DataLoader,
44
00:01:50,520 --> 00:01:55,503
-我们得到形状批量大小的批次,这里是 16,乘以 128。
+我们得到形状为 batch_size 乘以 16 乘以 128 的批次。
+
we get batches of shape batch size, here 16, by 128.
45
@@ -230,7 +231,7 @@ we must defer the padding to the batch preparation,
47
00:02:01,440 --> 00:02:04,740
-所以我们从标记化函数中删除了那部分。
+所以我们从标记函数中删除了那部分。
so we remove that part from our tokenize function.
48
@@ -295,7 +296,7 @@ We pass it to the PyTorch DataLoader as a collate function,
60
00:02:35,310 --> 00:02:37,620
-然后观察生成的批次
+然后观察到生成的批次
then observe that the batches generated
61
@@ -310,12 +311,13 @@ all way below the 128 from before.
63
00:02:42,660 --> 00:02:44,820
-动态批处理几乎总是更快
+动态批处理几乎在 CPU 和 GPU 上更快,
+
Dynamic batching will almost always be faster
64
00:02:44,820 --> 00:02:47,913
-在 CPU 和 GPU 上,所以如果可以的话你应该应用它。
+所以如果可以的话你应该应用它。
on CPUs and GPUs, so you should apply it if you can.
65
@@ -330,7 +332,7 @@ if you run your training script on TPU
67
00:02:53,490 --> 00:02:55,293
-或者需要成批的固定形状。
+或者需要固定形状的批次输入。
or need batches of fixed shapes.
68
diff --git a/subtitles/zh-CN/24_the-trainer-api.srt b/subtitles/zh-CN/24_the-trainer-api.srt
index 2ffaf8c72..de4af9a41 100644
--- a/subtitles/zh-CN/24_the-trainer-api.srt
+++ b/subtitles/zh-CN/24_the-trainer-api.srt
@@ -15,28 +15,28 @@
4
00:00:05,698 --> 00:00:06,548
-- 所以培训师 API。
-- So Trainer API.
+- Trainer API。
+- The Trainer API.
5
00:00:08,070 --> 00:00:10,040
-所以 Transformers Library 提供了一个 Trainer API
-So Transformers Library provides a Trainer API
+Transformers Library 提供了一个 Trainer API
+The Transformers Library provides a Trainer API
6
00:00:10,040 --> 00:00:13,320
-让你轻松找到调谐变压器模型
-that allows you to easily find tune transformers models
+让你能够轻松的微调 Transformer 模型
+that allows you to easily fine-tune transformer models
7
00:00:13,320 --> 00:00:14,193
-在你的数据集上。
-on your dataset.
+在你自己的数据集上。
+on your own dataset.
8
00:00:15,150 --> 00:00:17,250
-所以 Trainer 类接受你的数据集,
-So Trainer class takes your datasets,
+Trainer 类接受你的数据集,
+The Trainer class take your datasets,
9
00:00:17,250 --> 00:00:19,900
@@ -50,28 +50,28 @@ and can perform the training on any kind of setup,
11
00:00:23,310 --> 00:00:26,654
-CPU、GPU、多个 GPU、TPU
-CPU, GPU, multiple GPUs, TPUs
+(CPU、GPU、多个 GPU、TPUs)
+(CPU, GPU, multiple GPUs, TPUs)
12
00:00:26,654 --> 00:00:28,680
-也可以计算预测
+也可以在任意数据集上进行推理
can also compute the predictions
13
00:00:28,680 --> 00:00:31,710
-在任何数据集上,如果你提供了指标
+如果你提供了指标
on any dataset and if you provided metrics
14
00:00:31,710 --> 00:00:33,813
-在任何数据集上评估你的模型。
+就可以在任意数据集上评估你的模型。
evaluate your model on any dataset.
15
00:00:34,950 --> 00:00:36,930
-你还可以涉及最终数据处理
-You can also involve final data processing
+Trainer 也可以负责最后的数据处理
+It can also handle final data processing
16
00:00:36,930 --> 00:00:38,670
@@ -80,13 +80,13 @@ such as dynamic padding,
17
00:00:38,670 --> 00:00:40,377
-只要你提供分词器
+只要你提供 tokenizer
as long as you provide the tokenizer
18
00:00:40,377 --> 00:00:42,693
-或给定数据整理器。
-or given data collator.
+或给定 data collator。
+or a given data collator.
19
00:00:43,572 --> 00:00:45,900
@@ -95,53 +95,53 @@ We will try this API on the MRPC dataset,
20
00:00:45,900 --> 00:00:48,492
-因为它相对较小且易于预处理。
+因为该数据集相对较小且易于预处理。
since it's relatively small and easy to preprocess.
21
00:00:48,492 --> 00:00:49,325
-正如我们在数据集概述视频中看到的那样,
+正如我们在 Datasets 概述视频中看到的那样,
As we saw in the Datasets overview video,
22
00:00:49,325 --> 00:00:54,325
-但是我们可以对其进行预处理。
-however we can preprocess it.
+我们可以像这样对其进行预处理。
+here is how we can preprocess it.
23
00:00:54,511 --> 00:00:57,030
-我们在预处理期间不应用填充,
+我们在预处理过程中不进行填充,
We do not apply padding during the preprocessing,
24
00:00:57,030 --> 00:00:58,590
-因为我们将使用动态填充
+因为我们将进行动态填充
as we will use dynamic padding
25
00:00:58,590 --> 00:01:00,083
-在 DataCollatorWithPadding 之前。
-before DataCollatorWithPadding.
+使用我们的 DataCollatorWithPadding。
+with our DataCollatorWithPadding.
26
00:01:01,170 --> 00:01:02,790
-请注意,我们不执行最后的步骤
+请注意,我们不执行一些最终的数据处理步骤
Note that we don't do the final steps
27
00:01:02,790 --> 00:01:04,830
-重命名删除列
-of renaming removing columns
+像是重命名列/删除列
+of renaming/removing columns
28
00:01:04,830 --> 00:01:06,873
-或将格式设置为火炬张量。
+或将格式设置为 torch 张量。
or set the format to torch tensors.
29
00:01:07,710 --> 00:01:10,560
-所以 Trainer 会自动为我们做这一切
-So Trainer will do all of this automatically for us
+Trainer 会自动为我们做这一切
+The Trainer will do all of this automatically for us
30
00:01:10,560 --> 00:01:12,633
@@ -150,7 +150,7 @@ by analyzing the model signature.
31
00:01:14,054 --> 00:01:16,650
-创建培训师之前的最后一步是
+实例化 Trainer 前的最后一步是
The last step before creating the Trainer are
32
@@ -165,62 +165,62 @@ and some training hyperparameters.
34
00:01:20,250 --> 00:01:22,653
-我们在模型 API 视频中看到了第一个。
+我们在 model API 视频中学会了如何定义模型。
We saw to do the first in the model API video.
35
00:01:23,734 --> 00:01:26,790
-第二次我们使用 TrainingArguments 类。
+对于第二点,我们使用 TrainingArguments 类。
For the second we use the TrainingArguments class.
36
00:01:26,790 --> 00:01:28,710
-它只需要一个文件夹的路径
+Trainer 只需要一个文件夹的路径
It only takes a path to a folder
37
00:01:28,710 --> 00:01:30,900
-结果和检查点将保存在哪里,
+用以保存结果和检查点,
where results and checkpoint will be saved,
38
00:01:30,900 --> 00:01:33,060
-但你也可以自定义所有超参数
+但你也可以自定义你的 Trainer 会使用的
but you can also customize all the hyperparameters
39
00:01:33,060 --> 00:01:34,470
-你的教练会使用,
+所有超参数
your Trainer will use,
40
00:01:34,470 --> 00:01:37,270
-学习权重、训练影响数等。等等。
-learning weight, number of training impacts, et. cetera.
+比如学习率,训练几个 epoch 等等。
+learning rate, number of training epochs etc.
41
00:01:38,190 --> 00:01:39,660
-创建培训师非常容易
-It's been very easy to create a Trainer
+接下来实例化一个 Trainer 并开始训练
+It's then very easy to create a Trainer
42
00:01:39,660 --> 00:01:41,400
-并开展培训。
+就非常简单了。
and launch a training.
43
00:01:41,400 --> 00:01:43,170
-你应该显示一个进度条
-You should display a progress bar
+这会显示一个进度条
+This should display a progress bar
44
00:01:43,170 --> 00:01:45,900
-如果你在 GPU 上运行,几分钟后
-and after a few minutes if you're running on a GPU
+几分钟后(如果你在 GPU 上运行)
+and after a few minutes (if you're running on a GPU)
45
00:01:45,900 --> 00:01:48,000
-你应该完成培训。
+你会完成训练。
you should have the training finished.
46
@@ -235,12 +235,12 @@ as you will only get a training loss
48
00:01:52,710 --> 00:01:54,300
-这并没有真正告诉你任何事情
+这并没有真正告诉你
which doesn't really tell you anything
49
00:01:54,300 --> 00:01:56,820
-关于你的模型表现如何。
+你的模型表现如何。
about how well your model is performing.
50
@@ -260,12 +260,12 @@ To get those metrics,
53
00:02:02,160 --> 00:02:03,810
-我们将首先收集预测
+我们将首先使用预测方法
we will first gather the predictions
54
00:02:03,810 --> 00:02:06,513
-使用预测方法在整个评估集上。
+在整个评估集上收集预测结果。
on the whole evaluation set using the predict method.
55
@@ -275,23 +275,23 @@ It returns a namedtuple with three fields,
56
00:02:10,020 --> 00:02:12,990
-预测,其中包含预测模型。
-Prediction, which contains the model of predictions.
+Prediction (其中包含模型的预测),
+Prediction(which contains the model predictions),
57
00:02:12,990 --> 00:02:15,030
-Label_IDs,其中包含标签
-Label_IDs, which contains the labels
+Label_IDs (其中包含标签
+Label_IDs(which contains the labels
58
00:02:15,030 --> 00:02:16,800
-如果你的数据集有它们
-if your dataset had them
+如果你的数据集有的话)
+if your dataset had them)
59
00:02:16,800 --> 00:02:18,570
-和此处为空的指标。
-and metrics which is empty here.
+和指标(在本示例中是空的)
+and metrics (which is empty here).
60
00:02:18,570 --> 00:02:20,520
@@ -300,17 +300,17 @@ We're trying to do that.
61
00:02:20,520 --> 00:02:22,470
-预测是模型的对数
+预测结果是模型
The predictions are the logits of the models
62
00:02:22,470 --> 00:02:24,143
-对于数据集中的所有句子。
+对于数据集中的所有句子所输出的 logits。
for all the sentences in the dataset.
63
00:02:24,143 --> 00:02:27,513
-所以一个形状为 408 x 2 的 NumPy 数组。
+所以是一个形状为 408 x 2 的 NumPy 数组。
So a NumPy array of shape 408 by 2.
64
@@ -320,7 +320,7 @@ To match them with our labels,
65
00:02:30,270 --> 00:02:31,590
-我们需要采取最大的 logit
+我们需要取最大的 logit
we need to take the maximum logit
66
@@ -330,8 +330,8 @@ for each prediction
67
00:02:32,850 --> 00:02:35,820
-知道预测了这两个类别中的哪一个。
-to know which of the two classes was predicted.
+(知道两个类别中的哪一个类是所预测的结果)
+(to know which of the two classes was predicted.)
68
00:02:35,820 --> 00:02:37,683
@@ -340,23 +340,23 @@ We do this with the argmax function.
69
00:02:38,640 --> 00:02:41,550
-然后我们可以使用数据集库中的指标。
+然后我们可以使用 Datasets library 中的指标。
Then we can use a metric from the Datasets library.
70
00:02:41,550 --> 00:02:43,500
-它可以像数据集一样轻松加载
+它可以像数据集一样被轻松地加载
It can be loaded as easily as a dataset
71
00:02:43,500 --> 00:02:45,360
-具有负载度量功能
-with the load metric function
+使用 load_metric 函数
+with the load_metric function
72
00:02:45,360 --> 00:02:49,500
-并且每个返回用于数据集的评估指标。
-and each returns the evaluation metric used for the dataset.
+并且返回用于该数据集的评估指标。
+and it returns the evaluation metric used for the dataset.
73
00:02:49,500 --> 00:02:51,600
@@ -365,13 +365,13 @@ We can see our model did learn something
74
00:02:51,600 --> 00:02:54,363
-因为它的准确率为 85.7%。
+因为它有 85.7% 的准确率。
as it is 85.7% accurate.
75
00:02:55,440 --> 00:02:57,870
-在训练期间监控评估矩阵,
-To monitor the evaluation matrix during training,
+为了在训练期间监控评估指标,
+To monitor the evaluation metrics during training,
76
00:02:57,870 --> 00:02:59,829
@@ -385,52 +385,52 @@ that does the same step as before.
78
00:03:02,670 --> 00:03:04,728
-它需要一个带有预测和标签的命名元组
+它接收一个带有预测和标签的命名元组
It takes a namedtuple with predictions and labels
79
00:03:04,728 --> 00:03:06,327
-并且必须返回一个字典
+并且返回一个字典
and must return a dictionary
80
00:03:06,327 --> 00:03:08,427
-使用我们想要跟踪的指标。
+包含我们想要跟踪的指标。
with the metrics we want to keep track of.
81
00:03:09,360 --> 00:03:11,490
-通过 epoch 评估策略
+通过将评估策略设置为 epoch
By passing the epoch evaluation strategy
82
00:03:11,490 --> 00:03:13,080
-对于我们的训练论点,
-to our training arguments,
+对于我们的 TrainingArguments,
+to our TrainingArguments,
83
00:03:13,080 --> 00:03:14,490
-我们告诉培训师评估
+我们告诉 Trainer 去进行评估
we tell the Trainer to evaluate
84
00:03:14,490 --> 00:03:15,903
-在每个纪元的末尾。
+在每个 epoch 结束的时候。
at the end of every epoch.
85
00:03:17,280 --> 00:03:18,587
-在笔记本中启动培训
+在 notebook 中启动训练
Launching a training inside a notebook
86
00:03:18,587 --> 00:03:20,640
-然后会显示一个进度条
+会显示一个进度条
will then display a progress bar
87
00:03:20,640 --> 00:03:23,643
-并在你通过每个纪元时完成你在这里看到的表格。
+并在你运行完每个 epoch 时将数据填到你看到的这个表格。
and complete the table you see here as you pass every epoch.
88
diff --git a/subtitles/zh-CN/26_fine-tuning-with-tensorflow.srt b/subtitles/zh-CN/26_fine-tuning-with-tensorflow.srt
index a4c18d3a4..bb4ddce17 100644
--- a/subtitles/zh-CN/26_fine-tuning-with-tensorflow.srt
+++ b/subtitles/zh-CN/26_fine-tuning-with-tensorflow.srt
@@ -20,12 +20,12 @@ It's very quick.
5
00:00:12,510 --> 00:00:14,490
-如果你看过我们的管道视频,
+如果你看过我们关于 pipeline 的视频,
And if you've watched our pipeline videos,
6
00:00:14,490 --> 00:00:18,150
-我将在下面链接,过程非常相似。
+我将在下面链接之,过程非常相似。
which I'll link below, the process is very similar.
7
@@ -50,7 +50,7 @@ So to learn more about transfer learning,
11
00:00:28,710 --> 00:00:31,320
-前往 “什么是迁移学习?” 视频,
+前往 “What is transfer learning?” 视频,
head to the 'What is transfer learning?' video,
12
@@ -85,7 +85,7 @@ as the foundation for our training today.
18
00:00:44,850 --> 00:00:46,770
-但这条怪物线是什么,
+但这条怪物般的一行是什么,
But what is this monstrosity line,
19
@@ -170,12 +170,12 @@ And secondly, it needs to know how many classes
35
00:01:23,940 --> 00:01:26,693
-你的问题有,因为这将决定大小,
+你的问题是有的,因为这将决定大小,
your problem has, because that will determine the size,
36
00:01:26,693 --> 00:01:29,610
-输出头中的神经元数量。
+对输出头中的神经元数量。
the number of neurons in the output head.
37
@@ -185,12 +185,12 @@ So if you want to follow along with the data
38
00:01:31,530 --> 00:01:34,500
-来自我们的数据集视频,我将在下面链接,
+来自我们有关数据集的视频,我将在下面链接,
from our datasets videos, which I'll link below,
39
00:01:34,500 --> 00:01:37,440
-那么你将有两个班级,积极的和消极的,
+那么你将有两个类别,积极的和消极的,
then you'll have two classes, positive and negative,
40
@@ -255,7 +255,7 @@ loss function.
52
00:02:07,260 --> 00:02:09,930
-所以这是一口,但它是标准的损失函数
+所以这是一点点,但它是标准的损失函数
So that's a mouthful, but it's the standard loss function
53
@@ -275,7 +275,7 @@ to output large values for the right class,
56
00:02:17,730 --> 00:02:20,910
-以及错误类别的低值。
+以及为错误的类别输出低值。
and low values for the wrong classes.
57
@@ -290,7 +290,7 @@ like we did with the optimizer.
59
00:02:26,010 --> 00:02:27,600
-但这里有一个风险,
+但这里有一个问题,
But there's a risk there,
60
@@ -300,7 +300,7 @@ there's a very common trap people fall into,
61
00:02:30,090 --> 00:02:32,580
-这是默认情况下,这种损失假设
+就是默认情况下,这种损失假设
which is that by default, this loss assumes
62
@@ -335,7 +335,7 @@ But you probably seen these before
68
00:02:47,790 --> 00:02:49,950
-在关于管道的视频中。
+在关于 pipeline 的视频中。
in the video about pipelines.
69
@@ -375,7 +375,7 @@ But for now, remember to set from_logits to true.
76
00:03:09,480 --> 00:03:11,430
-compile 需要知道的第二件事
+编译需要知道的第二件事
The second thing compile needs to know
77
@@ -385,7 +385,7 @@ is the optimizer you want.
78
00:03:13,230 --> 00:03:15,120
-在我们的例子中,我们使用亚当,
+在我们的例子中,我们使用 adam ,
In our case, we use adam,
79
@@ -395,7 +395,7 @@ which is sort of the standard optimizer
80
00:03:16,830 --> 00:03:18,720
-这些天用于深度学习。
+用于现代深度学习。
for deep learning these days.
81
@@ -490,7 +490,7 @@ So we don't need to specify separate labels,
99
00:04:00,420 --> 00:04:01,570
-当我们称呼健康时。
+当我们调用 fit 时。
when we're calling fit.
100
@@ -510,7 +510,7 @@ like the number of epochs for training
103
00:04:09,900 --> 00:04:12,420
-你可以传递一些其他参数来适应。
+你可以传递一些其他参数给 fit 。
where there's some other arguments you can pass to fit.
104
diff --git a/subtitles/zh-CN/27_learning-rate-scheduling-with-tensorflow.srt b/subtitles/zh-CN/27_learning-rate-scheduling-with-tensorflow.srt
index 700402578..9ce0a5587 100644
--- a/subtitles/zh-CN/27_learning-rate-scheduling-with-tensorflow.srt
+++ b/subtitles/zh-CN/27_learning-rate-scheduling-with-tensorflow.srt
@@ -65,7 +65,7 @@ which will make your training
14
00:00:31,080 --> 00:00:33,303
-更加一致地成功。
+更加稳定地成功。
much more consistently successful.
15
@@ -95,23 +95,23 @@ by default, Adam uses a learning rate
20
00:00:48,030 --> 00:00:51,540
-10 的负 3,1 E 负 3,
-of 10 to the minus 3, 1 E minus 3,
+10 的 -3 次方,1e-3,
+of 10 to the minus 3, 1e-3,
21
00:00:51,540 --> 00:00:54,660
-这对于训练变压器模型来说非常高。
+这对于训练 transformer 模型来说非常高。
and that's very high for training transformer models.
22
00:00:54,660 --> 00:00:58,200
-我们将从 5 乘 10 到负 5 开始,
+我们将从 5 乘 10 的负 5次方 开始,
We're going to start at 5 by 10 to the minus 5,
23
00:00:58,200 --> 00:01:02,700
-5 E - 5,比默认值低 20 倍。
-5 E minus 5, which is 20 times lower than the default.
+5e-5,比默认值低 20 倍。
+5e-5, which is 20 times lower than the default.
24
00:01:02,700 --> 00:01:06,330
@@ -130,7 +130,7 @@ if we decay the learning rate down to a tiny value,
27
00:01:11,160 --> 00:01:13,920
-甚至在培训过程中为零。
+甚至在训练过程中为零。
or even to zero , over the course of training.
28
@@ -145,17 +145,17 @@ this Polynomial Decay schedule thing is doing.
30
00:01:18,540 --> 00:01:21,570
-等会儿我会告诉你衰变是什么样子的,
+等会儿我会告诉你衰减是什么样子的,
So I'll show you what that decay looks like in a second,
31
00:01:21,570 --> 00:01:23,160
-但首先我们需要告诉调度程序
+但首先我们需要告诉规划程序
but first we need to tell the scheduler
32
00:01:23,160 --> 00:01:25,290
-培训将持续多长时间,
+训练将持续多长时间,
how long training is going to be,
33
@@ -190,12 +190,12 @@ and then we multiply that
39
00:01:39,570 --> 00:01:41,220
-按纪元数
+按 epoch 数
by the number of epochs
40
00:01:41,220 --> 00:01:42,930
-获得批次总数
+获得 batch 总数
to get the total number of batches
41
@@ -210,7 +210,7 @@ Once we know how many training steps we're taking,
43
00:01:47,880 --> 00:01:50,580
-我们只是将所有这些信息传递给调度程序
+我们只是将所有这些信息传递给规划程序
we just pass all that information to the scheduler
44
@@ -230,12 +230,12 @@ Well, it looks like this,
47
00:01:59,610 --> 00:02:02,160
-它从 5 E 减 5 开始,
-it starts at 5 E minus 5,
+它从 5e-5 开始,
+it starts at 5e-5,
48
00:02:02,160 --> 00:02:05,490
-这意味着 10 的 5 乘以负 5,
+这意味着 5 乘以 10^{-5},
which means 5 times 10 to the minus 5,
49
@@ -270,7 +270,7 @@ this is actually constant or a linear decay,
55
00:02:18,690 --> 00:02:20,310
-我知道这个名字是多项式的,
+我知道这个名字有 "多项式",
and I know the name is polynomial,
56
@@ -425,7 +425,7 @@ which is getting passed to to the learning rate argument
86
00:03:27,540 --> 00:03:29,100
-该优化器。
+对该优化器的。
of that optimizer.
87
@@ -445,7 +445,7 @@ so this is going to be sparse categorical crossentropy
90
00:03:37,050 --> 00:03:39,840
-如果你正在关注微调视频。
+如果你正在关注 fine-tuning (微调) 的视频。
if you're following along from the fine-tuning video.
91
@@ -480,7 +480,7 @@ Remember, because we compiled the model
97
00:03:51,600 --> 00:03:54,300
-使用新的优化器和新的学习率计划,
+使用新的优化器和新的学习率规划,
with the new optimizer and the new learning rate schedule,
98
@@ -490,7 +490,7 @@ we actually don't need to change anything at all
99
00:03:56,190 --> 00:03:57,360
-当我们称呼合适时,
+当我们调用 fit 时,
when we call fit,
100
@@ -515,7 +515,7 @@ with a nice, smooth learning rate decay,
104
00:04:04,740 --> 00:04:06,330
-从好的价值开始,
+从好的值开始,
starting from a good value,
105
diff --git a/subtitles/zh-CN/28_tensorflow-predictions-and-metrics.srt b/subtitles/zh-CN/28_tensorflow-predictions-and-metrics.srt
index 9d157d4d1..b6d06f85d 100644
--- a/subtitles/zh-CN/28_tensorflow-predictions-and-metrics.srt
+++ b/subtitles/zh-CN/28_tensorflow-predictions-and-metrics.srt
@@ -15,7 +15,7 @@ and as always, there'll be links below
4
00:00:09,000 --> 00:00:10,740
-如果你想检查那些,
+如果你想回看那些,
if you want to check those out,
5
@@ -25,7 +25,7 @@ we showed you how to initialize and fine-tune
6
00:00:13,230 --> 00:00:15,690
-TensorFlow 中的转换器模型。
+TensorFlow 中的 transformer 模型。
a transformer model in TensorFlow.
7
@@ -55,13 +55,13 @@ so let's see how to do that.
12
00:00:25,560 --> 00:00:28,320
-同样,如果你熟悉 Keras,那么好消息
-Again, if you're familiar with Keras, the good news
+同样,如果你熟悉 Keras,那么好消息是
+Again, if you're familiar with Keras, the good news is
13
00:00:28,320 --> 00:00:31,860
-是因为只有标准的 Keras 模型,
-is that because there are just standard Keras models,
+因为只有标准的 Keras 模型,
+that because there are just standard Keras models,
14
00:00:31,860 --> 00:00:34,770
@@ -75,7 +75,7 @@ as shown here.
16
00:00:36,990 --> 00:00:40,560
-你只需将标记化的文本传递给此方法,
+你只需将分词化的文本传递给此方法,
You simply pass in tokenized text to this method,
17
@@ -105,17 +105,17 @@ but most of the time the thing you want
22
00:00:50,310 --> 00:00:52,290
-是输出逻辑。
+是输出的 logits 。
is the output logits.
23
00:00:52,290 --> 00:00:54,900
-如果你在登录之前没有遇到过它们,
-If you haven't come across them before logits,
+如果你在之前没有遇到过它们,logits
+If you haven't come across them before, logits,
24
00:00:54,900 --> 00:00:57,630
-有时对 logits 发音,因为没有人确定,
+有时发音成 logits ,因为没有人确定,
sometimes pronounced to logits because no one's sure,
25
@@ -125,7 +125,7 @@ are the outputs of the last layer of the network
26
00:01:00,390 --> 00:01:03,150
-因为在应用 softmax 之前。
+因为在使用 softmax 之前。
because before a softmax has been applied.
27
@@ -135,27 +135,27 @@ So if you want to turn the logits
28
00:01:04,710 --> 00:01:06,900
-进入模型的概率输出,
+进成模型的概率输出,
into the model's probability outputs,
29
00:01:06,900 --> 00:01:09,423
-你只需应用一个 softmax,就像这样。
+你只需使用一个 softmax,就像这样。
you just apply a softmax, like so.
30
00:01:10,981 --> 00:01:12,630
-如果我们想改变这些概率怎么办
+如果我们想这些概率
What if we want to turn those probabilities
31
00:01:12,630 --> 00:01:14,370
-进入课堂预测?
+进成类别预测?
into class predictions?
32
00:01:14,370 --> 00:01:16,410
-同样,它非常简单。
+同样,它非常直接。
Again, it's very straightforward.
33
@@ -195,7 +195,7 @@ one in the first position, and so on.
40
00:01:37,350 --> 00:01:40,380
-所以这些是我们的类预测表明类零,
+所以这些是我们的类预测表明第零类,
So these are our class predictions indicating class zero,
41
@@ -205,7 +205,7 @@ class one, and so on.
42
00:01:42,300 --> 00:01:45,090
-事实上,如果你想要的只是课堂预测,
+事实上,如果你想要的只是类别预测,
In fact, if class predictions are all you want,
43
@@ -260,12 +260,12 @@ for the model's predictions.
53
00:02:09,060 --> 00:02:10,920
-如果你关注我们的数据集
+如果你关注我们有关数据集
If you're following along with our datasets
54
00:02:10,920 --> 00:02:12,390
-和微调视频,
+和微调的视频,
and fine tuning videos,
55
@@ -280,7 +280,7 @@ which is part of the GLUE benchmark.
57
00:02:17,130 --> 00:02:19,050
-每个 GLUE 数据集
+GLUE 数据集的每一个
Each of the GLUE datasets
58
@@ -310,12 +310,12 @@ For the MRPC dataset, the built-in metrics are accuracy
63
00:02:33,720 --> 00:02:35,790
-它只是衡量时间的百分比
+它只是衡量百分比, 其
which just measures the percentage of the time
64
00:02:35,790 --> 00:02:37,830
-模型的预测是正确的,
+模型的预测是正确的次数,
the model's prediction was correct,
65
@@ -325,12 +325,12 @@ and the F1 score,
66
00:02:39,780 --> 00:02:41,610
-这是一个稍微复杂的措施
+这是一个稍微复杂的度量
which is a slightly more complex measure
67
00:02:41,610 --> 00:02:43,920
-衡量模型权衡的程度
+衡量模型如何权衡
that measures how well the model trades off
68
@@ -355,7 +355,7 @@ and to the ground truth labels,
72
00:02:53,220 --> 00:02:56,880
-我们在一个简单的 Python dict 中得到我们的结果。
+我们在一个简单的 Python 字典中得到我们的结果。
and we get our results in a straightforward Python dict.
73
@@ -400,12 +400,12 @@ on the fly while you're training,
81
00:03:10,470 --> 00:03:11,910
-这给了你一个非常有用的见解
+这给了你一个非常有用的理解
which gives you a very useful insight
82
00:03:11,910 --> 00:03:13,740
-了解培训的进展情况。
+了解训练的进展情况。
into how training is going.
83
@@ -445,7 +445,7 @@ or you can import the actual metric objects
90
00:03:30,810 --> 00:03:33,240
-并向他们传递具体的论点。
+并向他们传递具体的参数。
and pass specific arguments to them.
91
@@ -470,7 +470,7 @@ Once a model has been compiled with a metric,
95
00:03:43,140 --> 00:03:45,360
-它将报告该训练指标,
+它将报告该指标对于训练,
it will report that metric for training,
96
@@ -515,7 +515,7 @@ by default in Keras,
104
00:04:02,850 --> 00:04:04,473
-比如 F1 分数。
+比如 F1 score.
such as the F1 score.
105
diff --git a/subtitles/zh-CN/29_write-your-training-loop-in-pytorch.srt b/subtitles/zh-CN/29_write-your-training-loop-in-pytorch.srt
index 732483f13..8d956c8b9 100644
--- a/subtitles/zh-CN/29_write-your-training-loop-in-pytorch.srt
+++ b/subtitles/zh-CN/29_write-your-training-loop-in-pytorch.srt
@@ -15,8 +15,8 @@
4
00:00:05,460 --> 00:00:08,486
-- 使用 PyTorch 编写你自己的训练循环。
-- Write your own training loop with PyTorch.
+使用 PyTorch 编写你自己的训练循环。
+Write your own training loop with PyTorch.
5
00:00:08,486 --> 00:00:09,960
@@ -25,7 +25,7 @@ In this video, we'll look at
6
00:00:09,960 --> 00:00:12,750
-我们如何进行与培训师视频中相同的微调,
+我们如何进行与训练器视频中相同的微调,
how we can do the same fine-tuning as in the Trainer video,
7
@@ -35,12 +35,12 @@ but without relying on that class.
8
00:00:14,760 --> 00:00:17,790
-这样,你就可以轻松自定义每个步骤
+这样,你就可以根据你的需要轻松自定义
This way, you'll be able to easily customize each step
9
00:00:17,790 --> 00:00:20,310
-到你需要的训练循环。
+训练循环的每个步骤。
to the training loop to your needs.
10
@@ -50,12 +50,12 @@ This is also very useful
11
00:00:21,660 --> 00:00:22,740
-手动调试某些东西
+对于手动调试
to manually debug something
12
00:00:22,740 --> 00:00:24,590
-Trainer API 出了问题。
+Trainer API 出现的问题。
that went wrong with the Trainer API.
13
@@ -85,8 +85,8 @@ That number is not useful in its own,
18
00:00:39,316 --> 00:00:40,260
-用于计算
-that is used to compute
+它是用于计算
+but is used to compute
19
00:00:40,260 --> 00:00:42,150
@@ -95,12 +95,12 @@ the ingredients of our model weights,
20
00:00:42,150 --> 00:00:43,440
-那是损失的导数
+即,损失关于
that is the derivative of the loss
21
00:00:44,610 --> 00:00:47,160
-关于每个模型的重量。
+每个模型权重的导数。
with respect to each model weight.
22
@@ -125,7 +125,7 @@ We then repeat the process
26
00:00:54,510 --> 00:00:56,880
-与一批新的训练数据。
+使用一批新的训练数据。
with a new batch of training data.
27
@@ -165,7 +165,7 @@ Check out the videos link below
34
00:01:12,630 --> 00:01:14,280
-如果你还没有看到它们。
+如果你还没有看过它们。
if you haven't seen them already.
35
@@ -180,8 +180,8 @@ which will be responsible to convert
37
00:01:20,610 --> 00:01:23,253
-我们数据集的元素到补丁中。
-the elements of our dataset into patches.
+我们数据集的元素到批次数据中。
+the elements of our dataset into batches.
38
00:01:24,450 --> 00:01:27,960
@@ -190,17 +190,17 @@ We use our DataColletorForPadding as a collate function,
39
00:01:27,960 --> 00:01:29,460
-并洗牌训练集
+并打乱训练集的次序
and shuffle the training set
40
00:01:29,460 --> 00:01:31,080
-确保我们不会检查样品
+确保我们不会每个纪元
to make sure we don't go over the samples
41
00:01:31,080 --> 00:01:33,870
-在一个时代 * 以相同的顺序。
+以相同的顺序遍历样本。
in the same order at a epoch*.
42
@@ -216,16 +216,16 @@ we try to grab a batch of data, and inspect it.
44
00:01:40,080 --> 00:01:43,050
就像我们的数据集元素一样,它是一个字典,
-Like our data set elements, it's a dictionary,
+Like our dataset elements, it's a dictionary,
45
00:01:43,050 --> 00:01:46,260
-但这些时候值不是一个整数列表
-but these times the values are not a single list of integers
+但这里的值不是一个整数列表
+but this times the values are not a single list of integers
46
00:01:46,260 --> 00:01:49,053
-但是按序列长度形状批量大小的张量。
+而是形状为批量大小乘以序列长度的张量。
but a tensor of shape batch size by sequence length.
47
@@ -240,7 +240,7 @@ For that, we'll need to actually create a model.
49
00:01:56,730 --> 00:01:58,740
-如 Model API 视频中所示,
+如模型 API 视频中所示,
As seen in the Model API video,
50
@@ -250,12 +250,12 @@ we use the from_pretrained method,
51
00:02:00,540 --> 00:02:03,270
-并将标签数量调整为类别数量
+并将标签数量调整为这个数据集
and adjust the number of labels to the number of classes
52
00:02:03,270 --> 00:02:06,810
-我们有这个数据集,这里有两个。
+拥有的类别数量,这里是 2。
we have on this data set, here two.
53
@@ -275,7 +275,7 @@ and check there is no error.
56
00:02:13,320 --> 00:02:14,940
-如果提供标签,
+如果提供了标签,
If the labels are provided,
57
@@ -290,12 +290,12 @@ always returns a loss directly.
59
00:02:19,525 --> 00:02:21,090
-我们将能够做 loss.backward ()
+我们将能够做损失的反向传播
We will be able to do loss.backward ()
60
00:02:21,090 --> 00:02:22,860
-计算所有梯度,
+以计算所有梯度,
to compute all the gradients,
61
@@ -325,17 +325,17 @@ Using the previous loss,
66
00:02:36,150 --> 00:02:39,060
-并使用 loss.backward () 计算梯度,
+并使用 loss.backward() 计算梯度,
and computing the gradients with loss.backward (),
67
00:02:39,060 --> 00:02:41,130
-我们检查我们是否可以执行优化器步骤
+我们检查我们是否可以无误
we check that we can do the optimizer step
68
00:02:41,130 --> 00:02:42,030
-没有任何错误。
+执行优化器步骤。
without any error.
69
@@ -360,7 +360,7 @@ We could already write our training loop,
73
00:02:52,080 --> 00:02:53,220
-但我们还要添加两件事
+但我们还要再做两件事
but we will add two more things
74
@@ -390,7 +390,7 @@ is just a convenience function
79
00:03:06,150 --> 00:03:07,800
-轻松构建这样的调度程序。
+轻松构建这样的调度器。
to easily build such a scheduler.
80
@@ -400,7 +400,7 @@ You can again use
81
00:03:09,683 --> 00:03:11,860
-取而代之的是任何 PyTorch 学习率调度程序。
+取而代之的是任何 PyTorch 学习率调度器。
any PyTorch learning rate scheduler instead.
82
@@ -426,7 +426,7 @@ The first step is to get one,
86
00:03:21,270 --> 00:03:23,283
例如通过使用协作笔记本。
-for instance by using a collab notebook.
+for instance by using a colab notebook.
87
00:03:24,180 --> 00:03:26,040
@@ -435,12 +435,12 @@ Then you need to actually send your model,
88
00:03:26,040 --> 00:03:28,923
-并使用火炬设备对其进行训练数据。
+并使用 torch 设备对其进行训练数据。
and training data on it by using a torch device.
89
00:03:29,790 --> 00:03:30,840
-仔细检查以下行
+仔细检查以下代码
Double-check the following lines
90
@@ -560,12 +560,12 @@ then go through all the data in the evaluation data loader.
113
00:04:23,850 --> 00:04:25,530
-正如我们在培训师视频中看到的那样,
+正如我们在训练器视频中看到的那样,
As we have seen in the Trainer video,
114
00:04:25,530 --> 00:04:26,850
-模型输出 logits,
+模型输出逻辑斯蒂,
the model outputs logits,
115
@@ -610,7 +610,7 @@ Congratulations, you have now fine-tuned a model
123
00:04:44,490 --> 00:04:45,633
-靠你自己。
+全靠你自己。
all by yourself.
124
diff --git a/subtitles/zh-CN/30_supercharge-your-pytorch-training-loop-with-accelerate.srt b/subtitles/zh-CN/30_supercharge-your-pytorch-training-loop-with-accelerate.srt
index 0402b95da..0061b8020 100644
--- a/subtitles/zh-CN/30_supercharge-your-pytorch-training-loop-with-accelerate.srt
+++ b/subtitles/zh-CN/30_supercharge-your-pytorch-training-loop-with-accelerate.srt
@@ -5,12 +5,12 @@
2
00:00:05,460 --> 00:00:07,470
-- 使用 Hugging Face Accelerate 增强
+- 增强你的 PyTorch 训练循环
- Supercharge your PyTorch training loop
3
00:00:07,470 --> 00:00:08,943
-你的 PyTorch 训练循环
+使用 Hugging Face Accelerate
with Hugging Face Accelerate.
4
@@ -20,12 +20,12 @@ There are multiple setups
5
00:00:12,600 --> 00:00:14,580
-你可以在其上进行培训:
+你可以在其上进行训练:
on which you can run your training:
6
00:00:14,580 --> 00:00:17,910
-它可能在 CPU、GPU、TPU 上,
+它可以在 CPU、GPU、TPU 上,
it could be on CPU, GPUs, TPUs,
7
@@ -35,7 +35,7 @@ distributed on one machine with several devices,
8
00:00:20,610 --> 00:00:23,220
-甚至几台机器,通常称为节点,
+甚至几台机器,通常称为节点 (node) ,
or even several machines, often called nodes,
9
@@ -45,7 +45,7 @@ each with multiple devices.
10
00:00:26,340 --> 00:00:28,200
-最重要的是,还有新的调整
+在这之上,还有新的调整
On top of that, there are new tweaks
11
@@ -55,22 +55,22 @@ to make your training faster or more efficient,
12
00:00:30,810 --> 00:00:32,763
-比如混合精度和 DeepSpeed。
+比如混合精度和 DeepSpeed 。
like mixed precision and DeepSpeed.
13
00:00:33,840 --> 00:00:36,600
-每一个设置或训练调整
+这每一个设置或训练调整
Each of those setups or training tweaks
14
00:00:36,600 --> 00:00:38,760
-要求你更改训练循环的代码
+都要求你更改训练循环的代码
requires you to change the code of your training loop
15
00:00:38,760 --> 00:00:41,733
-以某种方式学习新的 API。
+以某种方式, 或者学习新的 API。
in one way or another and to learn a new API.
16
@@ -85,7 +85,7 @@ and there are several third-party libraries that can help.
18
00:00:49,590 --> 00:00:50,760
-那些问题
+它们的问题
The problem with those
19
@@ -95,12 +95,12 @@ is that they can feel like a black box
20
00:00:53,100 --> 00:00:55,320
-并且实施调整可能并不容易
+并且实现调整可能并不容易
and that it might not be easy to implement the tweak
21
00:00:55,320 --> 00:00:56,820
-到你需要的训练循环。
+到你需要的训练循环上。
to the training loop you need.
22
@@ -110,12 +110,12 @@ Accelerate has been designed specifically
23
00:00:59,760 --> 00:01:02,790
-让你保持对训练循环的完全控制
+以让你保持对训练循环的完全控制
to let you retain full control over your training loop
24
00:01:02,790 --> 00:01:04,833
-并尽可能不打扰。
+并尽可能不打乱。
and be as non-intrusive as possible.
25
@@ -135,7 +135,7 @@ Accelerate will handle all the setups
28
00:01:14,730 --> 00:01:17,180
-和第一张幻灯片中提到的培训调整。
+和第一张幻灯片中提到的训练调整。
and training tweaks mentioned on the first slide.
29
@@ -155,7 +155,7 @@ More specifically, you have to import and instantiate
32
00:01:25,980 --> 00:01:27,360
-加速器对象,
+一个 accelerator 对象,
an accelerator object,
33
@@ -170,7 +170,7 @@ for your specific setup.
35
00:01:31,380 --> 00:01:33,780
-然后你必须把模型发给它,
+然后你必须发给它模型
Then you have to send it the model,
36
@@ -190,7 +190,7 @@ Accelerate handles device placement,
39
00:01:42,870 --> 00:01:44,370
-所以你不需要把你的批次
+所以你不需要把你的分批
so you don't need to put your batch
40
@@ -205,7 +205,7 @@ Finally, you have to replace the loss.backward line
42
00:01:50,640 --> 00:01:54,300
-通过 accelerator.backwardloss,
+成 accelerator.backwardloss,
by accelerator.backwardloss,
43
@@ -260,32 +260,32 @@ to the accelerator.prepare method, like for training.
53
00:02:22,170 --> 00:02:23,430
-然后你可以关闭这条线
+然后你可以关闭这行
Then you can dismiss the line
54
00:02:23,430 --> 00:02:26,160
-将批次放在适当的设备上,
+将分批放在适当的设备上,
that places the batch on the proper device,
55
00:02:26,160 --> 00:02:27,870
-在通过你的预测之前
+在输入你的预测
and just before passing your predictions
56
00:02:27,870 --> 00:02:31,110
-和指标的标签,使用 accelerator.gather
+和指标的标签之前,使用 accelerator.gather
and labels to your metric, use accelerator.gather
57
00:02:31,110 --> 00:02:33,300
-收集预测
+来收集预测
to gather together the predictions
58
00:02:33,300 --> 00:02:34,803
-和每个过程的标签。
+和每个进程的标签。
and labels from each process.
59
@@ -295,7 +295,7 @@ A distributed training script
60
00:02:37,890 --> 00:02:41,040
-必须在不同的过程中多次启动,
+必须在不同的进程中多次启动,
has to be launched several times on different processes,
61
@@ -330,7 +330,7 @@ In a terminal, run accelerate config
67
00:02:57,270 --> 00:02:58,650
-并回答小问卷
+并回答小问题
and answer the small questionnaire
68
@@ -340,7 +340,7 @@ to generate a configuration file
69
00:03:00,330 --> 00:03:02,073
-与所有相关信息,
+含所有相关信息,
with all the relevant information,
70
@@ -355,7 +355,7 @@ followed by the path to your training script.
72
00:03:08,580 --> 00:03:12,000
-在笔记本中,你可以使用笔记本启动器功能
+在 notebook 中,你可以使用 notebook 启动器函数
In a notebook, you can use the notebook launcher function
73
diff --git a/subtitles/zh-CN/31_navigating-the-model-hub.srt b/subtitles/zh-CN/31_navigating-the-model-hub.srt
index 3b9e03f36..a4f1c2a5b 100644
--- a/subtitles/zh-CN/31_navigating-the-model-hub.srt
+++ b/subtitles/zh-CN/31_navigating-the-model-hub.srt
@@ -5,12 +5,12 @@
2
00:00:04,050 --> 00:00:05,910
-- [Instructor] 在这段视频中,我们将回顾
+- [Instructor] 在本视频中,我们将回顾
- [Instructor] In this video, we're going to go over
3
00:00:05,910 --> 00:00:08,013
-HuggingFace 模型中心导航。
+HuggingFace Model Hub 导航。
the HuggingFace Model Hub navigation.
4
@@ -20,42 +20,42 @@ This is the huggingface.co landing page.
5
00:00:13,260 --> 00:00:16,020
-要访问模型中心,请单击模型选项卡
-To access the model hub, click on the models tab
+要访问 Model Hub,请在右上角
+To access the Model Hub, click on the Models tab
6
00:00:16,020 --> 00:00:17,463
-在右上角。
+单击 Models 选项卡。
in the upper right corner.
7
00:00:18,960 --> 00:00:21,030
-你应该面对这个网络界面,
+你会看到这个网页界面,
You should be facing this web interface,
8
00:00:21,030 --> 00:00:23,193
-可以分成几个部分。
+它被分为几个部分。
which can be split into several parts.
9
00:00:24,480 --> 00:00:26,790
-在左侧,你会找到类别,
+在左侧,你会找到类别 (category),
On the left, you'll find categories,
10
00:00:26,790 --> 00:00:29,090
-你可以使用它来定制你的模型搜索。
+你可以使用它来自定义模型搜索。
which you can use to tailor your model search.
11
00:00:29,970 --> 00:00:32,970
-第一类是任务。
+第一类是任务 (tasks)。
The first category is the tasks.
12
00:00:32,970 --> 00:00:36,660
-集线器上的模型可用于各种各样的任务。
+hub 上的模型可用于各种各样的任务。
Models on the hub may be used for a wide variety of tasks.
13
@@ -90,12 +90,12 @@ or automatic speech recognition for speech.
19
00:00:54,840 --> 00:00:57,870
-第二类是图书馆。
+第二类是库 (Library)。
The second category is the libraries.
20
00:00:57,870 --> 00:01:00,990
-集线器上的模型通常共享三个主干之一,
+hub 上的模型通常共享三个主要框架之一,
Models on the hub usually share one of three backbones,
21
@@ -110,7 +110,7 @@ However, other backbones, such as rust or ONNX also exist.
23
00:01:09,540 --> 00:01:11,850
-最后,这个选项卡也可以使用
+最后,这个选项卡也可以
Finally, this tab can also be used
24
@@ -120,13 +120,13 @@ to specify from which high-level framework the models comes.
25
00:01:16,140 --> 00:01:19,260
-这包括变形金刚,但不限于此。
+这包括 Transformers ,但也不仅仅是这些。
This includes Transformers, but it isn't limited to it.
26
00:01:19,260 --> 00:01:21,060
-模型集线器用于托管
-The model hub is used to host
+Model Hub 用于托管
+The Model Hub is used to host
27
00:01:21,060 --> 00:01:22,920
@@ -135,32 +135,32 @@ a lot of different frameworks models,
28
00:01:22,920 --> 00:01:24,600
-我们正在积极寻求举办
+我们正在积极寻求
and we're actively looking to host
29
00:01:24,600 --> 00:01:25,893
-其他框架模型。
+支持其他框架模型。
other frameworks models.
30
00:01:28,530 --> 00:01:31,890
-第三类是数据集选项卡。
+第三类是数据集 (Datasets) 选项卡。
The third category is the datasets tab.
31
00:01:31,890 --> 00:01:35,070
-从此选项卡中选择数据集意味着过滤模型
+从此选项卡中选择数据集
Selecting a dataset from this tab means filtering the models
32
00:01:35,070 --> 00:01:37,683
-这样他们就可以在该特定数据集上接受培训。
+意味筛选在特定数据集上训练的模型。
so that they were trained on that specific dataset.
33
00:01:39,180 --> 00:01:42,300
-第四类是语言选项卡。
+第四类是语言 (Language) 选项卡。
The fourth category is the languages tab.
34
@@ -170,33 +170,33 @@ Selecting a language from this tab
35
00:01:43,800 --> 00:01:45,990
-意味着过滤模型以便它们处理
+意味着筛选模型以便它们适配
means filtering the models so that they handle
36
00:01:45,990 --> 00:01:47,090
-选择的语言。
+所选的语言。
the language selected.
37
00:01:48,600 --> 00:01:51,750
-最后,最后一个类别允许选择许可证
+最后,最后一个类别允许选择模型之间
Finally, the last category allows to choose the license
38
00:01:51,750 --> 00:01:53,313
-与之共享模型。
+共享的许可证 (license)。
with which the model is shared.
39
00:01:56,700 --> 00:01:58,770
-在右侧,你会找到可用的型号
+在右侧,你可以在 Model Hub
On the right, you'll find the models available
40
00:01:58,770 --> 00:02:00,480
-在模型中心。
-on the model hub.
+找到可用的模型。
+on the Model Hub.
41
00:02:00,480 --> 00:02:03,750
@@ -210,7 +210,7 @@ When clicking on a model,
43
00:02:04,890 --> 00:02:07,230
-你应该面对它的模型卡。
+你可以看到它的模型卡。
you should be facing its model card.
44
@@ -220,12 +220,12 @@ The model card contains information about the model,
45
00:02:09,990 --> 00:02:13,263
-它的描述、预期用途、限制和偏见。
+它的描述、预期用途、限制和偏差。
its description, intended use, limitations and biases.
46
00:02:14,310 --> 00:02:17,580
-它还可以显示有关如何使用模型的代码片段,
+它还可以展示与如何使用模型相关的代码片段,
It can also show code snippets on how to use the model,
47
@@ -235,7 +235,7 @@ as well as any relevant information;
48
00:02:20,070 --> 00:02:22,080
-培训程序,数据处理,
+训练过程,数据处理,
training procedure, data processing,
49
@@ -255,22 +255,22 @@ The better crafted a model card is,
52
00:02:30,360 --> 00:02:33,270
-其他用户越容易利用你的模型
+越方便其他用户在他们的应用程序中
the easier it will be for other users to leverage your model
53
00:02:33,270 --> 00:02:34,443
-在他们的应用程序中。
+利用你的模型。
in their applications.
54
00:02:35,820 --> 00:02:38,553
-模型卡右侧是推理 API。
+模型卡右侧是 inference API。
On the right of the model card is the inference API.
55
00:02:39,540 --> 00:02:41,040
-可以使用此推理 API
+可以使用此 interence API
This inference API can be used
56
@@ -280,7 +280,7 @@ to play with the model directly.
57
00:02:43,290 --> 00:02:45,690
-随意修改文字,点击计算
+随意修改文字,点击 compute
Feel free to modify the text and click on compute
58
@@ -305,12 +305,12 @@ that is relevant to the categories we have just seen.
62
00:03:01,320 --> 00:03:04,410
-文件和版本选项卡显示体系结构
-The files & versions tab displays the architecture
+Files and versions 选项卡显示
+The Files and versions tab displays the architecture
63
00:03:04,410 --> 00:03:06,213
-该模型的存储库。
+模型仓库的架构。
of the repository of that model.
64
@@ -320,42 +320,42 @@ Here, we can see all the files that define this model.
65
00:03:10,920 --> 00:03:13,650
-你将看到 Git 存储库的所有常用功能:
+你将看到 Git repository 的所有常用功能:
You'll see all usual features of a Git repository:
66
00:03:13,650 --> 00:03:15,093
-可用的分支机构,
+可用的 branch,
the branches available,
67
00:03:17,160 --> 00:03:18,520
-提交历史
+commit 历史
the commit history
68
00:03:20,760 --> 00:03:22,683
-以及提交差异。
+以及 commit diff。
as well as the commit diff.
69
00:03:25,740 --> 00:03:27,510
-三个不同的按钮可用
+在模型卡的顶部
Three different buttons are available
70
00:03:27,510 --> 00:03:29,760
-在模型卡的顶部。
+有三个不同的按钮可用。
at the top of the model card.
71
00:03:29,760 --> 00:03:31,170
-第一个显示如何使用
+第一个显示如何在代码中
The first one shows how to use
72
00:03:31,170 --> 00:03:33,093
-以编程方式推理 API。
+使用 inference API。
the inference API programmatically.
73
@@ -365,12 +365,12 @@ The second one shows how to train this model in SageMaker.
74
00:03:42,870 --> 00:03:44,820
-最后一个显示了如何加载该模型
+最后一个显示了如何在适当的库中
And the last one shows how to load that model
75
00:03:44,820 --> 00:03:46,860
-在适当的库中。
+加载该模型。
within the appropriate library.
76
diff --git a/subtitles/zh-CN/32_managing-a-repo-on-the-model-hub.srt b/subtitles/zh-CN/32_managing-a-repo-on-the-model-hub.srt
index e59ddd96f..e0997dfa7 100644
--- a/subtitles/zh-CN/32_managing-a-repo-on-the-model-hub.srt
+++ b/subtitles/zh-CN/32_managing-a-repo-on-the-model-hub.srt
@@ -5,7 +5,7 @@
2
00:00:06,210 --> 00:00:08,280
-管理模型存储库
+管理模型仓库
to manage a model repository
3
@@ -15,7 +15,7 @@ on the Hugging Face Hub Model Hub.
4
00:00:10,920 --> 00:00:13,020
-为了处理存储库
+为了处理仓库
In order to handle a repository
5
@@ -25,32 +25,32 @@ you should first have a Hugging Face account.
6
00:00:15,450 --> 00:00:17,610
-创建新帐户的链接可用
+在描述中有创建新帐户
A link to create a new account is available
7
00:00:17,610 --> 00:00:18,573
-在说明中。
+的链接。
in the description.
8
00:00:20,130 --> 00:00:22,980
-登录后,你可以创建一个新的存储库
+登录后,你可以创建一个新的仓库
Once you are logged in, you can create a new repository
9
00:00:22,980 --> 00:00:25,890
-通过单击新模型选项。
-by clicking on the new model option.
+通过单击 New Model 选项。
+by clicking on the New Model option.
10
00:00:25,890 --> 00:00:29,400
-你应该面对与以下类似的模式。
-You should be facing a similar modal to the following.
+你会看到类似下面的模型。
+You should be facing a similar model to the following.
11
00:00:29,400 --> 00:00:33,240
-在所有者输入中,你可以放置自己的命名空间
+在 Owner 输入框中,你可以放置自己的命名空间
In the owner input, you can put either your own namespace
12
@@ -60,12 +60,12 @@ or any of your organization's namespaces.
13
00:00:36,660 --> 00:00:39,330
-模型名称是模型标识符
-The model name is the model identifier
+Model name 是模型标识符
+The Model name is the model identifier
14
00:00:39,330 --> 00:00:40,320
-然后将被使用
+它将被用于
that will then be used
15
@@ -75,7 +75,7 @@ to identify your model on the chosen namespace.
16
00:00:44,130 --> 00:00:47,700
-最后的选择是在公共和私人之间。
+最后可以在 Public(公共) 和 Private(私有) 之间选择。
The final choice is between public and private.
17
@@ -95,12 +95,12 @@ as this makes your model easily accessible and shareable.
20
00:00:54,960 --> 00:00:57,630
-你的命名空间的所有者是唯一的
+你的命名空间的所有者
The owners of your namespace are the only ones
21
00:00:57,630 --> 00:00:59,523
-谁可以更新和更改你的模型。
+是唯一可以更新和更改你的模型。
who can update and change your model.
22
@@ -120,7 +120,7 @@ only the owners of your namespace
25
00:01:06,000 --> 00:01:08,280
-将对你的模型有可见性。
+对你的模型有可见性。
will have visibility over your model.
26
@@ -135,7 +135,7 @@ and will not be able to use it.
28
00:01:15,030 --> 00:01:17,030
-让我们创建一个虚拟模型来玩。
+让我们创建一个虚拟模型来试试看。
Let's create a dummy model to play with.
29
@@ -155,17 +155,17 @@ Three tabs are available to you.
32
00:01:24,360 --> 00:01:27,960
-你面对的是第一个,这是模型卡页面。
-You're facing the first one, which is the model card page.
+你面对的是第一个,这是 Model card 页面。
+You're facing the first one, which is the Model card page.
33
00:01:27,960 --> 00:01:29,970
-这是你用来展示模型的页面
+这是你用来向全世界展示模型
This is the page you use to showcase your model
34
00:01:29,970 --> 00:01:31,110
-致全世界。
+的页面。
to the world.
35
@@ -175,17 +175,17 @@ We'll see how it can be completed in a bit.
36
00:01:34,500 --> 00:01:37,503
-第二个是文件和版本选项卡。
-The second one is the files and versions tab.
+第二个是 Files and Versions 选项卡。
+The second one is the Files and Versions tab.
37
00:01:38,340 --> 00:01:40,920
-你的模型本身就是一个 Git 存储库。
+你的模型本身就是一个 Git 仓库。
Your model itself is a Git repository.
38
00:01:40,920 --> 00:01:43,230
-如果你不知道什么是 Git 存储库,
+如果你不知道什么是 Git 仓库,
If you're unaware of what is a Git repository,
39
@@ -200,22 +200,22 @@ If you have never used Git before,
41
00:01:48,120 --> 00:01:50,100
-我们建议看介绍
+我们建议观看视频描述中
we recommend looking at an introduction
42
00:01:50,100 --> 00:01:52,600
-就像本视频描述中提供的那样。
+提供的介绍内容。
like the one provided in this video's description.
43
00:01:53,850 --> 00:01:56,910
-Git 存储库允许你查看发生的更改
+Git 仓库支持按照时间推移
The Git repository allows you to see the changes happening
44
00:01:56,910 --> 00:02:00,900
-随着时间的推移在此文件夹中,因此术语版本。
+查看本文件夹中的变化,也就是版本。
over time in this folder, hence the term versions.
45
@@ -225,12 +225,12 @@ We'll see how to add files and versions in a bit.
46
00:02:07,020 --> 00:02:09,570
-最后一个选项卡是设置选项卡,
+最后一个选项卡是 Settings 选项卡,
The final tab is the settings tab,
47
00:02:09,570 --> 00:02:12,120
-这使你可以管理模型的可见性
+可以管理模型的可见性
which allows you to manage your model's visibility
48
@@ -240,27 +240,27 @@ and availability.
49
00:02:14,790 --> 00:02:17,673
-让我们首先从将文件添加到存储库开始。
+让我们首先从将文件添加到仓库开始。
Let's first start by adding files to the repository.
50
00:02:18,540 --> 00:02:19,560
-可以添加文件
+还好有 add file 按钮
Files can be added
51
00:02:19,560 --> 00:02:23,340
-多亏了添加文件按钮,通过网络界面。
+通过网页操作即可添加文件。
through the web interface thanks to the add file button.
52
00:02:23,340 --> 00:02:27,060
-添加的文件可以是任何类型,python,JSON,文本,
+添加的文件可以是任何类型,python,JSON,纯文本,
The added files can be of any type, python, JSON, text,
53
00:02:27,060 --> 00:02:27,893
-你的名字。
+任君选择。
you name it.
54
@@ -270,32 +270,32 @@ Alongside your added file and its content,
55
00:02:31,170 --> 00:02:33,363
-你应该命名你的更改或提交。
+你还应该命名你的 change 或 commit。
you should name your change or commit.
56
00:02:36,330 --> 00:02:38,400
-一般添加文件比较简单
+通常,使用 Hugging Face Hub Python 库
Generally, adding files is simpler
57
00:02:38,400 --> 00:02:40,770
-通过使用 Hugging Face Hub Python 库
+或使用命令行添加文件
by using the Hugging Face Hub Python library
58
00:02:40,770 --> 00:02:43,050
-或使用命令行。
+比较简单。
or by using the command-line.
59
00:02:43,050 --> 00:02:44,310
-我们将展示如何做到这一点
+我们将展示如何使用
We'll showcase how to do this
60
00:02:44,310 --> 00:02:46,290
-使用 Hugging Face Hub Python 库,
+Hugging Face Hub Python 库做到这一点
using the Hugging Face Hub Python library,
61
@@ -305,7 +305,7 @@ and there is a link in the description
62
00:02:48,060 --> 00:02:49,800
-到这个视频的前一个版本,
+可以指向这个视频的前一个版本,
to the previous version of this video,
63
@@ -325,7 +325,7 @@ into your Hugging Face account,
66
00:02:56,460 --> 00:02:59,523
-通过命令行或在 Python 运行时中。
+可以通过命令行或者 Python 运行时中操作。
either through the command-line or in a Python runtime.
67
@@ -335,7 +335,7 @@ The first approach we'll take a look at
68
00:03:06,390 --> 00:03:08,880
-正在使用上传文件的方法。
+正在使用 upload_file 方法。
is using the upload file method.
69
@@ -345,12 +345,12 @@ This offers an extremely simple API
70
00:03:10,770 --> 00:03:12,630
-通过集线器上传文件。
+通过 hub 上传文件。
to upload files through the hub.
71
00:03:12,630 --> 00:03:14,190
-三个必需的参数
+其中三个必需的参数
The three required parameters
72
@@ -360,13 +360,13 @@ are the current location of the file,
73
00:03:18,570 --> 00:03:21,300
-该文件在存储库中的路径,
+该文件在仓库中的路径,
the path of that file in the repository,
74
00:03:21,300 --> 00:03:24,050
-以及你要推送到的存储库的想法。
-and the idea of the repository to which you're pushing.
+以及你要推送到的仓库的标识符。
+and the id of the repository to which you're pushing.
75
00:03:25,650 --> 00:03:27,930
@@ -375,37 +375,37 @@ There are a few additional parameters.
76
00:03:27,930 --> 00:03:29,100
-令牌参数,
+token 参数,
The token parameter,
77
00:03:29,100 --> 00:03:31,200
-如果你想指定一个不同的令牌
+如果你想指定一个和登录时
if you would like to specify a different token
78
00:03:31,200 --> 00:03:33,650
-比登录时保存在缓存中的那个,
+所保存的不同的 token,
than the one saved in your cache with your login,
79
00:03:34,830 --> 00:03:36,750
-回购类型参数,
+repo_type 参数,
the repo type parameter,
80
00:03:36,750 --> 00:03:40,503
-如果你想推送到数据集或空间。
-if you would like to push to a data set or a space.
+如果你想推送到 dataset 或 space。
+if you would like to push to a dataset or a space.
81
00:03:42,300 --> 00:03:45,690
-我们将上传一个名为 readme.md 的文件到存储库
+我们将使用这种方法上传一个名为 readme.md 的文件
We'll upload a file called readme.md to the repository
82
00:03:45,690 --> 00:03:47,190
-使用这种方法。
+到仓库。
using this method.
83
@@ -415,12 +415,12 @@ We first start by saving a file with that name,
84
00:03:49,710 --> 00:03:51,210
-其中包含一些信息
+其中包含一些关于
which contains some information
85
00:03:51,210 --> 00:03:52,920
-关于存储库本身。
+仓库本身的信息。
about the repository itself.
86
@@ -435,7 +435,7 @@ Now that the file is saved,
88
00:03:57,420 --> 00:04:00,513
-让我们使用上传文件方法将其上传到集线器。
+让我们使用 upload_file 方法将其上传到 hub。
let's use the upload file method to upload it to the hub.
89
@@ -455,12 +455,12 @@ The file upload was a success.
92
00:04:10,170 --> 00:04:13,500
-除了这个方法之外还有一个删除文件的方法
+除了这个方法之外还有一个 delete_file 方法
Alongside this method exists a delete file method
93
00:04:13,500 --> 00:04:16,170
-这样你就可以完全管理你的存储库。
+这样你就可以完全管理你的仓库。
so that you may manage your repository fully.
94
@@ -480,7 +480,7 @@ the file was indeed deleted.
97
00:04:29,070 --> 00:04:32,730
-这种只使用这两种方法的方法非常简单。
+这两种方法操作起来非常简单。
This approach using only these two methods is super simple.
98
@@ -515,12 +515,12 @@ let's take a look at the second method
104
00:04:45,540 --> 00:04:47,643
-这是存储库实用程序。
+这是仓库实用程序。
which is the repository utility.
105
00:04:48,600 --> 00:04:51,840
-此类是 Git 和 Git LFS 方法的包装器,
+该类封装了 Git 和 Git LFS 方法,
This class is a wrapper over Git and Git LFS methods,
106
@@ -535,7 +535,7 @@ and offers a flexible API
108
00:04:55,500 --> 00:04:57,990
-管理你的在线存储库。
+管理你的在线仓库。
to manage your online repositories.
109
@@ -545,22 +545,22 @@ Let's take a look at how it works.
110
00:05:03,870 --> 00:05:08,369
-我们首先从实例化存储库实用程序开始。
+我们首先从实例化仓库实用程序开始。
We first start by instantiating the repository utility.
111
00:05:08,369 --> 00:05:10,380
-我们从参数中提供克隆,
+为了克隆我们刚刚创建的仓库
We provide the clone from parameter,
112
00:05:10,380 --> 00:05:13,383
-为了克隆我们刚刚创建的存储库。
+我们可以通过传递参数进行克隆。
in order to clone the repository we just created.
113
00:05:14,400 --> 00:05:18,750
-存储库现已克隆到本地文件夹中。
+仓库现已克隆到本地文件夹中。
The repository is now cloned in the local folder.
114
@@ -575,7 +575,7 @@ offers quite a few methods which are useful for us.
116
00:05:25,920 --> 00:05:28,800
-我们有兴趣将模型推送到中心。
+我们有兴趣将模型推送到 hub。
We're interested in pushing a model to the hub.
117
@@ -585,7 +585,7 @@ I'll start by loading a model and tokenizer
118
00:05:31,170 --> 00:05:32,643
-我几个小时前训练过。
+这是几个小时前训练过的。
I trained a few hours ago.
119
@@ -595,42 +595,42 @@ We'll now follow the traditional Git approach
120
00:05:36,810 --> 00:05:38,670
-首先提取最新的更改
+首先 pull 最新的更改内容
by first pulling latest changes
121
00:05:38,670 --> 00:05:40,053
-使用 Git pull 方法。
-using the Git pull method.
+使用 git_pull 方法。
+using the git_pull method.
122
00:05:40,980 --> 00:05:43,170
-我们刚刚克隆了存储库,
+我们刚刚克隆了仓库,
We just cloned the repository,
123
00:05:43,170 --> 00:05:45,780
-所以除非这是一个超级活跃的存储库,
+所以除非这是一个超级活跃的仓库,
so unless this is a super active repository,
124
00:05:45,780 --> 00:05:48,660
-不太可能有新的变化可用。
+否则不太可能内容的变化。
it's unlikely that new changes are available.
125
00:05:48,660 --> 00:05:51,000
-但拉取最新的更改总是一个好主意
+但在做任何新的事情之前养成 pull 最新内容
But it's always a good idea to pull the latest changes
126
00:05:51,000 --> 00:05:52,300
-在做任何新的事情之前。
+的好习惯也是不错的。
before doing anything new.
127
00:05:53,220 --> 00:05:55,200
-现在我们已经拉取了存储库,
+现在我们已经 pull 了仓库,
Now that we have pulled the repository,
128
@@ -670,53 +670,53 @@ If we were using the command-line,
135
00:06:12,150 --> 00:06:14,250
-有一些 Git LFS 特定的命令
+我们将不得不调用一些
there are a few Git LFS specific commands
136
00:06:14,250 --> 00:06:15,600
-我们将不得不调用。
+特定的 Git LFS 命令。
we would have to invoke.
137
00:06:15,600 --> 00:06:17,940
-但是在这里,Hugging Face 枢纽包
+但是在这里,huggingface_hub 包
But here, the Hugging Face hub package
138
00:06:17,940 --> 00:06:20,070
-负责所有这些。
+会处理所有这些。
takes care of all of that.
139
00:06:20,070 --> 00:06:24,420
-我们将从使用 Git add 方法暂存文件开始。
-We'll start by staging the files using the Git add method.
+我们将从使用 git_add 方法暂存文件开始。
+We'll start by staging the files using the git_add method.
140
00:06:24,420 --> 00:06:27,600
-然后我们将使用 Git commit 方法提交这些更改,
+然后我们将使用 git_commit 方法提交这些更改,
We'll then commit these changes using Git commit method,
141
00:06:27,600 --> 00:06:30,690
-并提供有用的提交信息。
+并提供有用的 commit 信息。
and providing a helpful commit message.
142
00:06:30,690 --> 00:06:33,210
-最后,我们将更改推送到远程,
+最后,我们将更改推送到远端,
Finally, we'll push the changes to the remote,
143
00:06:33,210 --> 00:06:34,953
-使用 Git 推送方法。
+使用 git_push 方法。
using the Git push method.
144
00:06:45,090 --> 00:06:47,430
-如果我们回到文件和版本选项卡,
-If we go back to the files and versions tab,
+如果我们回到 Files and Versions 选项卡,
+If we go back to the Files and Versions tab,
145
00:06:47,430 --> 00:06:49,950
@@ -725,7 +725,7 @@ we can now see the newly committed files.
146
00:06:49,950 --> 00:06:52,600
-我们甚至可以在推理 API 中使用模型。
+我们甚至可以在 inference API 中使用模型。
We can even play with the model in the inference API.
147
@@ -735,7 +735,7 @@ Unfortunately, the front page of our model
148
00:06:55,770 --> 00:06:57,540
-还是很空虚。
+还是显得非常空。
is still very empty.
149
@@ -745,13 +745,13 @@ Let's add a README markdown file
150
00:06:59,280 --> 00:07:00,753
-完成它一点点。
+让整体显得完整一点点。
to complete it a little bit.
151
00:07:01,710 --> 00:07:04,200
-这个 README 被称为模型卡
-This README is known as the model card
+这个 README 被称为 Model card
+This README is known as the Model card
152
00:07:04,200 --> 00:07:06,030
@@ -760,12 +760,12 @@ and it's arguably as important
153
00:07:06,030 --> 00:07:09,330
-作为模型存储库中的模型和标记器文件。
+作为模型仓库中的模型和分词器文件。
as the model and tokenizer files in the model repository.
154
00:07:09,330 --> 00:07:11,280
-这是中心定义
+这是你的模型的综合定义
It is the central definition
155
@@ -795,12 +795,12 @@ may build their artifacts.
160
00:07:23,220 --> 00:07:25,590
-我们只会在此处添加标题和简短描述
+为了简单起见我们只会在此处添加标题
We'll only add a title and a small description here
161
00:07:25,590 --> 00:07:27,060
-为了简单起见,
+和简短描述,
for simplicity's sake,
162
@@ -810,7 +810,7 @@ but we encourage you to add information relevant
163
00:07:29,370 --> 00:07:30,990
-模型是如何训练的,
+说明模型是如何训练的,
to how was the model trained,
164
@@ -820,7 +820,7 @@ it's intended use and limitations,
165
00:07:33,120 --> 00:07:36,180
-以及它识别出的潜在偏见,
+以及目前一直的潜在偏差,
as well as it's identified potential biases,
166
@@ -835,7 +835,7 @@ and code samples on how to use your model.
168
00:07:41,460 --> 00:07:44,130
-为模型中心贡献模型的出色工作。
+为 Model Hub 贡献出色的模型。
Great work contributing a model to the Model Hub.
169
diff --git a/subtitles/zh-CN/33_the-push-to-hub-api-(pytorch).srt b/subtitles/zh-CN/33_the-push-to-hub-api-(pytorch).srt
index e27897b99..475489f28 100644
--- a/subtitles/zh-CN/33_the-push-to-hub-api-(pytorch).srt
+++ b/subtitles/zh-CN/33_the-push-to-hub-api-(pytorch).srt
@@ -15,13 +15,13 @@
4
00:00:05,130 --> 00:00:06,830
-- [Instructor] 所以推送到 hub API。
-- [Instructor] So push to hub API.
+- [Instructor] push_to_hub API。
+- [Instructor] So push_to_hub API.
5
00:00:08,310 --> 00:00:10,533
-让我们看一下推送到集线器 API。
-Let's have a look at the push to hub API.
+让我们看一下 push_to_hub API。
+Let's have a look at the push_to_hub API.
6
00:00:11,730 --> 00:00:14,640
@@ -30,12 +30,12 @@ You will need to be logged in with your Hugging Face account
7
00:00:14,640 --> 00:00:17,400
-你可以通过执行第一个单元格来做到这一点,
+你可以通过执行第一个单元格里的操作来登录,
which you can do by executing this first cell,
8
00:00:17,400 --> 00:00:21,123
-或者在终端中输入 huggingface-cli login。
+或者在 terminal 中输入 huggingface-cli login。
or by typing huggingface-cli login in a terminal.
9
@@ -45,37 +45,37 @@ Just enter you username and password, then click login,
10
00:00:26,640 --> 00:00:28,620
-这将存储一个通知令牌
-this will store a notification token
+登录后将存储一个授权 token
+this will store a authentication token
11
00:00:28,620 --> 00:00:30,670
-在你正在使用的机器的缓存中。
+到你正在使用的机器的缓存中。
in the cache of the machine you're using.
12
00:00:31,890 --> 00:00:35,790
-现在,让我们对 BERT 模型进行微调
+现在,让我们基于 GLUE COLA 数据集
Now, let's launch a fine tuning of a BERT model
13
00:00:35,790 --> 00:00:37,920
-在 GLUE COLA 数据集上。
+对 BERT 模型进行微调。
on the GLUE COLA dataset.
14
00:00:37,920 --> 00:00:39,600
-我们不会讨论微调代码
+我们不会深入探讨微调代码
We won't go over the fine tuning code
15
00:00:39,600 --> 00:00:42,270
-因为你可以在任何变压器教程中找到它,
+你可以在任何 transformer 教程
because you can find it in any transformer tutorial,
16
00:00:42,270 --> 00:00:44,670
-或通过查看下面的视频链接。
+或查看下面的视频链接找到相关参考。
or by looking at the videos link below.
17
@@ -85,7 +85,7 @@ What interests us here is
18
00:00:46,470 --> 00:00:48,970
-我们如何在训练期间利用模型中心。
+如何在训练期间利用 model hub。
how we can leverage the model hub during training.
19
@@ -95,72 +95,72 @@ This is done with the "push_to_hub=true" argument
20
00:00:52,980 --> 00:00:55,530
-传入你的 TrainingArguments。
+将该参数添加到你的 TrainingArguments。
passed in your TrainingArguments.
21
00:00:55,530 --> 00:00:57,240
-这将自动上传你的模型
+每次保存时将自动上传
This will automatically upload your model
22
00:00:57,240 --> 00:00:59,400
-每次保存到集线器,
+你的模型到 Hub,在我们的示例中,
to the Hub each time it is saved,
23
00:00:59,400 --> 00:01:01,323
-所以我们案例中的每个时代。
+每个 epoch 都会如此操作。
so every epoch in our case.
24
00:01:02,280 --> 00:01:04,860
-这允许你从不同的机器恢复训练
+如果当前的被打断
This allows you to resume training from a different machine
25
00:01:04,860 --> 00:01:06,873
-如果当前的被打断。
+这允许你从不同的机器恢复训练之前的训练。
if the current one gets interrupted.
26
00:01:08,220 --> 00:01:10,440
-该模型将在你的名称空间中更新
-The model will be updated in your name space
+该模型将使用
+The model will be updated in your namespace
27
00:01:10,440 --> 00:01:14,640
-使用你默认选择的输出目录的名称。
+你默认选择的输出目录的名称在你的 namespace 中更新。
with the name of the output directory you picked by default.
28
00:01:14,640 --> 00:01:16,020
-你可以选择其他名称
+你可以通过将其
You can choose another name
29
00:01:16,020 --> 00:01:19,113
-通过将其传递给 hub_model_id 参数。
+传递给 hub_model_id 参数选择其他名称。
by passing it to the hub_model_id argument.
30
00:01:20,070 --> 00:01:23,370
-你还可以推动你所属的组织内部
+你还可以通过传递完整的仓库名称
You can also push inside an organization you are a member of
31
00:01:23,370 --> 00:01:25,740
-通过传递完整的存储库名称,
+将模型 push 到你所属的组织内部,
by passing a full repository name,
32
00:01:25,740 --> 00:01:28,933
-以组织名称 /,
+使用 organization/ 的形式,
with the name of the organization/,
33
00:01:28,933 --> 00:01:30,433
-你要选择的型号 ID。
+再加上你所选的 model ID。
the model ID you want to pick.
34
@@ -175,38 +175,38 @@ and wait a little bit.
36
00:01:36,960 --> 00:01:39,033
-我会从视频中缩短等待时间。
+视频中会跳过等待的过程。
I'll cut the waiting time from the video.
37
00:01:43,260 --> 00:01:46,350
-请注意,模型是异步推送的,
+请注意,模型是异步 push 的,
Note that the model is pushed asynchronously,
38
00:01:46,350 --> 00:01:47,730
-意味着训练继续
+意味着当你的模型上传到 hub 时,
meaning that the training continues
39
00:01:47,730 --> 00:01:49,730
-当你的模型上传到集线器时。
+训练将继续进行。
while your model is uploaded to the hub.
40
00:01:51,060 --> 00:01:52,950
-当你的第一次提交完成时,
+当你的第一次 commit 完成时,
When your first commit is finished,
41
00:01:52,950 --> 00:01:55,650
-你可以去中心检查你的模型
+你可以通过查看你的 namespace
you can go inspect your model on the Hub
42
00:01:55,650 --> 00:01:57,960
-通过查看你的名称空间,
-by looking inside your name space,
+去 Hub 检查你的模型,
+by looking inside your namespace,
43
00:01:57,960 --> 00:01:59,943
@@ -215,22 +215,22 @@ and you'll find it at the very top.
44
00:02:01,980 --> 00:02:04,200
-你甚至可以开始使用它的推理小部件
+你甚至可以在继续训练的同时
You can even start playing with its inference widget
45
00:02:04,200 --> 00:02:06,630
-在继续训练的同时。
+开始使用它的 inference 小部件。
while it's continuing the training.
46
00:02:06,630 --> 00:02:09,270
Cola 数据集让模型确定
-The Cola data set tasks the model with determining
+The Cola dataset tasks the model with determining
47
00:02:09,270 --> 00:02:11,970
-如果句子在语法上是正确的。
+句子在语法上是否是正确的。
if the sentence is grammatically correct on that.
48
@@ -240,102 +240,102 @@ So we pick an example of incorrect sentence to test it.
49
00:02:15,510 --> 00:02:16,950
-请注意,这需要一些时间
+请注意,第一次尝试使用它时,
Note that it'll take a bit of time
50
00:02:16,950 --> 00:02:18,750
-在推理 API 中加载模型,
+这需要一些时间才能在 inference API 中
to load your model inside the inference APIs,
51
00:02:18,750 --> 00:02:20,880
-所以第一次尝试使用它。
+完成模型加载。
so first time you try to use it.
52
00:02:20,880 --> 00:02:23,280
-我们将按时间从视频中删减。
+我们将根据时间从视频中删掉。
We'll cut by time from the video.
53
00:02:23,280 --> 00:02:24,870
-标签有问题,
+标签有点问题,
There is something wrong with the labels,
54
00:02:24,870 --> 00:02:27,360
-但我们稍后会在本视频中修复它。
+我们稍后会在本视频中修复它。
but we'll fix it later in this video.
55
00:02:27,360 --> 00:02:29,520
-一旦你的训练结束,
+一旦你的训练完成,
Once your training is finished,
56
00:02:29,520 --> 00:02:31,770
-你应该和教练一起做最后一击
+你应该使用 trainer.push_to_hub 方法
you should do one last push with the trainer
57
00:02:31,770 --> 00:02:33,840
-推到一个方法。
+最后再提交一次。
that pushed to a method.
58
00:02:33,840 --> 00:02:35,430
-这是有两个原因的。
+这其中有两个原因。
This is for two reason.
59
00:02:35,430 --> 00:02:36,750
-首先,这将确保
+首先,若你尚未完成
First, this will make sure
60
00:02:36,750 --> 00:02:39,180
-你正在预测模型的最终版本
+这将确保你正在预测模型的
you are predicting the final version of your model
61
00:02:39,180 --> 00:02:40,680
-如果你还没有。
+最终版本。
if you didn't already.
62
00:02:40,680 --> 00:02:42,480
-例如,如果你曾经保存
+例如,如果你曾经是在每一步保存
For instance, if you used to save
63
00:02:42,480 --> 00:02:46,980
-每一步策略而不是每秒,
+而不是每秒保存,
every in step strategy instead of every second,
64
00:02:46,980 --> 00:02:48,180
-这将起草一张模型卡
+这将创建一个 model card
this will draft a model card
65
00:02:48,180 --> 00:02:51,120
-那将是你的模型回购的登陆页面。
+那将是你的 model repo 的最初始页面。
that will be the landing page of your model repo.
66
00:02:51,120 --> 00:02:52,260
-提交完成后,
+commit 完成后,
Once the commit is done,
67
00:02:52,260 --> 00:02:54,810
-让我们回到我们的模型页面并刷新。
+让我们回到我们的 model 页面并刷新。
let's go back on our model page and refresh.
68
00:02:54,810 --> 00:02:56,820
-我们可以看到制图者模型卡
+我们可以看到 model card 的草稿
We can see the drafters model card
69
@@ -345,17 +345,17 @@ which includes information,
70
00:02:58,080 --> 00:03:00,381
-我们发现调整了哪一种模型。
+以及哪个模型被调整过。
and which one model we find tuned.
71
00:03:00,381 --> 00:03:03,570
-所以最终评估损失和指标,
+接下来是最终的评估 loss 和 metric,
So final evaluation loss and metric,
72
00:03:03,570 --> 00:03:06,300
-使用的训练超参数,
+使用过的训练超参数,
the training hyperparameter used,
73
@@ -380,42 +380,42 @@ On top of all that information,
77
00:03:16,860 --> 00:03:19,740
-培训师还包括一些解释的元数据
+trainer 还包括一些 metadata,它可以
the trainer also included some metadata that is interpreted
78
00:03:19,740 --> 00:03:22,650
-通过模型云中的 Hugging Face 网站。
+通过 model cloud 上的 HuggingFace 网站解析。
by the Hugging Face website in the model cloud.
79
00:03:22,650 --> 00:03:26,010
-你获得了一个漂亮的小部件中报告的指标的价值
+你将会得到一个漂亮的 widget 所返回的相关指标数值
You get the value of the metrics reported in a nice widget
80
00:03:26,010 --> 00:03:29,640
-以及带有代码的论文排行榜的链接。
+以及一个链接指向 leaderboard(Paper with Code)。
as well as a link to a leaderboard with paper with code.
81
00:03:29,640 --> 00:03:32,550
-所以 Tensorboard runs 也被推送了
+并且 Tensorboard 的运行结果也包含
So the Tensorboard runs have also been pushed
82
00:03:32,550 --> 00:03:34,560
-到这份报告,我们可以看看他们
+在这份报告中,我们可以在 Model Hub 中
to this report, and we can look at them
83
00:03:34,560 --> 00:03:36,000
-直接从模型中心
+通过点击子菜单中的
directly from the model hub
84
00:03:36,000 --> 00:03:38,850
-通过单击训练指标子菜单。
+Training metrics 查看报告。
by clicking on the training metrics sub menu.
85
@@ -430,52 +430,52 @@ to fine-tune your model,
87
00:03:42,510 --> 00:03:43,770
-你可以使用 push_to_hub 方法
+你可以在模型上直接
you can use a push_to_hub method
88
00:03:43,770 --> 00:03:46,427
-在模型上,并直接标记器。
+使用 push_to_hub 方法和分词器。
on the model, and tokenizer directly.
89
00:03:46,427 --> 00:03:50,160
-让我们测试一下以修复推理小部件中的所有标签。
+让我们测试一下以修复 inference widget 中的所有标签。
Let's test this to fix all labels in the inference widget.
90
00:03:50,160 --> 00:03:52,740
-推理小部件使用不同的标签名称
+inference widget 使用不同的标签名称
The inference widget was using different names for labels
91
00:03:52,740 --> 00:03:54,810
-因为我们没有注明对应
+因为我们没有在整数和标签名称之间
because we did not indicate the correspondence
92
00:03:54,810 --> 00:03:57,030
-在整数和标签名称之间。
+注明关联性。
between integer and label names.
93
00:03:57,030 --> 00:03:58,740
-我们可以在配置中解决这个问题
+当推送模型配置到 hub 时,
We can fix this in the configuration
94
00:03:58,740 --> 00:04:01,350
-通过坐在 label2id,
-by sitting the label2id,
+我们可以通过将 label2id
+by setting the label2id,
95
00:04:01,350 --> 00:04:04,170
-和 id2label 字段通过适当的值
+和 id2label 字段设置为合适的值
and id2label fields through the proper values
96
00:04:04,170 --> 00:04:06,933
-将模型配置推送到集线器时。
+在配置中解决这个问题。
when pushing the model config to the hub.
97
@@ -490,7 +490,7 @@ and the model is now showing the proper label.
99
00:04:13,380 --> 00:04:15,240
-现在模型在集线器上,
+现在模型在 hub 上,
Now that the model is on the hub,
100
@@ -500,7 +500,7 @@ we can use it from anywhere
101
00:04:17,370 --> 00:04:19,920
-就像我们对任何其他 Transformer 模型一样
+就像我们对任何其他 Transformer 模型
as we would any other Transformer model
102
@@ -510,12 +510,12 @@ with the from_pretrained method
103
00:04:21,113 --> 00:04:22,923
-具有管道功能。
-of with the pipeline function.
+或者使用 pipeline 函数。
+or with the pipeline function.
104
00:04:34,350 --> 00:04:36,780
-我们只需要使用集线器的标识符,
+我们只需要使用 hub 的标识符,
We just have to use the identifier from the hub,
105
@@ -525,12 +525,12 @@ and we can see that the model configuration and weights
106
00:04:39,450 --> 00:04:42,483
-以及标记化的文件会自动下载。
+以及分词处理后的文件会自动下载。
as well as the tokenized files are automatically downloaded.
107
00:04:53,880 --> 00:04:55,950
-在下一次培训中尝试 push_to_hub API
+在下一次训练中尝试 push_to_hub API
Try the push_to_hub API in the next training
108
diff --git a/subtitles/zh-CN/34_the-push-to-hub-api-(tensorflow).srt b/subtitles/zh-CN/34_the-push-to-hub-api-(tensorflow).srt
index e05f61932..fe6d2061c 100644
--- a/subtitles/zh-CN/34_the-push-to-hub-api-(tensorflow).srt
+++ b/subtitles/zh-CN/34_the-push-to-hub-api-(tensorflow).srt
@@ -5,37 +5,37 @@
2
00:00:05,100 --> 00:00:07,080
-- [旁白] 嗨,这将是一个视频
+- [旁白] 嗨,本视频将带领大家了解
- [Narrator] Hi, this is going to be a video
3
00:00:07,080 --> 00:00:09,420
-关于 push_to_hub API
+push_to_hub API 适用于
about the push_to_hub API
4
00:00:09,420 --> 00:00:10,670
-适用于 Tensorflow 和 Keras。
+Tensorflow 和 Keras 的版本。
for Tensorflow and Keras.
5
00:00:11,820 --> 00:00:14,850
-因此,首先,我们将打开我们的笔记本。
+那么首先,打开我们的 jupyter。
So, to get started, we'll open up our notebook.
6
00:00:14,850 --> 00:00:16,920
-你需要做的第一件事就是登录
+你需要做的第一件事就是
And the first thing you'll need to do is log in to
7
00:00:16,920 --> 00:00:18,170
-你的 HuggingFace 帐户,
+登录你的 HuggingFace 帐户,
your HuggingFace account,
8
00:00:19,043 --> 00:00:20,663
-例如笔记本登录功能。
+例如调用 notebook_login 函数。
for example with the notebook login function.
9
@@ -45,22 +45,22 @@ So to use that, you simply call the function,
10
00:00:24,630 --> 00:00:26,010
-弹出窗口将出现。
+随后会弹出窗口。
the popup will emerge.
11
00:00:26,010 --> 00:00:28,800
-你将输入你的用户名和密码,
+你需要输入你的用户名和密码,
You will enter your username and password,
12
00:00:28,800 --> 00:00:31,425
-我要在这里从我的密码管理器中取出,
+这里我使用密码管理器拷贝密码,
which I'm going to pull out of my password manager here,
13
00:00:31,425 --> 00:00:33,108
-然后你登录。
+然后就登录了。
and you log in.
14
@@ -70,7 +70,7 @@ The next two cells are just
15
00:00:35,670 --> 00:00:37,080
-为训练做好一切准备。
+为训练做好准备。
getting everything ready for training.
16
@@ -80,22 +80,22 @@ So we're just going to load a dataset,
17
00:00:38,940 --> 00:00:41,100
-我们要标记那个数据集,
+我们要对数据集进行分词,
we're going to tokenize that dataset,
18
00:00:41,100 --> 00:00:42,990
-然后我们将加载我们的模型并编译
+然后我们将加载我们的模型并
and then we're going to load our model and compile
19
00:00:42,990 --> 00:00:45,660
-它与标准的 Adam 优化器。
+使用标准 Adam 优化器进行编译。
it with the standard Adam optimizer.
20
00:00:45,660 --> 00:00:47,560
-所以我将运行所有这些。
+现在我们会运行这些代码。
So I'm just going to run all of those.
21
@@ -135,22 +135,22 @@ So the first is with the PushToHubCallback.
28
00:01:08,190 --> 00:01:10,107
-所以在 Keras 中回调
+所以 Keras 中的回调
So a callback in Keras
29
00:01:10,107 --> 00:01:13,710
-是在训练期间定期调用的函数。
+也会在训练过程中被频繁调用。
is a function that's called regularly during training.
30
00:01:13,710 --> 00:01:17,400
-你可以将其设置为在一定数量的步骤后调用,
+你可以将其设置为在一定数量的 step 后或者在每个 epoch 被调用,
You can set it to be called after a certain number of steps,
31
00:01:17,400 --> 00:01:21,427
-或每个时期,甚至只是在训练结束时一次。
+甚至只是在训练结束时调用一次。
or every epoch, or even just once at the end of training.
32
@@ -160,7 +160,7 @@ So a lot of callbacks in Keras, for example,
33
00:01:25,080 --> 00:01:28,050
-控制学习率在高原上衰减,
+在平稳期控制学习率衰减,
control learning rate decaying on plateau,
34
@@ -175,12 +175,12 @@ So this callback, by default,
36
00:01:32,520 --> 00:01:35,760
-每个时期都会将你的模型保存到 Hub 一次。
+在每个 epoch 都会将你的模型保存到 Hub 一次。
will save your model to the Hub once every epoch.
37
00:01:35,760 --> 00:01:37,080
-这真的很有帮助,
+这真的非常有用,
And that's really helpful,
38
@@ -190,27 +190,27 @@ especially if your training is very long,
39
00:01:38,790 --> 00:01:40,800
-因为那意味着你可以从那个保存中恢复,
+因为那意味着你可以从那个存储中恢复,
because that means you can resume from that save,
40
00:01:40,800 --> 00:01:43,290
-所以你得到了你的模型的自动云保存。
+所以你可以实现将你的模型进行自动云存储。
so you get this automatic cloud-saving of your model.
41
00:01:43,290 --> 00:01:45,027
-你甚至可以进行推理
+你甚至可以利用
And you can even run inference
42
00:01:45,027 --> 00:01:47,730
-使用模型的检查点
+该回调所上传的模型存储点(checkpoint)
with the checkpoints of your model
43
00:01:47,730 --> 00:01:50,208
-已通过此回调上传。
+进行推断过程。
that have been uploaded by this callback.
44
@@ -220,17 +220,17 @@ And that means you can,
45
00:01:52,260 --> 00:01:54,150
-你知道,运行一些测试输入
+你懂的,运行一些测试输入
y'know, run some test inputs
46
00:01:54,150 --> 00:01:56,100
-并实际查看你的模型是如何工作的
+并实际查看你的模型在训练的各个阶段
and actually see how your model works
47
00:01:56,100 --> 00:01:57,990
-在训练的各个阶段,
+是如何工作的,
at various stages during training,
48
@@ -250,17 +250,17 @@ and it takes just a few arguments.
51
00:02:05,670 --> 00:02:08,250
-所以第一个参数是临时目录
+第一个参数是临时目录
So the first argument is the temporary directory
52
00:02:08,250 --> 00:02:10,260
-该文件将被保存到
+文件在上传到 Hub 之前
that files are going to be saved to
53
00:02:10,260 --> 00:02:12,150
-在将它们上传到 Hub 之前。
+将被保存到该目录。
before they're uploaded to the Hub.
54
@@ -280,12 +280,12 @@ is the keyword argument hub_model_id.
57
00:02:19,080 --> 00:02:21,330
-所以这就是它将被保存的名称
+也就是在 HuggingFace Hub 上
So that's the name it's going to be saved under
58
00:02:21,330 --> 00:02:23,006
-在 HuggingFace Hub 上。
+它将被保存的名称。
on the HuggingFace Hub.
59
@@ -295,12 +295,12 @@ You can also upload to an organization account
60
00:02:26,267 --> 00:02:29,370
-只需添加组织名称
+只需在带有斜杠的仓库名称之前
just by adding the organization name
61
00:02:29,370 --> 00:02:32,460
-在带有斜杠的存储库名称之前,就像这样。
+添加组织名称,就像这样。
before the repository name with a slash, like this.
62
@@ -315,17 +315,17 @@ to upload to the HuggingFace organization,
64
00:02:36,000 --> 00:02:37,170
-如果你这样做请提交错误
+如果你有权限可以上传,
if you do please file a bug
65
00:02:37,170 --> 00:02:38,973
-并非常紧急地通知我们。
+请提交 bug 并尽快通知我们。
and let us know extremely urgently.
66
00:02:40,830 --> 00:02:42,960
-但如果你确实有权访问你自己的组织,
+但如果你确实有权限访问你自己的组织,
But if you do have access to your own organization,
67
@@ -345,22 +345,22 @@ instead of to your own personal set of models.
70
00:02:50,760 --> 00:02:53,520
-所以,一旦你回电了,
+所以,一旦你实现了回调,
So, once you've made your callback,
71
00:02:53,520 --> 00:02:56,310
-你只需将它添加到回调列表
+你只需在调用 model.fit 时
you simply add it to the callbacks list
72
00:02:56,310 --> 00:02:58,080
-当你调用 model.fit 时。
+将它添加到回调列表。
when you're calling model.fit.
73
00:02:58,080 --> 00:03:01,110
-一切都从那里为你上传,
+所有内容均为从那里上传,
And everything is uploaded for you from there,
74
@@ -395,7 +395,7 @@ You can just call this manually whenever you want to
80
00:03:13,680 --> 00:03:15,240
-将模型上传到集线器。
+将模型上传到 hub。
upload a model to the hub.
81
@@ -405,37 +405,37 @@ So we recommend running this after the end of training,
82
00:03:18,949 --> 00:03:21,870
-只是为了确保你有一条提交消息
+只是为了确保你有一条 commit 消息
just to make sure that you have a commit message
83
00:03:21,870 --> 00:03:24,060
-保证这是最终版本
+保证这是训练结束时
to guarantee that this was the final version
84
00:03:24,060 --> 00:03:26,143
-训练结束时的模型。
+模型的最终版本。
of the model at the end of training.
85
00:03:26,143 --> 00:03:27,930
-它只是确保,你知道,
+它只是为了确保,你懂的,
And it just makes sure that, you know,
86
00:03:27,930 --> 00:03:30,480
-你正在使用最终的训练结束模型
+你当前正在使用的是最终训练结束的模型
you're working with the definitive end-of-training model
87
00:03:30,480 --> 00:03:32,190
-而不是不小心使用检查点
+而不是意外从某个地方拿到的
and not accidentally using a checkpoint
88
00:03:32,190 --> 00:03:34,224
-从沿途的某个地方。
+模型的某个存储点的版本。
from somewhere along the way.
89
@@ -455,7 +455,7 @@ just because training is going to take a couple of minutes.
92
00:03:43,080 --> 00:03:44,580
-所以我会跳到最后,
+所以我会直接跳到最后,
So I'll skip forward to the end of that,
93
@@ -465,17 +465,17 @@ when the models have all been uploaded,
94
00:03:46,320 --> 00:03:48,390
-我会告诉你怎么做
+我会告诉你
and I'm gonna show you how you can
95
00:03:48,390 --> 00:03:50,010
-访问 Hub 中的模型,
+如何访问 Hub 中的模型,
access the models in the Hub,
96
00:03:50,010 --> 00:03:52,713
-以及你可以从那里用它们做的其他事情。
+以及其他能够在那里利用模型做到的事情。
and the other things you can do with them from there.
97
@@ -505,17 +505,17 @@ So everything's looking good.
102
00:04:05,910 --> 00:04:09,960
-所以现在如果我们转到我在 HuggingFace 上的个人资料,
+那么现在如果我们转到我在 HuggingFace 上的个人资料,
So now if we drop over to my profile on HuggingFace,
103
00:04:09,960 --> 00:04:12,630
-你只需点击个人资料按钮就可以到达那里
+你只需点击 profile 按钮就可以
and you can get there just by clicking the profile button
104
00:04:12,630 --> 00:04:13,680
-在下拉列表中。
+在下拉列表中打开。
in the dropdown.
105
@@ -555,52 +555,52 @@ is the Glue CoLA dataset,
112
00:04:34,320 --> 00:04:36,210
-CoLA 是代表
+CoLA 是 Corpus of Linguistic Acceptability(语言可接受性语料库)
and CoLA is an acronym standing for
113
00:04:36,210 --> 00:04:39,420
-语言可接受性语料库。
+的首字母缩写。
the Corpus of Linguistic Acceptability.
114
00:04:39,420 --> 00:04:42,480
-所以这意味着正在训练模型来决定
+所以这意味着正在训练模型用来决定
So what that means is the model is being trained to decide
115
00:04:42,480 --> 00:04:46,350
-如果一个句子在语法或语言上没问题,
+一个句子在语法或语言上是正确的呢,
if a sentence is grammatically or linguistically okay,
116
00:04:46,350 --> 00:04:48,171
-或者它是否有问题。
+还是有问题的呢。
or if there's a problem with it.
117
00:04:48,171 --> 00:04:52,890
-例如,我们可以说,“这是一个合法的句子。”
+例如,我们可以说,“This is a legitimate sentence.”
For example, we could say, "This is a legitimate sentence."
118
00:04:52,890 --> 00:04:54,180
-希望它意识到
+并且希望它判断
And hopefully it realizes that
119
00:04:54,180 --> 00:04:56,080
-这实际上是一个合法的判决。
+这实际上是一个合理的句子。
this is in fact a legitimate sentence.
120
00:04:57,630 --> 00:05:00,240
-所以加载模型可能需要几秒钟
+所以当你第一次调用模型时,
So it might take a couple of seconds for the model to load
121
00:05:00,240 --> 00:05:03,060
-当你第一次调用它时。
+加载模型可能需要几秒钟。
when you call it for the first time.
122
@@ -615,7 +615,7 @@ Okay, we're back.
124
00:05:09,060 --> 00:05:12,407
-所以模型加载了,我们得到了一个输出,
+所以模型加载了,我们得到了一个输出结果,
So the model loaded and we got an output,
125
@@ -625,17 +625,17 @@ but there's an obvious problem here.
126
00:05:14,340 --> 00:05:16,888
-所以这些标签并没有真正告诉我们
+这些标签并没有真正告诉我们
So these labels aren't really telling us
127
00:05:16,888 --> 00:05:19,740
-模型实际分配了哪些类别
+模型实际为这个输入的句子
what categories the model has actually assigned
128
00:05:19,740 --> 00:05:21,655
-到这个输入句子。
+分配了哪些类别。
to this input sentence.
129
@@ -650,7 +650,7 @@ we want to make sure the model config
131
00:05:26,010 --> 00:05:28,980
-每个标签类别都有正确的名称,
+针对每个标签类别都有正确的名称,
has the correct names for each of the label classes,
132
@@ -660,7 +660,7 @@ and then we want to upload that config.
133
00:05:30,707 --> 00:05:32,220
-所以我们可以在这里做。
+所以我们可以在这里实现。
So we can do that down here.
134
@@ -675,7 +675,7 @@ we can get that from the dataset we loaded,
136
00:05:36,547 --> 00:05:39,627
-从它具有的特性属性。
+它其中包含特性属性。
from the features attribute it has.
137
@@ -690,7 +690,7 @@ And then we can create dictionaries
139
00:05:44,865 --> 00:05:47,452
-并将它们分配给模型配置。
+并将它们设置到模型配置中。
and just assign them to the model config.
140
@@ -700,7 +700,7 @@ And then we can just push our updated config,
141
00:05:50,790 --> 00:05:54,690
-这将覆盖 Hub 存储库中的现有配置。
+这将覆盖 Hub 仓库中的现有配置。
and that'll override the existing config in the Hub repo.
142
@@ -710,7 +710,7 @@ So that's just been done.
143
00:05:56,368 --> 00:05:58,320
-所以现在,如果我们回到这里,
+那么现在,如果我们回到这里,
So now, if we go back here,
144
@@ -725,7 +725,7 @@ because the outputs for sentences are sometimes cached.
146
00:06:03,540 --> 00:06:06,030
-所以,如果我们想产生新的结果
+所以,如果我们想生成新的结果
And so, if we want to generate new results
147
@@ -735,7 +735,7 @@ I'm going to use something slightly different.
148
00:06:07,590 --> 00:06:09,783
-因此,让我们尝试一个不正确的句子。
+那么,让我们尝试换一个不正确的句子。
So let's try an incorrect sentence.
149
@@ -745,7 +745,7 @@ So this is not valid English grammar
150
00:06:13,538 --> 00:06:15,030
-希望模型能看到这一点。
+希望模型能发现这一点。
and hopefully the model will see that.
151
@@ -755,12 +755,12 @@ It's going to reload here,
152
00:06:16,958 --> 00:06:18,630
-所以我要在这里缩短几秒钟,
+所以在这里稍微快几秒,
so I'm going to cut a couple of seconds here,
153
00:06:18,630 --> 00:06:20,933
-然后我们会看到模型会说什么。
+然后我们会看到模型会返回什么结果。
and then we'll see what the model is going to say.
154
@@ -770,12 +770,12 @@ Okay.
155
00:06:23,820 --> 00:06:26,580
-所以这个模型,它的信心不是很好,
+所以这个模型,它的置信度不是很好,
So the model, it's confidence isn't very good,
156
00:06:26,580 --> 00:06:28,830
-因为我们当然没有真正优化
+因为我们还没有真正优化
because of course we didn't really optimize
157
@@ -785,22 +785,22 @@ our hyperparameters at all.
158
00:06:30,630 --> 00:06:32,190
-但它决定了这句话
+但它返回的结果显示这句话
But it has decided that this sentence
159
00:06:32,190 --> 00:06:35,094
-不可接受的可能性大于可接受的可能性。
+不可接受的程度大于可接受的程度。
is more likely to be unacceptable than acceptable.
160
00:06:35,094 --> 00:06:38,160
-大概如果我们更努力地训练
+如果我们更努力地训练
Presumably if we tried a bit harder with training
161
00:06:38,160 --> 00:06:40,080
-我们可以获得更低的验证损失,
+我们可以获得更低的验证集 loss,
we could get a much lower validation loss,
162
@@ -835,12 +835,12 @@ So let's try, "This is a valid English sentence".
168
00:07:00,150 --> 00:07:02,100
-我们看到现在模型正确地决定了
+我们看到现在模型的结果是正确的
And we see that now the model correctly decides
169
00:07:02,100 --> 00:07:04,290
-它被接受的可能性非常高,
+它的可接受度非常高,
that it has a very high probability of being acceptable,
170
@@ -850,42 +850,42 @@ and a very low probability of being unacceptable.
171
00:07:06,900 --> 00:07:09,930
-所以你可以使用这个推理 API
+所以你可以使用这个 inference API
So you can use this inference API
172
00:07:09,930 --> 00:07:12,810
-即使有训练期间上传的检查点,
+甚至可用于训练期间上传的存储点,
even with the checkpoints that are uploaded during training,
173
00:07:12,810 --> 00:07:14,546
-所以看看如何
+能够看到在每个训练的 epoch 时
so it can be very interesting to see how
174
00:07:14,546 --> 00:07:17,690
-模型对样本输入的预测发生变化
+不同的样本输入所输出的预测结果
the model's predictions for sample inputs change
175
00:07:17,690 --> 00:07:20,579
-在每个训练阶段。
+也是非常有意思的。
with each epoch of training.
176
00:07:20,579 --> 00:07:23,370
-另外,我们上传的模型
+另外,你也可以访问
Also, the model we've uploaded
177
00:07:23,370 --> 00:07:25,740
-你将可以访问,并且
+我们上传的模型
is going to be accessible to you and,
178
00:07:25,740 --> 00:07:28,046
-如果公开分享给其他任何人。
+如果公开分享,其它任何人都可以访问。
if it's shared publicly, to anyone else.
179
@@ -895,17 +895,17 @@ So if you want to load that model,
180
00:07:29,788 --> 00:07:32,500
-你或其他任何人需要做的一切
+你或其他任何人所需要做的
all you or anyone else needs to do
181
00:07:34,290 --> 00:07:37,440
-只是将它加载到管道中,
+就是将它加载到 pipeline,
is just to load it in either a pipeline,
182
00:07:37,440 --> 00:07:40,925
-或者你可以加载它,例如,
+或者你可以使用其它方式加载它,例如,
or you can just load it with, for example,
183
@@ -915,12 +915,12 @@ TFAutoModelForSequenceClassification.
184
00:07:46,920 --> 00:07:49,989
-然后对于名称,你只需通过
+然后对于名称,你只需传入
And then for the name you would just simply pass
185
00:07:49,989 --> 00:07:53,325
-你要上传的存储库的路径。
+想要上传的 repo 的路径即可。
the path to the repo you want to upload.
186
@@ -935,12 +935,12 @@ So if I want to use this model again,
188
00:07:58,710 --> 00:08:00,667
-如果我想从集线器加载它,
+如果我想从 hub 加载它,
if I want to load it from the hub,
189
00:08:00,667 --> 00:08:01,763
-我只是运行这一行代码。
+仅需运行这一行代码。
I just run this one line of code.
190
@@ -965,42 +965,42 @@ or do anything else you wanna do.
194
00:08:14,340 --> 00:08:17,700
-所以这是对如何的快速概述,
+以上内容就是关于
So that was a quick overview of how,
195
00:08:17,700 --> 00:08:19,470
-在你训练之后或训练期间,
+在你训练期间或者训练之后
after your training or during your training,
196
00:08:19,470 --> 00:08:21,420
-你可以将模型上传到 Hub,
+如何将模型上传到 Hub,
you can upload models to the Hub,
197
00:08:21,420 --> 00:08:22,440
-你可以在那里检查站,
+可以添加存储点,
you can checkpoint there,
198
00:08:22,440 --> 00:08:24,240
-你可以从那里恢复训练,
+可以恢复训练,
you can resume training from there,
199
00:08:24,240 --> 00:08:26,790
-你可以得到推理结果
+以及从所上传模型
and you can get inference results
200
00:08:26,790 --> 00:08:28,384
-来自你上传的模型。
+获得推理结果。
from the models you've uploaded.
201
00:08:28,384 --> 00:08:31,084
-所以谢谢你,我希望在以后的视频中见到你。
+谢谢大家,希望在以后的视频再会。
So thank you, and I hope to see you in a future video.
202
diff --git a/subtitles/zh-CN/35_loading-a-custom-dataset.srt b/subtitles/zh-CN/35_loading-a-custom-dataset.srt
index fd3a794e2..7e6c8815f 100644
--- a/subtitles/zh-CN/35_loading-a-custom-dataset.srt
+++ b/subtitles/zh-CN/35_loading-a-custom-dataset.srt
@@ -20,8 +20,8 @@
5
00:00:08,430 --> 00:00:09,750
-尽管 Hugging Face Hub 主持
-Although the Hugging Face Hub hosts
+尽管 Hugging Face Hub 上承载了
+Although the HuggingFace Hub hosts
6
00:00:09,750 --> 00:00:11,730
@@ -30,27 +30,27 @@ over a thousand public datasets,
7
00:00:11,730 --> 00:00:12,930
-你经常需要处理数据
+你可能仍然需要经常处理存储在你的笔记本电脑
you'll often need to work with data
8
00:00:12,930 --> 00:00:15,900
-存储在你的笔记本电脑或某些远程服务器上。
+或存储在远程服务器上的数据。
that is stored on your laptop or some remote server.
9
00:00:15,900 --> 00:00:18,060
-在本视频中,我们将探讨数据集库如何
+在本视频中,我们将探讨如何利用 Datasets 库
In this video, we'll explore how the Datasets library
10
00:00:18,060 --> 00:00:20,310
-可用于加载不可用的数据集
+加载 Hugging Face Hub 以外
can be used to load datasets that aren't available
11
00:00:20,310 --> 00:00:21,510
-在 Hugging Face Hub 上。
+的数据集。
on the Hugging Face Hub.
12
@@ -75,22 +75,22 @@ To load a dataset in one of these formats,
16
00:00:31,200 --> 00:00:32,730
-你只需要提供格式的名称
+你只需要向 load_dataset 函数
you just need to provide the name of the format
17
00:00:32,730 --> 00:00:34,350
-到 load_dataset 函数,
+提供格式的名称,
to the load_dataset function,
18
00:00:34,350 --> 00:00:35,790
-连同 data_files 参数
+并且连同 data_files 参数一起传入
along with a data_files argument
19
00:00:35,790 --> 00:00:37,610
-指向一个或多个文件路径或 URL。
+该参数指向一个或多个文件路径或 URL。
that points to one or more filepaths or URLs.
20
@@ -105,7 +105,7 @@ In this example, we first download a dataset
22
00:00:45,960 --> 00:00:48,963
-关于来自 UCI 机器学习库的葡萄酒质量。
+该数据集是来自 UCI 机器学习库的葡萄酒质量数据。
about wine quality from the UCI machine learning repository.
23
@@ -150,7 +150,7 @@ so here we've also specified
31
00:01:06,750 --> 00:01:09,030
-分隔符是分号。
+分号作为分隔符。
that the separator is a semi-colon.
32
@@ -165,7 +165,7 @@ is loaded automatically as a DatasetDict object,
34
00:01:13,020 --> 00:01:15,920
-CSV 文件中的每一列都表示为一个特征。
+CSV 文件中的每一列都代表一个特征。
with each column in the CSV file represented as a feature.
35
@@ -175,7 +175,7 @@ If your dataset is located on some remote server like GitHub
36
00:01:20,280 --> 00:01:22,050
-或其他一些存储库,
+或其他一些数据仓库,
or some other repository,
37
@@ -205,12 +205,12 @@ This format is quite common in NLP,
42
00:01:35,100 --> 00:01:36,750
-你通常会找到书籍和戏剧
+你常常会发现书籍和戏剧
and you'll typically find books and plays
43
00:01:36,750 --> 00:01:39,393
-只是一个包含原始文本的文件。
+只是一个包含原始文本的独立文件。
are just a single file with raw text inside.
44
@@ -220,7 +220,7 @@ In this example, we have a text file of Shakespeare plays
45
00:01:43,020 --> 00:01:45,330
-存储在 GitHub 存储库中。
+存储在 GitHub 仓库中。
that's stored on a GitHub repository.
46
@@ -245,12 +245,12 @@ As you can see, these files are processed line-by-line,
50
00:01:55,110 --> 00:01:57,690
-所以原始文本中的空行也被表示
+所以原始文本中的空行
so empty lines in the raw text are also represented
51
00:01:57,690 --> 00:01:58,953
-作为数据集中的一行。
+也按照数据集中的一行表示。
as a row in the dataset.
52
@@ -270,12 +270,12 @@ where every row in the file is a separate JSON object.
55
00:02:09,510 --> 00:02:11,100
-对于这些文件,你可以加载数据集
+对于这些文件,你可以通过选择 JSON 加载脚本
For these files, you can load the dataset
56
00:02:11,100 --> 00:02:13,020
-通过选择 JSON 加载脚本
+来加载数据集
by selecting the JSON loading script
57
@@ -285,12 +285,12 @@ and pointing the data_files argument to the file or URL.
58
00:02:17,160 --> 00:02:19,410
-在这个例子中,我们加载了一个 JSON 行文件
+在这个例子中,我们加载了一个多行 JSON 的文件
In this example, we've loaded a JSON lines files
59
00:02:19,410 --> 00:02:21,710
-基于 Stack Exchange 问题和答案。
+其内容基于 Stack Exchange 问题和答案。
based on Stack Exchange questions and answers.
60
@@ -310,27 +310,27 @@ so the load_dataset function allow you to specify
63
00:02:31,200 --> 00:02:32,733
-要加载哪个特定密钥。
+要加载哪个特定关键词。
which specific key to load.
64
00:02:33,630 --> 00:02:35,910
-例如,用于问答的 SQuAD 数据集
+例如,用于问答的 SQuAD 数据集有它的格式,
For example, the SQuAD dataset for question and answering
65
00:02:35,910 --> 00:02:38,340
-有它的格式,我们可以通过指定来加载它
+我们可以通过指定我们感兴趣的数据字段
has its format, and we can load it by specifying
66
00:02:38,340 --> 00:02:40,340
-我们对数据字段感兴趣。
+我们对 data 字段感兴趣。
that we're interested in the data field.
67
00:02:41,400 --> 00:02:42,780
-最后一件事要提
+最后要和大家分享的内容是
There is just one last thing to mention
68
@@ -340,7 +340,7 @@ about all of these loading scripts.
69
00:02:44,910 --> 00:02:46,410
-你可以有不止一次分裂,
+你可以有不止一次数据切分,
You can have more than one split,
70
@@ -350,7 +350,7 @@ you can load them by treating data files as a dictionary,
71
00:02:49,080 --> 00:02:52,140
-并将每个拆分名称映射到其对应的文件。
+并将每个拆分的名称映射到其对应的文件。
and map each split name to its corresponding file.
72
@@ -360,22 +360,22 @@ Everything else stays completely unchanged
73
00:02:53,970 --> 00:02:55,350
-你可以看到一个加载的例子
+你可以看到一个例子,
and you can see an example of loading
74
00:02:55,350 --> 00:02:58,283
-此 SQuAD 的训练和验证拆分均在此处。
+加载此 SQuAD 的训练和验证分解步骤都在这里。
both the training and validation splits for this SQuAD here.
75
00:02:59,550 --> 00:03:02,310
-这样,你现在可以从笔记本电脑加载数据集,
+这样,你现在可以加载来自笔记本电脑的数据集,来自 Hugging Face Hub 的数据集,
And with that, you can now load datasets from your laptop,
76
00:03:02,310 --> 00:03:04,653
-Hugging Face Hub,或任何其他地方。
+或来自任何其他地方的数据集。
the Hugging Face Hub, or anywhere else want.
77
diff --git "a/subtitles/zh-CN/37_datasets-+-dataframes-=-\342\235\244\357\270\217.srt" "b/subtitles/zh-CN/37_datasets-+-dataframes-=-\342\235\244\357\270\217.srt"
index 2964fc8ab..383793324 100644
--- "a/subtitles/zh-CN/37_datasets-+-dataframes-=-\342\235\244\357\270\217.srt"
+++ "b/subtitles/zh-CN/37_datasets-+-dataframes-=-\342\235\244\357\270\217.srt"
@@ -15,7 +15,7 @@
4
00:00:05,340 --> 00:00:07,833
-- 数据集和数据帧等于爱。
+- 数据集加上数据帧等于真爱。
- Datasets and DataFrames equals love.
5
@@ -30,32 +30,32 @@ will cover most of the cases needed to train a model,
7
00:00:14,040 --> 00:00:15,660
-有时你需要切换到图书馆
+有时你需要切换到其它库
there are times when you'll need to switch to a library
8
00:00:15,660 --> 00:00:18,240
-像 Pandas 一样访问更强大的功能
+比如 Pandas 来获得更强大的功能
like Pandas to access more powerful features
9
00:00:18,240 --> 00:00:20,970
-或用于可视化的高级 API。
+或针对计算机视觉使用更高级的 API。
or high level APIs for visualization.
10
00:00:20,970 --> 00:00:23,220
-幸运的是,Datasets 库是专为
+幸运的是,Datasets 库是专门为了
Fortunately, the Datasets library is designed
11
00:00:23,220 --> 00:00:25,710
-与 Pandas 等库互操作,
+和外部库进行互操作所设计的,比如 Pandas
to be interoperable with libraries like Pandas,
12
00:00:25,710 --> 00:00:29,790
-以及 NumPy、PyTorch、TensorFlow 和 JAX。
+此外还有 NumPy、PyTorch、TensorFlow 和 JAX。
as well as NumPy, PyTorch, TensorFlow and JAX.
13
@@ -65,12 +65,12 @@ In this video, we'll take a look
14
00:00:30,930 --> 00:00:32,550
-我们如何快速切换数据
+我们如何将数据格式快速切换到 Pandas DataFrames
at how we can quickly switch our data
15
00:00:32,550 --> 00:00:34,263
-到 Pandas DataFrames 并返回。
+并且再切换回来。
to Pandas DataFrames and back.
16
@@ -85,12 +85,12 @@ Supreme Court cases from Switzerland.
18
00:00:40,830 --> 00:00:43,020
-像往常一样,我们从集线器下载我们的数据集
+像往常一样,我们使用 load_dataset 函数
As usual, we download our dataset from the hub
19
00:00:43,020 --> 00:00:44,940
-使用 load_dataset 函数。
+从 hub 下载我们的数据集。
using the load_dataset function.
20
@@ -100,12 +100,12 @@ And you can see that the first element of the training set
21
00:00:46,980 --> 00:00:48,510
-是一个普通的 Python 字典
+是一个普通的 Python 字典类型
is an ordinary Python dictionary
22
00:00:48,510 --> 00:00:50,110
-与各种兴趣领域。
+里面包含各种我们需要的字段。
with various fields of interest.
23
@@ -115,12 +115,12 @@ Now, suppose that before we train any models,
24
00:00:53,670 --> 00:00:55,590
-我们想稍微探索一下数据。
+我们想稍微浏览一下数据。
we'd like to explore the data a bit.
25
00:00:55,590 --> 00:00:57,390
-例如,我们可能有兴趣知道
+例如,我们可能希望知道
For example, we might be interested in knowing
26
@@ -135,17 +135,17 @@ or we might wanna know how the languages
28
00:01:01,380 --> 00:01:02,930
-分布在各个地区。
+在各个地区是如何分布的。
are distributed across regions.
29
00:01:04,500 --> 00:01:05,333
-回答这些问题
+使用原生 Arrow 类型
Answering these questions
30
00:01:05,333 --> 00:01:07,530
-使用原生 Arrow 格式并不容易,
+很难回答这些问题,
with the native Arrow format isn't easy,
31
@@ -155,7 +155,7 @@ but we can quickly switch to Pandas to get our answers.
32
00:01:10,500 --> 00:01:13,500
-它的工作方式是通过使用 set_format 方法,
+通过使用 set_format 方法即可实现,
The way this works is that by using the set_format method,
33
@@ -165,7 +165,7 @@ we will change the output format of the dataset
34
00:01:15,480 --> 00:01:18,930
-从 Python 字典到 Pandas DataFrame。
+从 Python 字典类型到 Pandas DataFrame 类型。
from Python dictionaries to Pandas DataFrames.
35
@@ -185,37 +185,37 @@ so we can slice the whole dataset
38
00:01:24,540 --> 00:01:26,583
-获取语料库的单个 DataFrame。
+来获取语料库的单个 DataFrame。
to get a single DataFrame of the corpus.
39
00:01:28,080 --> 00:01:29,520
-这在引擎盖下的工作方式,
+其底层工作原理
The way this works under the hood,
40
00:01:29,520 --> 00:01:31,080
-是数据集库发生了变化
+是 datasets 库改变了
is that the datasets library changes
41
00:01:31,080 --> 00:01:33,900
-数据集的神奇 __getitem__ 方法。
+数据集中神奇的 __getitem__ 方法。
the magic __getitem__ method of the dataset.
42
00:01:33,900 --> 00:01:35,640
-__getitem__ 方法是一种特殊的方法
+对于 Python 容器来说 __getitem__ 方法
The __getitem__ method is a special method
43
00:01:35,640 --> 00:01:37,320
-对于允许你的 Python 容器
+是一种特殊的方法,它允许你指定
for Python containers that allows you
44
00:01:37,320 --> 00:01:39,870
-指定索引的工作方式。
+以何种方式使用索引。
to specify how indexing works.
45
@@ -230,7 +230,7 @@ starts off by returning a Python dictionary
47
00:01:45,150 --> 00:01:47,520
-然后在应用 set_format 之后,
+然后在调用 set_format 之后,
and then after applying set_format,
48
@@ -240,17 +240,17 @@ we change __getitem__ to return DataFrames instead.
49
00:01:52,080 --> 00:01:54,690
-Datasets 库还提供了一个 to_pandas 方法
+如果你想做格式转换
The Datasets library also provides a to_pandas method
50
00:01:54,690 --> 00:01:56,250
-如果你想做格式转换
+并一次性对数据集进行切片
if you wanna do the format conversion
51
00:01:56,250 --> 00:01:58,113
-并一次性对数据集进行切片。
+Datasets 库还提供了一个 to_pandas 方法。
and slicing of the dataset in one go.
52
@@ -280,37 +280,37 @@ is that once you're done with your Pandas analysis,
57
00:02:10,830 --> 00:02:14,460
-你应该将输出格式重置回箭头表。
+你应该将输出格式重置回 Arrow 表。
you should reset the output format back to Arrow tables.
58
00:02:14,460 --> 00:02:16,350
-如果你不这样做,你可能会遇到问题
+如果不这样做,当你尝试词元化你的文本
If you don't, you can run into problems
59
00:02:16,350 --> 00:02:17,910
-如果你尝试标记化你的文本
+可能会遇到问题
if you try to tokenize your text
60
00:02:17,910 --> 00:02:19,260
-因为它不再代表
+因为它不再是字典中的
because it is no longer represented
61
00:02:19,260 --> 00:02:20,610
-作为字典中的字符串。
+字符串。
as strings in a dictionary.
62
00:02:21,750 --> 00:02:24,780
-通过重置输出格式,我们得到箭头表
+通过重置输出格式,我们得到 Arrow 表
By resetting the output format we get back Arrow tables
63
00:02:24,780 --> 00:02:26,580
-我们可以毫无问题地标记化。
+我们可以毫无顾虑地进行词元化。
and we can tokenize without problem.
64
diff --git a/subtitles/zh-CN/38_saving-and-reloading-a-dataset.srt b/subtitles/zh-CN/38_saving-and-reloading-a-dataset.srt
index 4039d68b0..d6e25801c 100644
--- a/subtitles/zh-CN/38_saving-and-reloading-a-dataset.srt
+++ b/subtitles/zh-CN/38_saving-and-reloading-a-dataset.srt
@@ -25,17 +25,17 @@ and explore the ways to reload the saved data.
6
00:00:17,310 --> 00:00:20,100
-下载数据集时,处理脚本和数据
+下载数据集时,所需的处理脚本和数据都会本地存储
When you download a dataset, the processing scripts and data
7
00:00:20,100 --> 00:00:22,470
-本地存储在你的计算机上。
+在你的计算机上。
are stored locally on your computer.
8
00:00:22,470 --> 00:00:24,000
-缓存允许数据集库
+缓存允许 Datasets 库
The cache allows the Datasets library
9
@@ -50,27 +50,27 @@ or processing the entire dataset every time you use it.
11
00:00:28,620 --> 00:00:31,170
-现在,数据以箭头表的形式存储
+现在,数据以 Arrow 表的形式存储
Now, the data is stored in the form of Arrow tables
12
00:00:31,170 --> 00:00:32,490
-可以找到谁的位置
+通过访问数据集的
whose location can be found
13
00:00:32,490 --> 00:00:35,730
-通过访问数据集的 cache_files 属性。
+cache_files 属性可以找到它的位置。
by accessing the dataset's cache_files attribute.
14
00:00:35,730 --> 00:00:38,430
-在这个例子中,我们下载了 allocine 数据集
+在这个例子中,我们从 Hugging Face Hub
In this example, we've downloaded the allocine dataset
15
00:00:38,430 --> 00:00:40,080
-来自 Hugging Face Hub,你可以看到
+下载了 allocine 数据集,你可以看到
from the Hugging Face Hub, and you can see
16
@@ -80,17 +80,17 @@ that there are three Arrow files
17
00:00:41,430 --> 00:00:43,473
-存储在缓存中,每个拆分一个。
+存储在缓存中,每个文件对应一个分片数据。
stored in the cache, one for each split.
18
00:00:45,360 --> 00:00:47,460
-但在很多情况下,你会想保存你的数据集
+但在很多情况下,你希望在不同的物理地址或者以不同的格式
But in many cases, you'll wanna save your dataset
19
00:00:47,460 --> 00:00:49,890
-在不同的位置或格式。
+保存你的数据集。
in a different location or format.
20
@@ -115,12 +115,12 @@ with the CSV and JSON formats, both of which are great
24
00:00:58,770 --> 00:01:00,810
-如果你只是想快速节省一小笔钱
+如果你只是想快速保存一个小规模
if you just wanna quickly save a small
25
00:01:00,810 --> 00:01:02,790
-或中型数据集。
+或中等规模的数据集。
or medium-sized dataset.
26
@@ -135,12 +135,12 @@ you'll wanna save it in either the Arrow or Parquet formats.
28
00:01:07,860 --> 00:01:09,660
-如果你打算重新加载,箭头文件很棒
+如果你打算重新加载或在不久的将来处理数据,
Arrow files are great if you plan to reload
29
00:01:09,660 --> 00:01:11,850
-或在不久的将来处理数据。
+Arrow 文件就很棒。
or process the data in the near future.
30
@@ -175,22 +175,22 @@ As you can see in this example,
36
00:01:26,910 --> 00:01:29,790
-我们只需提供我们希望将数据保存到的路径
+只需提供我们希望将数据保存到的路径
we simply provide the path we wish to save the data to
37
00:01:29,790 --> 00:01:30,720
-和数据集库
+然后 Datasets 库
and the Datasets library
38
00:01:30,720 --> 00:01:32,340
-会自动创建一个目录
+会针对每个分片数据自动创建一个目录
will automatically create a directory
39
00:01:32,340 --> 00:01:35,790
-对于每个拆分来存储箭头表和元数据。
+来存储 Arrow 表和元数据。
for each split to store the Arrow table and the metadata.
40
@@ -200,7 +200,7 @@ Since we're dealing with a dataset_dict object
41
00:01:37,680 --> 00:01:39,090
-有多个拆分,
+其中包含多个分片数据,
that has multiple splits,
42
@@ -215,7 +215,7 @@ in the dataset_dict.json file.
44
00:01:44,250 --> 00:01:46,710
-现在,当我们想要重新加载 Arrow 数据集时,
+现在,当想要重新加载 Arrow 数据集时,
Now, when we wanna reload the Arrow datasets,
45
@@ -225,12 +225,12 @@ we use the load_from_disk function.
46
00:01:48,870 --> 00:01:51,210
-我们只需传递数据集目录的路径,
+只需传递数据集目录的路径,
We simply pass the path of our dataset directory,
47
00:01:51,210 --> 00:01:53,583
-瞧,原始数据集已恢复。
+啊瞧,原始数据集已恢复。
and voila, the original dataset is recovered.
48
@@ -250,7 +250,7 @@ In this case, you'll need to loop
51
00:02:02,280 --> 00:02:04,170
-在 dataset_dict 对象的拆分上
+dataset_dict 对象的分片数据
over the splits of the dataset_dict object
52
@@ -270,12 +270,12 @@ you can pass keyword arguments to configure the output.
55
00:02:13,980 --> 00:02:16,230
-在这个例子中,我们设置了索引参数
+在这个例子中,我们将索引参数设置为 None
In this example, we've set the index argument
56
00:02:16,230 --> 00:02:18,480
-为 None 以防止数据集的索引列
+以防止数据集的索引列
to None to prevent the dataset's index column
57
@@ -290,7 +290,7 @@ To reload our CSV files,
59
00:02:24,240 --> 00:02:27,180
-然后我们就使用熟悉的 load_dataset 函数
+就使用熟悉的 load_dataset 函数
we just then use the familiar load_dataset function
60
@@ -305,7 +305,7 @@ and the data_files argument,
62
00:02:30,360 --> 00:02:34,020
-它指定与每个拆分关联的文件名。
+它指定与每个分片数据关联的文件名。
which specifies the file names associated with each split.
63
@@ -315,7 +315,7 @@ As you can see in this example,
64
00:02:35,400 --> 00:02:37,320
-通过提供所有拆分及其文件名,
+通过提供所有分片数据及其文件名,
by providing all the splits and their file names,
65
@@ -330,7 +330,7 @@ Now, to save a dataset in the JSON
67
00:02:43,560 --> 00:02:46,710
-或 Parquet 格式与 CSV 的情况非常相似。
+或保存为 Parquet 格式与 CSV 的情况非常相似。
or Parquet formats is very similar to the CSV case.
68
@@ -345,7 +345,7 @@ or the to_parquet function for Parquet ones.
70
00:02:52,740 --> 00:02:55,740
-就像 CSV 案例一样,我们需要遍历拆分
+就像 CSV 案例一样,我们需要遍历分片数据
And just like the CSV case, we need to loop over the splits
71
@@ -365,7 +365,7 @@ we can reload them again
74
00:03:03,990 --> 00:03:06,960
-使用 load_dataset 函数中的适当脚本。
+使用 load_dataset 函数中的合适的脚本。
with the appropriate script in the load_dataset function.
75
@@ -380,7 +380,7 @@ This example shows
77
00:03:11,910 --> 00:03:14,560
-我们如何以任何一种格式重新加载我们的保存数据集。
+我们如何以任何一种格式重新加载我们保存的数据集。
how we can reload our save datasets in either format.
78
diff --git a/subtitles/zh-CN/39_memory-mapping-&-streaming.srt b/subtitles/zh-CN/39_memory-mapping-&-streaming.srt
index e39a21f86..5c8f58909 100644
--- a/subtitles/zh-CN/39_memory-mapping-&-streaming.srt
+++ b/subtitles/zh-CN/39_memory-mapping-&-streaming.srt
@@ -15,7 +15,7 @@
4
00:00:05,640 --> 00:00:07,203
-- 内存映射和流。
+- 内存映射和流式数据。
- Memory mapping and streaming.
5
@@ -30,22 +30,22 @@ at two core features of the Datasets library
7
00:00:11,520 --> 00:00:14,220
-允许你加载和处理庞大的数据集
+在不耗尽笔记本电脑的 CPU 资源的前提下
that allow you to load and process huge datasets
8
00:00:14,220 --> 00:00:16,263
-而不会炸毁笔记本电脑的 CPU。
+允许你加载和处理庞大的数据集。
without blowing up your laptop's CPU.
9
00:00:18,300 --> 00:00:20,280
-如今,发现自己并不罕见
+如今,工作上处理多达数个 GB 体量的数据集
Nowadays, it's not uncommon to find yourself
10
00:00:20,280 --> 00:00:22,950
-使用多 GB 大小的数据集,
+已经不是什么新鲜事了,
working with multi-GB sized datasets,
11
@@ -55,12 +55,12 @@ especially if you're planning to pretrain
12
00:00:24,420 --> 00:00:28,110
-从头开始像 BERT 或 GPT-2 这样的转换器。
+类似 BERT 或 GPT-2 这样的 transformer。
a transformer like BERT or GPT-2 from scratch.
13
00:00:28,110 --> 00:00:31,260
-在这些情况下,即使加载数据也可能是一个挑战。
+在这些场景下,即使加载数据也可能是一个挑战。
In these cases, even loading the data can be a challenge.
14
@@ -95,12 +95,12 @@ Arrow is designed for high-performance data processing
20
00:00:49,110 --> 00:00:51,360
-并代表每个类似表格的数据集
+并代表每个类似表格的
and represents each table-like dataset
21
00:00:51,360 --> 00:00:52,773
-使用基于列的格式。
+基于列格式的数据集。
with a column-based format.
22
@@ -110,12 +110,12 @@ As you can see in this example, column-based formats
23
00:00:56,130 --> 00:00:59,280
-将表格的元素分组到连续的 RAM 块中
+将表格的元素分组缓存到连续的 RAM 块中
group the elements of a table in consecutive blocks of RAM
24
00:00:59,280 --> 00:01:01,563
-这解锁了快速访问和处理。
+这实现了快速访问和处理。
and this unlocks fast access and processing.
25
@@ -130,7 +130,7 @@ but some datasets are so large
27
00:01:07,110 --> 00:01:09,600
-你甚至不能把它们放在你的硬盘上。
+你甚至不能把它们完全放在你的硬盘上。
that you can't even fit them on your hard disk.
28
@@ -145,7 +145,7 @@ a streaming API that allows you to progressively download
30
00:01:14,820 --> 00:01:17,700
-原始数据一次一个元素。
+可以每次下载原始数据的一个元素。
the raw data one element at a time.
31
@@ -155,7 +155,7 @@ The result is a special object called an IterableDataset
32
00:01:20,430 --> 00:01:22,180
-我们很快就会看到更多细节。
+我们接下来就会看到更多细节。
that we'll see in more detail soon.
33
@@ -165,12 +165,12 @@ Let's start by looking at why Arrow is so powerful.
34
00:01:26,670 --> 00:01:28,860
-第一个特点是它处理每个数据集
+第一个特点是它将每个数据集
The first feature is that it treats every dataset
35
00:01:28,860 --> 00:01:30,153
-作为内存映射文件。
+作为内存映射文件处理。
as a memory-mapped file.
36
@@ -200,7 +200,7 @@ to access segments of an extremely large file
41
00:01:41,280 --> 00:01:44,080
-无需先将整个文件读入内存。
+而无需先将整个文件读入内存。
without having to read the whole file into memory first.
42
@@ -220,7 +220,7 @@ to work with the same large dataset
45
00:01:51,840 --> 00:01:54,333
-不以任何方式移动或复制它。
+而无需以任何方式移动或复制它。
without moving it or copying it in any way.
46
@@ -235,17 +235,17 @@ makes it extremely fast for iterating over a dataset.
48
00:02:00,600 --> 00:02:02,640
-这个例子,你可以看到我们迭代
+这个例子,你可以看到我们使用
And this example, you can see that we iterate
49
00:02:02,640 --> 00:02:05,160
-大约一分钟内超过 1500 万行
+普通的笔记本电脑在一分钟之内迭代
over 15 million rows in about a minute
50
00:02:05,160 --> 00:02:06,780
-仅使用标准笔记本电脑。
+大约超过 1500 万行数据。
just using a standard laptop.
51
@@ -260,12 +260,12 @@ Let's now take a look at how we can stream a large dataset.
53
00:02:12,660 --> 00:02:14,520
-你需要做的唯一更改是设置
+你需要做的唯一修改是
The only change you need to make is to set
54
00:02:14,520 --> 00:02:17,910
-load_dataset () 函数中的 streaming=True 参数。
+设置 load_dataset () 函数中的 streaming=True 参数。
the streaming=True argument in the load_dataset () function.
55
@@ -295,12 +295,12 @@ which means we can't index it to access elements,
60
00:02:28,530 --> 00:02:30,180
-但相反我们迭代它
+但相反我们使用 iter
but instead we iterate on it
61
00:02:30,180 --> 00:02:32,850
-使用 iter 和 next 方法。
+和 next 方法迭代它。
using the iter and next methods.
62
@@ -320,7 +320,7 @@ which means you can progressively iterate
65
00:02:37,410 --> 00:02:40,360
-通过庞大的数据集,而无需先下载它。
+庞大的数据集,而无需提前下载它。
through a huge dataset without having to download it first.
66
@@ -345,7 +345,7 @@ and then apply the map () method with the tokenizer.
70
00:02:49,830 --> 00:02:53,283
-要获得第一个标记化示例,我们应用 iter 和 next。
+要获得第一个词元化示例,我们应用 iter 和 next。
To get the first tokenized example, we apply iter and next.
71
@@ -355,12 +355,12 @@ The main difference with an IterableDataset is that
72
00:02:57,210 --> 00:02:59,970
-而不是使用 select () 方法返回示例,
+并未使用 select () 方法返回示例,
instead of using a select () method to return examples,
73
00:02:59,970 --> 00:03:01,530
-我们使用 take () 和 skip () 方法
+而是使用 take () 和 skip () 方法
we use the take () and skip () methods
74
diff --git a/subtitles/zh-CN/40_uploading-a-dataset-to-the-hub.srt b/subtitles/zh-CN/40_uploading-a-dataset-to-the-hub.srt
index 860785521..563602e72 100644
--- a/subtitles/zh-CN/40_uploading-a-dataset-to-the-hub.srt
+++ b/subtitles/zh-CN/40_uploading-a-dataset-to-the-hub.srt
@@ -5,7 +5,7 @@
2
00:00:05,490 --> 00:00:07,950
-- 将数据集上传到中心。
+- 将数据集上传到 hub。
- Uploading a dataset to the hub.
3
@@ -30,7 +30,7 @@ The first thing you need to do
7
00:00:14,670 --> 00:00:17,400
-是在集线器上创建一个新的数据集存储库。
+是在 hub 上创建一个新的数据集仓库。
is create a new dataset repository on the hub.
8
@@ -40,7 +40,7 @@ So, just click on your profile icon
9
00:00:19,260 --> 00:00:21,750
-并选择新建数据集按钮。
+并选择 New Dataset 按钮。
and select the New Dataset button.
10
@@ -50,17 +50,17 @@ Next, we need to assign an owner of the dataset.
11
00:00:24,750 --> 00:00:26,970
-默认情况下,这将是你的中心帐户,
+默认情况下,所有者是你的 hub 帐户,
By default, this will be your hub account,
12
00:00:26,970 --> 00:00:28,170
-但你也可以创建数据集
+但你也可以
but you can also create datasets
13
00:00:28,170 --> 00:00:30,585
-在你所属的任何组织下。
+以你所属的组织的名义创建数据集。
under any organization that you belong to.
14
@@ -80,12 +80,12 @@ Public datasets can be accessed by anyone
17
00:00:39,810 --> 00:00:41,670
-而私人数据集只能被访问
+而私人数据集只能
while private datasets can only be accessed
18
00:00:41,670 --> 00:00:43,653
-由你或你的组织成员。
+允许你或你的组织成员访问。
by you or members of your organization.
19
@@ -95,7 +95,7 @@ And with that, we can go ahead and create the dataset.
20
00:00:48,690 --> 00:00:51,060
-现在你在集线器上有一个空的数据集存储库,
+现在你在 hub 上有一个空的数据集仓库,
Now that you have an empty dataset repository on the hub,
21
@@ -110,17 +110,17 @@ You can do this with git,
23
00:00:55,050 --> 00:00:57,960
-但最简单的方法是选择上传文件按钮。
+但最简单的方法是选择 Upload file 按钮。
but the easiest way is by selecting the Upload file button.
24
00:00:57,960 --> 00:00:59,160
-然后,你可以继续
+然后,你可以继续下一步
And then, you can just go ahead
25
00:00:59,160 --> 00:01:02,243
-并直接从你的机器上传文件。
+直接从你的机器上传文件。
and upload the files directly from your machine.
26
@@ -130,12 +130,12 @@ After you've uploaded your files,
27
00:01:03,846 --> 00:01:05,670
-你会看到它们出现在存储库中
+你会在 Files and versions 选项卡下
you'll see them appear in the repository
28
00:01:05,670 --> 00:01:07,320
-在文件和版本选项卡下。
+看到它们出现在仓库中。
under the Files and versions tab.
29
@@ -145,27 +145,27 @@ The last step is to create a dataset card.
30
00:01:11,370 --> 00:01:13,590
-记录良好的数据集更有用
+对其他人来说,归档良好的数据集貌似更有用,
Well-documented datasets are more likely to be useful
31
00:01:13,590 --> 00:01:15,600
-给其他人,因为他们提供了决定的背景
+因为他们提供了影响决策的上下文信息
to others as they provide the context to decide
32
00:01:15,600 --> 00:01:17,370
-数据集是否相关
+包括数据集是否与需求相关
whether the dataset is relevant
33
00:01:17,370 --> 00:01:18,450
-或者有没有偏见
+或者有没有误差
or whether there are any biases
34
00:01:18,450 --> 00:01:20,673
-或与使用数据集相关的风险。
+或使用该数据可能遇到的风险。
or risks associated with using the dataset.
35
@@ -175,12 +175,12 @@ On the Hugging Face Hub,
36
00:01:22,710 --> 00:01:25,650
-此信息存储在每个存储库的自述文件中。
+此信息存储在每个仓库的 README 文件中。
this information is stored in each repositories README file.
37
00:01:25,650 --> 00:01:27,988
-你应该采取两个主要步骤。
+你需要执行两个主要步骤。
There are two main steps that you should take.
38
@@ -190,27 +190,27 @@ First, you need to create some metadata
39
00:01:30,651 --> 00:01:32,010
-这将允许你的数据集
+这将允许其他人在 hub 上
that will allow your dataset
40
00:01:32,010 --> 00:01:34,590
-其他人可以在集线器上轻松找到。
+轻松找到你的数据集。
to be easily found by others on the hub.
41
00:01:34,590 --> 00:01:35,670
-你可以创建此元数据
+你可以使用数据集标记应用程序
You can create this metadata
42
00:01:35,670 --> 00:01:37,860
-使用数据集标记应用程序,
+创建此元数据,
using the datasets tagging application,
43
00:01:37,860 --> 00:01:40,620
-我们将在视频说明中链接到它。
+我们将在视频说明信息中包含它的链接。
which we'll link to in the video description.
44
@@ -230,12 +230,12 @@ and we provide a template
47
00:01:45,240 --> 00:01:47,090
-我们还将在视频中链接到。
+相关链接也会包含在下面的视频信息内容中。
that we'll also link to in the video.
48
00:01:48,480 --> 00:01:50,280
-一旦你的数据集在集线器上,
+一旦你的数据集在 hub 上,
And once your dataset is on the hub,
49
@@ -245,12 +245,12 @@ you can load it using the trusty load_dataset function.
50
00:01:53,400 --> 00:01:55,015
-只需提供你的存储库的名称
+只需提供你的仓库的名称
Just provide the name of your repository
51
00:01:55,015 --> 00:01:57,843
-和一个 data_files 参数,你就可以开始了。
+和一个 data_files 参数,你就可以开始使用了。
and a data_files argument, and you're good to go.
52
diff --git a/subtitles/zh-CN/41_text-embeddings-&-semantic-search.srt b/subtitles/zh-CN/41_text-embeddings-&-semantic-search.srt
index 0b8958068..4c43f0e18 100644
--- a/subtitles/zh-CN/41_text-embeddings-&-semantic-search.srt
+++ b/subtitles/zh-CN/41_text-embeddings-&-semantic-search.srt
@@ -20,17 +20,17 @@ represent text as embedding vectors
5
00:00:12,810 --> 00:00:15,420
-以及如何使用这些向量来查找相似文档
+以及在语料库中如何使用这些向量
and how these vectors can be used to find similar documents
6
00:00:15,420 --> 00:00:16,293
-在语料库中。
+来查找相似文档。
in a corpus.
7
00:00:17,730 --> 00:00:19,890
-文本嵌入只是一种奇特的说法
+文本嵌入只是一种时髦的说法
Text embeddings are just a fancy way of saying
8
@@ -40,7 +40,7 @@ that we can represent text as an array of numbers
9
00:00:22,170 --> 00:00:23,640
-称为矢量。
+称之为矢量。
called a vector.
10
@@ -65,12 +65,12 @@ to the encoder and get three vectors as the output.
14
00:00:34,830 --> 00:00:37,050
-读课文,我们可以看到遛狗
+读一下输入文本,我们可以看到 walking the dog
Reading the text, we can see that walking the dog
15
00:00:37,050 --> 00:00:39,450
-好像跟遛猫最像,
+和 walking the cat 从字面上感觉很像,
seems to be most similar to walking the cat,
16
@@ -85,12 +85,12 @@ The trick to do the comparison
18
00:00:44,040 --> 00:00:45,630
-是计算相似性度量
+是在每对嵌入向量之间
is to compute a similarity metric
19
00:00:45,630 --> 00:00:48,210
-在每对嵌入向量之间。
+计算相似性度量。
between each pair of embedding vectors.
20
@@ -100,12 +100,12 @@ These vectors usually live in a very high-dimensional space,
21
00:00:51,120 --> 00:00:53,190
-所以相似性度量可以是任何可以衡量的东西
+所以相似性度量可以是任何可用于
so a similarity metric can be anything that measures
22
00:00:53,190 --> 00:00:55,740
-矢量之间的某种距离。
+衡量矢量之间的某种距离的属性。
some sort of distance between vectors.
23
@@ -125,7 +125,7 @@ to measure how close they are.
26
00:01:02,610 --> 00:01:05,250
-在这个例子中,我们的嵌入向量存在于 3D 中
+在这个例子中,我们的嵌入向量存在于三维空间中
In this example, our embedding vectors live in 3D
27
@@ -135,7 +135,7 @@ and we can see that the orange and Grey vectors
28
00:01:07,110 --> 00:01:09,560
-彼此靠近并且具有较小的角度。
+彼此靠近并且具有更小的角度。
are close to each other and have a smaller angle.
29
@@ -150,12 +150,12 @@ is that Transformer models like BERT will actually return
31
00:01:15,180 --> 00:01:16,983
-每个标记一个嵌入向量。
+每个词元一个嵌入向量。
one embedding vector per token.
32
00:01:17,880 --> 00:01:20,700
-例如在句子中,“我带我的狗去散步,”
+例如在句子中,“I took my dog for a walk,”
For example in the sentence, "I took my dog for a walk,"
33
@@ -180,58 +180,58 @@ and each vector has 384 dimensions.
37
00:01:33,750 --> 00:01:36,210
-但我们真正想要的是一个单一的嵌入向量
+但我们真正想要的是对于每个句子
But what we really want is a single embedding vector
38
00:01:36,210 --> 00:01:37,353
-对于每个句子。
+对应一个单一的嵌入向量。
for each sentence.
39
00:01:38,940 --> 00:01:42,060
-为了解决这个问题,我们可以使用一种称为池化的技术。
+为了解决这个问题,我们可以使用一种称为 pooling 的技术。
To deal with this, we can use a technique called pooling.
40
00:01:42,060 --> 00:01:43,050
-最简单的池化方法
+最简单的 pooling 方法
The simplest pooling method
41
00:01:43,050 --> 00:01:44,520
-就是把令牌嵌入
+就是把词元嵌入
is to just take the token embedding
42
00:01:44,520 --> 00:01:46,203
-特殊的 CLS 令牌。
+特殊的 CLS 词元。
of the special CLS token.
43
00:01:47,100 --> 00:01:49,650
-或者,我们可以对令牌嵌入进行平均
+或者,我们可以对词元嵌入进行平均
Alternatively, we can average the token embeddings
44
00:01:49,650 --> 00:01:52,500
-这就是所谓的均值池,这就是我们在这里所做的。
-which is called mean pooling and this is what we do here.
+这就是所谓的 mean_pooling,也就是我们在这里所做的。
+which is called mean_pooling and this is what we do here.
45
00:01:53,370 --> 00:01:55,800
-使用均值池是我们唯一需要确保的事情
-With mean pooling the only thing we need to make sure
+使用 mean_pooling 时我们唯一需要确保的事情
+With mean_pooling the only thing we need to make sure
46
00:01:55,800 --> 00:01:58,410
-是我们不在平均值中包含填充标记,
+是我们不在平均值中包含 padding 词元,
is that we don't include the padding tokens in the average,
47
00:01:58,410 --> 00:02:01,860
-这就是为什么你可以看到这里使用的注意力掩码。
-which is why you can see the attention mask being used here.
+这就是为什么你可以看到这里用到了 attention_mask。
+which is why you can see the attention_mask being used here.
48
00:02:01,860 --> 00:02:05,100
@@ -250,12 +250,12 @@ And once we have our sentence embeddings,
51
00:02:09,810 --> 00:02:11,730
-我们可以计算余弦相似度
+我们可以针对每对向量
we can compute the cosine similarity
52
00:02:11,730 --> 00:02:13,113
-对于每对向量。
+计算余弦相似度。
for each pair of vectors.
53
@@ -265,12 +265,12 @@ In this example we use the function from scikit-learn
54
00:02:16,350 --> 00:02:19,140
-你可以看到 “I tok my dog for a walk” 这句话
+你可以看到 “I took my dog for a walk” 这句话
and you can see that the sentence "I took my dog for a walk"
55
00:02:19,140 --> 00:02:22,140
-确实与 “我带我的猫去散步” 有很强的重叠。
+确实与 “I took my cat for a walk” 有很明显的重叠。
has indeed a strong overlap with "I took my cat for a walk".
56
@@ -285,22 +285,22 @@ We can actually take this idea one step further
58
00:02:27,180 --> 00:02:29,220
-通过比较问题之间的相似性
+通过比较问题和文档语料库
by comparing the similarity between a question
59
00:02:29,220 --> 00:02:31,170
-和文档语料库。
+之间的相似性。
and a corpus of documents.
60
00:02:31,170 --> 00:02:33,810
-例如,假设我们嵌入每个帖子
+例如,假设我们在 Hugging Face 论坛中
For example, suppose we embed every post
61
00:02:33,810 --> 00:02:35,430
-在 Hugging Face 论坛中。
+嵌入每个帖子。
in the Hugging Face forums.
62
@@ -325,12 +325,12 @@ because it allows us to compare queries with context.
66
00:02:47,040 --> 00:02:48,450
-创建语义搜索引擎
+使用 datasets 库
To create a semantic search engine
67
00:02:48,450 --> 00:02:51,030
-在数据集库中其实很简单。
+创建语义搜索引擎其实很简单。
is actually quite simple in the datasets library.
68
@@ -340,22 +340,22 @@ First we need to embed all the documents.
69
00:02:53,340 --> 00:02:56,070
-在这个例子中,我们取了一个小样本
+在这个例子中,我们取了
And in this example, we take a small sample
70
00:02:56,070 --> 00:02:57,780
-来自 SQUAD 数据集并应用
-from the SQUAD dataset and apply
+一个来自 squad 数据集的小样本
+from the squad dataset and apply
71
00:02:57,780 --> 00:03:00,180
-与以前相同的嵌入逻辑。
+并按照与以前相同的嵌入逻辑使用。
the same embedding logic as before.
72
00:03:00,180 --> 00:03:02,280
-这为我们提供了一个名为嵌入的新列,
+这为我们提供了一个名为 embeddings 的新列,
This gives us a new column called embeddings,
73
@@ -370,12 +370,12 @@ Once we have our embeddings,
75
00:03:07,260 --> 00:03:10,200
-我们需要一种方法来为查询找到最近的邻居。
+我们需要一种方法来为查询找到最近的相邻数据。
we need a way to find nearest neighbors for a query.
76
00:03:10,200 --> 00:03:13,170
-数据集库提供了一个名为 FAISS 的特殊对象
+datasets 库提供了一个名为 FAISS 的特殊对象
The datasets library provides a special object called FAISS
77
@@ -395,7 +395,7 @@ we've now found the 3 most similar articles
80
00:03:21,870 --> 00:03:23,320
-这可能会存储答案。
+其中可能会包含答案。
which might store the answer.
81
diff --git a/subtitles/zh-CN/42_training-a-new-tokenizer.srt b/subtitles/zh-CN/42_training-a-new-tokenizer.srt
index 2b0d28498..9b8bb0032 100644
--- a/subtitles/zh-CN/42_training-a-new-tokenizer.srt
+++ b/subtitles/zh-CN/42_training-a-new-tokenizer.srt
@@ -10,7 +10,7 @@
3
00:00:08,700 --> 00:00:11,820
-训练分词器的目的是什么,
+训练 tokenizer 的目的是什么,
what is the purpose of training a tokenizer,
4
@@ -30,7 +30,7 @@ You will ask yourself the question,
7
00:00:20,677 --> 00:00:23,040
-“我应该训练一个新的分词器吗?”,
+“我应该训练一个新的 tokenizer 吗?”,
"Should I train a new tokenizer?",
8
@@ -40,37 +40,37 @@ when you plan to train a new model from scratch.
9
00:00:29,520 --> 00:00:34,020
-训练有素的分词器不适合你的语料库
+一个训练过的分词器会不适合你的语料库
A trained tokenizer would not be suitable for your corpus
10
00:00:34,020 --> 00:00:37,080
-如果你的语料库使用不同的语言,
+如果你的语料库使用一个不同的语言,
if your corpus is in a different language,
11
00:00:37,080 --> 00:00:42,060
-使用新字符,例如重音符号或大写字母,
+使用新字符,比如重音符号或大写字母,
uses new characters, such as accents or upper cased letters,
12
00:00:42,060 --> 00:00:47,060
-有特定的词汇,例如医学或法律,
+有特定的词汇,例如医学的或法律的,
has a specific vocabulary, for example medical or legal,
13
00:00:47,100 --> 00:00:49,050
-或使用不同的风格,
+或使用一个不同的风格,
or uses a different style,
14
00:00:49,050 --> 00:00:51,873
-例如,来自另一个世纪的语言。
+例如,来自另一个世纪时的语言。
a language from another century for example.
15
00:00:56,490 --> 00:00:58,320
-如果我接受训练的分词器
+如果我让 tokenizer 训练在
If I take the tokenizer trained on
16
@@ -85,22 +85,22 @@ and ignore its normalization step,
18
00:01:04,260 --> 00:01:07,650
-然后我们可以看到标记化操作
+然后我们就能看到 tokenization 操作
then we can see that the tokenization operation
19
00:01:07,650 --> 00:01:09,277
-关于英语句子,
+在英语句子上,
on the English sentence,
20
00:01:09,277 --> 00:01:12,480
-“这是一个适合我们分词器的句子”,
+“这是一个适合我们 tokenizer 的句子”,
"Here is a sentence adapted to our tokenizer",
21
00:01:12,480 --> 00:01:15,600
-产生一个相当令人满意的令牌列表,
+产生一个相当令人满意的 token 列表,
produces a rather satisfactory list of tokens,
22
@@ -110,12 +110,12 @@ in the sense that this sentence of eight words
23
00:01:18,510 --> 00:01:20,643
-被标记为九个标记。
+被标记成了九个 token 。
is tokenized into nine tokens.
24
00:01:22,920 --> 00:01:26,340
-另一方面,如果我使用相同的分词器
+另一方面,如果我使用相同的 tokenizer
On the other hand, if I use this same tokenizer
25
@@ -125,37 +125,37 @@ on a sentence in Bengali, we see that
26
00:01:29,370 --> 00:01:33,690
-要么一个词被分成许多子标记,
+要么一个词被分成许多子 token ,
either a word is divided into many sub tokens,
27
00:01:33,690 --> 00:01:36,270
-或者分词器不知道其中之一
+或者 tokenizer 不知道任何一个
or that the tokenizer does not know one of
28
00:01:36,270 --> 00:01:39,873
-unicode 字符并仅返回未知标记。
+unicode 字符并仅返回未知 token 。
the unicode characters and returns only an unknown token.
29
00:01:41,220 --> 00:01:44,970
-一个常用词被分成许多标记的事实
+一个常用词被分成许多 token 的事实
The fact that a common word is split into many tokens
30
00:01:44,970 --> 00:01:47,910
-可能会有问题,因为语言模型
+可能是问题的,因为语言模型
can be problematic, because language models
31
00:01:47,910 --> 00:01:51,903
-只能处理有限长度的令牌序列。
+只能处理有限长度的 token 序列。
can only handle a sequence of tokens of limited length.
32
00:01:52,830 --> 00:01:55,830
-过度拆分初始文本的分词器
+过度拆分初始文本的 tokenizer
A tokenizer that excessively splits your initial text
33
@@ -165,7 +165,7 @@ may even impact the performance of your model.
34
00:01:59,760 --> 00:02:02,280
-未知的令牌也有问题,
+未知的 token 也有问题,
Unknown tokens are also problematic,
35
@@ -185,17 +185,17 @@ In this other example, we can see that
38
00:02:13,440 --> 00:02:17,100
-分词器替换包含字符的单词
+tokenizer 替换包含字符的单词
the tokenizer replaces words containing characters
39
00:02:17,100 --> 00:02:20,973
-带有重音和带有未知标记的大写字母。
+带有重音和带有未知 token 的大写字母。
with accents and capital letters with unknown tokens.
40
00:02:22,050 --> 00:02:24,770
-最后,如果我们再次使用这个分词器
+最后,如果我们再次使用这个 tokenizer
Finally, if we use again this tokenizer
41
@@ -205,32 +205,32 @@ to tokenize medical vocabulary, we see again that
42
00:02:28,170 --> 00:02:31,800
-一个单词被分成许多子标记,
+一个单词被分成许多子 token ,
a single word is divided into many sub tokens,
43
00:02:31,800 --> 00:02:34,803
-四个用于扑热息痛,四个用于咽炎。
+四个用于 "paracetamol" ,四个用于 "pharyngitis" 。
four for paracetamol, and four for pharyngitis.
44
00:02:37,110 --> 00:02:39,360
-当前使用的大多数分词器
+目前的大多数 tokenizer 被
Most of the tokenizers used by the current
45
00:02:39,360 --> 00:02:42,540
-需要训练最先进的语言模型
+最先进的语言模型使用的, 需要被训练
state of the art language models need to be trained
46
00:02:42,540 --> 00:02:45,360
-在与使用的语料库相似的语料库上
+在语料库上, 其与使用的语料库如要相似于
on a corpus that is similar to the one used
47
00:02:45,360 --> 00:02:47,463
-预训练语言模型。
+预训练语言模型的。
to pre-train the language model.
48
@@ -250,12 +250,12 @@ And the way to learn these rules and use them
51
00:02:56,160 --> 00:02:58,233
-取决于所选的分词器模型。
+取决于所选的 tokenizer 模型。
depends on the chosen tokenizer model.
52
00:03:00,630 --> 00:03:04,590
-因此,要训练一个新的分词器,首先需要
+因此,要训练一个新的 tokenizer ,首先需要
Thus, to train a new tokenizer, it is first necessary
53
@@ -265,7 +265,7 @@ to build a training corpus composed of raw texts.
54
00:03:08,910 --> 00:03:12,423
-然后,你必须为你的分词器选择一种架构。
+然后,你必须为你的 tokenizer 选择一种结构。
Then, you have to choose an architecture for your tokenizer.
55
@@ -275,12 +275,12 @@ Here there are two options.
56
00:03:15,900 --> 00:03:19,710
-最简单的是重用与那个相同的架构
+最简单的是重用与那个结构, 其相同于
The simplest is to reuse the same architecture as the one
57
00:03:19,710 --> 00:03:22,863
-另一个已经训练过的模型使用的分词器。
+另一个已经训练过的模型使用的 tokenizer 。
of a tokenizer used by another model already trained.
58
@@ -290,22 +290,22 @@ Otherwise it is also possible
59
00:03:25,980 --> 00:03:28,560
-完全设计你的分词器。
+彻底设计你的分词器。
to completely design your tokenizer.
60
00:03:28,560 --> 00:03:31,683
-但这需要更多的经验和关注。
+但这需要更多的经验和观察。
But it requires more experience and attention.
61
00:03:33,750 --> 00:03:36,660
-一旦选择了架构,你就可以
+一旦选择了结构,你就可以
Once the architecture is chosen, you can thus
62
00:03:36,660 --> 00:03:39,513
-在你构成的语料库上训练这个分词器。
+在你构建的语料库上训练这个 tokenizer 。
train this tokenizer on your constituted corpus.
63
@@ -315,7 +315,7 @@ Finally, the last thing that you need to do is to save
64
00:03:43,440 --> 00:03:46,443
-能够使用此分词器的学习规则。
+能够使用此 tokenizer 的学习规则。
the learned rules to be able to use this tokenizer.
65
@@ -340,7 +340,7 @@ this type of text is very specific,
69
00:04:02,386 --> 00:04:04,473
-并值得一个训练有素的分词器。
+并值得一个训练过的 tokenizer 。
and deserves a tokenizer trained on it.
70
@@ -360,12 +360,12 @@ For that we are going to use the method
73
00:04:13,747 --> 00:04:18,240
-“train_new_from_iterator”,所有快速分词器
+“train_new_from_iterator”,所有快速的 tokenizer
"train_new_from_iterator" that all the fast tokenizers
74
00:04:18,240 --> 00:04:20,040
-图书馆有,因此,
+在库中有的,因此,
of the library have and thus,
75
@@ -380,7 +380,7 @@ This is the simplest method in our case
77
00:04:26,100 --> 00:04:28,983
-有一个适合 Python 代码的分词器。
+有一个适合 Python 代码的 tokenizer 。
to have a tokenizer adapted to Python code.
78
@@ -450,12 +450,12 @@ on our Python functions corpus, we can load
91
00:05:09,630 --> 00:05:12,351
-GPT-2 分词器架构。
+GPT-2 分词器结构。
the GPT-2 tokenizer architecture.
92
00:05:12,351 --> 00:05:16,560
-这里 old_tokenizer 不适应我们的语料库。
+这里 old_tokenizer 不适合我们的语料库。
Here old_tokenizer is not adapted to our corpus.
93
@@ -470,12 +470,12 @@ one more line to train it on our new corpus.
95
00:05:21,780 --> 00:05:24,720
-大多数标记化的共同论点
+有一点很普遍的是大多数 分词化
An argument that is common to most of the tokenization
96
00:05:24,720 --> 00:05:28,980
-目前使用的算法是词汇表的大小。
+算法, 目前使用的是根据词汇表的大小。
algorithms used at the moment is the size of the vocabulary.
97
@@ -490,12 +490,12 @@ Finally, once the training is finished,
99
00:05:35,760 --> 00:05:38,850
-我们只需要在本地保存我们的新分词器,
+我们只需要在本地保存我们的新 tokenizer ,
we just have to save our new tokenizer locally,
100
00:05:38,850 --> 00:05:41,730
-或将其发送到集线器以便能够重用它
+或将其发送到 hub 以便能够重用它
or send it to the hub to be able to reuse it
101
@@ -510,12 +510,12 @@ Finally, let's see together on an example if it was useful
103
00:05:48,990 --> 00:05:53,073
-重新训练一个类似于 GPT-2 的分词器。
+重新训练一个类似于 GPT-2 的 tokenizer 。
to re-train a tokenizer similar to GPT-2 one.
104
00:05:55,110 --> 00:05:57,660
-使用 GPT-2 的原始分词器
+使用 GPT-2 的原始 tokenizer
With the original tokenizer of GPT-2
105
@@ -525,12 +525,12 @@ we see that all spaces are isolated,
106
00:06:00,330 --> 00:06:01,920
-和方法名称 randn,
+和方法名称 "randn",
and the method name randn,
107
00:06:01,920 --> 00:06:04,833
-在 Python 代码中比较常见,分为两部分。
+在 Python 代码中相对比较常见,分为两部分。
relatively common in Python code, is split in two.
108
@@ -540,12 +540,12 @@ With our new tokenizer, single and double indentations
109
00:06:09,060 --> 00:06:10,890
-已经学习和方法 randn
+已经学习和方法 "randn"
have been learned and the method randn
110
00:06:10,890 --> 00:06:13,770
-被代币化为一个代币。
+被分词化为一个 token 。
is tokenized into one token.
111
diff --git a/subtitles/zh-CN/43_why-are-fast-tokenizers-called-fast.srt b/subtitles/zh-CN/43_why-are-fast-tokenizers-called-fast.srt
index 26a06bbaf..2e113cf9c 100644
--- a/subtitles/zh-CN/43_why-are-fast-tokenizers-called-fast.srt
+++ b/subtitles/zh-CN/43_why-are-fast-tokenizers-called-fast.srt
@@ -5,7 +5,7 @@
2
00:00:05,340 --> 00:00:08,460
-- 为什么快速分词器被称为快速?
+- 为什么快速 tokenizer 被称 "快速"?
- Why are fast tokenizers called fast?
3
@@ -15,12 +15,12 @@ In this video, we'll see exactly how much faster,
4
00:00:10,950 --> 00:00:13,800
-另外,比较了所谓的快速组织者
+另外,所谓的快速 tokenizer 被比较
also, so-called fast organizers are compared
5
00:00:13,800 --> 00:00:15,153
-给他们慢的同行。
+和他们慢的参照物。
to their slow counterparts.
6
@@ -40,12 +40,12 @@ We'll see how long it takes for the fast and slow versions
9
00:00:25,890 --> 00:00:28,143
-一个 BERT 分词器来处理它们。
+一个 BERT tokenizer 来处理它们。
of a BERT tokenizer to process them all.
10
00:00:29,670 --> 00:00:31,380
-我们定义我们的快速和慢速令牌组织者
+我们定义我们的快速和慢速的 tokenizer
We define our fast and slow token organizer
11
@@ -55,37 +55,37 @@ using the AutoTokenizer API.
12
00:00:33,717 --> 00:00:37,110
-快速分词器在可用时是默认的。
+快速 tokenizer 在可用时是默认的。
The fast tokenizer is a default when available.
13
00:00:37,110 --> 00:00:40,443
-所以我们通过,使用_fast=False 来定义慢速的。
+所以我们通过设置 use_fast=False 来定义成慢速。
So we pass along, use_fast=False to define the slow one.
14
00:00:41,430 --> 00:00:43,530
-在笔记本中,我们可以为执行计时
+在笔记本中,我们可以计时执行
In a notebook, we can time the execution
15
00:00:43,530 --> 00:00:46,800
-本身带有时间魔法命令,就像这样。
+让其本身附带时间魔术命令,就像这样。
of itself with a time magic command, like this.
16
00:00:46,800 --> 00:00:49,350
处理整个数据集快四倍
-Processing the whole data set is four times faster
+Processing the whole dataset is four times faster
17
00:00:49,350 --> 00:00:50,970
-使用快速分词器。
+使用快速 tokenizer 。
with a fast tokenizer.
18
00:00:50,970 --> 00:00:54,000
-确实更快,但不是很令人印象深刻。
+确实更快,但不够吸引人。
That quicker indeed, but not very impressive.
19
@@ -95,22 +95,22 @@ This is because we passed along the texts
20
00:00:55,380 --> 00:00:57,240
-一次一个到分词器。
+一次一个到 tokenizer 。
to the tokenizer one at a time.
21
00:00:57,240 --> 00:00:59,730
-这是快速组织者的常见错误
+这是快速 tokenizer 的常见错误
This is a common mistake to do with fast organizers
22
00:00:59,730 --> 00:01:02,550
-由 Rust 支持,因此能够确定优先级
+由 Rust 支持,因此能够确定优先化
which are backed by Rust, and thus able to prioritize
23
00:01:02,550 --> 00:01:05,370
-多个文本的标记化。
+多个文本的 tokenization 。
the tokenization of multiple texts.
24
@@ -130,7 +130,7 @@ with just one container, it's very inefficient.
27
00:01:13,140 --> 00:01:15,810
-为了释放我们快速分词器的全部速度,
+为了释放我们快速 tokenizer 的全部速度,
To unleash the full speed of our fast tokenizers,
28
@@ -145,41 +145,41 @@ with the batched=True argument of the map method.
30
00:01:22,620 --> 00:01:25,950
-现在这些都是令人印象深刻的结果,所以快速分词器
+现在这些都是令人印象深刻的结果,所以快速 tokenizer
Now those are impressive results, so the fast tokenizer
31
00:01:25,950 --> 00:01:28,410
-处理需要 4 秒的数据集需要 12 秒
+需要 12 秒处理, 而需要 4
takes 12 second to process the dataset that takes four
32
00:01:28,410 --> 00:01:30,093
-分钟到慢分词器。
+分钟, 对于慢速 tokenizer 。
minute to the slow tokenizer.
33
00:01:31,440 --> 00:01:33,510
-总结此表中的结果,
+结果总结于此表中,
Summarizing the results in this table,
34
00:01:33,510 --> 00:01:36,630
-你可以看到为什么我们快速调用这些分词器。
+你可以看到为什么我们称 tokenizer 为快速。
you can see why we have called those tokenizers fast.
35
00:01:36,630 --> 00:01:38,760
-这仅用于标记化文本。
+这仅用于分词化文本。
And this is only for tokenizing texts.
36
00:01:38,760 --> 00:01:40,710
-如果你需要训练一个新的分词器,
+如果你需要训练一个新的 tokenizer ,
If you ever need to train a new tokenizer,
37
00:01:40,710 --> 00:01:42,523
-他们也很快做到这一点。
+它们也很快做到这一点。
they do this very quickly too.
diff --git a/subtitles/zh-CN/44_fast-tokenizer-superpowers.srt b/subtitles/zh-CN/44_fast-tokenizer-superpowers.srt
index 70ea63f74..f008cfb0c 100644
--- a/subtitles/zh-CN/44_fast-tokenizer-superpowers.srt
+++ b/subtitles/zh-CN/44_fast-tokenizer-superpowers.srt
@@ -1,16 +1,16 @@
1
00:00:05,010 --> 00:00:06,270
-- 快速分词器
+- 快速 tokenizer
- The fast tokenizers
2
00:00:06,270 --> 00:00:08,580
-变形金刚图书馆的速度很快,
+在 transformers 库中的, 速度很快,
of the Transformers library are fast,
3
00:00:08,580 --> 00:00:11,490
-但他们也实现了非常有用的功能
+同时他们也实现了非常有用的功能
but they also implement features that will be super useful
4
@@ -30,7 +30,7 @@ First, let's have a look
7
00:00:18,650 --> 00:00:21,690
-在分词器的通常输出中。
+在 tokenizer 的通常输出中。
at the usual output of a tokenizer.
8
@@ -50,7 +50,7 @@ For instance,
11
00:00:29,010 --> 00:00:31,856
-这里两个句子的标记化是相同的
+这里两个句子的分词化是相同的
here the tokenization is the same for the two sentences
12
@@ -65,17 +65,17 @@ Just having the input IDs is thus not enough
14
00:00:39,150 --> 00:00:42,330
-如果我们想将一些标记与一段文本相匹配,
+如果我们想将一些 token 与一段文本相匹配,
if we want to match some tokens with a span of text,
15
00:00:42,330 --> 00:00:43,320
-我们需要做的事情
+我们将需要做的事情
something we'll need to do
16
00:00:43,320 --> 00:00:46,111
-例如,在处理问题回答时。
+例如,在处理问答时。
when tackling question answering, for instance.
17
@@ -85,23 +85,23 @@ It's also difficult to know
18
00:00:47,592 --> 00:00:50,850
-当两个标记是否属于同一个词时。
+当两个 token 是否属于同一个词时。
when two tokens belong to the same word or not.
19
00:00:50,850 --> 00:00:52,860
-当你只看输出时看起来很容易
+是容易的, 当你只看
It looks easy when you just look at the output
20
00:00:52,860 --> 00:00:55,650
-一个 BERT 分词器,我们只需要看一下
+一个 BERT 分词器的输出,我们只需要看一下
of a BERT tokenizer where we just need to look
21
00:00:55,650 --> 00:00:56,779
-对于散列散列。
-for the hash hash.
+对于 ## 。
+for the ##.
22
00:00:56,779 --> 00:00:59,040
@@ -110,7 +110,7 @@ But other tokenizers have different ways
23
00:00:59,040 --> 00:01:00,987
-标记部分单词。
+分词化部分单词。
to tokenize parts of words.
24
@@ -120,7 +120,7 @@ For instance, RoBERTa adds this special G symbol
25
00:01:04,470 --> 00:01:06,491
-在单词的开头标记标记
+在单词的开头 token 标记
to mark the tokens at the beginning of the word
26
@@ -135,12 +135,12 @@ for the same purpose.
28
00:01:11,150 --> 00:01:14,760
-值得庆幸的是,快速分词器会跟踪这个词
+值得庆幸的是,快速 tokenizer 会跟踪这个词
Thankfully, the fast tokenizers keep track of the word
29
00:01:14,760 --> 00:01:16,230
-每个令牌来自,
+每个 token 来自,
each token comes from,
30
@@ -155,22 +155,22 @@ The output is not necessarily clear,
32
00:01:21,870 --> 00:01:24,076
-但像这样聚集在一张漂亮的桌子上,
+但像这样聚集在一张漂亮的表格上,
but assembled together in a nice table like this,
33
00:01:24,076 --> 00:01:26,853
-我们可以查看每个标记的单词位置。
+我们可以查看每个 token 的单词位置。
we can look at the word position for each token.
34
00:01:27,930 --> 00:01:30,220
-更好的是,快速标记器会跟踪
+更好的是,快速 tokenizer 会跟踪
Even better, the fast tokenizers keep track
35
00:01:30,220 --> 00:01:33,198
-每个标记来自的字符范围,
+每个 token 来自的字符范围,
of the span of characters each token comes from,
36
@@ -180,7 +180,7 @@ and we can get them when calling it on one
37
00:01:35,760 --> 00:01:37,221
-或通过添加几个文本
+或几个文本通过添加
or several text by adding
38
@@ -190,13 +190,13 @@ the return_offsets_mapping=True argument.
39
00:01:40,470 --> 00:01:42,312
-在这种情况下,我们可以看到我们是如何跳仓的
+在这种情况下,我们可以看到我们是如何变换位置的
In this instance, we can see how we jump positions
40
00:01:42,312 --> 00:01:45,650
-在 hash hash token 和 super token 之间,
-between the hash hash token and the super token,
+在 ## token 和 super token 之间,
+between the ## token and the super token,
41
00:01:45,650 --> 00:01:49,992
@@ -205,7 +205,7 @@ because of the multiple spaces in the initial sentence.
42
00:01:49,992 --> 00:01:52,110
-为了实现这一点,快速分词器
+为了实现这一点,快速 tokenizer
To enable this, the fast tokenizers
43
@@ -215,27 +215,27 @@ store additional information at each step
44
00:01:54,270 --> 00:01:55,440
-他们的内部管道。
+他们的内部管线( pipeline )。
of their internal pipeline.
45
00:01:55,440 --> 00:01:57,951
-该内部管道包括规范化,
+该内部管线包括规范化,
That internal pipeline consists of normalization,
46
00:01:57,951 --> 00:02:00,360
-我们对文本进行一些清洁,
+我们对文本进行一些整理,
where we apply some cleaning to the text,
47
00:02:00,360 --> 00:02:02,621
-喜欢小写或删除口音;
+比如小写或删除口音;
like lower casing or removing the accents;
48
00:02:02,621 --> 00:02:04,088
-预标记化,
+预分词化,
pre-tokenization,
49
@@ -245,12 +245,12 @@ which is where we split the texts into words;
50
00:02:06,530 --> 00:02:09,360
-然后我们应用分词器的模型,
+然后我们应用 tokenizer 的模型,
then we apply the model of the tokenizer,
51
00:02:09,360 --> 00:02:11,725
-这是单词被分成标记的地方,
+这是单词被分成 token 的地方,
which is where the words are split into tokens,
52
@@ -260,22 +260,22 @@ before finally doing the post processing,
53
00:02:13,748 --> 00:02:16,023
-添加特殊标记的地方。
+添加特殊 token 的地方。
where special tokens are added.
54
00:02:17,100 --> 00:02:19,050
-从管道的开始到结束,
+从管线的开始到结束,
From the beginning to the end of the pipeline,
55
00:02:19,050 --> 00:02:21,390
-标记器跟踪每个文本范围
+tokenizer 跟踪每个文本范围
the tokenizer keeps track of each span of text
56
00:02:21,390 --> 00:02:23,853
-对应于每个单词,然后是每个标记。
+对应于每个单词,然后是每个 token 。
that corresponds to each word, then each token.
57
@@ -295,12 +295,12 @@ when doing masked language modeling
60
00:02:29,549 --> 00:02:32,407
-一种获得最先进结果的变体
+一种获得最 SOTA 的变体
one variation that gets state-of-the-art results
61
00:02:32,407 --> 00:02:35,040
-是屏蔽给定单词的所有标记
+是屏蔽给定单词的所有 token
is to mask all the tokens of a given word
62
@@ -325,7 +325,7 @@ we'll need to convert the labels we have on words,
66
00:02:45,090 --> 00:02:47,250
-每个标记上的标签。
+每个 token 上的标签。
to labels on each tokens.
67
@@ -340,7 +340,7 @@ it will be super useful when we need to convert
69
00:02:50,610 --> 00:02:53,436
-将句子中的标记位置转换为一段文本,
+将句子中的 token 位置转换为一段文本,
token positions in a sentence into a span of text,
70
@@ -350,17 +350,17 @@ which we'll need to know when we're looking
71
00:02:55,800 --> 00:02:56,813
-在回答问题时
+在问答时
at question answering
72
00:02:56,813 --> 00:02:58,680
-或者在对相应的标记进行分组时
+或者在对相应的 token 进行分组时
or when grouping the tokens corresponding
73
00:02:58,680 --> 00:03:01,023
-到令牌分类中的同一实体。
+到 token 分类中的同一实体。
to the same entity in token classification.
74
diff --git a/subtitles/zh-CN/45_inside-the-token-classification-pipeline-(pytorch).srt b/subtitles/zh-CN/45_inside-the-token-classification-pipeline-(pytorch).srt
index 4f9310845..22106ec0e 100644
--- a/subtitles/zh-CN/45_inside-the-token-classification-pipeline-(pytorch).srt
+++ b/subtitles/zh-CN/45_inside-the-token-classification-pipeline-(pytorch).srt
@@ -20,27 +20,27 @@
5
00:00:06,210 --> 00:00:08,283
-在令牌分类管道内。
+在 token 分类管线( pipeline )内。
inside the token classification pipeline.
6
00:00:10,080 --> 00:00:11,580
-在管道视频中,
+在有关管线视频中,
In the pipeline video,
7
00:00:11,580 --> 00:00:13,320
-我们研究了不同的应用
+我们学习了不同的应用
we looked at the different applications
8
00:00:13,320 --> 00:00:15,960
-Transformers 库支持开箱即用,
+transformers 库支持开箱即用的,
the Transformers library supports out of the box,
9
00:00:15,960 --> 00:00:18,780
-其中之一是令牌分类,
+其中之一是 token 分类,
one of them being token classification,
10
@@ -55,17 +55,17 @@ whether they correspond to a person, an organization
12
00:00:24,510 --> 00:00:25,353
-或位置。
+或一个位置。
or a location.
13
00:00:26,670 --> 00:00:28,920
-我们甚至可以将相应的标记组合在一起
+我们甚至可以将相应的 token 组合在一起
We can even group together the tokens corresponding
14
00:00:28,920 --> 00:00:32,040
-到同一个实体,例如所有令牌
+到同一个实体,例如所有 token
to the same entity, for instance all the tokens
15
@@ -75,12 +75,12 @@ that formed the word Sylvain here, or Hugging and Face.
16
00:00:37,290 --> 00:00:40,230
-令牌分类管道的工作方式相同
+ token 分类管线的工作方式相同
The token classification pipeline works the same way
17
00:00:40,230 --> 00:00:42,630
-作为我们研究的文本分类管道
+和我们研究的文本分类的管线
as the text classification pipeline we studied
18
@@ -95,7 +95,7 @@ There are three steps.
20
00:00:45,930 --> 00:00:49,623
-标记化、模型和后处理。
+分词化、模型和后处理。
The tokenization, the model, and the postprocessing.
21
@@ -105,12 +105,12 @@ The first two steps are identical
22
00:00:52,530 --> 00:00:54,630
-到文本分类管道,
+到文本分类管线,
to the text classification pipeline,
23
00:00:54,630 --> 00:00:57,300
-除了我们使用自动标记分类模型
+除了我们使用 auto (自动) 的 token 分类模型
except we use an auto token classification model
24
@@ -120,7 +120,7 @@ instead of a sequence classification one.
25
00:01:00,150 --> 00:01:03,720
-我们标记我们的文本,然后将其提供给模型。
+我们分词化我们的文本,然后将其提供给模型。
We tokenize our text then feed it to the model.
26
@@ -140,13 +140,13 @@ for each of the possible nine labels
29
00:01:10,770 --> 00:01:13,983
-对于句子中的每个标记,此处为 19。
+对于句子中的每个 token ,此处为 19。
for every token in the sentence, here 19.
30
00:01:15,300 --> 00:01:18,090
-与 Transformers 库的所有其他模型一样,
-Like all the other models of the Transformers library,
+与 transformers 库的所有其他模型一样,
+Like all the other models of the transformers library,
31
00:01:18,090 --> 00:01:19,830
@@ -155,12 +155,12 @@ our model outputs logits,
32
00:01:19,830 --> 00:01:23,073
-我们使用 SoftMax 将其转化为预测。
+我们使用 SoftMax 将其转化为预测值。
which we turn into predictions by using a SoftMax.
33
00:01:23,940 --> 00:01:26,190
-我们还获得了每个标记的预测标签
+我们还获得了每个 token 的预测标签
We also get the predicted label for each token
34
@@ -195,7 +195,7 @@ in its id2label field.
40
00:01:37,740 --> 00:01:41,430
-使用它,我们可以将每个标记映射到其相应的标签。
+使用它,我们可以将每个 token 映射到其相应的标签。
Using it, we can map every token to its corresponding label.
41
@@ -250,7 +250,7 @@ if you don't know about them already.
51
00:02:00,300 --> 00:02:02,280
-然后,遍历每个标记
+然后,遍历每个 token
Then, looping through each token
52
@@ -265,12 +265,12 @@ we can build the list of results we got
54
00:02:06,120 --> 00:02:07,320
-用我们的第一条管道。
+用我们的第一条管线。
with our first pipeline.
55
00:02:08,460 --> 00:02:10,560
-最后一步是将标记组合在一起
+最后一步是将 token 组合在一起
The last step is to group together tokens
56
@@ -290,7 +290,7 @@ I-PER and B-PER, for instance.
59
00:02:18,450 --> 00:02:20,100
-它让我们知道一个令牌是否是
+它让我们知道一个 token 是否是
It allows us to know if a token is
60
@@ -305,7 +305,7 @@ Note, that there are two ways of labeling used
62
00:02:25,350 --> 00:02:26,850
-用于令牌分类。
+用于 token 分类。
for token classification.
63
diff --git a/subtitles/zh-CN/46_inside-the-token-classification-pipeline-(tensorflow).srt b/subtitles/zh-CN/46_inside-the-token-classification-pipeline-(tensorflow).srt
index e216a08ff..6cab3657c 100644
--- a/subtitles/zh-CN/46_inside-the-token-classification-pipeline-(tensorflow).srt
+++ b/subtitles/zh-CN/46_inside-the-token-classification-pipeline-(tensorflow).srt
@@ -10,12 +10,12 @@
3
00:00:06,143 --> 00:00:08,133
-在令牌分类管道内。
+在 token 分类管线(pipeline)内。
inside the token classification pipeline.
4
00:00:09,780 --> 00:00:11,430
-在管道视频中,
+在有关管线的视频中,
In the pipeline video,
5
@@ -25,12 +25,12 @@ we looked at the different applications
6
00:00:13,230 --> 00:00:16,050
-Transformers 库支持开箱即用。
-the Transformers library supports out of the box.
+transformers 库支持开箱即用的。
+the transformers library supports out of the box.
7
00:00:16,050 --> 00:00:18,660
-其中之一是令牌分类。
+其中之一是 token 分类。
One of them being token classification.
8
@@ -50,7 +50,7 @@ an organization, or location.
11
00:00:27,690 --> 00:00:29,250
-我们甚至可以将令牌组合在一起
+我们甚至可以将 token 组合在一起
We can even group together the tokens
12
@@ -60,7 +60,7 @@ corresponding to the same entity.
13
00:00:31,320 --> 00:00:34,890
-例如,这里构成单词 Sylvain 的所有标记
+例如,这里构成单词 Sylvain 的所有 token
For instance, all the tokens that form the word Sylvain here
14
@@ -70,12 +70,12 @@ or Hugging and Face.
15
00:00:37,320 --> 00:00:39,720
-因此,令牌分类管道
+因此,token 分类管线
So, token classification pipeline
16
00:00:39,720 --> 00:00:42,480
-与文本分类管道的工作方式相同
+与文本分类管线的工作方式相同
works the same way as a text classification pipeline
17
@@ -90,7 +90,7 @@ There are three steps.
19
00:00:46,500 --> 00:00:50,043
-标记化、模型和后处理。
+分词化、模型和后处理。
Tokenization, the model, and the post processing.
20
@@ -105,17 +105,17 @@ to the text classification pipeline,
22
00:00:55,230 --> 00:00:58,230
-除了我们使用自动标记分类模型
+除了我们使用 auto 的 token 分类模型
except we use an auto token classification model
23
00:00:58,230 --> 00:01:00,303
-而不是序列分类。
+而不是分类。
instead of a sequence classification one.
24
00:01:01,560 --> 00:01:04,593
-我们标记我们的文本,然后将其提供给模型。
+我们分词化我们的文本,然后将其提供给模型。
We tokenize our text, then feed it to the model.
25
@@ -135,7 +135,7 @@ we get one number for each of the possible nine levels
28
00:01:12,270 --> 00:01:14,250
-对于句子中的每个标记。
+对于句子中的每个 token 。
for every token in the sentence.
29
@@ -145,12 +145,12 @@ Here, 19.
30
00:01:17,070 --> 00:01:19,710
-与 Transformers 库的所有其他模型一样,
-Like all the other models of the Transformers library,
+与 transformers 库的所有其他模型一样,
+Like all the other models of the transformers library,
31
00:01:19,710 --> 00:01:22,560
-我们的模型输出我们需要转换的逻辑
+我们的模型输出我们需要转换的 logits
our model outputs logits which we need to turn
32
@@ -160,7 +160,7 @@ into predictions by using a SoftMax.
33
00:01:25,830 --> 00:01:28,170
-我们还获得了每个标记的预测标签
+我们还获得了每个 token 的预测标签
We also get the predicted label for each token
34
@@ -195,12 +195,12 @@ in its id2label field.
40
00:01:42,090 --> 00:01:45,600
-使用它,我们可以将每个标记映射到其相应的标签。
+使用它,我们可以将每个 token 映射到其相应的标签。
Using it, we can map every token to its corresponding label.
41
00:01:45,600 --> 00:01:48,630
-标签 O 对应 “无实体”
+标签 O 对应 “no entity” (没有实体)
The label O corresponds to "no entity"
42
@@ -235,7 +235,7 @@ We'll need to use the offset mapping
48
00:01:59,880 --> 00:02:01,110
-分词器得到那些。
+对于 tokenizer 以得到那些。
of the tokenizer to get those.
49
@@ -250,7 +250,7 @@ if you don't know about them already.
51
00:02:05,340 --> 00:02:06,990
-然后,遍历每个标记
+然后,遍历每个 token
Then, looping through each token
52
@@ -265,12 +265,12 @@ we can build the list of results
54
00:02:10,590 --> 00:02:12,140
-我们得到了我们的第一条管道。
+我们得到了我们的第一条管线。
we got with our first pipeline.
55
00:02:13,650 --> 00:02:15,840
-最后一步是将标记组合在一起
+最后一步是将 token 组合在一起
The last step is to group together tokens
56
@@ -290,7 +290,7 @@ I-PER and B-PER for instance.
59
00:02:23,940 --> 00:02:25,530
-它让我们知道一个令牌是否
+它让我们知道一个 token 是否
It allows us to know if a token
60
@@ -305,7 +305,7 @@ Note that there are two ways
62
00:02:29,850 --> 00:02:32,490
-用于标记分类的标签。
+用于 token 分类的标签。
of labeling used for token classification.
63
diff --git a/subtitles/zh-CN/47_inside-the-question-answering-pipeline-(pytorch).srt b/subtitles/zh-CN/47_inside-the-question-answering-pipeline-(pytorch).srt
index 5ce8d0e78..69ebc63b6 100644
--- a/subtitles/zh-CN/47_inside-the-question-answering-pipeline-(pytorch).srt
+++ b/subtitles/zh-CN/47_inside-the-question-answering-pipeline-(pytorch).srt
@@ -1,21 +1,21 @@
1
00:00:04,230 --> 00:00:07,699
-- 让我们来看看问答管道的内部情况。
+- 让我们来看看问答管线的内部情况。
- Let's have a look inside the question answering pipeline.
2
00:00:07,699 --> 00:00:10,680
-问答管道可以提取答案
+问答管线可以提取答案
The question answering pipeline can extracts answers
3
00:00:10,680 --> 00:00:14,190
-从给定的上下文或文本段落中提出问题,
+对问题, 从给定的上下文或文本段落中,
to questions from a given context or passage of text,
4
00:00:14,190 --> 00:00:16,540
-就像变形金刚回购自述文件的这一部分。
+就像 transformers 仓库的 README 文档的这部分。
like this part of the transformers repo README.
5
@@ -25,7 +25,7 @@ It also works for very long contexts,
6
00:00:20,310 --> 00:00:23,850
-即使答案在最后,就像这个例子一样。
+即使答案很靠后,就像这个例子一样。
even if the answer is at the very end, like in this example.
7
@@ -35,12 +35,12 @@ In this video, we will see why.
8
00:00:26,820 --> 00:00:29,460
-问答管道遵循相同的步骤
+问答管线遵循相同的步骤
The question answering pipeline follows the same steps
9
00:00:29,460 --> 00:00:31,050
-与其他管道一样:
+与其他 pipeline 一样:
as the other pipelines:
10
@@ -55,7 +55,7 @@ fed to the model then some post-processing is applied.
12
00:00:37,955 --> 00:00:41,730
-令牌化和模型步骤应该很熟悉。
+分词化和模型步骤应该很熟悉。
The tokenization and model steps should be familiar.
13
@@ -75,12 +75,12 @@ but one key difference with text classification
16
00:00:49,392 --> 00:00:52,980
-是我们的模型输出两个名为 start logits 的张量
+是我们的模型输出两个张量, 名为 start logits
is that our model outputs two tensors named start logits
17
00:00:52,980 --> 00:00:54,570
-并结束登录。
+和 end logits 。
and end logits.
18
@@ -95,7 +95,7 @@ Well, this is the way the model finds the answer
20
00:00:57,930 --> 00:00:58,803
-到这个问题。
+对这个问题。
to the question.
21
@@ -105,27 +105,27 @@ First, let's have a look at the model inputs.
22
00:01:02,130 --> 00:01:04,350
-它的数字与令牌化相关联
+它的数字相关联于分词化
Its numbers associated with the tokenization
23
00:01:04,350 --> 00:01:06,843
-问题后跟上下文
+问题, 对应于上下文
of the question followed by the context
24
00:01:06,843 --> 00:01:09,723
-使用通常的 CLS 和 SEP 特殊令牌。
+使用通常的 CLS 和 SEP 特殊 token 。
with the usual CLS and SEP special tokens.
25
00:01:10,620 --> 00:01:13,320
-答案是那些令牌的一部分。
+答案是那些 token 的一部分。
The answer is a part of those tokens.
26
00:01:13,320 --> 00:01:15,510
-所以我们要求模型预测哪个令牌开始
+所以我们要求模型预测哪个 token 开始
So we ask the model to predict which token starts
27
@@ -140,7 +140,7 @@ For our two logit outputs,
29
00:01:19,650 --> 00:01:22,803
-理论标签是粉色和紫色的向量。
+理论上的标签是粉色和紫色的向量。
the theoretical labels are the pink and purple vectors.
30
@@ -155,17 +155,17 @@ we will need to apply a SoftMax,
32
00:01:28,436 --> 00:01:30,360
-就像在文本分类管道中一样。
+就像在文本分类管线中一样。
like in the text classification pipeline.
33
00:01:30,360 --> 00:01:33,390
-我们只是屏蔽不属于上下文的标记
+我们只是掩蔽不属于上下文的 token
We just mask the tokens that are not part of the context
34
00:01:33,390 --> 00:01:36,855
-在此之前,不屏蔽初始 CLS 令牌
+在此之前,不掩蔽初始 CLS token
before doing that, leaving the initial CLS token unmasked
35
@@ -190,23 +190,23 @@ since its exponential will then be zero.
39
00:01:48,957 --> 00:01:50,580
-现在,每个开始的概率
+现在,每个概率, 对于开始的
Now, the probability for each start
40
00:01:50,580 --> 00:01:53,550
-和对应于可能答案的结束位置,
+和对于结束的可能答案的位置,
and end position corresponding to a possible answer,
41
00:01:53,550 --> 00:01:55,050
-我们给的分数就是产品
-we give a score that is the product
+我们给的分数就是
+we give a score that is the
42
00:01:55,050 --> 00:01:57,630
-开始概率和结束概率
-of the start probabilities and end probabilities
+开始概率和结束概率之乘积
+product of the start probabilities and end probabilities
43
00:01:57,630 --> 00:01:58,803
@@ -230,12 +230,12 @@ Here is the code to find the best score
47
00:02:07,080 --> 00:02:08,820
-一个可能的答案。
+对一个可能的答案。
for a possible answer.
48
00:02:08,820 --> 00:02:11,430
-一旦我们有了令牌的开始和结束位置,
+一旦我们有了这些 token 的开始和结束位置,
Once we have the start and end positions of the tokens,
49
@@ -275,7 +275,7 @@ the whole answer, being truncated.
56
00:02:29,100 --> 00:02:31,050
-所以我们不丢弃截断的标记
+所以我们不丢弃截断的 token
So we don't discard the truncated tokens
57
@@ -300,12 +300,12 @@ If we take disjoint chunks of texts,
61
00:02:41,430 --> 00:02:43,530
-我们最终可能会得到分裂的答案
+我们最终可能会得到拆分的答案
we might end up with the answer being split
62
00:02:43,530 --> 00:02:45,330
-两个特征之间。
+于两个特征之间。
between two features.
63
@@ -325,7 +325,7 @@ the answer to the question.
66
00:02:52,830 --> 00:02:55,260
-标记器自动为我们完成所有这些
+分词器自动为我们完成所有这些
The tokenizers do all of this for us automatically
67
@@ -340,7 +340,7 @@ The stride argument controls
69
00:02:59,700 --> 00:03:02,070
-重叠标记的数量。
+重叠 token 的数量。
the number of overlapping tokens.
70
@@ -365,7 +365,7 @@ for each feature, we get the answer with a score
74
00:03:10,636 --> 00:03:12,453
-对于他们每个人,
+对于他们每个,
for each of them,
75
diff --git a/subtitles/zh-CN/48_inside-the-question-answering-pipeline-(tensorflow).srt b/subtitles/zh-CN/48_inside-the-question-answering-pipeline-(tensorflow).srt
index cdb7d661a..c42c93ce5 100644
--- a/subtitles/zh-CN/48_inside-the-question-answering-pipeline-(tensorflow).srt
+++ b/subtitles/zh-CN/48_inside-the-question-answering-pipeline-(tensorflow).srt
@@ -5,12 +5,12 @@
2
00:00:05,490 --> 00:00:08,440
-- 让我们来看看问答管道的内部情况。
+- 让我们来看看问答 pipeline(管线) 的内部情况。
- Let's have a look inside the question answering pipeline.
3
00:00:09,780 --> 00:00:11,370
-问答管道
+问答管线
The question answering pipeline
4
@@ -25,7 +25,7 @@ from a given context or passage of text
6
00:00:16,020 --> 00:00:18,370
-就像变形金刚回购自述文件的这一部分。
+就像 transformer 仓库的 README 文件的这一部分。
like this part of the Transformers repo README.
7
@@ -35,7 +35,7 @@ It also works for very long context,
8
00:00:21,180 --> 00:00:24,720
-即使答案在最后,就像这个例子一样。
+即使答案靠后,就像这个例子一样。
even if the answer is at the very end, like in this example.
9
@@ -45,12 +45,12 @@ In this video, we'll see why.
10
00:00:27,840 --> 00:00:29,310
-问答管道
+问答管线
The question answering pipeline
11
00:00:29,310 --> 00:00:32,130
-遵循与其他管道相同的步骤。
+遵循与其他管线相同的步骤。
follows the same steps as the other pipelines.
12
@@ -65,7 +65,7 @@ fed to the model then some post-processing is applied.
14
00:00:39,540 --> 00:00:42,840
-所以标记化和模型步骤应该很熟悉。
+所以分词化和模型步骤应该很熟悉。
So tokenization and model steps should be familiar.
15
@@ -90,7 +90,7 @@ is that our model outputs two tensors
19
00:00:52,380 --> 00:00:55,230
-命名开始 logits 和结束 logits。
+命名 start logits 和 end logits。
named start logits and end logits.
20
@@ -105,7 +105,7 @@ Well, this is the way the model finds the answer
22
00:00:58,170 --> 00:00:59,043
-到这个问题。
+对这个问题。
to the question.
23
@@ -114,28 +114,28 @@ to the question.
First, let's have a look at the model inputs.
24
-00:01:02,610 --> 00:01:04,800
-它是与标记化相关的数字
-It's numbers associated with the tokenization
+00:01:02,610 --> 00:01:05,800
+它是与问题分词化相关的数字
+It's numbers associated with the tokenization of the question
25
-00:01:04,800 --> 00:01:05,850
-的问题,
-of the question,
+00:01:05,800 --> 00:01:05,850
+,
+,
26
00:01:05,850 --> 00:01:07,753
-其次是上下文
+对于该上下文
followed by the context
27
00:01:07,753 --> 00:01:10,233
-使用通常的 CLS 和 SEP 特殊令牌。
+使用通常的 CLS 和 SEP 特殊 token 。
with the usual CLS and SEP special tokens.
28
00:01:11,130 --> 00:01:13,203
-答案是那些令牌的一部分。
+答案是那些 token 的一部分。
The answer is a part of those tokens.
29
@@ -145,7 +145,7 @@ So we ask the model to predict
30
00:01:15,330 --> 00:01:17,040
-哪个标记开始回答
+哪个 token 开始回答
which token starts the answer
31
@@ -175,12 +175,12 @@ we will need to apply a SoftMax,
36
00:01:28,596 --> 00:01:31,020
-就像在文本分类管道中一样。
+就像在文本分类管线中一样。
like in the text classification pipeline.
37
00:01:31,020 --> 00:01:32,310
-我们只是屏蔽令牌
+我们只是掩蔽 token
We just mask the tokens
38
@@ -190,12 +190,12 @@ that are not part of the context before doing that,
39
00:01:35,940 --> 00:01:38,310
-不屏蔽初始 CLS 令牌
+不掩蔽初始 CLS token
leaving the initial CLS token unmasked
40
00:01:38,310 --> 00:01:40,773
-因为我们用它来预测一个不可能的答案。
+我们用它来预测一个不可能的答案。
as we use it to predict an impossible answer.
41
@@ -230,13 +230,13 @@ will give a score that is a product
47
00:01:57,540 --> 00:01:58,680
-开始概率
-of the start probabilities
+开始概率和结束概率
+of the start probabilities and end probabilities
48
-00:01:58,680 --> 00:02:00,873
-并在这些位置结束概率。
-and end probabilities at those position.
+00:01:59,680 --> 00:02:00,873
+在这些位置。
+at those position.
49
00:02:01,920 --> 00:02:04,530
@@ -255,12 +255,12 @@ Here is the code to find the best score
52
00:02:09,510 --> 00:02:11,280
-一个可能的答案。
+对一个可能的答案。
for a possible answer.
53
00:02:11,280 --> 00:02:13,830
-一旦我们有了令牌的开始和结束位置,
+一旦我们有了 token 的开始和结束位置,
Once we have the start and end position for the tokens,
54
@@ -300,7 +300,7 @@ the whole answer, being truncated.
61
00:02:32,190 --> 00:02:34,020
-所以我们不丢弃截断的标记
+所以我们不丢弃截断的 token
So we don't discard the truncated tokens
62
@@ -360,7 +360,7 @@ with the return overflowing tokens option.
73
00:03:01,920 --> 00:03:02,753
-步幅论证
+步幅参数
The stride argument
74
diff --git a/subtitles/zh-CN/49_what-is-normalization.srt b/subtitles/zh-CN/49_what-is-normalization.srt
index edff41bf9..1c0c83dfa 100644
--- a/subtitles/zh-CN/49_what-is-normalization.srt
+++ b/subtitles/zh-CN/49_what-is-normalization.srt
@@ -10,27 +10,27 @@
3
00:00:07,380 --> 00:00:09,930
-什么是标准化组件
+什么是规范化组件
what is the normalizer component
4
00:00:09,930 --> 00:00:13,023
-我们会在每个分词器的开头找到它。
+我们会在每个 tokenizer 的开头找到它。
that we'd find at the beginning of each tokenizer.
5
00:00:14,550 --> 00:00:16,830
-归一化操作包括
+规范化操作包括
The normalization operation consists
6
00:00:16,830 --> 00:00:19,890
-在应用一系列规范化规则时
+在应用一系列规范化规则
in applying a succession of normalization rules
7
00:00:19,890 --> 00:00:20,853
-到原始文本。
+到原始文本时。
to the raw text.
8
@@ -50,12 +50,12 @@ and use of our language model.
11
00:00:33,090 --> 00:00:37,470
-让我们用不同的字体来看一个非常多样化的句子,
+让我们来看一个非常多样化的句子,用不同的字体
Let's take a very diverse sentence with different fonts,
12
00:00:37,470 --> 00:00:39,780
-大写和小写字符,
+大写和小写的字符,
upper and lower case characters,
13
@@ -65,12 +65,12 @@ accents, punctuation and multiple spaces,
14
00:00:43,920 --> 00:00:46,683
-看看几个分词器是如何规范化它的。
+看看几个 tokenizer 是如何规范化它的。
to see how several tokenizer normalize it.
15
00:00:48,488 --> 00:00:50,730
-来自 FNet 模型的分词器
+来自 FNet 模型的 tokenizer
The tokenizer from the FNet model
16
@@ -110,7 +110,7 @@ with several font variants and keeps the multiple spaces,
23
00:01:12,090 --> 00:01:14,223
-但它删除了所有的口音。
+但它删除了所有的重音。
but it removes all the accents.
24
@@ -120,12 +120,12 @@ And if we continue to test this normalization
25
00:01:18,870 --> 00:01:23,040
-与模型相关的许多其他分词器
+与模型相关的许多其他 tokenizer
of many other tokenizers associated to models
26
00:01:23,040 --> 00:01:25,110
-我们可以在集线器上找到,
+我们可以在 Hub 上找到,
that we can find on the Hub,
27
@@ -135,12 +135,12 @@ we see that they also propose other kind of normalization.
28
00:01:33,900 --> 00:01:35,850
-使用快速分词器,
+使用快速 tokenizer ,
With the fast tokenizers,
29
00:01:35,850 --> 00:01:39,060
-很容易观察到选择的归一化
+很容易观察到选择的规范化
it's very easy to observe the normalization chosen
30
@@ -150,12 +150,12 @@ for the currently loaded tokenizer.
31
00:01:42,330 --> 00:01:46,140
-事实上,每个快速分词器的实例
+事实上,每个快速 tokenizer 的实例
Indeed, each instance of a fast tokenizer
32
00:01:46,140 --> 00:01:48,030
-有一个底层分词器
+有一个底层 tokenizer
has an underlying tokenizer
33
@@ -175,12 +175,12 @@ This object has itself a normalizer attribute
36
00:01:58,470 --> 00:02:01,830
-我们可以使用 normalize_str 方法
+我们可以使用, 多亏 normalize_str 方法
that we can use thanks to the normalize_str method
37
00:02:01,830 --> 00:02:03,153
-规范化一个字符串。
+以规范化一个字符串。
to normalize a string.
38
@@ -190,12 +190,12 @@ It is thus very practical that this normalization,
39
00:02:08,700 --> 00:02:11,070
-这是在训练时使用的
+使用在训练时
which was used at the time of the training
40
00:02:11,070 --> 00:02:12,903
-分词器的保存,
+保存分词器,
of the tokenizer was saved,
41
@@ -205,7 +205,7 @@ and that it applies automatically
42
00:02:16,200 --> 00:02:19,233
-当你要求训练有素的分词器对文本进行分词时。
+当你要求训练过的 tokenizer 对文本进行分词时。
when you ask a trained tokenizer to tokenize a text.
43
@@ -215,7 +215,7 @@ For example, if we hadn't included the albert normalizer,
44
00:02:25,500 --> 00:02:28,770
-我们会有很多未知的代币
+我们会有很多未知的 token
we would have had a lot of unknown tokens
45
@@ -230,12 +230,12 @@ with accents and capital letters.
47
00:02:35,730 --> 00:02:38,370
-这种转变也可能是检测不到的
+这种转变也可能是无法检测的
This transformation can also be undetectable
48
00:02:38,370 --> 00:02:40,050
-带有简单的打印。
+通过简单的打印出来。
with a simple print.
49
@@ -250,12 +250,12 @@ text is only a succession of 0 and 1,
51
00:02:45,840 --> 00:02:47,820
-碰巧不同的继承
+碰巧是不同的承接
and it happens that different successions
52
00:02:47,820 --> 00:02:51,363
-0 和 1 呈现相同的打印字符。
+让 0 和 1 呈现相同的打印字符。
of 0 and 1 render the same printed character.
53
@@ -275,7 +275,7 @@ into a sequence of code points.
56
00:03:04,530 --> 00:03:09,530
-在我们的示例中,2 个字节使用 UTF-8 解码
+在我们的示例中,2 个字节通过 UTF-8 解码
In our example, the 2 bytes is decoded using UTF-8
57
@@ -305,7 +305,7 @@ Let's repeat the same operation
62
00:03:23,790 --> 00:03:26,577
-有了这个由 3 个字节组成的新序列,。
+有了这个由 3 个字节组成的新序列,
with this new sequence composed of 3 bytes,.
63
@@ -340,7 +340,7 @@ But it's annoying because what appears to us
69
00:03:45,000 --> 00:03:46,680
-成为一个单一的角色
+为了成为一个单一的字符
to be a single character
70
@@ -365,7 +365,7 @@ that allow erasing some of these differences.
74
00:04:05,730 --> 00:04:08,223
-这些标准通常由分词器使用。
+这些标准通常由 tokenizer 使用。
These standards are often used by tokenizers.
75
@@ -400,7 +400,7 @@ However, you must be aware that some normalizations
81
00:04:25,980 --> 00:04:30,363
-如果他们不适应他们的语料库,可能会非常有害。
+如果他们不适配他们的语料库,可能会非常有害。
can be very harmful if they are not adapted to their corpus.
82
@@ -415,7 +415,7 @@ For example, if you take the French sentence,
84
00:04:38,790 --> 00:04:42,510
-并使用 bert-base-uncase 分词器对其进行规范化
+并使用 bert-base-uncase tokenizer 对其进行规范化
and normalize it with the bert-base-uncase tokenizer
85
@@ -435,17 +435,17 @@ which means "An unworthy father".
88
00:04:53,460 --> 00:04:56,760
-如果你观看此视频是为了构建自己的分词器,
+如果你观看此视频是为了构建自己的 tokenizer ,
If you watched this video to build your own tokenizer,
89
00:04:56,760 --> 00:04:59,610
-选择与否没有绝对的规则
+没有绝对的规则选择与否
there are no absolute rules to choose or not
90
00:04:59,610 --> 00:05:02,970
-新分词器的规范化,
+一个新 tokenizer 的规范化,
a normalization for a new tokenizer,
91
diff --git a/subtitles/zh-CN/50_what-is-pre-tokenization.srt b/subtitles/zh-CN/50_what-is-pre-tokenization.srt
index 6b2870fe3..1068c69c2 100644
--- a/subtitles/zh-CN/50_what-is-pre-tokenization.srt
+++ b/subtitles/zh-CN/50_what-is-pre-tokenization.srt
@@ -1,6 +1,6 @@
1
00:00:05,550 --> 00:00:08,910
-- 标记化管道涉及几个步骤
+- 分词化管线涉及几个步骤
- The tokenization pipeline involves several steps
2
@@ -15,22 +15,22 @@ In this video, we will see what happens
4
00:00:14,280 --> 00:00:16,293
-在预标记化步骤中。
+在预分词化步骤中。
during the pre-tokenization step.
5
00:00:18,390 --> 00:00:22,110
-pre-tokenization 操作是执行的操作
+预分词化操作是操作执行在
The pre-tokenization operation is the operation performed
6
00:00:22,110 --> 00:00:24,630
-文本归一化后
+文本规范化后
after the normalization of the text
7
00:00:24,630 --> 00:00:27,633
-在应用标记化算法之前。
+在应用分词化算法之前。
and before the application of the tokenization algorithm.
8
@@ -55,12 +55,12 @@ Let's look at how several tokenizers
12
00:00:41,310 --> 00:00:43,143
-在此示例中进行预标记。
+在此示例中进行预分词。
pre-tokenize in this example.
13
00:00:46,200 --> 00:00:50,820
-gpt2 pre-tokenization 在空格上划分文本
+gpt2 pre-tokenization 把文本划分到空格
The gpt2 pre-tokenization divides the text on spaces
14
@@ -80,7 +80,7 @@ by capital G with a dot above.
17
00:01:07,170 --> 00:01:09,540
-Albert 的预标记化将文本划分
+Albert 的预分词化将文本划分
Albert's pre-tokenization divides the text
18
@@ -115,12 +115,12 @@ But unlike the previous tokenizers,
24
00:01:31,260 --> 00:01:33,780
-空间没有变换
+空格没有变换
spaces are not transformed
25
00:01:33,780 --> 00:01:37,293
-并集成到使用此预标记器生成的令牌中。
+并集成到使用此预标记器生成的 token 中。
and integrated into tokens produced with this pre-tokenizer.
26
@@ -135,7 +135,7 @@ we could observe the two main type of operation
28
00:01:45,330 --> 00:01:47,073
-预标记化带来的;
+预分词化带来的;
brought by the pre-tokenization;
29
@@ -160,7 +160,7 @@ Finally, the backend tokenizer of the fast tokenizers
33
00:02:04,230 --> 00:02:07,680
-还允许测试预标记化操作
+还允许测试预分词化操作
also allows to test the pre-tokenization operation
34
@@ -175,12 +175,12 @@ We notice that the output of this operation
36
00:02:14,970 --> 00:02:18,450
-由令牌和偏移量组成,
+由 token 和偏移量组成,
is composed of both tokens and offsets,
37
00:02:18,450 --> 00:02:21,960
-允许将标记链接到它在文本中的位置
+允许将 token 链接到它在文本中的位置
which allow to link the tokens to its position in the text
38
@@ -190,22 +190,22 @@ given in input of the method.
39
00:02:25,650 --> 00:02:28,860
-此操作定义了最大的令牌
+此操作定义了最大的 token
This operation defines the largest tokens
40
00:02:28,860 --> 00:02:31,740
-可以通过标记化产生,
+可以通过分词化产生,
that can be produced by the tokenization,
41
00:02:31,740 --> 00:02:36,090
-或者换句话说,子令牌的障碍
+或者换句话说,子 token 的障碍
or in those words, the barriers of the sub-tokens
42
00:02:36,090 --> 00:02:37,653
-届时将生产。
+届时将产生。
which will be produced then.
43
@@ -215,6 +215,6 @@ And that's all for the characteristic
44
00:02:41,850 --> 00:02:43,203
-预分词器。
+对预分词器。
of the pre-tokenizers.
diff --git a/subtitles/zh-CN/51_byte-pair-encoding-tokenization.srt b/subtitles/zh-CN/51_byte-pair-encoding-tokenization.srt
index 513b464a9..9bad1de88 100644
--- a/subtitles/zh-CN/51_byte-pair-encoding-tokenization.srt
+++ b/subtitles/zh-CN/51_byte-pair-encoding-tokenization.srt
@@ -10,12 +10,12 @@
3
00:00:06,720 --> 00:00:10,464
-如果你想了解什么是字节对编码
+如果你想了解什么是字节对编码(BPE)算法
if you want to understand what the Byte Pair Encoding
4
00:00:10,464 --> 00:00:13,263
-子词标记化算法是,
+子词分词化算法是,
subword tokenization algorithm is,
5
@@ -25,7 +25,7 @@ how to train it
6
00:00:15,505 --> 00:00:17,790
-以及文本的标记化是如何完成的
+以及文本的分词化是如何完成的
and how the tokenization of a text is done
7
@@ -65,12 +65,12 @@ into a sequence of'subword units'
14
00:00:38,100 --> 00:00:41,970
-哪些是参考语料库中频繁出现的单位
+其是参考语料库中频繁出现的单位
which are units that appear frequently in a reference corpus
15
00:00:41,970 --> 00:00:44,613
-也就是我们用来训练它的语料库。
+也是我们用来训练它的语料库。
which is, the corpus we used to train it.
16
@@ -90,7 +90,7 @@ We will not train our tokenizer on this raw text
19
00:00:56,940 --> 00:00:59,490
-但我们首先将其标准化
+但我们首先将其规范化
but we will first normalize it
20
@@ -120,7 +120,7 @@ by gathering together the same words
25
00:01:10,350 --> 00:01:12,450
-并通过维护一个柜台,
+并通过维护一个柜,
and by maintaining a counter,
26
@@ -130,12 +130,12 @@ here represented in blue.
27
00:01:17,340 --> 00:01:19,860
-要了解培训的工作原理,
+要了解训练的工作原理,
To understand how the training works,
28
00:01:19,860 --> 00:01:23,730
-我们认为这个玩具语料库由以下单词组成:
+我们认为这个小语料库由以下单词组成:
we consider this toy corpus composed of the following words:
29
@@ -170,7 +170,7 @@ into a list of elementary units that compose them,
35
00:01:45,210 --> 00:01:47,013
-在这里,人物。
+在这里, 字符。
here, the characters.
36
@@ -190,7 +190,7 @@ Let's now see how to increase it.
39
00:02:05,520 --> 00:02:08,250
-我们回到我们分裂的语料库,
+我们回到我们拆分的语料库,
We return to our split corpus,
40
@@ -200,7 +200,7 @@ we will go through the words one by one
41
00:02:11,340 --> 00:02:14,313
-并计算令牌对的所有出现次数。
+并计算 token 对的所有出现次数。
and count all the occurrences of token pairs.
42
@@ -210,7 +210,7 @@ The first pair is composed of the token 'h' and 'u',
43
00:02:20,130 --> 00:02:23,067
-第二个 'u' 和 'g',
+第二个 "u" 和 "g",
the second 'u' and 'g',
44
@@ -245,7 +245,7 @@ We note our first merging rule
50
00:02:54,593 --> 00:02:57,243
-然后我们将新标记添加到我们的词汇表中。
+然后我们将新 token 添加到我们的词汇表中。
and we add the new token to our vocabulary.
51
@@ -255,7 +255,7 @@ We can then apply this merging rule to our splits.
52
00:03:04,260 --> 00:03:07,350
-你可以看到我们已经合并了所有的令牌对
+你可以看到我们已经合并了所有的 token 对
You can see that we have merged all the pairs of tokens
53
@@ -270,7 +270,7 @@ And now, we just have to reproduce the same steps
55
00:03:18,150 --> 00:03:19,353
-与我们的新分裂。
+与我们的新拆分。
with our new splits.
56
@@ -280,7 +280,7 @@ We calculate the frequency of occurrence
57
00:03:23,460 --> 00:03:25,023
-每对标记,
+对每对 token ,
of each pair of tokens,
58
@@ -295,12 +295,12 @@ we note it in our merge rules,
60
00:03:36,000 --> 00:03:39,360
-我们将新的标记添加到词汇表中
+我们将新的 token 添加到词汇表中
we add the new one token the vocabulary
61
00:03:39,360 --> 00:03:41,880
-然后我们合并所有的标记对
+然后我们合并所有的 token 对
and then we merge all the pairs of tokens
62
@@ -320,7 +320,7 @@ until we reach the desired vocabulary size.
65
00:04:05,671 --> 00:04:10,671
-在这里,当我们的词汇量达到 21 个标记时,我们就停止了。
+在这里,当我们的词汇量达到 21 个 token 时,我们就停止了。
Here, we stopped when our vocabulary reached 21 tokens.
66
@@ -335,7 +335,7 @@ are now divided into far fewer tokens
68
00:04:17,040 --> 00:04:20,280
-被分成了更少的 tokens
+被分成了更少的 token
than at the beginning of the training.
69
@@ -390,7 +390,7 @@ Then, we'll go through our merge rules
79
00:04:52,020 --> 00:04:54,690
-直到我们有一个我们可以申请。
+直到我们有一个我们可以应用。
until we have one we can apply.
80
@@ -400,7 +400,7 @@ Here, we can merge the letters 'h' and 'u'.
81
00:04:57,930 --> 00:05:01,467
-在这里,我们可以合并 2 个令牌以获得新令牌 “hug”。
+在这里,我们可以合并 2 个 token 以获得新 token “hug”。
And here, we can merge 2 tokens to get the new token 'hug'.
82
@@ -410,7 +410,7 @@ When we get to the end of our merge rules,
83
00:05:05,760 --> 00:05:07,563
-标记化完成。
+分词化完成。
the tokenization is finished.
84
@@ -425,7 +425,7 @@ I hope that now the BPE algorithm
86
00:05:14,850 --> 00:05:16,413
-没有更多的秘密给你!
+对你而言不再是秘密!
has no more secret for you!
87
diff --git a/subtitles/zh-CN/52_wordpiece-tokenization.srt b/subtitles/zh-CN/52_wordpiece-tokenization.srt
index 26873d619..60e15875e 100644
--- a/subtitles/zh-CN/52_wordpiece-tokenization.srt
+++ b/subtitles/zh-CN/52_wordpiece-tokenization.srt
@@ -10,12 +10,12 @@
3
00:00:08,370 --> 00:00:11,851
-WordPiece 算法及其执行方式
+对 WordPiece 算法及其执行方式
of the WordPiece algorithm, and how it performs
4
00:00:11,851 --> 00:00:15,150
-一旦训练,文本的标记化。
+一旦训练,文本的分词化。
the tokenization of a text, once trained.
5
@@ -45,7 +45,7 @@ So we base our explanations
10
00:00:33,510 --> 00:00:36,903
-根据我们自己对已发表文献的解释。
+根据我们自己对已发表文献的理解。
on our own interpretation of the published literature.
11
@@ -100,7 +100,7 @@ We add two hashtags in front of the letters
21
00:01:14,190 --> 00:01:16,083
-那不开始一个词。
+那不开启一个词。
that do not start a word.
22
@@ -120,7 +120,7 @@ We will list all the existing pairs in our corpus.
25
00:01:30,990 --> 00:01:32,640
-一旦我们有了这份清单,
+一旦我们有了这份表格,
Once we have this list,
26
@@ -150,22 +150,22 @@ the first pair composed of the letters H and U.
31
00:01:48,510 --> 00:01:51,390
-一对的分数简单地等于频率
+一对的分数单纯地等于频率
The score of a pair is simply equal to the frequency
32
00:01:51,390 --> 00:01:54,510
-一对的外观除以产品
+对这对出现的, 除以乘积
of appearance of the pair, divided by the product
33
00:01:54,510 --> 00:01:57,330
-第一个标记出现的频率,
+对第一个 token 出现的频率,
of the frequency of appearance of the first token,
34
00:01:57,330 --> 00:02:00,063
-通过第二个标记的出现频率。
+乘上第二个 token 的出现频率。
by the frequency of appearance of the second token.
35
@@ -220,7 +220,7 @@ the pair with the highest score, after merging it of course.
45
00:02:40,140 --> 00:02:43,863
-现在我们可以将同样的融合应用于我们的拆分语料库。
+现在我们可以将同样的操作应用于我们的拆分语料库。
And now we can apply this same fusion to our split corpus.
46
@@ -250,7 +250,7 @@ to see the evolution of our vocabulary,
51
00:02:58,957 --> 00:03:01,773
-以及劈叉长度的演变。
+以及拆分长度的演变。
and also the evolution of the length of the splits.
52
@@ -275,7 +275,7 @@ WordPiece follows these rules.
56
00:03:20,310 --> 00:03:22,530
-我们将寻找最长的令牌
+我们将寻找最长的 token
We will look for the longest possible token
57
@@ -285,7 +285,7 @@ at the beginning of the word.
58
00:03:24,960 --> 00:03:28,920
-然后我们重新开始我们的话的剩余部分,
+然后我们重新开始我们的词语的剩余部分,
Then we start again on the remaining part of our word,
59
@@ -295,7 +295,7 @@ and so on until we reach the end.
60
00:03:32,100 --> 00:03:35,973
-就是这样。 Huggingface 分为四个子令牌。
+就是这样。 Huggingface 分为四个子 token 。
And that's it. Huggingface is divided into four sub-tokens.
61
diff --git a/subtitles/zh-CN/53_unigram-tokenization.srt b/subtitles/zh-CN/53_unigram-tokenization.srt
index 48f3099f5..fef8e79b8 100644
--- a/subtitles/zh-CN/53_unigram-tokenization.srt
+++ b/subtitles/zh-CN/53_unigram-tokenization.srt
@@ -10,12 +10,12 @@
3
00:00:06,420 --> 00:00:09,881
-我们将一起研究 “Unigram 语言模型”
+我们将一起研究 “Unigram 语言模型
we will study together 'the Unigram Language Model
4
00:00:09,881 --> 00:00:13,288
-子词标记化算法 '。
+子词分词化算法 " 。
subword tokenization algorithm'.
5
@@ -25,7 +25,7 @@ The overall training strategy
6
00:00:15,567 --> 00:00:18,450
-Unigram 语言模型分词器
+对一个 Unigram 语言模型分词器
of a Unigram Language Model tokenizer
7
@@ -35,7 +35,7 @@ is to start with a very large vocabulary
8
00:00:21,480 --> 00:00:24,240
-然后在每次迭代中删除标记
+然后在每次迭代中删除 token
and then to remove tokens at each iteration
9
@@ -55,7 +55,7 @@ we will calculate a loss on our training corpus
12
00:00:30,930 --> 00:00:33,480
-感谢 Unigram 模型。
+多亏了 Unigram 模型。
thanks to the Unigram model.
13
@@ -70,12 +70,12 @@ we can use it to choose how to reduce the vocabulary.
15
00:00:41,550 --> 00:00:43,620
-所以我们看看损失的演变
+所以我们看看损失的变化
So we look at the evolution of the loss
16
00:00:43,620 --> 00:00:47,103
-通过依次从词汇表中删除每个标记。
+通过依次从词汇表中删除每个 token 。
by removing in turn each token from the vocabulary.
17
@@ -110,8 +110,8 @@ The Unigram Language Model
23
00:01:06,030 --> 00:01:08,493
-是一种统计语言调制解调器。
-is a type of Statistical Language Modem.
+是一种统计语言模型。
+is a type of Statistical Language Model.
24
00:01:09,450 --> 00:01:10,980
@@ -125,12 +125,12 @@ will assign a probability to a text
26
00:01:13,530 --> 00:01:18,090
-考虑到文本实际上是一系列标记。
+考虑到文本实际上是一系列 token 。
considering that the text is in fact a sequence of tokens.
27
00:01:18,090 --> 00:01:21,090
-可以想象的最简单的标记序列
+可以想象的最简单的 token 序列
The simplest sequences of tokens to imagine
28
@@ -170,7 +170,7 @@ is equal to the product of the probabilities
35
00:01:42,210 --> 00:01:43,953
-组成它的令牌。
+对组成它的 token 。
of the tokens that compose it.
36
@@ -185,7 +185,7 @@ which would not be adapted to the generation of text
38
00:01:53,850 --> 00:01:57,840
-因为这个模型总是会生成相同的令牌,
+因为这个模型总是会生成相同的 token ,
since this model would always generate the same token,
39
@@ -195,7 +195,7 @@ the one which has the greatest probability.
40
00:02:01,320 --> 00:02:03,360
-然而,要进行标记化,
+然而,要进行分词化,
Nevertheless, to do tokenization,
41
@@ -320,17 +320,17 @@ At each iteration,
65
00:03:15,120 --> 00:03:17,430
-我们估计代币的概率
+我们估计 token 的概率
we estimate the probabilities of the tokens
66
00:03:17,430 --> 00:03:18,430
-词汇的
+对词汇
of the vocabulary
67
00:03:20,130 --> 00:03:23,100
-然后我们删除 p 百分比的标记
+然后我们删除 p 百分比的 token
and then we remove the p-percent of tokens
68
@@ -365,7 +365,7 @@ The probability of a token simply estimated
74
00:03:42,360 --> 00:03:44,760
-按此令牌出现的次数
+按此 token 出现的次数
by the number of appearance of this token
75
@@ -375,7 +375,7 @@ in our training corpus
76
00:03:46,440 --> 00:03:50,133
-除以所有令牌出现的总数。
+除以所有 token 出现的总数。
divided by the total number of appearance of all the tokens.
77
@@ -405,7 +405,7 @@ and how the loss is calculated on our corpus.
82
00:04:09,088 --> 00:04:12,263
-我们的文本 “Hug” 的 Unigram LM 标记化
+我们的文本 “Hug” 的 Unigram LM 分词化
The Unigram LM tokenization of our text 'Hug'
83
@@ -425,12 +425,12 @@ To find it, the simplest way to proceed
86
00:04:21,750 --> 00:04:24,120
-将列出所有可能的细分
+将列出所有可能的分割
would be to list all the possible segmentations
87
00:04:24,120 --> 00:04:25,800
-我们的文字 Hug
+对我们的文本 "Hug" ,
of our text 'Hug',
88
@@ -450,7 +450,7 @@ With the current vocabulary,
91
00:04:34,920 --> 00:04:38,640
-两个标记化获得完全相同的概率。
+两个分词化获得完全相同的概率。
two tokenizations get exactly the same probability.
92
@@ -470,7 +470,7 @@ To compute the loss on our training corpus,
95
00:04:46,380 --> 00:04:48,570
-我们需要像刚才那样进行标记化
+我们需要像刚才那样进行分词化
we need to tokenize as we just did
96
@@ -480,7 +480,7 @@ all the remaining words in the corpus.
97
00:04:52,290 --> 00:04:56,430
-损失就是语料库中所有单词的总和
+损失就是所有单词的总和, 语料库中
The loss is then the sum over all the words in the corpus
98
@@ -495,7 +495,7 @@ multiplied by the opposite of the log of the probability
100
00:05:02,670 --> 00:05:05,463
-与单词的标记化相关联。
+与单词的分词化相关联的。
associated with the tokenization of the word.
101
@@ -510,7 +510,7 @@ Remember, our initial goal was to reduce the vocabulary.
103
00:05:18,630 --> 00:05:21,870
-为此,我们将从词汇表中删除一个标记
+为此,我们将从词汇表中删除一个 token
To do this, we will remove a token from the vocabulary
104
@@ -525,12 +525,12 @@ Let's remove for example, the token 'ug'.
106
00:05:31,920 --> 00:05:35,370
-我们注意到 “hug” 的标记化
+我们注意到 “hug” 的分词化
We notice that the tokenization for 'hug'
107
00:05:35,370 --> 00:05:39,990
-字母 h 和元组 ug 现在是不可能的。
+字母 "h" 和元组 "ug" 现在是不可能的。
with the letter 'h' and the tuple 'ug' is now impossible.
108
@@ -540,12 +540,12 @@ Nevertheless, as we saw earlier
109
00:05:42,240 --> 00:05:45,180
-两个标记化具有相同的概率,
+两个分词化具有相同的概率,
that two tokenizations had the same probability,
110
00:05:45,180 --> 00:05:47,730
-我们仍然可以选择剩余的标记化
+我们仍然可以选择剩余的分词化
we can still choose the remaining tokenization
111
@@ -585,7 +585,7 @@ if we continue the calculation,
118
00:06:10,080 --> 00:06:13,050
-我们会注意到我们可以删除任何令牌
+我们会注意到我们可以删除任何 token
we would notice that we could remove any token
119
@@ -610,7 +610,7 @@ So we estimate again the probability of each token
123
00:06:27,300 --> 00:06:30,630
-在计算每个代币对损失的影响之前。
+在计算每个 token 对损失的影响之前。
before calculating the impact of each token on the loss.
124
@@ -620,17 +620,17 @@ For example, if we remove now
125
00:06:33,990 --> 00:06:36,290
-由字母 “h” 和 “u” 组成的令牌,
+由字母 “h” 和 “u” 组成的 token ,
the token composed of the letters 'h' and 'u',
126
00:06:37,350 --> 00:06:41,013
-hug 只剩下一种可能的标记化。
-there is only one possible tokenization left for hug.
+"hug" 只剩下一种可能的分词化。
+there is only one possible tokenization left for "hug".
127
00:06:41,940 --> 00:06:44,700
-词汇表中其他词的标记化
+词汇表中其他词的分词化
The tokenization of the other words of the vocabulary
128
@@ -645,7 +645,7 @@ In the end,
130
00:06:47,393 --> 00:06:49,200
-我们通过删除令牌获得
+我们通过删除 token 获得
we obtain by removing the token
131
@@ -655,22 +655,22 @@ composed of the letters 'h' and 'u' from the vocabulary,
132
00:06:52,749 --> 00:06:56,430
-亏损 168。
+损失为 168。
a loss of 168.
133
00:06:56,430 --> 00:06:59,490
-最后,要选择要删除的令牌,
+最后,要选择要删除的 token ,
Finally, to choose which token to remove,
134
00:06:59,490 --> 00:07:02,490
-我们将为词汇表的每个剩余标记,
+我们将为词汇表的每个剩余 token ,
we will for each remaining token of the vocabulary,
135
00:07:02,490 --> 00:07:04,800
-这不是基本令牌,
+这不是基本 token ,
which is not an elementary token,
136
@@ -685,17 +685,17 @@ Then, compare these losses between them.
138
00:07:11,730 --> 00:07:13,800
-我们将删除的令牌
+我们将删除的 token
The token which we will remove
139
00:07:13,800 --> 00:07:17,340
-是对损失影响最小的代币,
+是对损失影响最小的 token ,
is the token which impacts the least the loss,
140
00:07:17,340 --> 00:07:18,870
-这里是令牌 “bu”。
+这里是 token “bu”。
here the token 'bu'.
141
@@ -715,12 +715,12 @@ p-percent of the tokens by iteration.
144
00:07:29,356 --> 00:07:33,000
-可以在本次迭代中删除的第二个标记
+可以在本次迭代中删除的第二个 token
The second token that could be removed at this iteration
145
00:07:33,000 --> 00:07:34,317
-是标记 “du”。
+是 token “du”。
is the token 'du'.
146
@@ -765,7 +765,7 @@ before comparing them to keep the best one
154
00:07:58,770 --> 00:08:01,440
-但是我们使用维特比算法
+但是我们使用 Viterbi 算法
but we use the Viterbi algorithm
155
diff --git a/subtitles/zh-CN/54_building-a-new-tokenizer.srt b/subtitles/zh-CN/54_building-a-new-tokenizer.srt
index 7faa3a529..5928f79fd 100644
--- a/subtitles/zh-CN/54_building-a-new-tokenizer.srt
+++ b/subtitles/zh-CN/54_building-a-new-tokenizer.srt
@@ -10,17 +10,17 @@ In this video, we will see how
3
00:00:07,500 --> 00:00:11,310
-你可以从头开始创建自己的分词器。
+你可以从头开始创建自己的 tokenizer(分词器) 。
you can create your own tokenizer from scratch.
4
00:00:11,310 --> 00:00:15,000
-要创建自己的分词器,你必须考虑
+要创建自己的 tokenizer ,你必须考虑
To create your own tokenizer, you will have to think about
5
00:00:15,000 --> 00:00:18,180
-令牌化中涉及的每个操作。
+分词化中涉及的每个操作。
each of the operations involved in tokenization.
6
@@ -50,27 +50,27 @@ I advise you to go and see the videos linked below.
11
00:00:34,531 --> 00:00:37,110
-后处理收集所有修改
+后处理包括所有修改
The post processing gathers all the modifications
12
00:00:37,110 --> 00:00:40,860
-我们将对标记化文本执行。
+我们将对分词化文本执行的。
that we will carry out on the tokenized text.
13
00:00:40,860 --> 00:00:43,890
-它可以包括添加特殊令牌,
+它可以包括添加特殊 token ,
It can include the addition of special tokens,
14
00:00:43,890 --> 00:00:46,290
-创建一个意图面具,
+创建一个意图掩码,
the creation of an intention mask,
15
00:00:46,290 --> 00:00:48,903
-还会生成令牌 ID 列表。
+还会生成 token 的 ID 列表。
but also the generation of a list of token IDs.
16
@@ -90,22 +90,22 @@ from the sequence of IDs in a sentence.
19
00:00:58,890 --> 00:01:01,800
-例如,你可以看到主题标签
+例如,你可以看到 hash 标签
For example, you can see that the hashtags
20
00:01:01,800 --> 00:01:04,260
-已被删除,并且令牌
+已被删除,并且 token
have been removed, and the tokens
21
00:01:04,260 --> 00:01:07,323
-今天的作文词都归在了一起。
+今天的词都归在了一起。
composing the word today have been grouped together.
22
00:01:10,860 --> 00:01:13,440
-在快速分词器中,所有这些组件
+在快速 tokenizer 中,所有这些组件
In a fast tokenizer, all these components
23
@@ -115,12 +115,12 @@ are gathered in the backend_tokenizer attribute.
24
00:01:17,370 --> 00:01:20,070
-正如你在这个小代码片段中看到的那样,
+正如你在这个小片代码中看到的那样,
As you can see with this small code snippet,
25
00:01:20,070 --> 00:01:22,020
-它是分词器的一个实例
+它是 tokenizer 的一个实例
it is an instance of a tokenizer
26
@@ -130,7 +130,7 @@ from the tokenizers library.
27
00:01:25,740 --> 00:01:28,263
-因此,要创建自己的分词器,
+因此,要创建自己的 tokenizer ,
So, to create your own tokenizer,
28
@@ -140,22 +140,22 @@ you will have to follow these steps.
29
00:01:33,270 --> 00:01:35,433
-首先,创建一个训练数据集。
+第一,创建一个训练数据集。
First, create a training dataset.
30
00:01:36,690 --> 00:01:39,000
-二、创建和训练分词器
+第二, 创建和训练 tokenizer
Second, create and train a tokenizer
31
00:01:39,000 --> 00:01:41,700
-与变压器库。
+用 transformer 库。
with the transformer library.
32
00:01:41,700 --> 00:01:46,700
-第三,将此分词器加载到转换器分词器中。
+第三,将此 tokenizer 加载为 transformer 的 tokenizer 中。
And third, load this tokenizer into a transformer tokenizer.
33
@@ -195,17 +195,17 @@ perfect for the example.
40
00:02:12,210 --> 00:02:13,920
-我们主要攻击这里,
+我们主要修改这里,
We attack here the big part,
41
00:02:13,920 --> 00:02:17,373
-使用标记器库设计我们的标记器。
+使用 tokenizer 库设计我们的 tokenizer 。
the design of our tokenizer with the tokenizer library.
42
00:02:18,750 --> 00:02:22,020
-我们首先初始化一个分词器实例
+我们首先初始化一个 tokenizer 实例
We start by initializing a tokenizer instance
43
@@ -255,7 +255,7 @@ and the second one isolating the punctuation marks.
52
00:03:03,360 --> 00:03:06,360
-现在,我们可以定义允许我们的培训师
+现在,我们可以定义允许我们的训练方法
Now, we can define the trainer that will allow us
53
@@ -265,7 +265,7 @@ to train the WordPiece model chosen at the beginning.
54
00:03:11,160 --> 00:03:12,600
-为了开展培训,
+为了开展训练,
To carry out the training,
55
@@ -280,7 +280,7 @@ Here we choose 25,000.
57
00:03:17,910 --> 00:03:21,270
-我们还需要公布特殊代币
+我们还需要公布特殊 token
And we also need to announce the special tokens
58
@@ -305,7 +305,7 @@ Once the model has been trained, we can retrieve
62
00:03:42,570 --> 00:03:46,560
-特殊类别和分离标记的 ID,
+特殊类别和分离 token 的 ID,
the IDs of the special class and separation tokens,
63
@@ -320,12 +320,12 @@ Thanks to the TemplateProcessing class,
65
00:03:52,860 --> 00:03:57,210
-我们可以在每个序列的开头添加 CLS 标记,
+我们可以在每个序列的开头添加 CLS token ,
we can add the CLS token at the beginning of each sequence,
66
00:03:57,210 --> 00:04:00,120
-和序列末尾的 SEP 令牌,
+和序列末尾的 SEP token ,
and the SEP token at the end of the sequence,
67
@@ -345,12 +345,12 @@ which will allow us to remove the hashtags
70
00:04:12,690 --> 00:04:14,610
-在令牌的开头
+在 token 的开头
at the beginning of the tokens
71
00:04:14,610 --> 00:04:17,193
-必须重新附加到以前的令牌。
+必须重新附加到以前的 token 。
that must be reattached to the previous token.
72
@@ -365,12 +365,12 @@ You have all the necessary lines of code
74
00:04:25,110 --> 00:04:29,403
-使用分词器库定义你自己的分词器。
+使用 tokenizer 库定义你自己的 tokenizer 。
to define your own tokenizer with the tokenizer library.
75
00:04:30,960 --> 00:04:32,280
-现在我们有了一个全新的分词器
+现在我们有了一个全新的 tokenizer
Now that we have a brand new tokenizer
76
@@ -380,7 +380,7 @@ with the tokenizer library, we just have to load it
77
00:04:35,400 --> 00:04:38,463
-从 transformers 库中转换为快速分词器。
+从 transformers 库中转换为快速 tokenizer 。
into a fast tokenizer from the transformers library.
78
@@ -390,7 +390,7 @@ Here again, we have several possibilities.
79
00:04:42,630 --> 00:04:44,430
-我们可以在泛型类中加载它,
+我们可以在一般类中加载它,
We can load it in the generic class,
80
@@ -410,7 +410,7 @@ I really hope this video has helped you understand
83
00:04:59,670 --> 00:05:02,133
-如何创建自己的分词器,
+如何创建自己的 tokenizer ,
how you can create your own tokenizer,
84
@@ -420,12 +420,12 @@ and that you are ready now to navigate
85
00:05:06,240 --> 00:05:08,070
-分词器库文档
+ tokenizer 库文档
the tokenizer library documentation
86
00:05:08,070 --> 00:05:11,367
-为你的全新分词器选择组件。
+为你的全新 tokenizer 选择组件。
to choose the components for your brand new tokenizer.
87
diff --git a/subtitles/zh-CN/68_data-collators-a-tour.srt b/subtitles/zh-CN/68_data-collators-a-tour.srt
index c5d93c002..16805049c 100644
--- a/subtitles/zh-CN/68_data-collators-a-tour.srt
+++ b/subtitles/zh-CN/68_data-collators-a-tour.srt
@@ -60,22 +60,22 @@ What are data collators?
13
00:00:27,600 --> 00:00:30,480
-数据整理者整理数据。
+数据整理器整理数据。
Data collators collate data.
14
00:00:30,480 --> 00:00:31,800
-那不是很有帮助。
+好像和没说一样。
That's not that helpful.
15
00:00:31,800 --> 00:00:35,023
-但更具体地说,他们整理了一份样本清单
+更具体地说,他们整理了一份样本清单
But to be more specific, they put together a list of samples
16
00:00:35,023 --> 00:00:37,830
-成一个单一的训练小批量。
+组成一个单独的小批量训练数据。
into a single training minibatch.
17
@@ -85,7 +85,7 @@ For some tasks,
18
00:00:38,910 --> 00:00:41,670
-数据整理器可以非常简单。
+数据整理器可以非常简单明了。
the data collator can be very straightforward.
19
@@ -95,17 +95,17 @@ For example, when you're doing sequence classification,
20
00:00:44,820 --> 00:00:47,010
-数据整理器提供你真正需要的一切
+你真正需要数据整理器做的是
all you really need from your data collator
21
00:00:47,010 --> 00:00:49,860
-是它将你的样品填充到相同的长度
+将你的样本数据填充到相同的长度
is that it pads your samples to the same length
22
00:00:49,860 --> 00:00:52,413
-并将它们连接成一个张量。
+并将它们连接成一个单独的 Tensor。
and concatenates them into a single Tensor.
23
@@ -115,12 +115,12 @@ But for other workflows, data collators can be quite complex
24
00:00:57,750 --> 00:00:59,910
-因为他们处理一些预处理
+因为他们为特定任务
as they handle some of the preprocessing
25
00:00:59,910 --> 00:01:02,340
-该特定任务所需。
+完成一些预处理操作。
needed for that particular task.
26
@@ -130,12 +130,12 @@ So, if you want to use a data collator,
27
00:01:04,800 --> 00:01:07,860
-对于 PyTorch 用户,你通常通过数据整理器
+对于 PyTorch 用户,你通常将数据整理器
for PyTorch users, you usually pass the data collator
28
00:01:07,860 --> 00:01:09,780
-到你的 Trainer 对象。
+传递到你的 Trainer 对象。
to your Trainer object.
29
@@ -155,7 +155,7 @@ is to pass it to the to_tf_dataset method of your dataset.
32
00:01:16,860 --> 00:01:20,198
-这会给你一个 tensorflow_tf_data.dataset
+这会给你 tensorflow_tf_data.dataset
And this will give you a tensorflow_tf_data.dataset
33
@@ -180,17 +180,17 @@ Also note that all of our collators
37
00:01:30,180 --> 00:01:32,610
-采用 return_tensors 参数。
+可接受 return_tensors 参数。
take a return_tensors argument.
38
00:01:32,610 --> 00:01:35,737
-你可以将其设置为 “pt” 以获取 PyTorch 张量,
+你可以将其设置为 “pt” 以获取 PyTorch Tensor,
You can set this to "pt" to get PyTorch Tensors,
39
00:01:35,737 --> 00:01:37,920
-"tf" 获取 TensorFlow 张量,
+"tf" 获取 TensorFlow Tensor,
"tf" to get TensorFlow Tensors,
40
@@ -210,12 +210,12 @@ the default value is "pt",
43
00:01:44,460 --> 00:01:47,160
-所以 PyTorch 用户甚至不必设置这个参数
+所以 PyTorch 用户甚至大多数情况下
so PyTorch users don't even have to set this argument
44
00:01:47,160 --> 00:01:48,270
-大多数时候。
+不必设置这个参数。
most of the time.
45
@@ -225,7 +225,7 @@ And so as a result, they're often totally unaware
46
00:01:50,820 --> 00:01:52,713
-这个论点甚至存在。
+这个参数的存在。
that this argument even exists.
47
@@ -245,7 +245,7 @@ are often the most blind to its existence.
50
00:02:00,690 --> 00:02:01,920
-不过还好,回来了。
+好吧好吧,扯远了。
But okay, coming back.
51
@@ -255,17 +255,17 @@ Let's see how some specific data collators work in action.
52
00:02:06,540 --> 00:02:08,070
-虽然再次记住如果没有
+虽然再次记住
Although again, remember if none
53
00:02:08,070 --> 00:02:09,900
-的内置数据整理器可以满足你的需求,
+如果内置数据整理器无法满足你的需求,
of the built-in data collators do what you need,
54
00:02:09,900 --> 00:02:13,650
-你总是可以自己写,而且它们通常很短。
+你可以自己实现数据整理器,而且它们通常很短。
you can always write your own and they're often quite short.
55
@@ -280,12 +280,12 @@ These are DefaultDataCollator and DataCollatorWithPadding.
57
00:02:21,420 --> 00:02:22,830
-这些是你应该使用的
+如果在准备训练之前
These are the ones you should use
58
00:02:22,830 --> 00:02:24,720
-如果你的标签很简单
+你的标签很简单
if your labels are straightforward
59
@@ -295,7 +295,7 @@ and your data doesn't need any special processing
60
00:02:27,300 --> 00:02:29,673
-在准备训练之前。
+就可以使用上述的数据整理器
before being ready for training.
61
@@ -305,7 +305,7 @@ Notice that because different models
62
00:02:31,272 --> 00:02:33,690
-有不同的填充标记,
+有不同的填充词元,
have different padding tokens,
63
@@ -320,7 +320,7 @@ so it knows how to pad sequences properly.
65
00:02:40,150 --> 00:02:44,790
-默认的数据整理器不需要 Tokenizer 来工作,
+默认的数据整理器不需要 Tokenizer 工作,
The default data collator doesn't need a Tokenizer to work,
66
@@ -360,12 +360,12 @@ they're usually designed to handle one specific task.
73
00:02:59,490 --> 00:03:01,050
-所以,我要在这里展示一对。
+所以,我要在这里展示两个整理器。
And so, I'm going to show a couple here.
74
00:03:01,050 --> 00:03:04,320
-这些是 DataCollatorForTokenClassification
+它们是 DataCollatorForTokenClassification
These are DataCollatorForTokenClassification
75
@@ -375,7 +375,7 @@ and DataCollatorForSeqToSeq.
76
00:03:06,447 --> 00:03:09,540
-以及这些任务需要特殊整理器的原因
+而这些任务需要特殊整理器的原因
And the reason these tasks need special collators
77
@@ -385,7 +385,7 @@ is because their labels are variable in length.
78
00:03:12,600 --> 00:03:15,960
-在令牌分类中,每个令牌都有一个标签,
+在词元分类中,每个词元都有一个标签,
In token classification there's one label for each token,
79
@@ -400,32 +400,32 @@ is the length of the sequence.
81
00:03:20,280 --> 00:03:23,520
-而在 SeqToSeq 中,标签是一系列标记
+而在 SeqToSeq 中,标签是一系列词元
While in SeqToSeq the labels are a sequence of tokens
82
00:03:23,520 --> 00:03:24,780
-可以是可变长度,
+它可以是可变长度,
that can be variable length,
83
00:03:24,780 --> 00:03:25,800
-那可能会非常不同
+那可能会和输入序列
that can be very different
84
00:03:25,800 --> 00:03:28,200
-从输入序列的长度。
+的长度不同。
from the length of the input sequence.
85
00:03:28,200 --> 00:03:32,880
-所以在这两种情况下,我们处理整理那批
+所以在这两种情况下,我们通过填充标签
So in both of these cases, we handle collating that batch
86
00:03:32,880 --> 00:03:35,280
-也通过填充标签,
+处理整理那批数据,
by padding the labels as well,
87
@@ -435,17 +435,17 @@ as you can see here in this example.
88
00:03:37,410 --> 00:03:40,770
-因此,需要填充输入和标签
+因此,如果我们想加入可变长度的样本
So, inputs and the labels will need to be padded
89
00:03:40,770 --> 00:03:43,860
-如果我们想加入可变长度的样本
+到同一个小批量数据,
if we want to join samples of variable length
90
00:03:43,860 --> 00:03:45,120
-进入同一个小批量。
+就需要填充输入和标签。
into the same minibatch.
91
@@ -460,17 +460,17 @@ and that's exactly what these data collators will do for us
93
00:03:50,460 --> 00:03:52,383
-你知道,为了这个特定的任务。
+你懂的,为了这个特定的任务。
you know, for this particular task.
94
00:03:53,820 --> 00:03:56,070
-所以,有一个最终的数据整理器
+那么,还有最后一个
So, there's one final data collator
95
00:03:56,070 --> 00:03:58,560
-我也想在本次讲座中向你展示。
+想在这里与大家分享的数据整理器。
I want to show you as well just in this lecture.
96
@@ -480,17 +480,17 @@ And that's the DataCollatorForLanguageModeling.
97
00:04:01,410 --> 00:04:03,390
-所以,这非常重要,首先,
+嗯,它非常重要,首先,
So, it's very important, and it's firstly,
98
00:04:03,390 --> 00:04:05,820
-因为语言模型是如此基础
+因为语言模型是我们这段时间以来
because language models are just so foundational
99
00:04:05,820 --> 00:04:09,720
-这些天我们用 NLP 所做的一切。
+处理 NLP 所涉及的最基本的概念。
to do for everything we do with NLP these days.
100
@@ -500,7 +500,7 @@ But secondly, because it has two modes
101
00:04:12,060 --> 00:04:14,760
-做两件截然不同的事情。
+可以完成两件截然不同的事情。
that do two very different things.
102
@@ -510,7 +510,7 @@ So you choose which mode you want with the mlm argument.
103
00:04:19,230 --> 00:04:22,470
-将其设置为 True 以进行掩码语言建模,
+将其设置为 True 以进行屏蔽语言建模,
Set it to True for masked language modeling,
104
@@ -535,7 +535,7 @@ The model is just making predictions
108
00:04:32,640 --> 00:04:35,460
-接下来是什么标记,所以你的标签
+接下来是什么词元,所以你的标签
for what token comes next, and so your labels
109
@@ -545,7 +545,7 @@ are more or less just a copy of your inputs,
110
00:04:37,800 --> 00:04:39,090
-整理人会处理
+整理器会处理你的输入
and the collator will handle that
111
@@ -560,7 +560,7 @@ When you set mlm to True though,
113
00:04:44,910 --> 00:04:46,786
-你会得到完全不同的行为,
+你会得到完全不同的效果,
you get quite different behavior,
114
@@ -575,7 +575,7 @@ and that's because setting mlm to True
116
00:04:51,660 --> 00:04:53,550
-表示掩码语言建模
+表示屏蔽语言建模
means masked language modeling
117
@@ -585,7 +585,7 @@ and that means the labels need to be,
118
00:04:55,680 --> 00:04:58,080
-你知道,输入需要被屏蔽。
+你懂的,输入需要被屏蔽。
you know, the inputs need to be masked.
119
@@ -605,7 +605,7 @@ the model is not predicting the next word,
122
00:05:06,570 --> 00:05:09,240
-相反,我们随机屏蔽掉一些标记
+相反,我们随机屏蔽掉一些词元
instead we randomly mask out some tokens
123
@@ -615,12 +615,12 @@ and the model predicts all of them at once.
124
00:05:11,130 --> 00:05:12,780
-所以,它试图填补空白
+所以,对于那些被屏蔽的词元
So, it tries to kinda fill in the blanks
125
00:05:12,780 --> 00:05:14,790
-对于那些被屏蔽的令牌。
+它试图填补空白。
for those masked tokens.
126
@@ -635,72 +635,72 @@ If we follow the protocol from the original BERT paper,
128
00:05:21,330 --> 00:05:23,970
-我们需要用掩码标记替换一些标记,
+我们需要用掩码词元替换一些词元,
we need to replace some tokens with a masked token,
129
00:05:23,970 --> 00:05:26,190
-一些其他带有随机令牌的令牌,
+一些其他带有随机词元的词元,
some other tokens with a random token,
130
00:05:26,190 --> 00:05:29,820
-然后保持第三组标记不变。
+然后保持第三组词元不变。
and then keep a third set of tokens unchanged.
131
00:05:29,820 --> 00:05:30,840
-是的,这不是讲座
+好吧,具体细节和我们这么做的原因
Yeah, this is not the lecture
132
00:05:30,840 --> 00:05:33,903
-进入细节或我们为什么这样做。
+就不在这里和大家详细说明了。
to go into the specifics of that or why we do it.
133
00:05:33,903 --> 00:05:36,660
-你可以随时查看原始的 BERT 论文
+如果你好奇的话,可以随时查看原始的
You can always check out the original BERT paper
134
00:05:36,660 --> 00:05:37,493
-如果你好奇的话。
+BERT 论文。
if you're curious.
135
00:05:37,493 --> 00:05:39,620
-写得很好。这很容易理解。
+它写得非常好。也很容易理解。
It's well written. It's easy to understand.
136
00:05:40,650 --> 00:05:44,190
-这里要知道的主要事情是它可能是一个真正的痛苦
+这里要知道的主要事情是自己实现起来
The main thing to know here is that it can be a real pain
137
00:05:44,190 --> 00:05:46,770
-并且自己实施起来非常复杂。
+是一件非常痛苦的事情,而且也非常地复杂。
and quite complex to implement that yourself.
138
00:05:46,770 --> 00:05:49,740
-但是 DataCollatorForLanguageModeling 会为你做
+但是当你将 mlm 设置为 True 时,DataCollatorForLanguageModeling
But DataCollatorForLanguageModeling will do it for you
139
00:05:49,740 --> 00:05:51,750
-当你将 mlm 设置为 True 时。
+会为你完成。
when you set mlm to True.
140
00:05:51,750 --> 00:05:54,690
-这是一个更复杂的例子
+这是一些数据整理器所完成的
And that's an example of the more intricate
141
00:05:54,690 --> 00:05:57,870
-我们的一些数据整理人员所做的预处理。
+更加复杂的预处理操作。
preprocessing that some of our data collators do.
142
@@ -715,7 +715,7 @@ So, this covers the most commonly used data collators
144
00:06:01,920 --> 00:06:03,480
-以及它们用于执行的任务。
+以及它们所针对的具体任务。
and the tasks they're used for.
145
@@ -725,7 +725,7 @@ And hopefully, now you'll know when to use data collators
146
00:06:06,990 --> 00:06:10,833
-以及为你的特定任务选择哪一个。
+以及该为你的特定任务选择哪一个。
and which one to choose for your specific task.
147
diff --git a/subtitles/zh-CN/72_asking-for-help-on-the-forums.srt b/subtitles/zh-CN/72_asking-for-help-on-the-forums.srt
index 3ccb3dda1..e4aa42002 100644
--- a/subtitles/zh-CN/72_asking-for-help-on-the-forums.srt
+++ b/subtitles/zh-CN/72_asking-for-help-on-the-forums.srt
@@ -20,17 +20,17 @@
5
00:00:10,020 --> 00:00:11,640
-如果你有一般性问题
+如果你有一些问题
If you have a general question
6
00:00:11,640 --> 00:00:13,110
-或者正在调试你的代码,
+或者正在调试你代码中的 bug,
or are looking to debug your code,
7
00:00:13,110 --> 00:00:15,540
-论坛是提问的地方。
+那你可以去论坛提问。
the forums are the place to ask.
8
@@ -40,17 +40,17 @@ In this video we will teach you
9
00:00:16,710 --> 00:00:18,030
-如何写出一个好问题,
+如何正确地在论坛中提问,
how to write a good question,
10
00:00:18,030 --> 00:00:20,380
-以最大限度地提高你获得答案的机会。
+以使你尽快获得答案。
to maximize the chances you will get an answer.
11
00:00:21,570 --> 00:00:23,970
-首先,登录论坛,
+首先,为了登录论坛,
First things first, to login on the forums,
12
@@ -60,112 +60,112 @@ you need a Hugging Face account.
13
00:00:25,920 --> 00:00:27,750
-如果你还没有创建一个,
+如果你还没有 Hugging Face 帐户,
If you haven't created one already,
14
00:00:27,750 --> 00:00:31,080
-转到 hf.co 并单击注册。
+就访问 hf.co,然后单击注册。
go to hf.co and click sign up.
15
00:00:31,080 --> 00:00:32,780
-下面还有一个直接链接。
+也可以直接点击下面的链接。
There is also a direct link below.
16
00:00:33,750 --> 00:00:35,160
-填写你的邮箱和密码,
+首先需要填写你的邮箱和密码,
Fill your email and password,
17
00:00:35,160 --> 00:00:37,410
-然后继续选择你的用户名的步骤
+然后填写你的用户名
then continue the steps to pick your username
18
00:00:37,410 --> 00:00:38,860
-并更新头像。
+然后再更新一下头像。
and update a profile picture.
19
00:00:39,720 --> 00:00:43,200
-完成后,去 discuss.huggingface.co,
+这些步骤完成后,访问 discuss.huggingface.co,
Once this is done, go to discuss.huggingface.co,
20
00:00:43,200 --> 00:00:45,630
-下方链接,点击登录。
+或者点击下方的链接,然后点击登录(Log In)。
link below, and click log in.
21
00:00:45,630 --> 00:00:47,033
-使用与以下相同的登录信息
+使用前面注册的 Hugging Face 账户信息
Use the same login information as
22
00:00:47,033 --> 00:00:48,693
-Hugging Face 网站。
+登录。
for the Hugging Face website.
23
00:00:49,890 --> 00:00:51,300
-你可以通过单击搜索论坛
+你可以单击放大镜图标
You can search the forums by clicking
24
00:00:51,300 --> 00:00:52,800
-在放大镜上。
+来在论坛中搜索。
on the magnifying glass.
25
00:00:52,800 --> 00:00:55,710
-可能有人已经在某个主题中问过你的问题。
+因为可能有人已经在某个主题(Topic)中问过你想问的问题。
Someone may have already asked your question in a topic.
26
00:00:55,710 --> 00:00:58,260
-如果你发现你无法作为新用户发布新主题,
+如果你发现你新注册的账户无法发布新主题,
If you find you can't post a new topic as a new user,
27
00:00:58,260 --> 00:01:01,290
-这可能是因为反垃圾邮件过滤器。
+这可能是因为论坛的反垃圾信息过滤机制。
it may be because of the antispam filters.
28
00:01:01,290 --> 00:01:03,750
-确保你花一些时间阅读现有主题
+你需要花一段时间来阅读现有的主题,
Make sure you spend some time reading existing topics
29
00:01:03,750 --> 00:01:05,370
-停用它。
+然后就可以发布新主题了。
to deactivate it.
30
00:01:05,370 --> 00:01:07,590
-当你确定你的问题还没有被问到时,
+当你确定你的问题还没有人问过时,
When you're sure your question hasn't been asked yet,
31
00:01:07,590 --> 00:01:09,660
-单击新主题按钮。
+单击新主题(New Topic)按钮。
click on the new topic button.
32
00:01:09,660 --> 00:01:12,600
-对于此示例,我们将使用以下代码,
+在这里,我们将用
For this example, we'll use the following code,
33
00:01:12,600 --> 00:01:13,860
-产生错误,
+「出现错误时该怎么办」视频中
that produces an error,
34
00:01:13,860 --> 00:01:16,660
-正如我们在 “遇到错误时该怎么办” 视频中看到的那样。
+报错的代码作为例子
as we saw in the "What to do when I get an error" video.
35
@@ -180,7 +180,7 @@ Since our error has to do with the Transformers library,
37
00:01:23,790 --> 00:01:24,903
-我们选择这个类别。
+所以我们选择这个类别。
we pick this category.
38
@@ -190,12 +190,12 @@ Next, choose a title that summarizes your error well.
39
00:01:29,880 --> 00:01:32,300
-不要太含糊,否则用户会遇到与你相同的错误
+标题不要太模糊,否则如果以后有用户遇到了与你相同的错误,
Don't be too vague or users that get the same error you did
40
00:01:32,300 --> 00:01:34,773
-以后将无法找到你的主题。
+那么将无法搜索到你的主题。
in the future won't be able to find your topic.
41
@@ -205,47 +205,47 @@ Once you have finished typing your topic title,
42
00:01:38,370 --> 00:01:40,170
-确保问题没有得到回答
+确保你要问的问题在建议的相似主题中
make sure the question hasn't been answered
43
00:01:40,170 --> 00:01:42,690
-在 Discourse 主题中建议你。
+没有出现。
in the topics Discourse suggests you.
44
00:01:42,690 --> 00:01:44,190
-单击十字删除该窗口
+当你仔细检查之后,
Click on the cross to remove that window
45
00:01:44,190 --> 00:01:46,230
-当你仔细检查时。
+就可以单击叉号关闭该窗口。
when you have double-checked.
46
00:01:46,230 --> 00:01:49,710
-这是发布错误时不应执行的操作的示例。
+这里展示的是一个不好的提问示例。
This is an example of what not to do when posting an error.
47
00:01:49,710 --> 00:01:51,120
-消息非常模糊,
+这个示例中对问题的描述非常模糊,
The message is very vague,
48
00:01:51,120 --> 00:01:53,370
-所以没有人能猜出哪里出了问题
+所以没有人能简单地判断出哪里出了问题
so no one else will be able to guess what went wrong
49
00:01:53,370 --> 00:01:55,623
-对你来说,它标记了太多人。
+另外,在这个问题中标记(@)了太多人。
for you, and it tags too many people.
50
00:01:56,490 --> 00:01:58,740
-标记人,尤其是版主,
+标记别人,尤其是版主,
Tagging people, especially moderators,
51
@@ -255,57 +255,57 @@ might have the opposite effect of what you want.
52
00:02:01,470 --> 00:02:04,380
-当你向他们发送通知时,他们会收到很多通知,
+当你向他们发送通知的同时,他们也会收到很多别的通知,
As you send them a notification, and they get plenty,
53
00:02:04,380 --> 00:02:06,300
-他们可能不会费心回复你,
+所以他们可能不会费心回复你,
they will probably not bother replying to you,
54
00:02:06,300 --> 00:02:09,300
-而你没有标记的用户可能会忽略这些问题,
+而你没有标记的用户看到你标记了其他人,
and users you didn't tag will probably ignore the questions,
55
00:02:09,300 --> 00:02:11,430
-因为他们看到被标记的用户。
+可能就会忽略这个问题。
since they see tagged users.
56
00:02:11,430 --> 00:02:13,697
-仅在你完全确定时才标记用户
+仅在你完全确定某个人特别适合回答这个问题时
Only tag a user when you are completely certain
57
00:02:13,697 --> 00:02:16,097
-他们是回答你问题的最佳场所。
+才去标记这个人。
they are the best place to answer your question.
58
00:02:17,730 --> 00:02:20,370
-文本要准确,如果出现错误
+文字描述要准确,如果你的某一段代码
Be precise in your text, and if you have an error coming
59
00:02:20,370 --> 00:02:22,710
-从一段特定的代码,包括该代码
+产生了错误,那么就要把这段代码
from a specific piece of code, include that code
60
00:02:22,710 --> 00:02:24,030
-在你的帖子中。
+包含在你的帖子中。
in your post.
61
00:02:24,030 --> 00:02:27,210
-为了确保你的帖子看起来不错,请提出你的问题
+为了确保你的帖子看起来美观,请把代码
To make sure your post looks good, place your question
62
00:02:27,210 --> 00:02:30,060
-在像这样的三个反引号之间。
+放在包含三个反引号(backticks)的两行之间。
between three backticks like this.
63
@@ -315,7 +315,7 @@ You can check on the right
64
00:02:30,990 --> 00:02:32,943
-发布后你的帖子将如何显示。
+帖子发布后的预览效果。
how your post will appear once posted.
65
@@ -325,47 +325,47 @@ If your question is about an error,
66
00:02:35,850 --> 00:02:38,640
-最好包括完整的回溯。
+最好包括完整的报错信息。
it's even better to include the full traceback.
67
00:02:38,640 --> 00:02:41,610
-正如 “遇到错误时该怎么办” 视频中所述,
+正如「出现错误时该怎么办」视频中所述,
As explained in the "What to do when I get an error" video,
68
00:02:41,610 --> 00:02:43,763
-如果你使用的是 Colab,请展开回溯。
+如果你使用的是 Colab,请展开回溯(traceback)。
expand the traceback if you're on Colab.
69
00:02:44,769 --> 00:02:45,990
-就像代码一样,把它
+和代码一样,把它们
Like for the code, put it
70
00:02:45,990 --> 00:02:48,300
-在包含三个反引号的两行之间
+放在包含三个反引号的两行之间
between two lines containing three backticks
71
00:02:48,300 --> 00:02:50,160
-正确格式化。
+看起来会比较美观。
for proper formatting.
72
00:02:50,160 --> 00:02:52,740
-我们最后的建议是记住要友善。
+我们最后的建议是语气要温和,
Our last advice is to remember to be nice.
73
00:02:52,740 --> 00:02:54,540
-一句 “请” 和一句 “谢谢” 将大有帮助
+使用「请」和「谢谢」将让别人
A "Please," and a "Thank you" will go a long way
74
00:02:54,540 --> 00:02:56,490
-让别人帮助你。
+更乐意帮助你。
into getting others to help you.
75
diff --git a/subtitles/zh-CN/73_debugging-the-training-pipeline-(pytorch).srt b/subtitles/zh-CN/73_debugging-the-training-pipeline-(pytorch).srt
index d12bee78e..c4b8ad020 100644
--- a/subtitles/zh-CN/73_debugging-the-training-pipeline-(pytorch).srt
+++ b/subtitles/zh-CN/73_debugging-the-training-pipeline-(pytorch).srt
@@ -5,18 +5,18 @@
2
00:00:08,760 --> 00:00:11,896
-你在运行 Trainer.train 时遇到
+你在运行 Trainer.train 时你会遇到的
you encounter when running Trainer.train
3
00:00:11,896 --> 00:00:15,066
-例如,我们将使用这个微调脚本
+作为一个例子,我们将使用这个脚本微调
As an example, we will use this script that finetunes
4
00:00:15,066 --> 00:00:17,760
-GLUE MNLI 数据集上的 bert 模型。
-a bert model on the GLUE MNLI dataset.
+一个 BERT 模型, 在 GLUE MNLI 数据集上。
+a BERT model on the GLUE MNLI dataset.
5
00:00:17,760 --> 00:00:19,470
@@ -25,7 +25,7 @@ Checkout the videos linked below
6
00:00:19,470 --> 00:00:21,840
-看看我们是如何得出这样一个脚本的。
+以看看我们是如何得出这样一个脚本的。
to see how we came to such a script.
7
@@ -40,7 +40,7 @@ Running the script gives us an error pretty quickly.
9
00:00:28,110 --> 00:00:29,040
-它发生在线上
+它发生在这一行
It happens at the line
10
@@ -55,12 +55,12 @@ according to the traceback.
12
00:00:32,850 --> 00:00:34,702
-这告诉我们那里有问题,
+这告诉我们这里有问题,
That tells us there is a problem there,
13
00:00:34,702 --> 00:00:37,881
-但问题可能来自许多不同的原因。
+但问题可能有许多不同的原因。
but the problem could come from many different causes.
14
@@ -70,7 +70,7 @@ To debug an error in a training,
15
00:00:39,330 --> 00:00:41,760
-你需要确保训练管道的每一步
+你需要确保训练 pipeline 的每一步
you need to make sure each step of the training pipeline
16
@@ -90,12 +90,12 @@ are correct,
19
00:00:47,040 --> 00:00:48,720
-你可以把它们批在一起,
+你可以把它们分批在一起,
you can batch them together,
20
00:00:48,720 --> 00:00:50,790
-通过模型喂养他们以获得损失,
+把他们通过模型以获得损失,
feed them through the model to get a loss,
21
@@ -115,7 +115,7 @@ So let's start by looking at the training dataset
24
00:00:57,810 --> 00:00:59,043
-这个培训师正在使用。
+这个 Trainer 正在使用。
this Trainer is using.
25
@@ -140,7 +140,7 @@ did not get input IDs
29
00:01:08,220 --> 00:01:11,100
-我们确实没有数据集中的那些。
+我们数据集中确实没有那些。
and we do not have those in the dataset indeed.
30
@@ -155,7 +155,7 @@ we can see we made a mistake
32
00:01:14,400 --> 00:01:17,400
-并将错误的数据集传递给培训师。
+并将错误的数据集传递给 Trainer 。
and passed the wrong datasets to the Trainer.
33
@@ -175,17 +175,17 @@ Inspecting the traceback
36
00:01:23,130 --> 00:01:25,860
-告诉我们当我们尝试创建批处理时会发生这种情况,
+告诉我们当我们尝试创建批处理时会发生,
tells us it happens when we try to create a batch,
37
00:01:25,860 --> 00:01:28,743
-专门用于对张量中的特征进行分组。
+特别对于对张量中的特征进行分组。
specifically to group the features in a tensor.
38
00:01:29,700 --> 00:01:32,610
-我们可以通过要求培训师给我们一批来确认这一点
+我们可以通过要求 Trainer 给我们一分批来确认这一点
We can confirm this by asking the Trainer to get us a batch
39
@@ -195,7 +195,7 @@ of the training data loader,
40
00:01:34,230 --> 00:01:35,913
-重现相同的错误。
+复现相同的错误。
which reproduces the same error.
41
@@ -210,12 +210,12 @@ we can then see they are not all of the same size.
43
00:01:42,870 --> 00:01:45,120
-这是因为我们还没有通过数据整理器
+这是因为我们还没有输入数据整理器
This is because we have not passed a data collator
44
00:01:45,120 --> 00:01:46,890
-对培训师进行填充
+对 Trainer 进行填充
to do the padding to the Trainer
45
@@ -230,7 +230,7 @@ Padding inside the Trainer is normally the default,
47
00:01:52,710 --> 00:01:55,380
-但前提是你将分词器提供给培训师,
+但前提是你将 tokenizer 提供给 Trainer ,
but only if you provide your tokenizer to the Trainer,
48
@@ -265,7 +265,7 @@ so you have to restart your notebook from the beginning
54
00:02:13,260 --> 00:02:16,950
-第二,追溯对那些人来说完全没用。
+第二,追溯对那些来说完全没用。
and two, the traceback is completely useless for those.
55
@@ -345,7 +345,7 @@ But the GPU still hasn't finished
70
00:02:54,180 --> 00:02:55,710
-模型的前向传递
+模型的前向传播
the forward pass of the model
71
@@ -390,13 +390,13 @@ who raises the error at the wrong place.
79
00:03:16,350 --> 00:03:18,720
-所以要调试这个,我们需要执行接下来的步骤
-So to debug this, we will need to execute the next steps
+所以要调试这个,我们需要执行
+So to debug this, we will need to execute
80
00:03:18,720 --> 00:03:21,211
-CPU 上的训练流水线。
-of the training pipeline on the CPU.
+接下来 CPU 上的训练流水线的步骤。
+the next steps of the training pipeline on the CPU.
81
00:03:21,211 --> 00:03:22,380
@@ -420,7 +420,7 @@ the error actually happens during the forward pass
85
00:03:28,620 --> 00:03:29,453
-模型的,
+对模型,
of the model,
86
@@ -490,12 +490,12 @@ but here is how we would debug the next step
99
00:04:00,960 --> 00:04:02,944
-管道,梯度计算,
+ pipeline ,梯度计算,
of the pipeline, gradient computation,
100
00:04:02,944 --> 00:04:05,850
-以及优化器步骤。
+以及优化器更新。
as well as the optimizer step.
101
diff --git a/subtitles/zh-CN/74_debugging-the-training-pipeline-(tensorflow).srt b/subtitles/zh-CN/74_debugging-the-training-pipeline-(tensorflow).srt
index 0bf09b45a..176dbbe54 100644
--- a/subtitles/zh-CN/74_debugging-the-training-pipeline-(tensorflow).srt
+++ b/subtitles/zh-CN/74_debugging-the-training-pipeline-(tensorflow).srt
@@ -90,7 +90,7 @@ So, this is going to be a video about what to do
19
00:00:50,370 --> 00:00:52,410
-当你遇到那些噩梦中的一个错误时
+当你遇到那些噩梦般的一个错误时
when you run into one of those nightmare bugs
20
@@ -135,7 +135,7 @@ First, we do all our imports, we load a dataset,
28
00:01:16,410 --> 00:01:20,280
-我们创建了分词器并对数据集进行分词。
+我们创建了 tokenizer 并对数据集进行分词。
we create our tokenizer and we tokenize the dataset.
29
@@ -150,12 +150,12 @@ so that's tf.data.Dataset,
31
00:01:26,100 --> 00:01:28,500
-这样我们就可以适应它们,
+这样我们就可以拟合它们,
and that's so that we can run fit on them,
32
00:01:28,500 --> 00:01:31,170
-然后我们从预训练的检查点加载我们的模型,
+然后我们从预训练的 checkpoint 加载我们的模型,
and then we load our model from a pretrained checkpoint,
33
@@ -205,7 +205,7 @@ We tried to train on our data, but we got no gradient?
42
00:01:55,470 --> 00:01:59,130
-这很令人困惑,我的意思是,我们如何开始
+这很令人困惑,我的意思是,我们从何开始
It's pretty perplexing, I mean, how do we even begin
43
@@ -275,7 +275,7 @@ and that's because it's right at the end
56
00:02:31,560 --> 00:02:33,990
-的数据管道。
+的数据 pipeline 。
of the data pipeline.
57
@@ -285,7 +285,7 @@ And so that means that if those outputs are good,
58
00:02:36,990 --> 00:02:39,990
-你可以保证你的数据管道运行良好。
+你可以保证你的数据 pipeline 运行良好。
you're guaranteed that your data pipeline is working well.
59
@@ -300,7 +300,7 @@ for one iteration and then breaking,
61
00:02:44,790 --> 00:02:46,980
-这给了我们一个批次。
+这给了我们一个分批。
and that gives us a single batch.
62
@@ -360,7 +360,7 @@ the labels need to be passed in the input dictionary,
73
00:03:15,960 --> 00:03:17,940
-模型可以看到它们的地方。
+其模型可以看到它们。
where the model can see them.
74
@@ -430,7 +430,7 @@ or we keep using Keras losses
87
00:03:46,980 --> 00:03:50,520
-但我们将标签移动到 Keras 期望的位置。
+但我们将标签移动到 Keras 期望的地方。
but we move the labels to the place Keras expects them.
88
@@ -465,7 +465,7 @@ So we recompile with that, we call model.fit, what happens?
94
00:04:08,220 --> 00:04:13,050
-好吧,这次它运行了,但现在我们失去了 NaN。
+好吧,这次它运行了,但现在我们消失了 NaN。
Well, it runs this time but now we get a loss of NaN.
95
@@ -495,7 +495,7 @@ all the weights are NaN as well, as well as the loss.
100
00:04:27,600 --> 00:04:30,810
-所以一旦一个 NaN 悄悄进入你的计算,
+所以一旦一个 NaN 悄悄爬进你的计算,
So once a single NaN creeps into your computations,
101
@@ -515,17 +515,17 @@ it gets to the gradient,
104
00:04:37,530 --> 00:04:38,910
-然后一旦它处于渐变中
+然后一旦它处于梯度中
and then once it's in the gradient
105
00:04:38,910 --> 00:04:41,280
-它进入重量更新,
+它进入权重更新,
it enters the weight updates,
106
00:04:41,280 --> 00:04:43,980
-然后你所有的体重更新最终也都是 NaN 。
+然后你所有的权重更新最终也都是 NaN 。
and then all your weight updates end up as NaN as well.
107
@@ -630,8 +630,8 @@ because 0 is a label as well.
127
00:05:33,630 --> 00:05:35,070
-所以我们失去了 NaN
-So we got a loss of NaN
+所以我们得到大量 NaN
+So we got a lots of NaN
128
00:05:35,070 --> 00:05:37,887
@@ -655,7 +655,7 @@ so we can set num_labels=3
132
00:05:45,870 --> 00:05:48,540
-当我们初始化模型但来自_pretrained 时,
+当我们初始化模型用 from_pretrained 时,
when we initialize the model but from_pretrained,
133
@@ -670,7 +670,7 @@ So, now we think our data is good and our model is good
135
00:05:54,660 --> 00:05:56,220
-所以培训应该有效
+所以训练应该有效
and so training should work
136
@@ -695,7 +695,7 @@ but it's not going down very quickly
140
00:06:06,090 --> 00:06:07,770
-如果我们一直用完这个,
+如果我们一直运行这个,
and if we keep running this out,
141
@@ -790,7 +790,7 @@ So this learning rate is way too high
159
00:06:50,550 --> 00:06:52,530
-用于训练变压器模型,
+用于训练 transformer 模型,
for training transformer models,
160
@@ -820,7 +820,7 @@ So if you recompile with that,
165
00:07:06,990 --> 00:07:09,840
-你最终会发现培训确实有效。
+你最终会发现训练确实有效。
you'll find that training actually works, at last.
166
@@ -860,7 +860,7 @@ and see what the errors look like
173
00:07:23,490 --> 00:07:25,380
-以及如何接近他们,
+以及如何解决他们,
and how you can approach them,
174
diff --git a/subtitles/zh-CN/75_writing-a-good-issue.srt b/subtitles/zh-CN/75_writing-a-good-issue.srt
index 1afee7ceb..08a599f02 100644
--- a/subtitles/zh-CN/75_writing-a-good-issue.srt
+++ b/subtitles/zh-CN/75_writing-a-good-issue.srt
@@ -20,7 +20,7 @@ and you should always go there to report a bug
5
00:00:14,010 --> 00:00:16,020
-或要求新功能。
+或求新功能。
or ask for a new feature.
6
@@ -40,17 +40,17 @@ It's very important to write good issues
9
00:00:23,677 --> 00:00:27,232
-因为它将帮助你立即修复发现的错误。
+因为它将帮助你发现的错误被立即修复。
as it will help the bug you uncovered be fixed in no time.
10
00:00:27,232 --> 00:00:29,750
-对于这个视频,我们创建了一个版本的变形金刚
+对于这个视频,我们创建了一个版本的 Transformers
For this video, we have created a version of Transformers
11
00:00:29,750 --> 00:00:31,066
-有一个错误。
+带有一个错误。
with a bug.
12
@@ -70,7 +70,7 @@ In this version, the following example fails.
15
00:00:41,016 --> 00:00:42,472
-错误相当神秘
+错误是相当神秘的
The error is rather cryptic
16
@@ -105,7 +105,7 @@ In our case, inspecting the traceback,
22
00:00:56,802 --> 00:00:59,645
-我们看到失败发生在管道函数内部
+我们看到失败发生在 pipeline 数内部
we see the failure happens inside the pipeline function
23
@@ -150,7 +150,7 @@ but it also will make it easier for the maintainers
31
00:01:20,610 --> 00:01:22,320
-解决你的问题。
+来解决你的问题。
to fix your problem.
32
@@ -160,7 +160,7 @@ Here we can play around a bit more with this code
33
00:01:24,030 --> 00:01:26,460
-并注意错误发生在不同的检查点
+并注意错误发生在不同的 checkpoints
and notice the error happens for different checkpoints
34
@@ -175,7 +175,7 @@ and that it disappears when we use use_fast=False
36
00:01:31,262 --> 00:01:33,240
-在我们的分词器调用中。
+在我们的 tokenizer 调用中。
inside our tokenizer call.
37
@@ -190,7 +190,7 @@ that does not depend on any external files or data.
39
00:01:38,640 --> 00:01:40,350
-尝试用假值替换你的数据
+尝试用虚假的值替换你的数据
Try to replace your data by fake values
40
@@ -205,12 +205,12 @@ With all of this done,
42
00:01:43,620 --> 00:01:46,260
-我们准备开始写我们的问题。
+我们准备开始写我们的 issue 。
we are ready to start writing our issue.
43
00:01:46,260 --> 00:01:48,600
-单击错误报告旁边的按钮
+单击 Bug Report (错误报告) 旁边的按钮
Click on the button next to Bug Report
44
@@ -225,7 +225,7 @@ It will only take you a couple of minutes.
46
00:01:53,940 --> 00:01:56,460
-首先是正确命名你的问题。
+首先是正确命名你的 issue 。
The first thing is to properly name your issue.
47
@@ -280,7 +280,7 @@ There is a full list of usernames in the template.
57
00:02:23,010 --> 00:02:25,043
-由于我们的问题与分词器有关,
+由于我们的问题与 tokenizer 有关,
Since our issue has to do with tokenizers,
58
@@ -350,7 +350,7 @@ With all of this, you should expect an answer
71
00:02:57,030 --> 00:02:59,880
-非常快地解决你的问题,希望能快速解决。
+非常快地解决你的 issue ,希望能快速解决。
to your issue pretty fast and hopefully a quick fix.
72
diff --git a/utils/generate_subtitles.py b/utils/generate_subtitles.py
index 31dccbe2c..7de26249e 100644
--- a/utils/generate_subtitles.py
+++ b/utils/generate_subtitles.py
@@ -1,31 +1,45 @@
import pandas as pd
-from tqdm.auto import tqdm
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import SRTFormatter
from youtubesearchpython import Playlist
from pathlib import Path
import argparse
-import sys
+COURSE_VIDEOS_PLAYLIST = "https://youtube.com/playlist?list=PLo2EIpI_JMQvWfQndUesu0nPBAtZ9gP1o"
+TASK_VIDEOS_PLAYLIST = "https://youtube.com/playlist?list=PLo2EIpI_JMQtyEr-sLJSy5_SnLCb4vtQf"
+# These videos are not part of the course, but are part of the task playlist
+TASK_VIDEOS_TO_SKIP = ["tjAIM7BOYhw", "WdAeKSOpxhw", "KWwzcmG98Ds", "TksaY_FDgnk", "leNG9fN9FQU", "dKE8SIt9C-w"]
-def generate_subtitles(language: str, youtube_language_code: str = None):
+
+def generate_subtitles(language: str, youtube_language_code: str = None, is_task_playlist: bool = False):
metadata = []
formatter = SRTFormatter()
path = Path(f"subtitles/{language}")
path.mkdir(parents=True, exist_ok=True)
- playlist_videos = Playlist.getVideos("https://youtube.com/playlist?list=PLo2EIpI_JMQvWfQndUesu0nPBAtZ9gP1o")
+ if is_task_playlist:
+ playlist_videos = Playlist.getVideos(TASK_VIDEOS_PLAYLIST)
+ else:
+ playlist_videos = Playlist.getVideos(COURSE_VIDEOS_PLAYLIST)
for idx, video in enumerate(playlist_videos["videos"]):
video_id = video["id"]
title = video["title"]
title_formatted = title.lower().replace(" ", "-").replace(":", "").replace("?", "")
id_str = f"{idx}".zfill(2)
- srt_filename = f"subtitles/{language}/{id_str}_{title_formatted}.srt"
+
+ if is_task_playlist:
+ srt_filename = f"{path}/tasks_{id_str}_{title_formatted}.srt"
+ else:
+ srt_filename = f"{path}/{id_str}_{title_formatted}.srt"
# Skip course events
if "Event Day" in title:
continue
+ # Skip task videos that don't belong to the course
+ if video_id in TASK_VIDEOS_TO_SKIP:
+ continue
+
# Get transcript
transcript_list = YouTubeTranscriptApi.list_transcripts(video_id)
english_transcript = transcript_list.find_transcript(language_codes=["en", "en-US"])
@@ -51,10 +65,15 @@ def generate_subtitles(language: str, youtube_language_code: str = None):
f.write("No transcript found for this video!")
metadata.append({"id": video_id, "title": title, "link": video["link"], "srt_filename": srt_filename})
- break
df = pd.DataFrame(metadata)
- df.to_csv(f"subtitles/{language}/metadata.csv", index=False)
+
+ if is_task_playlist:
+ df.to_csv(f"{path}/metadata_tasks.csv", index=False)
+ else:
+ df.to_csv(f"{path}/metadata.csv", index=False)
+
+
if __name__ == "__main__":
@@ -62,5 +81,6 @@ def generate_subtitles(language: str, youtube_language_code: str = None):
parser.add_argument("--language", type=str, help="Language to generate subtitles for")
parser.add_argument("--youtube_language_code", type=str, help="YouTube language code")
args = parser.parse_args()
- generate_subtitles(args.language, args.youtube_language_code)
+ generate_subtitles(args.language, args.youtube_language_code, is_task_playlist=False)
+ generate_subtitles(args.language, args.youtube_language_code, is_task_playlist=True)
print(f"All done! Subtitles stored at subtitles/{args.language}")