Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FA] - Ch3 - P3.1 and P3.2 #264

Merged
merged 261 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
96a3dc0
fixed minor typo
kambizG Apr 20, 2022
7321d72
fixed minor typo
kambizG Apr 20, 2022
34eeeda
section 2 - process data - file added.
kambizG Apr 20, 2022
4abbc2a
minor fix
kambizG Apr 20, 2022
2217041
minor fix
kambizG Apr 20, 2022
7b45905
minor fix
kambizG Apr 20, 2022
bf53804
added new paragraph
kambizG Apr 20, 2022
5b85ac4
urls added
kambizG Apr 20, 2022
18ed2b6
new paragraph added
kambizG Apr 20, 2022
53af641
typos fixed
kambizG Apr 20, 2022
8d386fa
writing improved
kambizG Apr 20, 2022
991055c
synch with glossary
kambizG Apr 20, 2022
9a6023e
new paragraph added
kambizG Apr 20, 2022
4f1d096
polished sentences
kambizG Apr 20, 2022
3544c29
new sentence added
kambizG Apr 20, 2022
e297990
new paragraph added
kambizG Apr 21, 2022
d279e14
new paragraph added
kambizG Apr 21, 2022
104acb9
new paragraph added
kambizG Apr 21, 2022
cc15095
new paragraph added
kambizG Apr 21, 2022
e9e9250
new paragraph added
kambizG Apr 21, 2022
a98899d
new paragraph added
kambizG Apr 21, 2022
3c7526d
new paragraph added
kambizG Apr 21, 2022
f1ed412
fixed typo
kambizG Apr 21, 2022
7b75874
multiple paragraphs first draft added
kambizG Apr 21, 2022
5f09dc4
polish
kambizG Apr 21, 2022
cb38ccb
new paragraphs added
kambizG Apr 22, 2022
ec10da9
new paragraphs added
kambizG Apr 22, 2022
06fc68f
new paragraphs added
kambizG Apr 22, 2022
f61f8b7
new paragraphs added
kambizG Apr 22, 2022
7f2a8bb
first draft done.
kambizG Apr 22, 2022
f5aa768
minor fixes and polish
kambizG Apr 24, 2022
a93d7a2
minor fixes and polish
kambizG Apr 24, 2022
ede676e
minor fixes and polish
kambizG Apr 24, 2022
113d77a
minor fixes and polish
kambizG Apr 24, 2022
2f4a662
minor fixes and polish
kambizG Apr 24, 2022
4dd8c5d
minor fixes and polish
kambizG Apr 24, 2022
33c8b39
minor fixes and polish
kambizG Apr 24, 2022
54a7614
minor fixes and polish
kambizG Apr 24, 2022
56ed2ea
minor fixes and polish
kambizG Apr 24, 2022
e342854
minor fixes and polish
kambizG Apr 24, 2022
c28091e
minor fixes and polish
kambizG Apr 24, 2022
da86f2a
minor fixes and polish
kambizG Apr 24, 2022
c9680eb
minor fixes and polish
kambizG Apr 24, 2022
a27f1ba
minor fixes and polish
kambizG Apr 24, 2022
66efcf3
minor fixes and polish
kambizG Apr 24, 2022
2b0e4a6
minor fixes and polish
kambizG Apr 25, 2022
af4de38
minor fixes and polish
kambizG Apr 25, 2022
9c1276f
minor fixes and polish
kambizG Apr 25, 2022
5b79da9
minor fixes and polish
kambizG Apr 25, 2022
b0fd163
minor fixes and polish
kambizG Apr 25, 2022
217073a
minor fixes and polish
kambizG Apr 25, 2022
1a6bd70
minor fixes and polish
kambizG Apr 25, 2022
15f7f95
minor fixes and polish
kambizG Apr 25, 2022
a4c9c17
minor fixes and polish
kambizG Apr 25, 2022
868402c
minor fixes and polish
kambizG Apr 25, 2022
4598b69
minor fixes and polish
kambizG Apr 25, 2022
87942d6
minor fixes and polish
kambizG Apr 25, 2022
1971f77
minor fixes and polish
kambizG Apr 25, 2022
a1d8859
minor fixes and polish
kambizG Apr 25, 2022
b5ebbc9
minor fixes and polish
kambizG Apr 25, 2022
4811b94
minor fixes and polish
kambizG Apr 25, 2022
cc392b9
minor fixes and polish
kambizG Apr 25, 2022
a6b5e07
minor fixes and polish
kambizG Apr 25, 2022
0bcc2f6
minor fixes and polish
kambizG Apr 25, 2022
edc0f35
minor fixes and polish
kambizG Apr 25, 2022
c3cf4e7
minor fixes and polish
kambizG Apr 25, 2022
c0a6bd9
minor fixes and polish
kambizG Apr 25, 2022
234ef87
minor fixes and polish
kambizG Apr 25, 2022
1e5ecfe
minor fixes and polish
kambizG Apr 25, 2022
b908079
minor fixes and polish
kambizG Apr 25, 2022
28e160d
minor fixes and polish
kambizG Apr 25, 2022
d6aa6d6
minor fixes and polish
kambizG Apr 25, 2022
5b85211
minor fixes and polish
kambizG Apr 25, 2022
4848b61
minor fixes and polish
kambizG Apr 25, 2022
d4eb913
minor fixes and polish
kambizG Apr 25, 2022
ddf951a
minor fixes and polish
kambizG Apr 25, 2022
f65bf3e
minor fixes and polish
kambizG Apr 25, 2022
3253b83
minor fixes and polish
kambizG Apr 25, 2022
b9e4251
minor fixes and polish
kambizG Apr 25, 2022
21a7947
minor fixes and polish
kambizG Apr 25, 2022
1dd88fe
minor fix
kambizG Apr 25, 2022
1ab29f4
Ch3 - 1 and 2 funal draft.
kambizG Apr 25, 2022
e1fdabc
Ch3 - 1 and 2 funal draft.
kambizG Apr 25, 2022
cfc8ba6
Ch3 - 1 and 2 final draft.
kambizG Apr 25, 2022
fe1fdd2
Ch3-P3 - first push
kambizG Apr 27, 2022
f38ca66
file removed
kambizG Apr 30, 2022
bf5bf0f
mistake fixed
kambizG Apr 30, 2022
2847e0c
new file added
kambizG May 1, 2022
86af017
multiple new paragraph added to the translation
kambizG May 1, 2022
e01d74c
minor update
kambizG May 1, 2022
e8cbf4a
new paragraphs added.
kambizG May 3, 2022
bc24213
toc_tree updated
kambizG May 4, 2022
cca41c1
rtl div added
kambizG May 5, 2022
7d0e787
rtl div added
kambizG May 5, 2022
b94b457
Applied reviews to chapters part 1 and 2. New phrases added to G
kambizG May 5, 2022
d764628
test remove rtl div
kambizG May 5, 2022
59a6274
test remove rtl div
kambizG May 5, 2022
0349df6
comment applies
kambizG May 5, 2022
8bdfb66
all comment applied
kambizG May 5, 2022
f651342
comments applies
kambizG May 5, 2022
1c9dbd5
some comments applied
kambizG May 5, 2022
7bb86f1
comments applied
kambizG May 5, 2022
6551eb8
new fixes applied
kambizG May 5, 2022
e9664af
new fixes applied
kambizG May 5, 2022
a4311f5
new fixes applied
kambizG May 5, 2022
1474c43
new fixes applied
kambizG May 5, 2022
42c55ff
new fixes applied
kambizG May 5, 2022
258b982
new fixes applied
kambizG May 5, 2022
c93fe7e
new fixes applied
kambizG May 5, 2022
e08e7cd
Finally, all fixes applied
kambizG May 5, 2022
46f1fca
additional fixes made following the comments in the review
kambizG May 5, 2022
cb33b96
lrt and rtl divisions added
kambizG May 5, 2022
cf3fcc2
lrt and rtl divisions added
kambizG May 5, 2022
67bf22a
lrt and rtl divisions added
kambizG May 5, 2022
52a0671
lrt and rtl divisions added
kambizG May 5, 2022
59313b6
lrt and rtl divisions added
kambizG May 5, 2022
2a3502c
lrt and rtl divisions added
kambizG May 5, 2022
39696fe
lrt and rtl divisions added
kambizG May 5, 2022
62dedb1
lrt and rtl divisions added
kambizG May 5, 2022
f588f85
lrt and rtl divisions added
kambizG May 5, 2022
de26443
lrt and rtl divisions added
kambizG May 5, 2022
5753b15
remove unfinished translation from merge
kambizG May 6, 2022
f549048
Merge branch 'main' into main
kambizG May 6, 2022
42b81a4
pulled G from upstream.
kambizG May 8, 2022
db01f41
some comments applied
kambizG May 9, 2022
888da94
some comments applied
kambizG May 9, 2022
f405cff
some comments applied
kambizG May 9, 2022
7c0eee2
some comments applied
kambizG May 9, 2022
5189d1a
some comments applied
kambizG May 9, 2022
73c5dde
multiple comments applied
kambizG May 9, 2022
840c8e4
multiple review comments applied
kambizG May 12, 2022
f7c5f0a
Merge branch 'huggingface:main' into main
kambizG May 12, 2022
a1e7c08
review changes applied
kambizG May 17, 2022
e9d6809
review coments applied
kambizG May 18, 2022
bcd635e
Merge branch 'huggingface:main' into main
kambizG May 18, 2022
58f5207
review coments applied
kambizG May 19, 2022
c90ad2a
review coments applied
kambizG May 19, 2022
0423a42
review changes applied
kambizG May 20, 2022
fe3df6d
finish applying review comments
kambizG May 20, 2022
6954990
Merge branch 'huggingface:main' into main
kambizG May 20, 2022
b748da2
PR failure resolved
kambizG May 20, 2022
dc51a8c
minot typo
kambizG May 21, 2022
9708bc9
minot typo
kambizG May 21, 2022
8a5894f
new phrases added to G
kambizG May 22, 2022
8d6f073
a few changes applied
kambizG May 23, 2022
494af44
minor updates applied
kambizG May 23, 2022
703d1d1
comments applied
kambizG May 23, 2022
31b55cd
one last fix
kambizG May 24, 2022
7cead81
chapter title fixed
kambizG May 30, 2022
3ce1fcb
Merge branch 'huggingface:main' into main
kambizG May 30, 2022
4fd7475
minor fix - chapter title
kambizG May 30, 2022
25c3b71
fixe typos the title of chapter 3
kambizG May 30, 2022
b66cdef
new file added
kambizG Jun 1, 2022
d1feca3
new paragraphs added
kambizG Jun 1, 2022
644599a
minor fix
kambizG Jun 1, 2022
531f963
minor fix
kambizG Jun 1, 2022
99b9502
minor fix
kambizG Jun 1, 2022
2f9e9b5
new paragraph added
kambizG Jun 1, 2022
9d89e11
minor fix
kambizG Jun 1, 2022
9cdff87
minor fix
kambizG Jun 1, 2022
2ab6994
new paragraph added
kambizG Jun 3, 2022
5b7ca84
all paragraphs added
kambizG Jun 3, 2022
e4a6674
minor fix
kambizG Jun 3, 2022
0e1e56f
minor fix
kambizG Jun 3, 2022
ecdec2a
minor fix
kambizG Jun 3, 2022
28bc806
minor fix
kambizG Jun 3, 2022
6b361fd
minor paragraph fixes applied
kambizG Jun 3, 2022
9ee05b2
minor fix
kambizG Jun 3, 2022
cfcda0a
minor fix
kambizG Jun 3, 2022
17b37be
minor fix
kambizG Jun 3, 2022
a34fb6d
minor fix
kambizG Jun 3, 2022
268f721
minor fix
kambizG Jun 3, 2022
56bf119
minor fix
kambizG Jun 3, 2022
b1c8c1d
minor fix
kambizG Jun 3, 2022
4f974d5
minor fix
kambizG Jun 3, 2022
64303ef
minor fix
kambizG Jun 3, 2022
67f1b0b
minor fix
kambizG Jun 3, 2022
c0940ea
prune original text
kambizG Jun 3, 2022
350986f
minor fix
kambizG Jun 3, 2022
898295e
minor fix
kambizG Jun 3, 2022
e2ee265
minor fix
kambizG Jun 3, 2022
4fd6112
minor fix
kambizG Jun 3, 2022
611b3ca
minor fix
kambizG Jun 3, 2022
e7c671d
minor fix
kambizG Jun 3, 2022
541e0fd
minor fix
kambizG Jun 3, 2022
42d214a
minor fix
kambizG Jun 3, 2022
4998576
minor fix
kambizG Jun 3, 2022
41ecfb1
minor fix
kambizG Jun 3, 2022
10c3116
minor fix
kambizG Jun 3, 2022
ab1f91c
new file added
kambizG Jun 11, 2022
bdb52e2
Merge branch 'huggingface:main' into main
kambizG Jun 11, 2022
76da5dc
new paragraph added
kambizG Jun 13, 2022
c34e358
right to left span
kambizG Jun 13, 2022
8112c47
new paragraph added
kambizG Jun 13, 2022
6e55417
left to right code sections fixed
kambizG Jun 13, 2022
b5f9674
two new paragraphs added
kambizG Jun 13, 2022
33e5994
minor sentence structure fixed
kambizG Jun 13, 2022
6480710
minor sentence structure fixed
kambizG Jun 13, 2022
631312f
new paragraphs added
kambizG Jun 13, 2022
04eac77
new paragraph added
kambizG Jun 14, 2022
0cd3a2f
fixed typose
kambizG Jun 14, 2022
2e60166
new paragraph added
kambizG Jun 14, 2022
272dccc
fixed typose
kambizG Jun 14, 2022
e5389cc
fixed typose
kambizG Jun 14, 2022
cfe8958
fixed typose
kambizG Jun 14, 2022
0e614ca
new paragraph added
kambizG Jun 14, 2022
b4dad8a
new paragraphs added
kambizG Jun 19, 2022
8ff8d2d
fixed typose
kambizG Jun 19, 2022
832d5c5
fixed typose
kambizG Jun 19, 2022
f4883d8
fixed typose
kambizG Jun 19, 2022
c38c629
fixed typose
kambizG Jun 19, 2022
c43a5c1
fixed wording
kambizG Jun 19, 2022
08fa6b8
fixed wording
kambizG Jun 19, 2022
66ef657
new paragraphs added
kambizG Jun 21, 2022
5fa39b3
fixed wording
kambizG Jun 21, 2022
6a432e4
fixed ltr
kambizG Jun 21, 2022
df6e86f
new paragraphs added
kambizG Jun 23, 2022
83bb189
fixed sentece wording and structure
kambizG Jun 23, 2022
b0d38c0
fixed sentece wording and structure
kambizG Jun 23, 2022
92e0e5c
fixed sentece wording and structure
kambizG Jun 23, 2022
e130d69
fixed sentece wording and structure
kambizG Jun 23, 2022
4fa5e7e
fixed ltr
kambizG Jun 23, 2022
410c43d
fixed ltr
kambizG Jun 23, 2022
fef307f
fixed ltr
kambizG Jun 23, 2022
8ff9f08
fixed ltr
kambizG Jun 23, 2022
4ca6047
fixed wording
kambizG Jun 23, 2022
860ed28
fixed ltr
kambizG Jun 23, 2022
87ec575
fixed wording
kambizG Jun 23, 2022
a5729aa
fixed wording
kambizG Jun 23, 2022
dfe8a8d
fixed wording
kambizG Jun 23, 2022
9ab029b
fixed wording
kambizG Jun 23, 2022
372d8c5
fixed wording
kambizG Jun 23, 2022
9fafe84
fixed typo
kambizG Jun 23, 2022
dec3de9
fixed wording
kambizG Jun 23, 2022
119853c
fixed wording
kambizG Jun 23, 2022
f4a5b55
fixed wording
kambizG Jun 23, 2022
f451029
fixed ltr
kambizG Jun 23, 2022
1b611d8
fixed ltr
kambizG Jun 23, 2022
b79139b
fixed wording
kambizG Jun 23, 2022
d8eba67
missing icon added
kambizG Jun 23, 2022
8858f2c
remove original english text
kambizG Jun 23, 2022
1ea8869
Merge branch 'huggingface:main' into main
kambizG Jun 23, 2022
9b9a72c
final commit CH3 P3
kambizG Jun 23, 2022
f92b070
formatting fixed - section ending was missing
kambizG Jun 23, 2022
00e876e
fixed formatting
kambizG Jun 23, 2022
8d30cdd
test 3_tf for formatting
kambizG Jun 23, 2022
14f0b6c
test 3_tf for formatting - put back
kambizG Jun 23, 2022
bda0cc1
text formatting
kambizG Jun 23, 2022
7e9ef4f
text formatting
kambizG Jun 23, 2022
985fd5f
text formatting error fixe
kambizG Jun 23, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions chapters/fa/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,23 @@
- local: chapter2/3
title: مدل‌ها

