
@@ -150,7 +150,7 @@
## 원본 구조
-트랜스포머 구조는 처음에 번역을 위해 만들어졌습니다. 학습시에 인코더는 특정 언어의 입력 문장을 받고, 동시에 디코더는 타겟 언어로된 동일한 의미의 문장을 받습니다. 인코더에서 어텐션 레이어는 문장 내의 모든 단어를 활요할 수 있습니다(방금 보았듯이 주어진 단어의 번역은 문장의 전후를 살펴보아야 하니까요). 반면, 디코더는 순차적으로 작동하기 때문에 문장 내에서 이미 번역이 이루어진 부분에만 주의를 기울일 수 밖에 없습니다. 이로 인해 현재 생성(번역)되고 있는 단어의 앞에 단어들만 이용할 수 있죠. 예시로, 번역된 타겟의 처음 세 단어를 예측해 놨을 때, 이 결과를 디코더로 넘기면 디코더는 인코더로부터 받은 모든 입력 정보를 함께 이용해 네 번째 올 단어를 예측하는 것입니다.
+트랜스포머 구조는 처음에 번역을 위해 만들어졌습니다. 학습시에 인코더는 특정 언어의 입력 문장을 받고, 동시에 디코더는 타겟 언어로된 동일한 의미의 문장을 받습니다. 인코더에서 어텐션 레이어는 문장 내의 모든 단어를 활용할 수 있습니다(방금 보았듯이 주어진 단어의 번역은 문장의 전후를 살펴보아야 하니까요). 반면, 디코더는 순차적으로 작동하기 때문에 문장 내에서 이미 번역이 이루어진 부분에만 주의를 기울일 수 밖에 없습니다. 이로 인해 현재 생성(번역)되고 있는 단어의 앞에 단어들만 이용할 수 있죠. 예시로, 번역된 타겟의 처음 세 단어를 예측해 놨을 때, 이 결과를 디코더로 넘기면 디코더는 인코더로부터 받은 모든 입력 정보를 함께 이용해 네 번째 올 단어를 예측하는 것입니다.
모델이 타겟 문장에 대한 액세스(access)가 있는 상황에서, 훈련 속도를 높이기 위해 디코더는 전체 타겟을 제공하지만 뒤에 올 단어들을 사용할 수 없습니다. (모델이 두 번째 올 단어를 예측하기 위해 두 번째 위치 단어를 접근할 수 있다면 예측이 의미없어지겠죠?) 예를 들어, 네 번째 단어를 예측할 때 어텐션 레이어는 1~3 번째 단어에만 액세스하도록 합니다.
@@ -167,10 +167,10 @@
## 구조(Architectures) vs. 체크포인트(Checkpoints)
-트랜스포머 모델을 본격적으로 공부하기 앞서, 모델(models)과 함께 *구조(architectures)*와 *체크포인트(checkpoints)*라는 단어를 들으시게 될겁니다. 이 셋은 아래와 같이 조금 다른 의미를 갖고 있습니다:
+트랜스포머 모델을 본격적으로 공부하기 앞서, 모델(models)과 함께 *구조(architectures)*와 *체크포인트(checkpoints)*라는 단어를 듣게 되실겁니다. 이 셋은 아래와 같이 조금 다른 의미를 갖고 있습니다:
* **구조(Architecture)**: 모델의 뼈대를 의미하는 용어로, 모델 내부의 각 레이어와 각 연산 작용들을 의미합니다.
* **체크포인트(Checkpoints)**: 주어진 구조(architecture)에 적용될 가중치들을 의미합니다.
* **모델(Model)**: 사실 모델은 “구조”나 “가중치”만큼 구체적이지 않은, 다소 뭉뚱그려 사용되는 용어입니다. 이 강의에서는 모호함을 피하기 위해 *구조(architecture)*와 *체크포인트(checkpoint)*를 구분해서 사용하도록 하겠습니다.
-예를 들면, BERT는 구조에 해당하고, Google 팀이 최초 공개에서 내놓은 학습 가중치 셋인 `bert-base-cased`는 체크포인에 해당합니다. 그렇지만 “BERT 모델”, “`bert-base-cased` 모델” 등과 같이 구분하지 않고 사용하기도 합니다.
+예를 들면, BERT는 구조에 해당하고, Google 팀이 최초 공개에서 내놓은 학습 가중치 셋인 `bert-base-cased`는 체크포인트에 해당합니다. 그렇지만 “BERT 모델”, “`bert-base-cased` 모델” 등과 같이 구분하지 않고 사용하기도 합니다.
diff --git a/chapters/ko/chapter2/1.mdx b/chapters/ko/chapter2/1.mdx
index 1d28b3a27..ae4f1b82c 100644
--- a/chapters/ko/chapter2/1.mdx
+++ b/chapters/ko/chapter2/1.mdx
@@ -19,6 +19,5 @@
그런 다음 `pipeline()` 함수의 중요한 구성요소인 tokenizer API를 살펴보겠습니다. tokenizer는 처리의 첫 번째 단계인 텍스트를 신경망의 수치 입력으로 바꾸는 부분과 필요할 때 다시 텍스트로 바꾸는 마지막 단계, 즉 양끝을 다룹니다. 마지막으로 여러 문장을 묶어서 모델에게 제공하는 방법을 알아보고, 기존 `tokenizer()` 함수를 자세히 살펴봄으로써 마무리짓겠습니다.
-
-⚠️ Model Hub와 🤗 Transformers에서 사용할 수 있는 모든 기능을 활용하려면 계정을 만드는 게 좋습니다.
-
+> [!TIP]
+> ⚠️ Model Hub와 🤗 Transformers에서 사용할 수 있는 모든 기능을 활용하려면
계정을 만드는 게 좋습니다.
diff --git a/chapters/ko/chapter2/2.mdx b/chapters/ko/chapter2/2.mdx
index 7468ea435..87d93f7bf 100644
--- a/chapters/ko/chapter2/2.mdx
+++ b/chapters/ko/chapter2/2.mdx
@@ -22,9 +22,8 @@
{/if}
-
-PyTorch를 사용하는지, TensorFlow를 사용하는지에 따라 내용이 약간 달라지는 첫 번째 섹션입니다. 제목 상단 스위치를 이용해 선호하는 플랫폼을 선택하세요!
-
+> [!TIP]
+> PyTorch를 사용하는지, TensorFlow를 사용하는지에 따라 내용이 약간 달라지는 첫 번째 섹션입니다. 제목 상단 스위치를 이용해 선호하는 플랫폼을 선택하세요!
{#if fw === 'pt'}
@@ -346,8 +345,5 @@ model.config.id2label
파이프라인 세 단계-토크나이저를 이용한 전처리, 모델에 입력 넣어주기, 후처리-를 성공적으로 재현했습니다! 이제 각 단계별로 좀 더 깊게 알아보는 시간을 가져봅시다.
-
-
-✏️ **직접 해보세요!** 2개 이상의 문장을 골라 `sentiment-analysis` 파이프라인을 적용해보세요. 이 챕터에서 본 내용을 그대로 수행해보고 같은 결과가 나오는지 확인해보세요!
-
-
+> [!TIP]
+> ✏️ **직접 해보세요!** 2개 이상의 문장을 골라 `sentiment-analysis` 파이프라인을 적용해보세요. 이 챕터에서 본 내용을 그대로 수행해보고 같은 결과가 나오는지 확인해보세요!
diff --git a/chapters/ko/chapter2/4.mdx b/chapters/ko/chapter2/4.mdx
index fed8fc9cf..035a16b61 100644
--- a/chapters/ko/chapter2/4.mdx
+++ b/chapters/ko/chapter2/4.mdx
@@ -217,11 +217,8 @@ print(ids)
적절한 프레임워크의 텐서로 변환되고 나면 이 출력 결과는 이전 장에서 본 것처럼 모델 입력으로 사용될 수 있습니다.
-
-
-✏️ **직접 해보세요!** 2장에서 사용한 입력 문장("I've been waiting for a HuggingFace course my whole life."과 "I hate this so much!")을 이용해 두 단계(토큰화와 입력 ID로의 변환)를 수행해보세요. 위에서 얻은 결과와 당신이 얻은 결과가 동일한지 확인해보세요!
-
-
+> [!TIP]
+> ✏️ **직접 해보세요!** 2장에서 사용한 입력 문장("I've been waiting for a HuggingFace course my whole life."과 "I hate this so much!")을 이용해 두 단계(토큰화와 입력 ID로의 변환)를 수행해보세요. 위에서 얻은 결과와 당신이 얻은 결과가 동일한지 확인해보세요!
## 디코딩[[decoding]]
diff --git a/chapters/ko/chapter2/5.mdx b/chapters/ko/chapter2/5.mdx
index faf950b4f..280959193 100644
--- a/chapters/ko/chapter2/5.mdx
+++ b/chapters/ko/chapter2/5.mdx
@@ -180,11 +180,8 @@ batched_ids = [ids, ids]
동일한 문장 2개로 만든 배치입니다!
-
-
-✏️ **직접 해보세요!** 이 `batched_ids` 리스트를 텐서로 변환하고 모델로 전달해보세요. 이전에 얻은 로짓과 동일한 결과를 얻는지 확인해보세요. (개수는 두 개여야 합니다!)
-
-
+> [!TIP]
+> ✏️ **직접 해보세요!** 이 `batched_ids` 리스트를 텐서로 변환하고 모델로 전달해보세요. 이전에 얻은 로짓과 동일한 결과를 얻는지 확인해보세요. (개수는 두 개여야 합니다!)
배치는 여러 개의 문장을 모델로 넘겼을 때도 모델이 작동하게 합니다. 다중 시퀀스를 사용하는 것은 단일 시퀀스로 배치를 만드는 것만큼 간단합니다. 하지만 두 번째 문제가 있습니다. 두 개 이상의 문장을 배치로 만드려고 할 때, 그 문장들은 아마 다른 길이를 가지고 있을 것입니다. 이전에 텐서를 다뤄본 사람이라면, 텐서의 형태가 직사각형이어야 한다는 것을 알고 있습니다. 문장 길이가 다르면 입력 ID 리스트를 텐서로 바로 변환할 수 없습니다. 이 문제를 해결하기 위해, 일반적으로 입력에 *패드*를 추가합니다.
@@ -316,11 +313,8 @@ tf.Tensor(
두 번째 문장의 어텐션 마스크에서 마지막 값인 0은 패딩 ID라는 것을 잊지 마세요.
-
-
-✏️ **직접 해보세요!** 2장에서 사용한 두 개의 문장("I've been waiting for a HuggingFace course my whole life." and "I hate this so much!")을 이용해 직접 토큰화를 적용해보세요. 토큰화 결과를 모델에 넘기고 2장에서 얻은 것과 동일한 로짓을 얻었는지 확인해보세요. 이제 Now batch them together using the padding token, then create the proper attention mask. Check that you obtain the same results when going through the model!
-
-
+> [!TIP]
+> ✏️ **직접 해보세요!** 2장에서 사용한 두 개의 문장("I've been waiting for a HuggingFace course my whole life." and "I hate this so much!")을 이용해 직접 토큰화를 적용해보세요. 토큰화 결과를 모델에 넘기고 2장에서 얻은 것과 동일한 로짓을 얻었는지 확인해보세요. 이제 Now batch them together using the padding token, then create the proper attention mask. Check that you obtain the same results when going through the model!
## 길이가 긴 시퀀스[[longer-sequences]]
diff --git a/chapters/ko/chapter3/2.mdx b/chapters/ko/chapter3/2.mdx
index 106801824..25b180f3f 100644
--- a/chapters/ko/chapter3/2.mdx
+++ b/chapters/ko/chapter3/2.mdx
@@ -45,11 +45,8 @@ Hub에는 모델뿐만 아니라 다양한 언어로 된 여러 데이터 세트
🤗 Datasets 라이브러리는 Hub에서 데이터 세트를 다운로드하고 캐시하는 매우 간단한 명령을 제공합니다. MRPC 데이터 세트를 다음과 같이 다운로드할 수 있습니다.
-
-
-💡 **추가 자료**: 더 많은 데이터 세트 로딩 기법과 예제를 보려면 [🤗 Datasets 문서](https://huggingface.co/docs/datasets/)를 확인하세요.
-
-
+> [!TIP]
+> 💡 **추가 자료**: 더 많은 데이터 세트 로딩 기법과 예제를 보려면 [🤗 Datasets 문서](https://huggingface.co/docs/datasets/)를 확인하세요.
```py
from datasets import load_dataset
@@ -77,11 +74,8 @@ DatasetDict({
보시다시피, 훈련 세트, 검증 세트, 테스트 세트가 포함된 `DatasetDict` 객체를 얻습니다. 각각은 여러 열(`sentence1`, `sentence2`, `label`, `idx`)과 가변적인 행 수를 포함하며, 이는 각 세트의 요소 수입니다(따라서 훈련 세트에는 3,668개의 문장 쌍이, 검증 세트에는 408개가, 테스트 세트에는 1,725개가 있습니다).
-
-
-이 명령은 기본적으로 *~/.cache/huggingface/datasets*에 데이터 세트를 다운로드하고 캐시합니다. 2장에서 언급했듯이 `HF_HOME` 환경 변수를 설정하여 캐시 폴더를 맞춤 설정할 수 있습니다.
-
-
+> [!TIP]
+> 이 명령은 기본적으로 *~/.cache/huggingface/datasets*에 데이터 세트를 다운로드하고 캐시합니다. 2장에서 언급했듯이 `HF_HOME` 환경 변수를 설정하여 캐시 폴더를 맞춤 설정할 수 있습니다.
딕셔너리처럼 인덱싱하여 `raw_datasets` 객체의 각 문장 쌍에 접근할 수 있습니다.
@@ -112,11 +106,8 @@ raw_train_dataset.features
내부적으로 `label`은 `ClassLabel` 타입이며, 정수와 레이블 이름의 매핑이 *names* 폴더에 저장되어 있습니다. `0`은 `not_equivalent`에, `1`은 `equivalent`에 해당합니다.
-
-
-✏️ **직접 해보기!** 훈련 세트의 15번째 요소와 검증 세트의 87번째 요소를 살펴보세요. 그들의 레이블은 무엇인가요?
-
-
+> [!TIP]
+> ✏️ **직접 해보기!** 훈련 세트의 15번째 요소와 검증 세트의 87번째 요소를 살펴보세요. 그들의 레이블은 무엇인가요?
### 데이터 세트 전처리[[preprocessing-a-dataset]]
@@ -133,11 +124,8 @@ tokenized_sentences_1 = tokenizer(raw_datasets["train"]["sentence1"])
tokenized_sentences_2 = tokenizer(raw_datasets["train"]["sentence2"])
```
-
-
-💡 **심화 학습**: 더 고급 토큰화 기법과 다양한 토크나이저가 작동하는 방식을 이해하려면 [🤗 Tokenizers 문서](https://huggingface.co/docs/transformers/main/en/tokenizer_summary)와 [쿡북의 토큰화 가이드](https://huggingface.co/learn/cookbook/en/advanced_rag#tokenization-strategies)를 살펴보세요.
-
-
+> [!TIP]
+> 💡 **심화 학습**: 더 고급 토큰화 기법과 다양한 토크나이저가 작동하는 방식을 이해하려면 [🤗 Tokenizers 문서](https://huggingface.co/docs/transformers/main/en/tokenizer_summary)와 [쿡북의 토큰화 가이드](https://huggingface.co/learn/cookbook/en/advanced_rag#tokenization-strategies)를 살펴보세요.
하지만 두 시퀀스를 모델에 전달하기만 해서는 두 문장이 패러프레이즈인지 아닌지 예측할 수 없습니다. 두 시퀀스를 쌍으로 처리하고 적절한 전처리를 적용해야 합니다. 다행히 토크나이저는 한 쌍의 시퀀스를 받아서 BERT 모델이 기대하는 방식으로 준비할 수도 있습니다.
@@ -156,11 +144,8 @@ inputs
[2장](/course/chapter2)에서 `input_ids`와 `attention_mask` 키에 대해 논의했지만, `token_type_ids`에 대한 이야기는 미뤄두었습니다. 이 예제에서 이것은 입력의 어느 부분이 첫 번째 문장이고 어느 부분이 두 번째 문장인지 모델에 알려주는 역할을 합니다.
-
-
-✏️ **직접 해보기!** 훈련 세트의 15번째 요소를 가져와서 두 문장을 따로따로 토큰화하고 쌍으로도 토큰화해보세요. 두 결과의 차이점은 무엇인가요?
-
-
+> [!TIP]
+> ✏️ **직접 해보기!** 훈련 세트의 15번째 요소를 가져와서 두 문장을 따로따로 토큰화하고 쌍으로도 토큰화해보세요. 두 결과의 차이점은 무엇인가요?
`input_ids` 안의 ID를 다시 단어로 디코딩하면
@@ -215,11 +200,8 @@ def tokenize_function(example):
지금은 토큰화 함수에서 `padding` 인수를 빼둔 것에 주목하세요. 모든 샘플을 최대 길이로 패딩하는 것은 효율적이지 않기 때문입니다. 배치를 만들 때 샘플을 패딩하는 것이 더 좋습니다. 그러면 해당 배치의 최대 길이까지만 패딩하면 되고, 전체 데이터 세트의 최대 길이까지 패딩할 필요가 없기 때문입니다. 입력의 길이가 매우 다양할 때 많은 시간과 처리 능력을 절약할 수 있습니다!
-
-
-📚 **성능 팁**: 효율적인 데이터 처리 기법에 대한 자세한 내용은 [🤗 Datasets 성능 가이드](https://huggingface.co/docs/datasets/about_arrow)에서 배울 수 있습니다.
-
-
+> [!TIP]
+> 📚 **성능 팁**: 효율적인 데이터 처리 기법에 대한 자세한 내용은 [🤗 Datasets 성능 가이드](https://huggingface.co/docs/datasets/about_arrow)에서 배울 수 있습니다.
다음은 모든 데이터 세트에 토큰화 함수를 한 번에 적용하는 방법입니다. `map` 호출에서 `batched=True`를 사용하므로 함수가 데이터 세트의 각 요소에 개별적으로가 아니라 여러 요소에 한 번에 적용됩니다. 이를 통해 더 빠른 전처리가 가능합니다.
@@ -259,11 +241,8 @@ DatasetDict({
배치 내에서 샘플들을 함께 배치하는 역할을 하는 함수를 *collate function*이라고 합니다. 이는 `DataLoader`를 구축할 때 전달할 수 있는 인수로, 기본값은 샘플을 PyTorch 텐서로 변환하고 연결하는 함수입니다(요소가 목록, 튜플 또는 딕셔너리인 경우 재귀적으로). 우리의 경우 입력이 모두 같은 크기가 아니므로 이것은 불가능할 것입니다. 우리는 의도적으로 패딩을 연기하여 각 배치에서만 필요에 따라 적용하고 많은 패딩이 있는 지나치게 긴 입력을 피했습니다. 이것은 훈련을 상당히 가속화할 것이지만, TPU에서 훈련하는 경우 문제를 일으킬 수 있다는 점에 주의하세요 — TPU는 추가 패딩이 필요하더라도 고정된 모양을 선호합니다.
-
-
-🚀 **최적화 가이드**: 패딩 전략과 TPU 고려사항을 포함한 훈련 성능 최적화에 대한 자세한 내용은 [🤗 Transformers 성능 문서](https://huggingface.co/docs/transformers/main/en/performance)를 참조하세요.
-
-
+> [!TIP]
+> 🚀 **최적화 가이드**: 패딩 전략과 TPU 고려사항을 포함한 훈련 성능 최적화에 대한 자세한 내용은 [🤗 Transformers 성능 문서](https://huggingface.co/docs/transformers/main/en/performance)를 참조하세요.
실제로 이를 수행하려면 함께 배치하려는 데이터 세트 항목에 적절한 양의 패딩을 적용할 collate function을 정의해야 합니다. 다행히 🤗 Transformers 라이브러리는 `DataCollatorWithPadding`을 통해 이러한 함수를 제공합니다. 인스턴스화할 때 토크나이저를 받아서(어떤 패딩 토큰을 사용할지, 모델이 입력의 왼쪽 또는 오른쪽에 패딩을 기대하는지 알기 위해) 필요한 모든 것을 수행합니다.
@@ -301,13 +280,10 @@ batch = data_collator(samples)
좋아 보입니다! 이제 원시 텍스트에서 모델이 처리할 수 있는 배치까지 만들었으므로, 미세 조정할 준비가 되었습니다!
-
-
-✏️ **직접 해보기!** GLUE SST-2 데이터 세트에서 전처리를 복제해보세요. 쌍이 아닌 단일 문장으로 구성되어 있어 약간 다르지만, 나머지는 동일하게 보일 것입니다. 더 어려운 도전을 위해서는 GLUE 작업 중 어떤 것에서도 작동하는 전처리 함수를 작성해보세요.
-
-📖 **추가 연습**: [🤗 Transformers 예제](https://huggingface.co/docs/transformers/main/en/notebooks)에서 이러한 실습 예제들을 확인해보세요.
-
-
+> [!TIP]
+> ✏️ **직접 해보기!** GLUE SST-2 데이터 세트에서 전처리를 복제해보세요. 쌍이 아닌 단일 문장으로 구성되어 있어 약간 다르지만, 나머지는 동일하게 보일 것입니다. 더 어려운 도전을 위해서는 GLUE 작업 중 어떤 것에서도 작동하는 전처리 함수를 작성해보세요.
+>
+> 📖 **추가 연습**: [🤗 Transformers 예제](https://huggingface.co/docs/transformers/main/en/notebooks)에서 이러한 실습 예제들을 확인해보세요.
완벽합니다! 이제 🤗 Datasets 라이브러리의 최신 모범 사례로 데이터를 전처리했으므로, 최신 Trainer API를 사용하여 모델을 훈련할 준비가 되었습니다. 다음 섹션에서는 Hugging Face 생태계에서 사용할 수 있는 최신 기능과 최적화를 사용하여 모델을 효과적으로 미세 조정하는 방법을 보여드리겠습니다.
@@ -435,12 +411,9 @@ batch = data_collator(samples)
]}
/>
-
-
-💡 **핵심 요점**
-- 전처리를 훨씬 빠르게 하려면 `Dataset.map()`에서 `batched=True`를 사용하세요
-- `DataCollatorWithPadding`을 사용한 동적 패딩이 고정 길이 패딩보다 효율적입니다
-- 모델의 추론 결과물(수치적 텐서, 올바른 열 이름)에 맞게 항상 데이터를 전처리하세요
-- 🤗 Datasets 라이브러리는 대규모 효율적인 데이터 처리를 위한 강력한 도구를 제공합니다
-
-
\ No newline at end of file
+> [!TIP]
+> 💡 **핵심 요점**
+> - 전처리를 훨씬 빠르게 하려면 `Dataset.map()`에서 `batched=True`를 사용하세요
+> - `DataCollatorWithPadding`을 사용한 동적 패딩이 고정 길이 패딩보다 효율적입니다
+> - 모델의 추론 결과물(수치적 텐서, 올바른 열 이름)에 맞게 항상 데이터를 전처리하세요
+> - 🤗 Datasets 라이브러리는 대규모 효율적인 데이터 처리를 위한 강력한 도구를 제공합니다
\ No newline at end of file
diff --git a/chapters/ko/chapter3/3.mdx b/chapters/ko/chapter3/3.mdx
index 4f1b830f3..5f3604aa4 100644
--- a/chapters/ko/chapter3/3.mdx
+++ b/chapters/ko/chapter3/3.mdx
@@ -13,11 +13,8 @@
🤗 Transformers는 `Trainer` 클래스를 제공합니다. 이 클래스를 사용하면 사전 학습된 모델을 여러분의 데이터셋에 맞춰 최신 기법으로 쉽게 미세 조정할 수 있습니다. 이전 섹션에서 데이터 전처리 작업을 모두 마쳤다면 이제 몇 단계만 거치면 `Trainer`를 정의할 수 있습니다. 가장 어려운 부분은 `Trainer.train()`을 실행할 환경을 준비하는 과정일 수 있습니다. 이 작업은 CPU에서 매우 느리게 실행되기 때문입니다. 만약 GPU가 없다면 [Google Colab](https://colab.research.google.com/)에서 무료로 제공하는 GPU나 TPU를 이용할 수 있습니다.
-
-
-📚 **훈련 리소스**: 훈련을 시작하기 전에 포괄적인 [🤗 Transformers 훈련 가이드](https://huggingface.co/docs/transformers/main/en/training)를 숙지하고 [미세 조정 쿡북](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu)의 실용적인 예제를 살펴보세요.
-
-
+> [!TIP]
+> 📚 **훈련 리소스**: 훈련을 시작하기 전에 포괄적인 [🤗 Transformers 훈련 가이드](https://huggingface.co/docs/transformers/main/en/training)를 숙지하고 [미세 조정 쿡북](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu)의 실용적인 예제를 살펴보세요.
아래 코드 예시는 이전 섹션의 코드를 모두 실행했다는 가정하에 작동합니다. 즉, 다음 사항들이 필요합니다.
@@ -50,11 +47,8 @@ training_args = TrainingArguments("test-trainer")
훈련 중에 모델을 Hub에 자동으로 업로드하려면 `TrainingArguments`에서 `push_to_hub=True`를 전달하세요. 이 기능에 대해서는 [Chapter 4](/course/chapter4/3)에서 자세히 알아보겠습니다.
-
-
-🚀 **고급 설정**: 사용 가능한 모든 훈련 인수와 최적화 전략에 대한 자세한 정보는 [TrainingArguments 문서](https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.TrainingArguments)와 [훈련 구성 쿡북](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu)을 참고하세요.
-
-
+> [!TIP]
+> 🚀 **고급 설정**: 사용 가능한 모든 훈련 인수와 최적화 전략에 대한 자세한 정보는 [TrainingArguments 문서](https://huggingface.co/docs/transformers/main/en/main_classes/trainer#transformers.TrainingArguments)와 [훈련 구성 쿡북](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu)을 참고하세요.
두 번째 단계는 모델을 정의하는 것입니다. [이전 챕터](/course/chapter2)에서와 같이 두 개의 라벨과 함께 `AutoModelForSequenceClassification` 클래스를 사용하겠습니다.
@@ -83,11 +77,8 @@ trainer = Trainer(
`processing_class`에 토크나이저를 전달하면, `Trainer`가 기본적으로 `DataCollatorWithPadding`을 `data_collator`로 사용합니다. 따라서 이 경우에는 `data_collator=data_collator` 줄을 생략할 수 있지만, 데이터 처리 파이프라인의 중요한 부분을 보여드리기 위해 코드에 포함했습니다.
-
-
-📖 **더 자세히 알아보기**: Trainer 클래스와 그 매개변수에 대한 자세한 내용은 [Trainer API 문서](https://huggingface.co/docs/transformers/main/en/main_classes/trainer)를 방문하고 [훈련 쿡북 레시피](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu)에서 고급 사용 패턴을 살펴보세요.
-
-
+> [!TIP]
+> 📖 **더 자세히 알아보기**: Trainer 클래스와 그 매개변수에 대한 자세한 내용은 [Trainer API 문서](https://huggingface.co/docs/transformers/main/en/main_classes/trainer)를 방문하고 [훈련 쿡북 레시피](https://huggingface.co/learn/cookbook/en/fine_tuning_code_llm_on_single_gpu)에서 고급 사용 패턴을 살펴보세요.
데이터셋에서 모델을 미세 조정하려면 `Trainer`의 `train()` 메소드를 호출하기만 하면 됩니다.
@@ -137,11 +128,8 @@ metric.compute(predictions=preds, references=predictions.label_ids)
{'accuracy': 0.8578431372549019, 'f1': 0.8996539792387542}
```
-
-
-다양한 평가 메트릭과 전략에 대해 알아보려면 [🤗 Evaluate 문서](https://huggingface.co/docs/evaluate/)를 참고하세요.
-
-
+> [!TIP]
+> 다양한 평가 메트릭과 전략에 대해 알아보려면 [🤗 Evaluate 문서](https://huggingface.co/docs/evaluate/)를 참고하세요.
모델 헤드의 가중치가 무작위로 초기화되기 때문에 얻게 되는 결과는 조금씩 다를 수 있습니다. 결과를 보면 우리 모델이 검증 세트에서 85.78%의 정확도와 89.97%의 F1 점수를 달성했음을 볼 수 있습니다. 이 두 가지는 GLUE 벤치마크의 MRPC 데이터셋에서 결과를 평가하는 데 사용되는 메트릭입니다. [BERT 논문](https://arxiv.org/pdf/1810.04805.pdf)에서는 기본 모델의 F1 점수를 88.9로 보고하였습니다. 당시에는 `uncased` 모델을 사용했지만, 우리는 현재 `cased` 모델을 사용하고 있기 때문에 더 나은 결과가 나온 것입니다.
@@ -216,21 +204,15 @@ training_args = TrainingArguments(
)
```
-
-
-🎯 **성능 최적화**: 분산 훈련, 메모리 최적화, 하드웨어별 최적화를 포함한 고급 훈련 기술에 대해서는 [🤗 Transformers 성능 가이드](https://huggingface.co/docs/transformers/main/en/performance)를 살펴보세요.
-
-
+> [!TIP]
+> 🎯 **성능 최적화**: 분산 훈련, 메모리 최적화, 하드웨어별 최적화를 포함한 고급 훈련 기술에 대해서는 [🤗 Transformers 성능 가이드](https://huggingface.co/docs/transformers/main/en/performance)를 살펴보세요.
`Trainer`는 여러 GPU 또는 TPU에서 즉시 작동하며 분산 훈련을 위한 많은 옵션을 제공합니다. 이와 관련된 모든 내용은 Chapter 10에서 다루겠습니다.
이것으로 `Trainer` API를 사용한 미세 조정 소개를 마칩니다. 대부분의 일반적인 NLP 작업에 대한 예제는 [Chapter 7](/course/chapter7)에서 다룰 예정이며, 다음으로는 순수 PyTorch 코드로 동일한 작업을 수행하는 방법을 살펴보겠습니다.
-
-
-📝 **더 많은 예제**: [🤗 Transformers 노트북](https://huggingface.co/docs/transformers/main/en/notebooks)에 있는 방대한 자료를 확인해 보세요.
-
-
+> [!TIP]
+> 📝 **더 많은 예제**: [🤗 Transformers 노트북](https://huggingface.co/docs/transformers/main/en/notebooks)에 있는 방대한 자료를 확인해 보세요.
## 섹션 퀴즈[[section-quiz]]
@@ -380,14 +362,11 @@ Trainer API와 미세 조정 개념에 대한 이해를 테스트해보세요.
]}
/>
-
-
-💡 **핵심 요점:**
-- `Trainer` API는 대부분의 훈련 복잡성을 처리하는 높은 수준의 인터페이스를 제공합니다.
-- `processing_class`는 적절한 데이터 처리를 위해 토크나이저를 저장하는 데 사용됩니다.
-- `TrainingArguments`는 학습률, 배치 크기, 평가 전략, 최적화 등 훈련의 모든 측면을 제어합니다.
-- `compute_metrics`를 사용하면 훈련 손실 외에 사용자 정의 평가 메트릭을 활용할 수 있습니다.
-- 혼합 정밀도(`fp16=True`)와 그레이디언트 누적과 같은 최신 기능은 훈련 효율성을 크게 향상시킬 수 있습니다.
-
-
+> [!TIP]
+> 💡 **핵심 요점:**
+> - `Trainer` API는 대부분의 훈련 복잡성을 처리하는 높은 수준의 인터페이스를 제공합니다.
+> - `processing_class`는 적절한 데이터 처리를 위해 토크나이저를 저장하는 데 사용됩니다.
+> - `TrainingArguments`는 학습률, 배치 크기, 평가 전략, 최적화 등 훈련의 모든 측면을 제어합니다.
+> - `compute_metrics`를 사용하면 훈련 손실 외에 사용자 정의 평가 메트릭을 활용할 수 있습니다.
+> - 혼합 정밀도(`fp16=True`)와 그레이디언트 누적과 같은 최신 기능은 훈련 효율성을 크게 향상시킬 수 있습니다.
diff --git a/chapters/ko/chapter3/5.mdx b/chapters/ko/chapter3/5.mdx
index e0624b3d4..3fec97344 100644
--- a/chapters/ko/chapter3/5.mdx
+++ b/chapters/ko/chapter3/5.mdx
@@ -76,11 +76,8 @@ trainer.train()
- **훈련과 함께 증가**: 모델이 데이터의 패턴을 학습할 수 있다면 학습함에 따라 정확도가 일반적으로 향상되어야 합니다.
- **고원 현상을 보일 수 있음**: 모델이 실제 레이블에 가까운 예측을 만들어내므로, 정확도는 부드럽게 상승하기보다는 계단식으로 점프하는 경우가 많습니다.
-
-
-💡 **정확도 곡선이 "계단식"인 이유**: 연속적인 손실과 달리 정확도는 이산적인 예측을 실제 레이블과 비교하여 계산됩니다. 모델 신뢰도의 작은 개선은 최종 예측을 변경하지 않을 수 있어서 임계값을 넘을 때까지 정확도가 평평하게 유지됩니다.
-
-
+> [!TIP]
+> 💡 **정확도 곡선이 "계단식"인 이유**: 연속적인 손실과 달리 정확도는 이산적인 예측을 실제 레이블과 비교하여 계산됩니다. 모델 신뢰도의 작은 개선은 최종 예측을 변경하지 않을 수 있어서 임계값을 넘을 때까지 정확도가 평평하게 유지됩니다.
### 수렴[[convergence]]
@@ -110,14 +107,11 @@ trainer.train()
예를 들어, 고양이(0)와 개(1)를 구별하는 이진 분류기에서 모델이 개 이미지(실제 값 1)에 대해 0.3을 예측하면 이는 0으로 반올림되어 잘못된 분류입니다. 다음 단계에서 0.4를 예측하면 여전히 틀렸습니다. 0.4가 0.3보다 1에 더 가깝기 때문에 손실은 감소했지만 정확도는 변하지 않아 고원을 만듭니다. 정확도는 모델이 0.5보다 큰 값을 예측하여 1로 반올림될 때만 점프합니다.
-
-
-**건전한 곡선의 특성**
-- **손실의 부드러운 감소**: 훈련 및 검증 손실이 모두 꾸준히 감소
-- **훈련/검증 성능이 근접**: 훈련 및 검증 지표 간의 작은 격차
-- **수렴**: 곡선이 평평해져서 모델이 패턴을 학습했음을 나타냄
-
-
+> [!TIP]
+> **건전한 곡선의 특성**
+> - **손실의 부드러운 감소**: 훈련 및 검증 손실이 모두 꾸준히 감소
+> - **훈련/검증 성능이 근접**: 훈련 및 검증 지표 간의 작은 격차
+> - **수렴**: 곡선이 평평해져서 모델이 패턴을 학습했음을 나타냄
### 실용적인 예시[[practical-examples]]
@@ -141,16 +135,14 @@ trainer.train()
3. **일반화**: 훈련과 검증 성능이 얼마나 가까운가?
4. **경향**: 추가 훈련이 성능을 향상시킬 가능성이 있는가?
-
-
-🔍 **W&B 대시보드 기능**: Weights & Biases를 사용하면 학습 곡선을 보기 좋고 상호작용 가능한 그래프로 자동으로 만들 수 있습니다.
-- 여러 실행을 나란히 비교
-- 사용자 정의 지표 및 시각화 추가
-- 이상 동작에 대한 알림 설정
-- 팀과 결과 공유
-
-[Weights & Biases 문서](https://docs.wandb.ai/)에서 자세히 알아보세요.
-
+> [!TIP]
+> 🔍 **W&B 대시보드 기능**: Weights & Biases를 사용하면 학습 곡선을 보기 좋고 상호작용 가능한 그래프로 자동으로 만들 수 있습니다.
+> - 여러 실행을 나란히 비교
+> - 사용자 정의 지표 및 시각화 추가
+> - 이상 동작에 대한 알림 설정
+> - 팀과 결과 공유
+>
+> [Weights & Biases 문서](https://docs.wandb.ai/)에서 자세히 알아보세요.
#### 과적합[[overfitting]]
@@ -279,19 +271,16 @@ training_args = TrainingArguments(
학습 곡선을 이해하는 것은 효과적인 기계학습 전문가가 되기 위해 중요합니다. 이러한 시각적 도구는 모델의 훈련 진행 상황에 대한 즉각적인 피드백을 제공하고 언제 훈련을 중단하거나 하이퍼파라미터를 조정하거나 다른 접근 방식을 시도할지에 대한 정보에 기반한 결정을 내리는 데 도움이 됩니다. 연습을 통해 건전한 학습 곡선이 어떤 모습인지, 그리고 문제가 발생했을 때 어떻게 해결할지에 대한 직관적인 이해를 개발할 수 있습니다.
-
-
-💡 **핵심 요점**
-- 학습 곡선은 모델 훈련 진행 상황을 이해하는 데 필수적인 도구입니다.
-- 손실과 정확도 곡선을 모두 모니터링하되, 서로 다른 특성을 가지고 있음을 기억하세요.
-- 과적합은 훈련/검증 성능의 분기로 나타납니다.
-- 과소적합은 훈련과 검증 데이터 모두에서 성능이 좋지 않은 것으로 나타납니다.
-- Weights & Biases와 같은 도구는 학습 곡선을 쉽게 추적하고 분석할 수 있게 해줍니다.
-- 조기 중단과 적절한 정규화는 대부분의 일반적인 훈련 문제를 해결할 수 있습니다.
-
-🔬 **다음 단계**: 자신의 미세 조정 실험에서 학습 곡선을 분석해보세요. 다양한 하이퍼파라미터를 시도하고 곡선 모양에 어떤 영향을 미치는지 관찰하세요. 이러한 실습 경험이 훈련 진행 상황을 읽는 직관을 개발하는 가장 좋은 방법입니다.
-
-
+> [!TIP]
+> 💡 **핵심 요점**
+> - 학습 곡선은 모델 훈련 진행 상황을 이해하는 데 필수적인 도구입니다.
+> - 손실과 정확도 곡선을 모두 모니터링하되, 서로 다른 특성을 가지고 있음을 기억하세요.
+> - 과적합은 훈련/검증 성능의 분기로 나타납니다.
+> - 과소적합은 훈련과 검증 데이터 모두에서 성능이 좋지 않은 것으로 나타납니다.
+> - Weights & Biases와 같은 도구는 학습 곡선을 쉽게 추적하고 분석할 수 있게 해줍니다.
+> - 조기 중단과 적절한 정규화는 대부분의 일반적인 훈련 문제를 해결할 수 있습니다.
+>
+> 🔬 **다음 단계**: 자신의 미세 조정 실험에서 학습 곡선을 분석해보세요. 다양한 하이퍼파라미터를 시도하고 곡선 모양에 어떤 영향을 미치는지 관찰하세요. 이러한 실습 경험이 훈련 진행 상황을 읽는 직관을 개발하는 가장 좋은 방법입니다.
## 섹션 퀴즈[[section-quiz]]
diff --git a/chapters/ko/chapter5/2.mdx b/chapters/ko/chapter5/2.mdx
index 67ccff72a..f44e82872 100644
--- a/chapters/ko/chapter5/2.mdx
+++ b/chapters/ko/chapter5/2.mdx
@@ -48,11 +48,8 @@ SQuAD_it-train.json.gz: 82.2% -- replaced with SQuAD_it-train.json
명령어를 통해 압축 파일들이 각각 _SQuAD_it-train.json_, _SQuAD_it-test.json_ 로 바뀌어 저장되어 있는 것을 볼 수 있습니다.
-
-
-✎ 위 쉘 명령어에 `!`가 붙는 이유는 주피터 노트북에서 실행하고 있기 때문입니다. 터미널에서 명령어를 실행한다면 `!`를 없애주시면 됩니다.
-
-
+> [!TIP]
+> ✎ 위 쉘 명령어에 `!`가 붙는 이유는 주피터 노트북에서 실행하고 있기 때문입니다. 터미널에서 명령어를 실행한다면 `!`를 없애주시면 됩니다.
`load_dataset()` 함수로 JSON 파일을 로딩할 때, 파일이 일반 JSON (nested dictionary와 유사)으로 형태인 지 혹은 JSON Lines (줄로 구분된 JSON)형태인 지 알아야 합니다. 많은 질의응답 데이터셋처럼, SQuAD-it 데이터셋은 `data` 필드에 텍스트가 모두 저장된 nested 포맷을 사용하며, 이는 다음과 같이 `field` 인수를 지정하여 데이터셋을 로딩할 수 있음을 의미합니다:
@@ -126,11 +123,8 @@ DatasetDict({
이것이 바로 우리가 원했던 것입니다. 이제 다양한 전처리 기법을 적용하여 데이터를 정리하고, 리뷰를 토큰화하는 등의 작업을 수행할 수 있습니다.
-
-
-`load_dataset()` 함수의 `data_files` 인수는 매우 유연하여 하나의 파일 경로 (str), 파일 경로들의 리스트 (list) 또는 스플릿 이름을 각 파일 경로에 매핑하는 dictionary를 값으로 받을 수 있습니다. 또한 Unix 쉘에서 사용하는 규칙에 따라 지정된 패턴과 일치하는 파일들을 glob할 수도 있습니다. (예를 들어, `data_files="*.json"`와 같이 설정하면 한 폴더에 있는 모든 JSON 파일들을 하나의 스플릿으로 glob할 수 있습니다.) 자세한 내용은 🤗 Datasets [documentation](https://huggingface.co/docs/datasets/loading#local-and-remote-files)에서 확인할 수 있습니다.
-
-
+> [!TIP]
+> `load_dataset()` 함수의 `data_files` 인수는 매우 유연하여 하나의 파일 경로 (str), 파일 경로들의 리스트 (list) 또는 스플릿 이름을 각 파일 경로에 매핑하는 dictionary를 값으로 받을 수 있습니다. 또한 Unix 쉘에서 사용하는 규칙에 따라 지정된 패턴과 일치하는 파일들을 glob할 수도 있습니다. (예를 들어, `data_files="*.json"`와 같이 설정하면 한 폴더에 있는 모든 JSON 파일들을 하나의 스플릿으로 glob할 수 있습니다.) 자세한 내용은 🤗 Datasets [documentation](https://huggingface.co/docs/datasets/loading#local-and-remote-files)에서 확인할 수 있습니다.
🤗 Datasets 로딩 스크립트는 입력 파일의 자동 압축 해제를 지원하기 때문에 실제로 사용할 때는 `data_files` 인수로 압축 파일을 입력하면 `gzip` 사용을 생략할 수 있습니다.
@@ -158,10 +152,7 @@ squad_it_dataset = load_dataset("json", data_files=data_files, field="data")
이와 같은 방법을 통해 위에서 얻은 것과 같이 `DatasetDict` 객체를 생성할 수 있으며 수동으로 파일들을 다운로드받고 압축을 푸는 작업을 생략할 수 있습니다. 지금까지 Hugging Face Hub에서 호스팅되어 있지 않은 데이터셋을 로딩하는 다양한 방법을 알아보았습니다. 이제 다뤄볼 데이터셋을 얻었으니 다양한 데이터 전처리 기법을 배워보도록 합시다.
-
-
-✏️ **시도해 보세요!** GitHub 또는 [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/index.php)에서 호스팅되는 다른 데이터셋을 선택하여 위에서 배운 기술을 통해 로컬 또는 원격으로 로딩해 보시고, 추가적으로 CSV 또는 텍스트 포맷으로 저장된 데이터셋도 로딩을 시도해 보시길 바랍니다. (이 포맷들에 대한 자세한 정보는 [documentation](https://huggingface.co/docs/datasets/loading#local-and-remote-files)을 참조하세요.)
-
-
+> [!TIP]
+> ✏️ **시도해 보세요!** GitHub 또는 [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/index.php)에서 호스팅되는 다른 데이터셋을 선택하여 위에서 배운 기술을 통해 로컬 또는 원격으로 로딩해 보시고, 추가적으로 CSV 또는 텍스트 포맷으로 저장된 데이터셋도 로딩을 시도해 보시길 바랍니다. (이 포맷들에 대한 자세한 정보는 [documentation](https://huggingface.co/docs/datasets/loading#local-and-remote-files)을 참조하세요.)
diff --git a/chapters/ko/chapter8/2.mdx b/chapters/ko/chapter8/2.mdx
index 1970013e5..7bc822937 100644
--- a/chapters/ko/chapter8/2.mdx
+++ b/chapters/ko/chapter8/2.mdx
@@ -86,11 +86,8 @@ OSError: Can't load config for 'lewtun/distillbert-base-uncased-finetuned-squad-
이 리포트에는 많은 정보를 담고 있으니, 같이 핵심 부분을 살펴보겠습니다. 우선 명심해야할 것은 tracebacks은 _아래부터 위로_ 읽어야 합니다. 이러한 말은 영어 텍스트를 위에서 아래로 읽어오곤 했다면 이상하게 들릴 수 있겠지만 모델과 토크나이저를 다운로드 할 때 `pipeline`이 만드는 함수 호출 순서를 보여주는 traceback을 반영했기 때문입니다. 내부에서 `pipeline`이 작동하는 방식에 대한 자세한 내용은 [단원 2](/course/chapter2)를 참고하세요.
-
-
-Google Colab의 traceback에서 "6 frames" 주변의 파란 상자를 보셨나요? traceback을 "frames"로 압축하는 Colab의 특별한 기능입니다. 만약 오류의 원인을 찾을 수 없다면, 두개의 작은 화살표를 클릭해서 전체 traceback을 확장되어 있는지 여부를 확인하세요.
-
-
+> [!TIP]
+> Google Colab의 traceback에서 "6 frames" 주변의 파란 상자를 보셨나요? traceback을 "frames"로 압축하는 Colab의 특별한 기능입니다. 만약 오류의 원인을 찾을 수 없다면, 두개의 작은 화살표를 클릭해서 전체 traceback을 확장되어 있는지 여부를 확인하세요.
즉 마지막 에러 메시지와 발생한 예외의 이름을 가리키는 traceback의 마지막 줄을 뜻합니다. 이 경우의 예외 유형은 시스템 관련 오류를 나타내는 OS Error 입니다. 첨부된 오류 메시지를 읽으면 모델의 *config.json* 파일에 문제가 있는 것으로 보이며 이를 수정하기 위해 두 가지 선택지가 있습니다:
@@ -104,11 +101,8 @@ make sure that:
"""
```
-
-
-💡 이해하기 어려운 에러 메시지를 접하게 된다면, 메세지를 복사해서 Google 또는 [스택오버플로우](https://stackoverflow.com/) 검색창에 붙여 넣기만 하세요(네 진짭니다!). 이는 오류가 발생한 첫 사람이 아닐 가능성이 높을뿐더러, 커뮤니티의 다른 사람들이 게시한 솔루션을 찾는 좋은 방법입니다. 예를 들어, 스택오버플로우에서 'OSError: Can't load config for'를 검색하면 여러 [해답](https://stackoverflow.com/search?q=OSError%3A+Can%27t+load+config+for+)을 제공하며 문제 해결을 위한 출발점으로 사용할 수 있습니다.
-
-
+> [!TIP]
+> 💡 이해하기 어려운 에러 메시지를 접하게 된다면, 메세지를 복사해서 Google 또는 [스택오버플로우](https://stackoverflow.com/) 검색창에 붙여 넣기만 하세요(네 진짭니다!). 이는 오류가 발생한 첫 사람이 아닐 가능성이 높을뿐더러, 커뮤니티의 다른 사람들이 게시한 솔루션을 찾는 좋은 방법입니다. 예를 들어, 스택오버플로우에서 'OSError: Can't load config for'를 검색하면 여러 [해답](https://stackoverflow.com/search?q=OSError%3A+Can%27t+load+config+for+)을 제공하며 문제 해결을 위한 출발점으로 사용할 수 있습니다.
첫 번째 제안은 모델 ID가 실제로 정확한지 확인하도록 요청하는 것으로 비즈니스의 첫 순서는 식별자(모델 이름)를 복사하여 Hub의 검색 창에 붙여넣는 것입니다:
@@ -160,11 +154,8 @@ pretrained_checkpoint = "distilbert-base-uncased"
config = AutoConfig.from_pretrained(pretrained_checkpoint)
```
-
-
-🚨 여기에서 하는 접근 방식은 동료가 'distilbert-base-uncased'의 config를 수정했을 수 있으므로 이 접근 방식은 완전하지 않습니다. 우리는 동료에게 먼저 확인하고 싶겠지만, 이번 장에서의 목적상, 동료가 디폴트 config를 사용했다고 가정하겠습니다.
-
-
+> [!WARNING]
+> 🚨 여기에서 하는 접근 방식은 동료가 'distilbert-base-uncased'의 config를 수정했을 수 있으므로 이 접근 방식은 완전하지 않습니다. 우리는 동료에게 먼저 확인하고 싶겠지만, 이번 장에서의 목적상, 동료가 디폴트 config를 사용했다고 가정하겠습니다.
그런 다음 config 클래스의 `push_to_hub()` 기능을 사용해서 config 파일을 모델 저장소로 푸시할 수 있습니다:
We can then push this to our model repository with the configuration's `push_to_hub()` function:
diff --git a/chapters/ko/chapter8/4.mdx b/chapters/ko/chapter8/4.mdx
index ee408de5b..878ccc25e 100644
--- a/chapters/ko/chapter8/4.mdx
+++ b/chapters/ko/chapter8/4.mdx
@@ -241,11 +241,8 @@ trainer.train_dataset.features["label"].names
여기에는 token type IDs 가 없습니다. DistilBERT는 사용하지 않기 때문입니다. token type IDs를 사용하는 모델의 경우 입력에서 첫 번째 및 두 번째 문장이 있는 위치와 올바르게 일치하는지 확인해야 합니다.
-
-
-✏️ **여러분 차례입니다!** 학습 데이터 세트의 두 번째 원소가 정상적인지 확인해보세요.
-
-
+> [!TIP]
+> ✏️ **여러분 차례입니다!** 학습 데이터 세트의 두 번째 원소가 정상적인지 확인해보세요.
여기에선 학습 세트에 대해서만 확인하지만, 동일한 방식으로 검증 및 평가 세트를 다시 확인해야 합니다.
@@ -507,11 +504,8 @@ trainer.optimizer.step()
이 문제를 해결하려면 GPU 공간을 적게 사용하면 됩니다. 먼저 GPU에 동시에 두 개의 모델이 있지 않은지 확인합니다(물론 문제 해결에 필요한 경우 제외). 그런 다음 배치 크기를 줄여야 합니다. 이는 모델의 모든 중간 결과값 크기와 기울기에 직접적인 영향을 미치기 때문입니다. 문제가 지속되면 더 작은 모델 버전을 사용하는 것이 좋습니다.
-
-
-코스의 다음 부분에서는 메모리 사용량을 줄이고 가장 큰 모델을 파인 튜닝할 수 있는 고급 기술을 살펴보겠습니다.
-
-
+> [!TIP]
+> 코스의 다음 부분에서는 메모리 사용량을 줄이고 가장 큰 모델을 파인 튜닝할 수 있는 고급 기술을 살펴보겠습니다.
### 모델 평가하기
@@ -538,11 +532,8 @@ trainer.evaluate()
TypeError: only size-1 arrays can be converted to Python scalars
```
-
-
-💡 에러가 발생하기 전에 많은 컴퓨팅 리소스를 낭비하지 않도록 항상 `trainer.train()`을 실행하기 전에 `trainer.evaluate()`를 실행할 수 있는지 확인해야 합니다.
-
-
+> [!TIP]
+> 💡 에러가 발생하기 전에 많은 컴퓨팅 리소스를 낭비하지 않도록 항상 `trainer.train()`을 실행하기 전에 `trainer.evaluate()`를 실행할 수 있는지 확인해야 합니다.
평가 루프에서 문제를 디버깅하기 전에 먼저 데이터를 살펴보았는지, 배치를 적절하게 구성할 수 있는지, 모델을 실행할 수 있는지 확인해야 합니다. 모든 단계를 완료했으므로 다음의 코드를 에러 없이 실행할 수 있습니다.:
@@ -668,11 +659,8 @@ trainer.train()
```
이 경우 더 이상 문제가 없으며 스크립트는 모델을 파인튜닝 할 것이고 합리적인 결과를 제공해줄 것입니다. 그러나 학습이 에러 없이 진행되었고 학습된 모델이 전혀 잘 작동하지 않을 때 우리는 무엇을 할 수 있을까요? 이것이 기계 학습의 가장 어려운 부분이며 도움이 될 수 있는 몇 가지 기술을 보여 드리겠습니다.
-
-
-💡 수동 학습 루프를 사용하는 경우 학습 파이프라인을 디버그하기 위해 동일한 단계가 적용되지만 더 쉽게 분리할 수 있습니다. 하지만 올바른 위치의 `model.eval()` 또는 `model.train()` 또는 각 단계의 `zero_grad()`를 잊지 않았는지 확인하세요!
-
-
+> [!TIP]
+> 💡 수동 학습 루프를 사용하는 경우 학습 파이프라인을 디버그하기 위해 동일한 단계가 적용되지만 더 쉽게 분리할 수 있습니다. 하지만 올바른 위치의 `model.eval()` 또는 `model.train()` 또는 각 단계의 `zero_grad()`를 잊지 않았는지 확인하세요!
## 학습 중 조용한 에러 디버깅
@@ -687,11 +675,8 @@ trainer.train()
- 다른 레이블보다 정답에 가까운 레이블이 있는지?
- 모델이 무작위 답, 언제나 같은 답을 예측할 경우 어떤 손실 함수와 매트릭을 정해야할지?
-
-
-분산 학습을 수행하는 경우 각 프로세스에서 데이터 세트의 샘플을 출력하고 동일한 결과를 얻었는지 세 번 확인하세요. 한 가지 일반적인 버그는 데이터 생성 시 각 프로세스가 서로 다른 버전의 데이터 세트를 갖도록 만드는 임의성의 원인이 있다는 것입니다.
-
-
+> [!WARNING]
+> 분산 학습을 수행하는 경우 각 프로세스에서 데이터 세트의 샘플을 출력하고 동일한 결과를 얻었는지 세 번 확인하세요. 한 가지 일반적인 버그는 데이터 생성 시 각 프로세스가 서로 다른 버전의 데이터 세트를 갖도록 만드는 임의성의 원인이 있다는 것입니다.
데이터를 살펴본 후 모델의 몇 가지 예측을 살펴보고 디코딩합니다. 모델이 항상 동일한 것을 예측하는 경우 데이터 세트가 하나의 범주(분류 문제의 경우)로 편향되어 있기 때문일 수 있습니다. 희귀 클래스를 오버샘플링하는 것과 같은 기술이 도움이 될 수 있습니다.
@@ -722,11 +707,8 @@ for _ in range(20):
trainer.optimizer.zero_grad()
```
-
-
-💡 학습 데이터가 불균형한 경우 모든 레이블을 포함하는 학습 데이터 배치를 빌드해야 합니다.
-
-
+> [!TIP]
+> 💡 학습 데이터가 불균형한 경우 모든 레이블을 포함하는 학습 데이터 배치를 빌드해야 합니다.
결과 모델은 동일한 `batch`에서 완벽에 가까운 결과를 가져야 합니다. 결과 예측에 대한 메트릭을 계산해 보겠습니다.:
@@ -747,11 +729,8 @@ compute_metrics((preds.cpu().numpy(), labels.cpu().numpy()))
모델이 이와 같이 완벽한 결과를 얻지 못한다면 문제 또는 데이터를 구성하는 방식에 문제가 있음을 의미하므로 이를 수정해야 합니다. 과적합 테스트를 통과해야만 모델이 실제로 무언가를 배울 수 있다는 것을 확신할 수 있습니다.
-
-
-⚠️ 이 테스트 후에는 모델과 `Trainer`를 다시 만들어야 합니다. 학습한 모델은 전체 데이터 세트에서 유용한 것을 재구성하거나 학습할 수 없기 때문입니다.
-
-
+> [!WARNING]
+> ⚠️ 이 테스트 후에는 모델과 `Trainer`를 다시 만들어야 합니다. 학습한 모델은 전체 데이터 세트에서 유용한 것을 재구성하거나 학습할 수 없기 때문입니다.
### 첫 기준 모델을 만들기전엔 튜닝하지 마세요.
diff --git a/chapters/ko/chapter8/4_tf.mdx b/chapters/ko/chapter8/4_tf.mdx
index 5640c6aba..2f53385da 100644
--- a/chapters/ko/chapter8/4_tf.mdx
+++ b/chapters/ko/chapter8/4_tf.mdx
@@ -112,15 +112,12 @@ model.compile(optimizer="adam")
이제 모델의 내부 손실 함수를 사용하게 될 것이고 문제가 해결 될 겁니다!
Now we'll use the model's internal loss, and this problem should be resolved!
-
-
-✏️ **여러분 차례입니다!** 다른 문제를 해결 후 추가 도전으로, 이 단계로 돌아와 모델이 내부 손실 대신 원래 Keras 손실함수로 작동하도록 할 수 있습니다. 레이블이 올바르게 출력되도록 하려면 `to_tf_dataset()`의 `label_cols` 인수에 `"labels"`를 추가해야 합니다. 그러면 그래디언트가 계산됩니다. 하지만 우리가 지정한 손실함수에는 한 가지 문제가 더 있습니다. 학습은 문제가 있음에도 불구하고 계속 실행되지만 학습이 매우 느리고 높은 train 손실값에서 정체 될 수 있습니다. 왜 그런지 알아 볼까요?
-
-만약 어렵다면 ROT13 인코드 방식의 힌트를 보세요 Transformers에서 SequenceClassification 모델의 출력을 보면 첫 번째 출력은 'logits'입니다. logits란 무엇일까요?(살면서 ROT13 인코딩은 처음 봤네요, 궁금하면 영어 원본으로 보세요.)
-
-두번째 힌트: 옵티마이저, 활성함수 또는 손실함수를 문자열로 지정하면 Keras는 해당 함수의 모든 인수 값을 기본값으로 설정합니다. SparseCategoricalCrossentropy에는 어떤 인수가 있으며 기본값은 무엇일까요?
-
-
+> [!TIP]
+> ✏️ **여러분 차례입니다!** 다른 문제를 해결 후 추가 도전으로, 이 단계로 돌아와 모델이 내부 손실 대신 원래 Keras 손실함수로 작동하도록 할 수 있습니다. 레이블이 올바르게 출력되도록 하려면 `to_tf_dataset()`의 `label_cols` 인수에 `"labels"`를 추가해야 합니다. 그러면 그래디언트가 계산됩니다. 하지만 우리가 지정한 손실함수에는 한 가지 문제가 더 있습니다. 학습은 문제가 있음에도 불구하고 계속 실행되지만 학습이 매우 느리고 높은 train 손실값에서 정체 될 수 있습니다. 왜 그런지 알아 볼까요?
+>
+> 만약 어렵다면 ROT13 인코드 방식의 힌트를 보세요 Transformers에서 SequenceClassification 모델의 출력을 보면 첫 번째 출력은 'logits'입니다. logits란 무엇일까요?(살면서 ROT13 인코딩은 처음 봤네요, 궁금하면 영어 원본으로 보세요.)
+>
+> 두번째 힌트: 옵티마이저, 활성함수 또는 손실함수를 문자열로 지정하면 Keras는 해당 함수의 모든 인수 값을 기본값으로 설정합니다. SparseCategoricalCrossentropy에는 어떤 인수가 있으며 기본값은 무엇일까요?
이제 훈련을 해보죠. 그라디언트를 가져와야 하므로 부디(갑자기 불길한 음악이 재생됨) `model.fit()`을 호출하면 모든 것이 잘 작동할 것입니다!
@@ -364,11 +361,8 @@ model = TFAutoModelForSequenceClassification.from_pretrained(model_checkpoint)
model.compile(optimizer=Adam(5e-5))
```
-
-
-🤗 Transformers에서 `create_optimizer()` 함수를 가져올 수도 있습니다. 이렇게 하면 적합한 가중치 감쇠(weight decay)와 학습률 워밍업과 감쇠가 포함된 AdamW 옵티마이저가 제공됩니다. 이 옵티마이저는 기본 Adam 옵티마이저로 얻은 결과보다 약간 더 나은 결과를 만들어내는 경우가 많습니다.
-
-
+> [!TIP]
+> 🤗 Transformers에서 `create_optimizer()` 함수를 가져올 수도 있습니다. 이렇게 하면 적합한 가중치 감쇠(weight decay)와 학습률 워밍업과 감쇠가 포함된 AdamW 옵티마이저가 제공됩니다. 이 옵티마이저는 기본 Adam 옵티마이저로 얻은 결과보다 약간 더 나은 결과를 만들어내는 경우가 많습니다.
이제 새롭고, 개선된 학습률로 모델 학습에 도전해보겠습니다.:
@@ -391,11 +385,8 @@ model.fit(train_dataset)
메모리 부족을 알리는 신호는 "OOM when allocating tensor"와 같은 에러입니다. OOM은 "out of memory"의 줄임말입니다. 이것은 큰 언어 모델을 다룰 때 매우 흔한 위험입니다. 이 문제가 발생하면 배치 크기를 절반으로 줄이고 다시 시도하는 것이 좋습니다. 그러나 일부 모델은 *매우* 큽니다. 예를 들어, 최대크기 GPT-2는 1.5B개의 매개변수가 있습니다. 즉, 모델을 저장하는 데만 6GB의 메모리가 필요하고 그라디언트에는 6GB가 추가로 필요합니다! 최대 크기 GPT-2 모델을 학습하려면 사용하는 배치 크기에 관계없이 일반적으로 20GB 이상의 VRAM이 필요하며, 소수의 GPU만 해당합니다. 'distilbert-base-cased'와 같은 더 가벼운 모델은 실행하기가 훨씬 쉽고 훨씬 빠르게 학습할 수 있습니다.
-
-
-다음 장에서는 메모리 사용량을 줄이고 가장 큰 모델을 파인튜닝 할 수 있는 고급 기술을 살펴보겠습니다.
-
-
+> [!TIP]
+> 다음 장에서는 메모리 사용량을 줄이고 가장 큰 모델을 파인튜닝 할 수 있는 고급 기술을 살펴보겠습니다.
### 몹시 배고픈 TensorFlow 🦛
@@ -450,21 +441,15 @@ for batch in train_dataset:
model.fit(batch, epochs=20)
```
-
-
-💡 학습 데이터가 불균형한 경우 모든 레이블을 포함하는 학습 데이터 배치를 구성해야 합니다.
-
-
+> [!TIP]
+> 💡 학습 데이터가 불균형한 경우 모든 레이블을 포함하는 학습 데이터 배치를 구성해야 합니다.
결과 모델은 `배치`에서 완벽에 가까운 결과를 가져야 하며 손실은 0(또는 사용 중인 손실의 최소값)으로 빠르게 감소합니다.
모델이 이와 같은 완벽한 결과를 얻도록 관리하지 못한다면 문제 또는 데이터를 구성하는 방식에 문제가 있음을 의미하므로 수정해야 합니다. 과적합 테스트를 통과해야만 모델이 실제로 무언가를 학습할 수 있다고 확신할 수 있습니다.
-
-
-⚠️ 과적합 테스트 후에 모델을 다시 만들고 다시 컴파일해야 합니다. 학습 모델이 전체 데이터 세트에서 유용한 것을 복구하고 학습할 수 없기 때문입니다.
-
-
+> [!WARNING]
+> ⚠️ 과적합 테스트 후에 모델을 다시 만들고 다시 컴파일해야 합니다. 학습 모델이 전체 데이터 세트에서 유용한 것을 복구하고 학습할 수 없기 때문입니다.
### 첫 번째 기준이 생길 때까지 아무 것도 조정하지 마세요.
diff --git a/chapters/ko/chapter8/5.mdx b/chapters/ko/chapter8/5.mdx
index 229cb67da..57ad3f660 100644
--- a/chapters/ko/chapter8/5.mdx
+++ b/chapters/ko/chapter8/5.mdx
@@ -17,11 +17,8 @@ Hugging Face 라이브러리 중에서 이상한 것을 발견하면 고칠 수
버그를 생성하는 코드 조각을 분리하는 것이 매우 중요합니다. Hugging Face 팀의 어느 누구도 (아직) 마술사가 아니며 볼 수 없는 것을 고칠 수 없기 때문입니다. 최소한의 재현 가능한 예는 이름에서 알 수 있듯이 재현 가능해야 합니다. 즉, 가지고 있는 외부 파일이나 데이터에 의존해서는 안 됩니다. 사용 중인 데이터를 실제 값처럼 보이지만 여전히 동일한 오류를 생성하는 일부 더미 값으로 바꾸세요.
-
-
-🚨 🤗 Transformers 저장소의 많은 문제는 트랜스포머를 재현하는 데 사용된 데이터에 액세스할 수 없기 때문에 해결되지 않습니다.
-
-
+> [!TIP]
+> 🚨 🤗 Transformers 저장소의 많은 문제는 트랜스포머를 재현하는 데 사용된 데이터에 액세스할 수 없기 때문에 해결되지 않습니다.
코드가 준비되었더라도 더 적은 수의 코드로 줄여서 우리가 _최소 재현 가능한 예제_라고 부르는 것을 만들 수 있습니다. 여기에는 약간의 추가 작업이 필요하지만 멋지고 짧은 버그 재현 코드를 제공하면 코드 수정에 대한 도움이 보장됩니다.
diff --git a/chapters/my/_toctree.yml b/chapters/my/_toctree.yml
index 8cb174f67..676d135ad 100644
--- a/chapters/my/_toctree.yml
+++ b/chapters/my/_toctree.yml
@@ -3,262 +3,262 @@
- local: chapter0/1
title: နိဒါန်း
-# - title: 1. Transformer မော်ဒယ်များ
-# sections:
-# - local: chapter1/1
-# title: နိဒါန်း
-# - local: chapter1/2
-# title: သဘာဝဘာသာစကားစီမံဆောင်ရွက်မှု (Natural Language Processing - NLP) နှင့် ဘာသာစကားမော်ဒယ်ကြီးများ
-# - local: chapter1/3
-# title: Transformer များ၏ စွမ်းဆောင်နိုင်ရည်များ
-# - local: chapter1/4
-# title: Transformer များ မည်သို့လုပ်ဆောင်သလဲ။
-# - local: chapter1/5
-# title: 🤗 Transformers များက လုပ်ငန်းတာဝန်များကို မည်သို့ဖြေရှင်းသလဲ။
-# - local: chapter1/6
-# title: Transformer Architectures များ
-# - local: chapter1/7
-# title: အမြန်ဉာဏ်စမ်း
-# - local: chapter1/8
-# title: LLM များဖြင့် Inference လုပ်ဆောင်ခြင်း
-# - local: chapter1/9
-# title: ဘက်လိုက်မှုနှင့် ကန့်သတ်ချက်များ
-# - local: chapter1/10
-# title: အနှစ်ချုပ်
-# - local: chapter1/11
-# title: အသိအမှတ်ပြုစာမေးပွဲ
-# quiz: 1
+- title: 1. Transformer models များ
+ sections:
+ - local: chapter1/1
+ title: နိဒါန်း
+ - local: chapter1/2
+ title: Natural Language Processing နှင့် Large Language Models များ
+ - local: chapter1/3
+ title: Transformers တွေက ဘာတွေလုပ်နိုင်လဲ။
+ - local: chapter1/4
+ title: Transformers တွေက ဘယ်လိုအလုပ်လုပ်လဲ။
+ - local: chapter1/5
+ title: 🤗 Transformers တွေက လုပ်ငန်းတာဝန်တွေကို ဘယ်လိုဖြေရှင်းပေးလဲ။
+ - local: chapter1/6
+ title: Transformer Architectures များ
+ - local: chapter1/7
+ title: အမြန်ဉာဏ်စမ်း
+ - local: chapter1/8
+ title: LLMs များဖြင့် မှန်းဆတွက်ချက်ခြင်း။
+ - local: chapter1/9
+ title: ဘက်လိုက်မှုနှင့် ကန့်သတ်ချက်များ
+ - local: chapter1/10
+ title: အနှစ်ချုပ်
+ - local: chapter1/11
+ title: အသိအမှတ်ပြု စာမေးပွဲ
+ quiz: 1
-# - title: 2. 🤗 Transformers ကိုအသုံးပြုခြင်း
-# sections:
-# - local: chapter2/1
-# title: နိဒါန်း
-# - local: chapter2/2
-# title: Pipeline နောက်ကွယ်မှ လုပ်ဆောင်ချက်များ
-# - local: chapter2/3
-# title: မော်ဒယ်များ
-# - local: chapter2/4
-# title: Tokenizer များ
-# - local: chapter2/5
-# title: Sequence များစွာကို စီမံကိုင်တွယ်ခြင်း
-# - local: chapter2/6
-# title: အားလုံးကို ပေါင်းစည်းခြင်း
-# - local: chapter2/7
-# title: အခြေခံအသုံးပြုမှု ပြီးစီးပါပြီ။
-# - local: chapter2/8
-# title: Optimized Inference Deployment
-# - local: chapter2/9
-# title: အခန်းပြီးဉာဏ်စမ်း
-# quiz: 2
+- title: 2. 🤗 Transformers ကို အသုံးပြုခြင်း
+ sections:
+ - local: chapter2/1
+ title: နိဒါန်း
+ - local: chapter2/2
+ title: Pipeline နောက်ကွယ်မှ အကြောင်းအရာများ
+ - local: chapter2/3
+ title: Models
+ - local: chapter2/4
+ title: Tokenizers
+ - local: chapter2/5
+ title: Sequence များစွာကို ကိုင်တွယ်ခြင်း
+ - local: chapter2/6
+ title: အားလုံးကို ပေါင်းစပ်ခြင်း
+ - local: chapter2/7
+ title: အခြေခံ အသုံးပြုမှု ပြီးဆုံးပါပြီ!
+ - local: chapter2/8
+ title: Optimization လုပ်ထားသော Inference Deployment
+ - local: chapter2/9
+ title: အခန်းပြီးဆုံးခြင်း စစ်ဆေးမှု
+ quiz: 2
-# - title: 3. ကြိုတင်လေ့ကျင့်ထားသော မော်ဒယ်အား Fine-tuning ပြုလုပ်ခြင်း
-# sections:
-# - local: chapter3/1
-# title: နိဒါန်း
-# - local: chapter3/2
-# title: ဒေတာများအား စီမံဆောင်ရွက်ခြင်း
-# - local: chapter3/3
-# title: Trainer API ဖြင့် မော်ဒယ်အား Fine-tuning ပြုလုပ်ခြင်း
-# - local: chapter3/4
-# title: ပြည့်စုံသော လေ့ကျင့်မှု Loop
-# - local: chapter3/5
-# title: Learning Curve များကို နားလည်ခြင်း
-# - local: chapter3/6
-# title: Fine-tuning ပြီးမြောက်ပါပြီ။
-# - local: chapter3/7
-# title: အခန်းပြီးဉာဏ်စမ်း
-# quiz: 3
+- title: 3. Pretrained Model တစ်ခုကို Fine-tuning လုပ်ခြင်း
+ sections:
+ - local: chapter3/1
+ title: နိဒါန်း
+ - local: chapter3/2
+ title: ဒေတာများကို စီမံဆောင်ရွက်ခြင်း
+ - local: chapter3/3
+ title: Trainer API ဖြင့် မော်ဒယ်တစ်ခုကို Fine-tuning လုပ်ခြင်း
+ - local: chapter3/4
+ title: ပြည့်စုံသော Training Loop တစ်ခု
+ - local: chapter3/5
+ title: Learning Curves များကို နားလည်ခြင်း
+ - local: chapter3/6
+ title: Fine-tuning လုပ်ငန်း ပြီးစီးပြီ!
+ - local: chapter3/7
+ title: အခန်းပြီးဆုံးခြင်း အသိအမှတ်ပြု လက်မှတ်
+ quiz: 3
-# - title: 4. မော်ဒယ်များနှင့် Tokenizer များအား မျှဝေခြင်း
-# sections:
-# - local: chapter4/1
-# title: The Hugging Face Hub
-# - local: chapter4/2
-# title: ကြိုတင်လေ့ကျင့်ထားသော မော်ဒယ်များအား အသုံးပြုခြင်း
-# - local: chapter4/3
-# title: ကြိုတင်လေ့ကျင့်ထားသော မော်ဒယ်များအား မျှဝေခြင်း
-# - local: chapter4/4
-# title: မော်ဒယ်ကတ် တည်ဆောက်ခြင်း
-# - local: chapter4/5
-# title: အပိုင်း ၁ ပြီးစီးပါပြီ။
-# - local: chapter4/6
-# title: အခန်းပြီးဉာဏ်စမ်း
-# quiz: 4
+- title: 4. Models နှင့် Tokenizers များကို မျှဝေခြင်း
+ sections:
+ - local: chapter4/1
+ title: Hugging Face Hub
+ - local: chapter4/2
+ title: Pretrained Models များကို အသုံးပြုခြင်း
+ - local: chapter4/3
+ title: Pretrained Models များကို မျှဝေခြင်း
+ - local: chapter4/4
+ title: Model Card တစ်ခု တည်ဆောက်ခြင်း
+ - local: chapter4/5
+ title: အပိုင်း ၁ ပြီးဆုံးပါပြီ!
+ - local: chapter4/6
+ title: အခန်း (၄) ဆိုင်ရာ မေးခွန်းများ
+ quiz: 4
-# - title: 5. The 🤗 Datasets Library
-# sections:
-# - local: chapter5/1
-# title: နိဒါန်း
-# - local: chapter5/2
-# title: ကျွန်ုပ်၏ Dataset သည် Hub တွင်မရှိလျှင်
-# - local: chapter5/3
-# title: ဒေတာများအား ပိုင်းဖြတ်ရန်
-# - local: chapter5/4
-# title: Big Data? 🤗 Datasets က ကူညီပါပြီ။
-# - local: chapter5/5
-# title: ကိုယ်ပိုင် Dataset ဖန်တီးခြင်း
-# - local: chapter5/6
-# title: FAISS ဖြင့် Semantic Search ပြုလုပ်ခြင်း
-# - local: chapter5/7
-# title: 🤗 Datasets ပြီးမြောက်ပါပြီ။
-# - local: chapter5/8
-# title: အခန်းပြီးဉာဏ်စမ်း
-# quiz: 5
+- title: 5. The 🤗 Datasets library
+ sections:
+ - local: chapter5/1
+ title: နိဒါန်း
+ - local: chapter5/2
+ title: ကျွန်ုပ်၏ Dataset သည် Hub တွင် မရှိလျှင် ဘာလုပ်ရမလဲ။
+ - local: chapter5/3
+ title: Slice and Dice လုပ်ဖို့ အချိန်တန်ပြီ။
+ - local: chapter5/4
+ title: Big Data လား။ 🤗 Datasets က ကူညီပါလိမ့်မယ်။
+ - local: chapter5/5
+ title: ကိုယ်ပိုင် Dataset တစ်ခု ဖန်တီးခြင်း
+ - local: chapter5/6
+ title: FAISS ဖြင့် Semantic Search ပြုလုပ်ခြင်း
+ - local: chapter5/7
+ title: 🤗 Datasets၊ အဆင်သင့်ဖြစ်ပါပြီ!
+ - local: chapter5/8
+ title: အခန်း (၅) ဆိုင်ရာ မေးခွန်းများ
+ quiz: 5
-# - title: 6. The 🤗 Tokenizers Library
+# - title: 6. The 🤗 Tokenizers library
# sections:
# - local: chapter6/1
-# title: နိဒါန်း
+# title: Introduction
# - local: chapter6/2
-# title: Tokenizer အဟောင်းမှ Tokenizer အသစ်တစ်ခု လေ့ကျင့်ခြင်း
+# title: Training a new tokenizer from an old one
# - local: chapter6/3
-# title: Fast Tokenizer များ၏ ထူးခြားစွမ်းရည်များ
+# title: Fast tokenizers' special powers
# - local: chapter6/3b
-# title: QA Pipeline ရှိ Fast Tokenizer များ
+# title: Fast tokenizers in the QA pipeline
# - local: chapter6/4
-# title: Normalization နှင့် Pre-tokenization
+# title: Normalization and pre-tokenization
# - local: chapter6/5
-# title: Byte-Pair Encoding Tokenization
+# title: Byte-Pair Encoding tokenization
# - local: chapter6/6
-# title: WordPiece Tokenization
+# title: WordPiece tokenization
# - local: chapter6/7
-# title: Unigram Tokenization
+# title: Unigram tokenization
# - local: chapter6/8
-# title: Tokenizer တစ်ခုအား အဆင့်ဆင့် တည်ဆောက်ခြင်း
+# title: Building a tokenizer, block by block
# - local: chapter6/9
-# title: Tokenizer များ ပြီးမြောက်ပါပြီ။
+# title: Tokenizers, check!
# - local: chapter6/10
-# title: အခန်းပြီးဉာဏ်စမ်း
+# title: End-of-chapter quiz
# quiz: 6
-# - title: 7. Classical NLP Tasks
+# - title: 7. Classical NLP tasks
# sections:
# - local: chapter7/1
-# title: နိဒါန်း
+# title: Introduction
# - local: chapter7/2
-# title: Token ခွဲခြားသတ်မှတ်ခြင်း
+# title: Token classification
# - local: chapter7/3
-# title: Masked Language Model တစ်ခုအား Fine-tuning ပြုလုပ်ခြင်း
+# title: Fine-tuning a masked language model
# - local: chapter7/4
-# title: ဘာသာပြန်ခြင်း
+# title: Translation
# - local: chapter7/5
-# title: အနှစ်ချုပ်ခြင်း
+# title: Summarization
# - local: chapter7/6
-# title: Causal Language Model တစ်ခုအား အစမှ လေ့ကျင့်ခြင်း
+# title: Training a causal language model from scratch
# - local: chapter7/7
-# title: မေးခွန်းဖြေဆိုခြင်း
+# title: Question answering
# - local: chapter7/8
-# title: LLM များအား ကျွမ်းကျင်ခြင်း
+# title: Mastering LLMs
# - local: chapter7/9
-# title: အခန်းပြီးဉာဏ်စမ်း
+# title: End-of-chapter quiz
# quiz: 7
-# - title: 8. အကူအညီတောင်းခံနည်း
+# - title: 8. How to ask for help
# sections:
# - local: chapter8/1
-# title: နိဒါန်း
+# title: Introduction
# - local: chapter8/2
-# title: အမှားတွေ့ရှိသည့်အခါ
+# title: What to do when you get an error
# - local: chapter8/3
-# title: Forums တွင် အကူအညီတောင်းခံခြင်း
+# title: Asking for help on the forums
# - local: chapter8/4
-# title: လေ့ကျင့်မှု Pipeline အား Debugging ပြုလုပ်ခြင်း
+# title: Debugging the training pipeline
# local_fw: { pt: chapter8/4, tf: chapter8/4_tf }
# - local: chapter8/5
-# title: ကောင်းမွန်သော Issue တစ်ခု ရေးသားနည်း
+# title: How to write a good issue
# - local: chapter8/6
-# title: အပိုင်း ၂ ပြီးစီးပါပြီ။
+# title: Part 2 completed!
# - local: chapter8/7
-# title: အခန်းပြီးဉာဏ်စမ်း
+# title: End-of-chapter quiz
# quiz: 8
-# - title: 9. Demo များ တည်ဆောက်ခြင်းနှင့် မျှဝေခြင်း
-# subtitle: ကျွန်ုပ် မော်ဒယ်တစ်ခုကို လေ့ကျင့်ပြီးပါပြီ၊ ၎င်းကို မည်သို့ပြသနိုင်မည်နည်း။
+# - title: 9. Building and sharing demos
+# subtitle: I trained a model, but how can I show it off?
# sections:
# - local: chapter9/1
-# title: Gradio မိတ်ဆက်
+# title: Introduction to Gradio
# - local: chapter9/2
-# title: ပထမဆုံး Demo ကို တည်ဆောက်ခြင်း
+# title: Building your first demo
# - local: chapter9/3
-# title: Interface Class ကို နားလည်ခြင်း
+# title: Understanding the Interface class
# - local: chapter9/4
-# title: Demo များကို မျှဝေခြင်း
+# title: Sharing demos with others
# - local: chapter9/5
-# title: Hugging Face Hub နှင့် ပေါင်းစည်းမှုများ
+# title: Integrations with the Hugging Face Hub
# - local: chapter9/6
-# title: အဆင့်မြင့် Interface အင်္ဂါရပ်များ
+# title: Advanced Interface features
# - local: chapter9/7
-# title: Blocks မိတ်ဆက်
+# title: Introduction to Blocks
# - local: chapter9/8
-# title: Gradio ပြီးမြောက်ပါပြီ။
+# title: Gradio, check!
# - local: chapter9/9
-# title: အခန်းပြီးဉာဏ်စမ်း
+# title: End-of-chapter quiz
# quiz: 9
-# - title: 10. အရည်အသွေးမြင့် Dataset များ ပြုစုခြင်း
-# subtitle: ထူးခြားသော Dataset များဖန်တီးရန် Argilla ကို မည်သို့အသုံးပြုမည်နည်း။
+# - title: 10. Curate high-quality datasets
+# subtitle: How to use Argilla to create amazing datasets
# sections:
# - local: chapter10/1
-# title: Argilla မိတ်ဆက်
+# title: Introduction to Argilla
# - local: chapter10/2
-# title: Argilla Instance ကို စတင်ပြင်ဆင်ခြင်း
+# title: Set up your Argilla instance
# - local: chapter10/3
-# title: Dataset ကို Argilla သို့ Load လုပ်ခြင်း
+# title: Load your dataset to Argilla
# - local: chapter10/4
-# title: Dataset ကို Annotation ပြုလုပ်ခြင်း
+# title: Annotate your dataset
# - local: chapter10/5
-# title: Annotation ပြုလုပ်ပြီးသော Dataset ကို အသုံးပြုခြင်း
+# title: Use your annotated dataset
# - local: chapter10/6
-# title: Argilla ပြီးမြောက်ပါပြီ။
+# title: Argilla, check!
# - local: chapter10/7
-# title: အခန်းပြီးဉာဏ်စမ်း
+# title: End-of-chapter quiz
# quiz: 10
-# - title: 11. Large Language Models များအား Fine-tune ပြုလုပ်ခြင်း
-# subtitle: Supervised Fine-tuning နှင့် Low-Rank Adaptation ကို အသုံးပြု၍ Large Language Model တစ်ခုအား Fine-tune ပြုလုပ်ခြင်း
+# - title: 11. Fine-tune Large Language Models
+# subtitle: Use Supervised Fine-tuning and Low-Rank Adaptation to fine-tune a large language model
# sections:
# - local: chapter11/1
-# title: နိဒါန်း
+# title: Introduction
# - local: chapter11/2
-# title: Chat Template များ
+# title: Chat Templates
# - local: chapter11/3
-# title: SFTTrainer ဖြင့် Fine-Tuning ပြုလုပ်ခြင်း
+# title: Fine-Tuning with SFTTrainer
# - local: chapter11/4
# title: LoRA (Low-Rank Adaptation)
# - local: chapter11/5
-# title: အကဲဖြတ်ခြင်း
+# title: Evaluation
# - local: chapter11/6
-# title: နိဂုံး
+# title: Conclusion
# - local: chapter11/7
-# title: စာမေးပွဲအချိန်။
+# title: Exam Time!
# quiz: 11
-# - title: 12. Reasoning မော်ဒယ်များ တည်ဆောက်ခြင်း
-# subtitle: DeepSeek R1 ကဲ့သို့ Reasoning မော်ဒယ်များအား တည်ဆောက်နည်းကို လေ့လာပါ။
+# - title: 12. Build Reasoning Models
+# subtitle: Learn how to build reasoning models like DeepSeek R1
# new: true
# sections:
# - local: chapter12/1
-# title: နိဒါန်း
+# title: Introduction
# - local: chapter12/2
-# title: LLM များပေါ်တွင် Reinforcement Learning
+# title: Reinforcement Learning on LLMs
# - local: chapter12/3
-# title: DeepSeek R1 Paper မှ Aha Moment
+# title: The Aha Moment in the DeepSeek R1 Paper
# - local: chapter12/3a
-# title: DeepSeekMath ရှိ GRPO ကို အဆင့်မြင့် နားလည်ခြင်း
+# title: Advanced Understanding of GRPO in DeepSeekMath
# - local: chapter12/4
-# title: TRL တွင် GRPO ကို အကောင်အထည်ဖော်ခြင်း
+# title: Implementing GRPO in TRL
# - local: chapter12/5
-# title: GRPO ဖြင့် မော်ဒယ်တစ်ခုအား Fine-tune ပြုလုပ်ရန် လက်တွေ့လေ့ကျင့်ခန်း
+# title: Practical Exercise to Fine-tune a model with GRPO
# - local: chapter12/6
-# title: Unsloth ဖြင့် လက်တွေ့လေ့ကျင့်ခန်း
+# title: Practical Exercise with Unsloth
# - local: chapter12/7
-# title: မကြာမီလာမည်။
+# title: Coming soon...
-# - title: သင်တန်းဆိုင်ရာ ပွဲများ
+# - title: Course Events
# sections:
# - local: events/1
-# title: Live Sessions နှင့် Workshop များ
+# title: Live sessions and workshops
# - local: events/2
-# title: အပိုင်း ၂ ထုတ်ပြန်ခြင်း ပွဲ
+# title: Part 2 release event
# - local: events/3
-# title: Gradio Blocks Party
\ No newline at end of file
+# title: Gradio Blocks party
diff --git a/chapters/my/chapter0/1.mdx b/chapters/my/chapter0/1.mdx
index 4cc3d24c8..178234818 100644
--- a/chapters/my/chapter0/1.mdx
+++ b/chapters/my/chapter0/1.mdx
@@ -1,34 +1,34 @@
# နိဒါန်း[[introduction]]
-Hugging Face Course မှ ကြိုဆိုပါတယ်။ ဒီနိဒါန်းမှာ သင့်အတွက် အလုပ်လုပ်နိုင်တဲ့ ပတ်ဝန်းကျင်တစ်ခု ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာကို လမ်းညွှန်ပေးသွားမှာပါ။ သင်ဟာ Course ကို အခုမှစတင်သူဆိုရင်တော့ [အခန်း ၁](/course/chapter1) ကို အရင်ဆုံး ဖတ်ရှုပြီးမှ သင့်ရဲ့ပတ်ဝန်းကျင်ကို ထူထောင်ပြီး ကိုယ်တိုင် Code တွေကို လေ့ကျင့်ကြည့်ဖို့ အကြံပြုလိုပါတယ်။
+Hugging Face သင်တန်းမှ ကြိုဆိုပါတယ်။ ဒီနိဒါန်းက သင် အလုပ်လုပ်ရန် ပတ်ဝန်းကျင် (working environment) ကို တည်ဆောက်ရာမှာ လမ်းညွှန်ပေးမှာပါ။ သင်တန်းကို အခုမှ စတင်သူများအတွက်၊ [Chapter 1](/course/chapter1) ကို အရင်ဆုံး လေ့လာပြီးမှ၊ သင်ကိုယ်တိုင် code တွေကို စမ်းသပ်နိုင်ဖို့ သင့်ပတ်ဝန်းကျင်ကို ပြန်လည်တည်ဆောက်ဖို့ ကျွန်တော်တို့ အကြံပြုလိုပါတယ်။
-ဒီ Course မှာ အသုံးပြုမယ့် Library တွေအားလုံးဟာ Python Package တွေအနေနဲ့ ရရှိနိုင်ပါတယ်။ ဒါကြောင့် ဒီမှာ Python ပတ်ဝန်းကျင်တစ်ခုကို ဘယ်လိုတည်ဆောက်ပြီး လိုအပ်တဲ့ Library တွေကို ဘယ်လို Install လုပ်ရမလဲဆိုတာကို ပြသပေးသွားမှာ ဖြစ်ပါတယ်။
+ဒီသင်တန်းမှာ ကျွန်တော်တို့ အသုံးပြုမယ့် library တွေအားလုံးဟာ Python packages တွေအဖြစ် ရရှိနိုင်ပါတယ်။ ဒါကြောင့် ဒီနေရာမှာ သင်လိုအပ်တဲ့ Python ပတ်ဝန်းကျင်ကို ဘယ်လိုတည်ဆောက်ရမလဲ၊ သီးခြား library တွေကို ဘယ်လို install လုပ်ရမလဲဆိုတာကို ပြသသွားမှာပါ။
-သင့်ရဲ့ အလုပ်လုပ်မယ့်ပတ်ဝန်းကျင်ကို တည်ဆောက်တဲ့ နည်းလမ်းနှစ်မျိုးကို ဖော်ပြပေးသွားမှာပါ။ Colab Notebook ဒါမှမဟုတ် Python Virtual Environment ကို အသုံးပြုတဲ့နည်းလမ်းတွေ ဖြစ်ပါတယ်။ သင့်အတွက် အဆင်ပြေဆုံး နည်းလမ်းကို ရွေးချယ်နိုင်ပါတယ်။ စတင်လေ့လာသူတွေအတွက်တော့ Colab Notebook ကို အသုံးပြုဖို့ အထူးအကြံပြုလိုပါတယ်။
+သင့်ရဲ့ အလုပ်လုပ်ရန် ပတ်ဝန်းကျင်ကို တည်ဆောက်ဖို့ နည်းလမ်းနှစ်ခုကို ကျွန်တော်တို့ ဖော်ပြပေးပါမယ်- Colab notebook ကို အသုံးပြုခြင်း ဒါမှမဟုတ် Python virtual environment ကို အသုံးပြုခြင်းတို့ ဖြစ်ပါတယ်။ သင်နဲ့ အသင့်တော်ဆုံးနည်းလမ်းကို လွတ်လပ်စွာ ရွေးချယ်နိုင်ပါတယ်။ စတင်သူများအတွက်ကတော့ Colab notebook ကို အသုံးပြုပြီး စတင်ဖို့ ကျွန်တော်တို့ အထူးအကြံပြုပါတယ်။
-Windows System အတွက်တော့ ဖော်ပြပေးသွားမှာ မဟုတ်ပါဘူး။ အကယ်၍ သင်က Windows ကို အသုံးပြုနေတယ်ဆိုရင်တော့ Colab Notebook ကို အသုံးပြုပြီး လေ့ကျင့်ခန်းတွေ လိုက်လုပ်ဖို့ အကြံပြုလိုပါတယ်။ Linux Distribution ဒါမှမဟုတ် macOS ကို အသုံးပြုနေတယ်ဆိုရင်တော့ ဒီမှာဖော်ပြထားတဲ့ နည်းလမ်းနှစ်မျိုးလုံးကို အသုံးပြုနိုင်ပါတယ်။
+ကျွန်တော်တို့ဟာ Windows system အကြောင်းကို ဖော်ပြသွားမှာ မဟုတ်ပါဘူး။ သင် Windows ကို အသုံးပြုနေတယ်ဆိုရင် Colab notebook ကို အသုံးပြုပြီး လိုက်လုပ်ဖို့ ကျွန်တော်တို့ အကြံပြုပါတယ်။ သင် Linux distribution ဒါမှမဟုတ် macOS ကို အသုံးပြုနေတယ်ဆိုရင်တော့ ဒီနေရာမှာ ဖော်ပြထားတဲ့ နည်းလမ်းနှစ်ခုလုံးကို အသုံးပြုနိုင်ပါတယ်။
-ဒီ Course ရဲ့ အစိတ်အပိုင်းအများစုမှာ Hugging Face Account ရှိဖို့ လိုအပ်ပါတယ်။ ဒါကြောင့် အခုပဲ Account တစ်ခု ဖန်တီးထားဖို့ အကြံပြုလိုပါတယ်- [create an account](https://huggingface.co/join)။
+သင်တန်းရဲ့ အများစုကတော့ Hugging Face account ရှိဖို့ လိုအပ်ပါတယ်။ အခုပဲ account တစ်ခု ဖန်တီးဖို့ ကျွန်တော်တို့ အကြံပြုပါတယ်- [account တစ်ခု ဖန်တီးပါ](https://huggingface.co/join)။
-## Google Colab Notebook ကို အသုံးပြုခြင်း[[using-a-google-colab-notebook]]
+## Google Colab notebook ကို အသုံးပြုခြင်း[[using-a-google-colab-notebook]]
-Colab Notebook ကို အသုံးပြုတာဟာ အလွယ်ကူဆုံး တည်ဆောက်မှုဖြစ်ပါတယ်။ Browser မှာ Notebook တစ်ခုကို ဖွင့်ပြီး Code တွေစရေးရုံပါပဲ။
+Colab notebook ကို အသုံးပြုတာဟာ အလွယ်ကူဆုံး တည်ဆောက်မှုပုံစံ ဖြစ်ပါတယ်၊ သင်ရဲ့ browser ထဲမှာ notebook တစ်ခုကို ဖွင့်လိုက်ရုံနဲ့ တိုက်ရိုက် code ရေးလို့ရပါပြီ။
-Colab နဲ့ မရင်းနှီးသေးဘူးဆိုရင်တော့ [introduction](https://colab.research.google.com/notebooks/intro.ipynb) ကို အရင်ဆုံး ဖတ်ရှုဖို့ အကြံပြုလိုပါတယ်။ Colab က GPU ဒါမှမဟုတ် TPU လို Accelerating Hardware တွေကို အသုံးပြုခွင့်ပေးပြီး Workload နည်းနည်းအတွက်ဆိုရင် အခမဲ့ အသုံးပြုနိုင်ပါတယ်။
+သင် Colab နဲ့ မရင်းနှီးသေးဘူးဆိုရင် [နိဒါန်း](https://colab.research.google.com/notebooks/intro.ipynb) ကို အရင်ဆုံး လေ့လာဖို့ ကျွန်တော်တို့ အကြံပြုပါတယ်။ Colab က GPU ဒါမှမဟုတ် TPU လိုမျိုး အရှိန်မြှင့် hardware အချို့ကို အသုံးပြုခွင့်ပေးပြီး၊ အလုပ်ပမာဏ နည်းတဲ့ ကိစ္စတွေအတွက်တော့ အခမဲ့ ဖြစ်ပါတယ်။
-Colab မှာ အသုံးပြုရတာ အဆင်ပြေပြီဆိုရင် Notebook အသစ်တစ်ခု ဖန်တီးပြီး စတင်တည်ဆောက်နိုင်ပါပြီ။
+Colab ထဲမှာ ကျွမ်းကျင်စွာ သွားလာနိုင်ပြီဆိုတာနဲ့၊ notebook အသစ်တစ်ခု ဖန်တီးပြီး စနစ်တကျ စတင်လိုက်ပါ။
-နောက်တစ်ဆင့်ကတော့ ဒီ Course မှာ အသုံးပြုမယ့် Library တွေကို Install လုပ်ဖို့ပဲ ဖြစ်ပါတယ်။ Python အတွက် Package Manager ဖြစ်တဲ့ `pip` ကို အသုံးပြုပြီး Install လုပ်ပါမယ်။ Notebook တွေမှာ System Command တွေကို `!` Character နဲ့ စပြီး ရေးသားနိုင်ပါတယ်။ ဒါကြောင့် 🤗 Transformers Library ကို အောက်ပါအတိုင်း Install လုပ်နိုင်ပါတယ်-
+နောက်တစ်ဆင့်ကတော့ ဒီသင်တန်းမှာ ကျွန်တော်တို့ အသုံးပြုမယ့် library တွေကို install လုပ်ဖို့ ဖြစ်ပါတယ်။ install လုပ်ဖို့အတွက် Python ရဲ့ package manager ဖြစ်တဲ့ `pip` ကို ကျွန်တော်တို့ အသုံးပြုပါမယ်။ notebooks တွေမှာ `!` character ကို အရှေ့မှာ ထားခြင်းဖြင့် system commands တွေကို run နိုင်ပါတယ်။ ဒါကြောင့် 🤗 Transformers library ကို အောက်ပါအတိုင်း install လုပ်နိုင်ပါတယ်-
```
!pip install transformers
```
-သင့်ရဲ့ Python Runtime မှာ Import လုပ်ခြင်းဖြင့် Package မှန်ကန်စွာ Install လုပ်ပြီးခြင်းကို သေချာစစ်ဆေးနိုင်ပါတယ်-
+သင့်ရဲ့ Python runtime ထဲမှာ import လုပ်ခြင်းဖြင့် package ကို မှန်ကန်စွာ install လုပ်ထားခြင်းရှိမရှိ စစ်ဆေးနိုင်ပါတယ်-
```
import transformers
@@ -38,38 +38,38 @@ import transformers
-ဒါက 🤗 Transformers ရဲ့ ပေါ့ပါးတဲ့ Version ကိုသာ Install လုပ်ထားတာ ဖြစ်ပါတယ်။ အထူးသဖြင့် PyTorch ဒါမှမဟုတ် TensorFlow လို Machine Learning Framework တွေတော့ Install လုပ်ထားတာ မဟုတ်ပါဘူး။ Library ရဲ့ ကွဲပြားခြားနားတဲ့ Feature တွေ အများကြီးကို အသုံးပြုရမှာဖြစ်လို့ Development Version ကို Install လုပ်ဖို့ အကြံပြုလိုပါတယ်။ ဒီ Version မှာတော့ စိတ်ကူးနိုင်သမျှ အသုံးပြုမှုတိုင်းအတွက် လိုအပ်တဲ့ Dependency တွေ အားလုံးပါဝင်ပါတယ်-
+ဒါက 🤗 Transformers ရဲ့ အလွန်ပေါ့ပါးတဲ့ version တစ်ခုကို install လုပ်တာ ဖြစ်ပါတယ်။ အထူးသဖြင့်၊ သီးခြား machine learning frameworks (PyTorch ဒါမှမဟုတ် TensorFlow လိုမျိုး) တွေ install လုပ်ထားတာ မရှိပါဘူး။ ကျွန်တော်တို့ library ရဲ့ မတူညီတဲ့ features များစွာကို အသုံးပြုရမှာဖြစ်တာကြောင့်၊ မော်ဒယ်တိုင်းအတွက် လိုအပ်တဲ့ dependencies အားလုံးပါဝင်တဲ့ development version ကို install လုပ်ဖို့ ကျွန်တော်တို့ အကြံပြုပါတယ်-
```
!pip install transformers[sentencepiece]
```
-ဒါက အချိန်အနည်းငယ်ယူပါလိမ့်မယ်။ ဒါပေမဲ့ ပြီးတာနဲ့ Course ရဲ့ ကျန်အပိုင်းတွေအတွက် သင် အသင့်ဖြစ်နေပါပြီ။
+ဒါက အချိန်အနည်းငယ် ကြာပါလိမ့်မယ်၊ ဒါပေမယ့် ပြီးသွားရင်တော့ သင်တန်းတစ်လျှောက်လုံးအတွက် အဆင်သင့်ဖြစ်ပါပြီ။
-## Python Virtual Environment ကို အသုံးပြုခြင်း[[using-a-python-virtual-environment]]
+## Python virtual environment ကို အသုံးပြုခြင်း[[using-a-python-virtual-environment]]
-အကယ်၍ သင်က Python Virtual Environment ကို အသုံးပြုဖို့ နှစ်သက်တယ်ဆိုရင် ပထမအဆင့်က သင့်ရဲ့ System မှာ Python ကို Install လုပ်ဖို့ပါပဲ။ [ဒီလမ်းညွှန်](https://realpython.com/installing-python/) ကို လိုက်နာပြီး စတင်ဖို့ အကြံပြုလိုပါတယ်။
+သင် Python virtual environment ကို အသုံးပြုဖို့ ပိုကြိုက်တယ်ဆိုရင်၊ ပထမအဆင့်ကတော့ သင့် system မှာ Python ကို install လုပ်ဖို့ပါပဲ။ စတင်ဖို့အတွက် [ဒီလမ်းညွှန်](https://realpython.com/installing-python/) ကို လိုက်နာဖို့ ကျွန်တော်တို့ အကြံပြုပါတယ်။
-Python ကို Install လုပ်ပြီးပြီဆိုရင် သင့်ရဲ့ Terminal မှာ Python Command တွေကို Run နိုင်ပြီဖြစ်ပါတယ်။ နောက်အဆင့်တွေ မဆက်ခင် Python မှန်ကန်စွာ Install လုပ်ပြီးပြီလားဆိုတာ သေချာအောင် `python --version` Command ကို Run ကြည့်နိုင်ပါတယ်။ ဒါက သင့်ရဲ့ System မှာ လက်ရှိရရှိနိုင်တဲ့ Python Version ကို ပြသပေးပါလိမ့်မယ်။
+Python ကို install လုပ်ပြီးတာနဲ့၊ သင့် terminal မှာ Python commands တွေကို run နိုင်ပါလိမ့်မယ်။ နောက်ထပ်အဆင့်တွေ မဆက်ခင် မှန်ကန်စွာ install လုပ်ထားခြင်းရှိမရှိ သေချာစေဖို့ `python --version` လို့ရိုက်ပြီး စစ်ဆေးနိုင်ပါတယ်။ ဒါက သင့် system မှာ လက်ရှိရရှိနိုင်တဲ့ Python version ကို ပြသပေးပါလိမ့်မယ်။
-Terminal မှာ `python --version` လို Python Command တစ်ခုကို Run တဲ့အခါ၊ Command ကို Run နေတဲ့ Program ကို သင့်ရဲ့ System မှာရှိတဲ့ “main” Python အဖြစ် မှတ်ယူသင့်ပါတယ်။ ဒီ Main Installation ကို Package တွေမပါဘဲ သန့်ရှင်းအောင်ထားဖို့ အကြံပြုလိုပါတယ်။ ပြီးတော့ သင်အလုပ်လုပ်တဲ့ Application တစ်ခုစီအတွက် သီးခြား Environment တွေ ဖန်တီးဖို့အတွက် ဒီ Main Installation ကို အသုံးပြုသင့်ပါတယ်။ ဒီနည်းလမ်းက Application တစ်ခုစီမှာ သူ့ရဲ့ ကိုယ်ပိုင် Dependency တွေနဲ့ Package တွေ ရှိနိုင်ပြီး တခြား Application တွေနဲ့ ဖြစ်နိုင်တဲ့ Compatibility ပြဿနာတွေကို စိုးရိမ်စရာမလိုတော့ပါဘူး။
+သင့် terminal မှာ `python --version` လိုမျိုး Python command တစ်ခုကို run တဲ့အခါ၊ သင် command ကို run နေတဲ့ program ကို သင့် system ရဲ့ "အဓိက" Python လို့ တွေးကြည့်သင့်ပါတယ်။ ဒီအဓိက install လုပ်ထားတဲ့ Python မှာ packages တွေ မထည့်ဘဲ ထားပြီး၊ သင်အလုပ်လုပ်တဲ့ application တစ်ခုစီအတွက် သီးခြား environments တွေ ဖန်တီးဖို့ အသုံးပြုဖို့ ကျွန်တော်တို့ အကြံပြုပါတယ်။ ဒီနည်းနဲ့ application တစ်ခုစီမှာ သူ့ဘာသာသူ dependencies တွေနဲ့ packages တွေ ရှိနိုင်ပြီး၊ အခြား application တွေနဲ့ ဖြစ်နိုင်ချေရှိတဲ့ လိုက်ဖက်မှုပြဿနာတွေအတွက် သင်စိုးရိမ်စရာ မလိုပါဘူး။
-Python မှာ ဒါကို [virtual environments](https://docs.python.org/3/tutorial/venv.html) တွေနဲ့ လုပ်ဆောင်ပါတယ်။ Virtual Environment တွေက Self-contained Directory Tree တွေဖြစ်ပြီး တစ်ခုစီမှာ သတ်မှတ်ထားတဲ့ Python Version နဲ့ Application လိုအပ်တဲ့ Package တွေအားလုံးပါဝင်တဲ့ Python Installation တစ်ခုပါဝင်ပါတယ်။ ဒီလို Virtual Environment တစ်ခုကို ဖန်တီးတာကို ကိရိယာအမျိုးမျိုးနဲ့ လုပ်ဆောင်နိုင်ပေမဲ့ ဒီရည်ရွယ်ချက်အတွက် တရားဝင် Python Package ဖြစ်တဲ့ [`venv`](https://docs.python.org/3/library/venv.html#module-venv) ကို အသုံးပြုပါမယ်။
+Python မှာ ဒါကို [*virtual environments*](https://docs.python.org/3/tutorial/venv.html) တွေနဲ့ လုပ်ဆောင်ပါတယ်။ ဒါတွေဟာ သူ့ဘာသာသူ ပါဝင်တဲ့ directory trees တွေဖြစ်ပြီး တစ်ခုစီမှာ သီးခြား Python version တစ်ခုနဲ့ application လိုအပ်တဲ့ packages အားလုံး ပါဝင်ပါတယ်။ ဒီလို virtual environment တစ်ခု ဖန်တီးခြင်းကို ကိရိယာအမျိုးမျိုးနဲ့ လုပ်ဆောင်နိုင်ပေမယ့်၊ ကျွန်တော်တို့ကတော့ အဲဒီရည်ရွယ်ချက်အတွက် တရားဝင် Python package ဖြစ်တဲ့ [`venv`](https://docs.python.org/3/library/venv.html#module-venv) ကို အသုံးပြုပါမယ်။
-ပထမဆုံးအနေနဲ့ သင့် Application ထားရှိလိုတဲ့ Directory ကို ဖန်တီးပါ။ ဥပမာ- သင့်ရဲ့ Home Directory ရဲ့ Root မှာ *transformers-course* လို့ခေါ်တဲ့ Directory အသစ်တစ်ခု ဖန်တီးချင်ပါလိမ့်မယ်-
+ပထမဆုံး၊ သင်ရဲ့ application ကို ထားချင်တဲ့ directory ကို ဖန်တီးပါ - ဥပမာ၊ သင်ရဲ့ home directory ရဲ့ root မှာ *transformers-course* လို့ခေါ်တဲ့ directory အသစ်တစ်ခု ပြုလုပ်ချင်ပါလိမ့်မယ်-
```
mkdir ~/transformers-course
cd ~/transformers-course
```
-ဒီ Directory ထဲကနေ Python ရဲ့ `venv` Module ကို အသုံးပြုပြီး Virtual Environment တစ်ခုကို ဖန်တီးပါ-
+ဒီ directory ထဲကနေ Python ရဲ့ `venv` module ကို အသုံးပြုပြီး virtual environment တစ်ခု ဖန်တီးပါ။
```
python -m venv .env
```
-အခုဆိုရင် သင့်ရဲ့ တခြားဘာမှမရှိတဲ့ Folder ထဲမှာ *.env* လို့ခေါ်တဲ့ Directory တစ်ခု ရှိနေပါပြီ-
+သင်ရဲ့ ဗလာဖြစ်နေတဲ့ folder ထဲမှာ *.env* လို့ခေါ်တဲ့ directory တစ်ခုကို အခု သင်တွေ့ရပါလိမ့်မယ်-
```
ls -a
@@ -79,17 +79,17 @@ ls -a
. .. .env
```
-`activate` နဲ့ `deactivate` Script တွေနဲ့ သင့်ရဲ့ Virtual Environment ထဲကို ဝင်ရောက်ခြင်းနဲ့ ထွက်ခွာခြင်းတို့ကို ပြုလုပ်နိုင်ပါတယ်-
+ဒီ `activate` နဲ့ `deactivate` scripts တွေနဲ့ သင်ရဲ့ virtual environment ထဲကို ဝင်နိုင်ပြီး ပြန်ထွက်နိုင်ပါတယ်-
```
-# Virtual Environment ကို Activate ပြုလုပ်ရန်
+# virtual environment ကို ဖွင့်
source .env/bin/activate
-# Virtual Environment ကို Deactivate ပြုလုပ်ရန်
+# virtual environment ကို ပိတ်
deactivate
```
-`which python` Command ကို Run ခြင်းဖြင့် Environment က Activate လုပ်ထားပြီလားဆိုတာ သေချာအောင် စစ်ဆေးနိုင်ပါတယ်။ အကယ်၍ Virtual Environment ကို ညွှန်ပြနေတယ်ဆိုရင် သင် အောင်မြင်စွာ Activate လုပ်ပြီးသား ဖြစ်ပါပြီ။
+`which python` command ကို run ခြင်းဖြင့် environment ကို ဖွင့်ထားခြင်းရှိမရှိ သေချာအောင် စစ်ဆေးနိုင်ပါတယ်။ အကယ်၍ ၎င်းက virtual environment ကို ညွှန်ပြနေတယ်ဆိုရင် သင်အောင်မြင်စွာ ဖွင့်ထားတာ ဖြစ်ပါတယ်။
```
which python
@@ -99,12 +99,43 @@ which python
/home/