- title: ۳- کوک کردن یک مدل از پیش تعلیم دیده
sections:
- local: chapter3/1
title: مقدمه
- local: chapter3/2
title: پردازش داده
- local: chapter3/3
title: کوک کردن مدل‌ها با استفاده از Trainer API یا کِراس
local_fw: { pt: chapter3/3, tf: chapter3/3_tf }

- title: ۴- به اشتراک‌گذاری مدل‌ها و توکِنایزرها
sections:
- local: chapter4/1
title: هاب هاگینگ‌فِیس
- local: chapter4/2
title: بکارگیری مدل‌های از پیش تعلیم دیده

- title: 3. کوک کردن یک مدل از پیش تعلیم دیده
sections:
- local: chapter3/1
title: مقدمه
- local: chapter3/2
title: پردازش داده

- title: واژه‌نامه
sections:
- local: glossary/1
Expand Down
221 changes: 221 additions & 0 deletions chapters/fa/chapter3/3.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
<FrameworkSwitchCourse {fw} />

<div dir="rtl">

# کوک کردن مدل‌ها با استفاده از API `Trainer`

<DocNotebookDropdown
classNames="absolute z-10 right-0 top-0"
options={[
{label: "Google Colab", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/chapter3/section3.ipynb"},
{label: "Aws Studio", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter3/section3.ipynb"},
]} />

<Youtube id="nvBXf7s7vTI"/>

ترنسفورمرهای هاگینگ‌فِیس کلاسی به نام `Trainer` دارند که برای کمک به کوک کردن هر مدل از پیش تعلیم دیده‌ای که روی داده شما ارائه می‌دهد به کار می‌رود. به محض اینکه همه کارهای پیش‌پردازش داده در بخش آخر را انجام دادید، فقط چند مرحله باقی‌مانده تا تعریف `Trainer` دارید. سخت ترین قسمت، احتمالا آماده‌سازی محیط جهت اجراي <span dir="ltr">`Trainer.train()`</span> می‌باشد، چرا که این تابع روی CPU بسیار کند اجرا می‌شود. اگر GPU ندارید، می‌توانید از GPU یا TPUهای مجانی روی [گوگل کولَب](https://colab.research.google.com/) استفاده کنید.

نمونه کدهای زیر فرض می‌کنند که شما مثال‌های بخش قبل را از پیش اجرا کرده‌اید. این یک خلاصه کوتاه است جهت یادآوری آنچه نیاز دارید:


<div dir="ltr">

```py
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorWithPadding

raw_datasets = load_dataset("glue", "mrpc")
checkpoint = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)


def tokenize_function(example):
return tokenizer(example["sentence1"], example["sentence2"], truncation=True)


tokenized_datasets = raw_datasets.map(tokenize_function, batched=True)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
```

</div>

### تعلیم

قبل از این که بتوانیم `Trainer` مان را تعریف کنیم اولین مرحله تعریف کلاس `TrainingArguments` می‌باشد که شامل همه پارامترهای سطح بالایی است که `Trainer` برای `Training` و `Evaluation` استفاده خواهد کرد. تنها آرگومانی که شما باید ارائه کنید آدرسی است که مدل تعلیم دیده به همراه نقاط تعلیم در آن ذخیره خواهند شد. بقیه پارامترها را می‌توانید به حالت پیش‌فرض رها کنید، که برای کوک کردن پایه به خوبی کار خواهد کرد.


<div dir="ltr">

```py
from transformers import TrainingArguments

training_args = TrainingArguments("test-trainer")
```

</div>

<Tip>

💡 اگر مایلید مدل‌تان را به صورت خودکار در حین تعلیم در هاب بارگذاری کنید، پارامتر `push_to_hub=True` را در `TrainingArguments` ارسال کنید. در [فصل ۴](/course/chapter4/3) در این باره بیشتر خواهیم آموخت.

</Tip>

مرحله دوم تعریف مدل‌مان می‌باشد. مانند [فصل قبل](/course/chapter2)، از کلاس `AutoModelForSequenceClassification` با دو برچسب کلاس استفاده خواهیم کرد:

<div dir="ltr">

```py
from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
```

</div>

شما متوجه خواهید شد که برخلاف [فصل ۲](/course/chapter2)، بعد از ساختن این مدل از پیش‌ تعلیم دیده یک هشدار دریافت می‌کنید. این به این خاطر است که BERT برای دسته‌بندی دو جمله‌ها از پیش‌ تعلیم ندیده است، بنابراین لایه سَر مدل از پیش‌ تعلیم دیده حذف شده و یک لایه سَر مناسب جهت دسته بندی رشته‌‌‌ها به جای آن قرار گرفته است. هشدارها نشان می‌دهند که برخی از وزن‌های مدل استفاده نشده‌اند (آنهایی که مربوط به لایه‌ سَر حذف شده مدل از پیش تعلیم دیده هستند) و برخی دیگر به صورت تصادفی مقدار‌ دهی شده‌‌اند (آنهایی که مربوط به لایه‌ سَر جدید هستند). در نتیجه این امر شما را تشویق به تعلیم مدل می‌کند، که دقیقا همان کاری است که می‌خواهیم اکنون انجام دهیم.

به محض اینکه مدل‌مان مشخص شد می‌توانیم `Trainer` را با ارسال همه اشیائی که تا کنون ساخته شده‌اند - <span dir="ltr">`model`</span>، <span dir="ltr">`training_args`</span>، دیتاسِت‌های <span dir="ltr">`training`</span> و <span dir="ltr">`validation`</span>، <span dir="ltr">`data_collator`</span> و <span dir="ltr">`tokenizer`</span> به داخل آن تعریف کنیم:

<div dir="ltr">

```py
from transformers import Trainer

trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
data_collator=data_collator,
tokenizer=tokenizer,
)
```

</div>

توجه داشته باشید زمانی که `tokenizer` را ارسال می‌کنید، مثل کاری که ما در اینجا انجام دادیم، `data_collator` پیش‌فرض مورد استفاده `Trainer`، همانطور که قبلا تعریف کردیم، `DataCollatorWithPadding` خواهد بود، در تنیجه شما می‌توانید خط `data_collator=data_collator` را در این فراخوانی نادیده بگیرید. این هنوز مهم بود که این بخش از پردازش را در بخش ۲ به شما نشان دهیم!

برای کوک کردن مدل روی دیتاسِت‌مان ما فقط باید تابع <span dir="ltr">`train()`</span> از `Trainer`مان را صدا بزنیم:

<div dir="ltr">

```py
trainer.train()
```

</div>

این کار، کوک کردن را شروع می‌کند (که باید چند دقیقه روی GPU طول بکشد) و هزینه تعلیم را هر ۵۰۰ مرحله یک‌بار گزارش می‌کند. با این حال به شما نمی‌گوید که مدل‌تان چقدر خوب (یا بد) عمل می‌کند. این به این خاطر است که:

۱. ما به `Trainer` نگفتیم که در حین تعلیم کیفیت مدل را اندازه‌گیری کند. کاری که می‌توانستیم با مقداردهی پارامتر `evaluation_strategy` به `"steps"` (برای ارزیابی در هر `eval_steps`) یا به `"epoch"` (برای ارزیابی در انتهای هر epoch) انجام دهیم.

۲. ما تابع <span dir="ltr">`compute_metrics()`</span> را برای `Trainer` فراهم نکردیم تا بتواند معیارها را در حین اصطلاحا ارزیابی محاسبه کند (که در غیر این صورت، ارزیابی فقط هزینه را چاپ می‌کند که عدد چندان گویایی هم نیست) .

### ارزیابی

اجازه دهید ببینیم چگونه می‌توانیم تابع <span dir="ltr">`compute_metrics()`</span> مفیدی بسازیم و در تعلیم بعدی از آن استفاده کنیم. تابع باید یک شیء `EvalPrediction` دریافت کند (که تاپلی است شامل فیلدهای `predictions` و `label_ids`) و یک دیکشنری باز گرداند که رشته‌های متنی را به اعداد حقیقی تبدیل می‌کند (رشته‌های متنی نام معیارهای بازگردانده شونده و اعداد حقیقی مقادیر آن‌ها می باشند). برای استخراج چند پیش‌بینی‌ از مدل‌مان، می‌توانیم از دستور <span dir="ltr">`Trainer.predict()`</span> استفاده کنیم:

<div dir="ltr">

```py
predictions = trainer.predict(tokenized_datasets["validation"])
print(predictions.predictions.shape, predictions.label_ids.shape)
```

```python out
(408, 2) (408,)
```

</div>

خروجی تابع <span dir="ltr">`predict()`</span> تاپل نام گذاری شده دیگری شامل سه فیلد: `predictions`، `label_ids` و `metrics` می‌باشد. فیلد `metrics` فقط شامل هزینه داده عبور کرده و برخی معیارهای زمان (پیش‌بینی‌، در مجموع و به طور میانگین، چقدر طول کشیده) می‌باشد. به محض این که تابع <span dir="ltr">`compute_metrics()`</span> را کامل کرده و آن را به `Trainer` ارسال کنیم، آن فیلد متریک‌های بازگشتی از <span dir="ltr">`compute_metrics()`</span> را نیز در بر خواهد داشت.

همانطور که می‌بینید، `predictions` آرایه‌ای دو بعدی است با شکل <span dir="ltr">۴۰۸ x ۲</span> (که ۴۰۸ تعداد عناصر در دیتاسِت مورد استفاده‌ ما می‌باشد). این ها logits مربوط به هریک از عناصر دیتاسِتی هستند که ما به تابع <span dir="ltr">`predict()`</span> ارسال کردیم (همانطور که در [فصل قبل](/course/chapter2) دیدید، همه مدل‌های ترَنسفورمِر logits را باز می‌گردانند). برای تبدیل logits به پیش‌بینی‌‌هایی که بتوانیم با برچسب‌هایمان مقایسه کنیم، نیاز داریم اندیس مقدار بیشینه روی بعد دوم را برداریم:

<div dir="ltr">

```py
import numpy as np

preds = np.argmax(predictions.predictions, axis=-1)
```

</div>

اکنون می‌توانیم `preds` را با برچسب‌ها مقایسه کنیم. برای ساختن تابع <span dir="ltr">`compute_metric()`</span>، به متریک‌های کتابخانه داده‌های هاگینگ‌فِیس تکیه خواهیم کرد. ما می‌توانیم متریک‌های وابسته به دیتاسِت MRPC را به راحتی خود دیتاسِت، اما این بار با استفاده از تابع <span dir="ltr">`load_metric()`</span>، بارگذاری کنیم. شیء بازگردانده شده تابعی به نام <span dir="ltr">`compute()`</span> دارد که می‌توانیم برای محاسبه متریک از آن استفاده کنیم:

<div dir="ltr">

```py
from datasets import load_metric

metric = load_metric("glue", "mrpc")
metric.compute(predictions=preds, references=predictions.label_ids)
```

```python out
{'accuracy': 0.8578431372549019, 'f1': 0.8996539792387542}
```

</div>

از آنجایی که مقداردهی تصادفی اولیه مدل می‌تواند متریک‌های نهایی را تغییر دهد، نتایج دقیقی که شما بدست می‌آورید ممکن است متفاوت باشد. در اینجا می‌توانیم ببینیم که مدل ما `accuracy` معادل ۸۵.۷۸٪ و `F1 Score` معادل ۸۹.۹۷٪ روی مجموعه `validation` بدست می‌آورد. آنها دو متریک برای ارزیابی نتایج محک GLUE روی دیتاسِت MRPC هستند. جدول نتایج در مقاله [BERT](https://arxiv.org/pdf/1810.04805.pdf)، برای مدل پایه، `F1 Score` معادل ۸۸.۹ را گزارش می‌کند. توجه داشته باشید که آن مدل `uncased` بود، حال آن که در اینجا ما از مدل `cased` استفاده می‌کنیم، که دستیابی به نتایج بهتر را توضیح می‌دهد.

اکنون با قرار دادن همه چیز کنارهم تابع <span dir="ltr">`compute_metrics()`</span> را بدست خواهیم آورد:

<div dir="ltr">

```py
def compute_metrics(eval_preds):
metric = load_metric("glue", "mrpc")
logits, labels = eval_preds
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
```

</div>

و در اینجا نشان می‌دهیم که چگونه یک `Trainer` جدید با استفاده از تابع <span dir="ltr">`compute_metrics()`</span> تعریف می‌کنیم، تا بتوانیم عملکرد آن را در حین گزارش متریک‌ها در پایان هر epoch مشاهده کنیم:

<div dir="ltr">

```py
training_args = TrainingArguments("test-trainer", evaluation_strategy="epoch")
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)

trainer = Trainer(
model,
training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
data_collator=data_collator,
tokenizer=tokenizer,
compute_metrics=compute_metrics,
)
```

</div>

توجه داشته باشید که ما مدلی جدید و `TrainingArguments` جدیدی که `evaluation_strategy` آن `"epoch"` است می‌سازیم - در غیر این صورت فقط تعلیم مدلی که از پیش تعلیم دیده بود را ادامه می‌دادیم. برای راه‌اندازی دور جدید تعلیم، دستور زیر را اجرا می‌کنیم:

<div dir="ltr">

```
trainer.train()
```

</div>

این بار هزینه validation و متریک‌ها را در پایان هر epoch و در بالای هزینه تعلیم گزارش می‌کنیم. دوباره، به خاطر مقدار دهی تصادفی اولیه لایه سر مدل، مقادیر دقیق <span dir="ltr">accuracy/F1 score</span> که شما بدست می‌آورید ممکن است کمی متفاوت از آنچه ما بدست آورده‌ایم باشد، اما این مقادیر باید در محدوده تخمینی یکسانی باشند.

به صورت پیش فرض، `Trainer` روی چندین GPU یا TPU کار خواهد کرد و گزینه‌های فراوانی، مثل تعلیم mixed-precision (از مقدار `fp16 = True` در آرگومان‌های تعلیم استفاده کنید) فراهم می‌کند. در فصل ۱۰ همه حالت‌هایی که پشتیبانی می‌کند را مرور خواهیم کرد.

این پایان مقدمه‌ای بر کوک کردن با استفاده از `Trainer` API می‌باشد. در [فصل ۷](/course/chapter7) مثالی برای نشان دادن چگونگی انجام این کار برای معمول‌ترین مسئله‌های NLP ارائه خواهیم کرد، اما اکنون اجازه دهید ببینیم چگونه همین کار را صرفا با استفاده از PyTorch انجام دهیم.

<Tip>

✏️ **اتحان کنید!** با استفاده از پردازش داده‌ای که در بخش ۲ انجام دادید، مدلی را روی دیتاسِت GLUE SST-2 کوک کنید.

</Tip>

</div>
Loading