From dea95d5d74facce054d6e3a9268b8381c57bd3a9 Mon Sep 17 00:00:00 2001 From: Bahram Shamshiri Date: Wed, 20 Apr 2022 19:14:00 +0430 Subject: [PATCH] [FA] First draft of Chapter2/Page2 (#129) * merged branch0 into main. no toctree yet. * updated toctree. * Updated the glossary with terms from chapter0. * Second draft in collab w/ @schoobani. Added empty chapter1 for preview. * Glossary typo fix. * Added missing backticks. * Removed a couple of bad indefinite articles I forgot. * First draft of ch2/p2. Adds to glossary. Trans. guidelines moved out. * Fixed missing diacritics, fixed the py/tf switch placing. Other fixes. * Changed the equivalent for prediction per @kambizG 's direction. * Redid ambiguous passage in translation per @lewtun 's direction. --- chapters/fa/TRANSLATING.txt | 67 ++++++ chapters/fa/_toctree.yml | 2 + chapters/fa/chapter2/2.mdx | 439 ++++++++++++++++++++++++++++++++++++ chapters/fa/glossary/1.mdx | 114 ++++++---- 4 files changed, 574 insertions(+), 48 deletions(-) create mode 100644 chapters/fa/TRANSLATING.txt create mode 100644 chapters/fa/chapter2/2.mdx diff --git a/chapters/fa/TRANSLATING.txt b/chapters/fa/TRANSLATING.txt new file mode 100644 index 000000000..17e0af3b1 --- /dev/null +++ b/chapters/fa/TRANSLATING.txt @@ -0,0 +1,67 @@ +1. Use this style guide for Persian. https://apll.ir/wp-content/uploads/2018/10/D-1394.pdf + We deviate from this style guide in the following ways: + - Use 'ء' as a possessive suffix instead of 'ی' + +2. Don't translate industry-accepted acronyms. e.g. TPU or GPU. + +3. Translate acronyms used for convenience in English to full Persian form. e.g. ML + +4. Keep voice active and consistent. Don't overdo it but try to avoid a passive voice. + +5. 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. + +6. Keep POV consistent. + +7. Smaller sentences are better sentences. Apply with nuance. + +8. If translating a technical word, keep the choice of Persian equivalent consistent. + If workspace is mohit-e-kari don't just switch to faza-ye-kari. This ofc + does not apply for non-technical choices, as in those cases variety actually + helps keep the text engaging. + +9. This is merely a translation. Don't add any technical/contextual information + not present in the original text. Also don't leave stuff out. The creative + choices in composing this information were the original authors' to make. + Our creative choices are in doing a quality translation. + +10. Note on translating indefinite articles(a, an) to Persian. Persian syntax does + not have these. Common problem in translations is using + the equivalent of 'One'("Yek", "Yeki") as a direct word-for-word substitute + which makes for ugly Persian. Be creative with Persian word order to avoid this. + + For example, the sentence "we use a library" should be translated as + "ما از کتابخانه‌ای استفاده می‌کنیم" and not "ما از یک کتابخانه استفاده می‌کنیم". + "Yek" here implies a number(1) to the Persian reader, but the original text + was emphasizing the indefinite nature of the library and not its count. + +11. Be exact when choosing equivalents for technical words. Package is package. + Library is library. Don't mix and match. + +12. Library names are not brand names, nor are they concepts, so no need to + transliterate. They are shorter namespaces so just use the English form. + For example we will transliterate 'Tokenizer' when it is used to indicate + a concept but not when it is the name of a library. + +13. You need to surround the entire doc with a
, also separately + for lists. They render in LTR with the current version of Huggingface docs + if you don't do this and the preview will look ugly. Refer to our previously + submitted pages. + + Also with function names that include ellipses you need to surround them with + a SPAN. i.e. pipeline() + These are stopgap measures for the preview to render correctly. + +14. Put namespaces in backticks. Library names are shorter namespaces. + +15. Persian sentences follow the format Subject-Object-Verb. That means it is + generally expected that the sentences end in a verb. Again there is a lot of + gray area here and we need to apply nuance. But try to keep that in mind. + For example maybe don't end sentences in "هستند یا نه". Maybe, bc if you + do, that is your creative choice and we respect that. + +16. If a Persian equivalent for a word in the glossary has diacritics, they + are important and should be repeated in every occurrence of the word. + While we do want to facilitate our reader's access to the English source + material by introducing loanwords and transliterating where we can, we + also want to avoid confusion in the correct pronunciation of loanwords. diff --git a/chapters/fa/_toctree.yml b/chapters/fa/_toctree.yml index 179c9d87a..2e60c0d2a 100644 --- a/chapters/fa/_toctree.yml +++ b/chapters/fa/_toctree.yml @@ -12,6 +12,8 @@ sections: - local: chapter2/1 title: مقدمه + - local: chapter2/2 + title: پشت صحنه خط‌تولید - title: واژه‌نامه sections: diff --git a/chapters/fa/chapter2/2.mdx b/chapters/fa/chapter2/2.mdx new file mode 100644 index 000000000..534a03758 --- /dev/null +++ b/chapters/fa/chapter2/2.mdx @@ -0,0 +1,439 @@ + + +
+# پشت صحنه خط‌تولید + +{#if fw === 'pt'} + + + +{:else} + + + +{/if} + + +این اولین بخشی است که محتوای آن بسته به اینکه از پایتورچ یا تِنسورفِلو استفاده می کنید کمی متفاوت است. از سویچ بالای صفحه برای انتخاب پلتفرمی که ترجیح می دهید استفاده کنید! + + + +{#if fw === 'pt'} + +{:else} + +{/if} + +بگذارید با یک مثال کامل شروع کنیم که در آن نگاهی می‌اندازیم به آنچه که در پشت صحنه اتفاق می افتد هنگامی که این کد را در [Chapter 1](/course/chapter1) اجرا کردیم: + +
+ +```python +from transformers import pipeline + +classifier = pipeline("sentiment-analysis") +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}] +``` + +
+ + +همان طور که در در فصل اول دیدیم، این خط تولید از سه مرحله تشکیل شده است: پیش‌پردازش، پردازش ورودی‌ها در مدل و پس پردازش. + +
+The full NLP pipeline: tokenization of text, conversion to IDs, and inference through the Transformer model and the model head. + +
+ +به صورت خلاصه هرکدام از این مراحل را بررسی می‌کنیم. + +## پیش‌پردازش با توکِنایزر + +مثل شبکه‌های عصبی دیگر، مدل‌های ترنسفورمر هم نمی‌توانند نوشته خام را پردازش کنند. پس اولین قدم در خط تولید ما تبدیل نوشته خام ورودی به اعدادی است که مدل می‌فهمد. برای این کار از یک *توکِنایزر* استفاده می‌کنیم، که مسئولیت‌های زیر را بر عهده دارد: + +- شکستن نوشته به کلمات، قطعات کوچکتر کلمه و علامت‌ها(مانند علائم نگارشی) که به آنها ‌*توکِن* می‌گوییم. +- انتخاب یک عدد صحیح معادل برای هر توکِن. +- اضافه‌کردن ورودی‌های دیگری که ممکن است برای مدل مفید باشند. + +همه مراحل این پیش‌پردازش باید دقیقا همان‌طور انجام شوند که قبلا هنگام تعلیم مدل انجام شده است. این اطلاعات در [Model Hub](https://huggingface.co/models) موجود است و توسط تابع `from_pretrained()` از کلاس `AutoTokenizer` دانلود می‌شود. با استفاده از نام کامل مدل که شامل نقطه تعلیم است، این تابع به صورت خودکار داده‌های توکِنایزر مدل را دریافت نموده و در سیستم شما ذخیره می‌کند. به این ترتیب این داده‌ها فقط بار اولی که کد زیر را اجرا می‌کنید دانلود می‌شوند. + +نقطه تعلیم پیش‌فرض برای خط‌تولید `تحلیل احساسات` `distilbert-base-uncased-finetuned-sst-2-english` نام دارد. صفحه توضیحات این مدل را می توانید در [اینجا مشاهده کنید](https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english). با اجرای کد زیر آن را دانلود می کنیم: + + + + +
+ +```python +from transformers import AutoTokenizer + +checkpoint = "distilbert-base-uncased-finetuned-sst-2-english" +tokenizer = AutoTokenizer.from_pretrained(checkpoint) +``` + +
+ +پس از دریافت توکِنایزر، می توانیم جملات خود را مستقیماً وارد آن کنیم و دیکشنری خروجی را دریافت کنیم که آماده است تا به عنوان ورودی مدل مورد استفاده قرار گیرد! تنها کار باقی مانده تبدیل لیست ID‌های ورودی به تِنسور است. شما می‌توانید از ترنسفورمرهای هاگینگ‌فِیس بدون اطلاع از اینکه کدام فریمورک یادگیری ماشین در پشت صحنه درگیر می‌شود استفاده کنید. ممکن است از پایتورچ، تِنسورفِلو یا حتی فلَکس برای بعضی مدل‌ها استفاده شده باشد. با این وجود مدل‌های ترسفورمر فقط *تِنسور*‌ها را به عنوان ورودی قبول می‌کنند. اگر این بار اولی است که با کلمه تِنسور برخورد دارید، می‌توانید آن‌ها را به عنوان آرایه‌های NumPy تصور کنید. این آرایه‌ها می توانند عددی(تک بعدی)، برداری(یک بعدی)، ماتریس(دو بعدی) یا با ابعاد بیشتر باشند. آن‌ها در واقع تِنسور هستند و تِنسورها در فریمورک‌های یادگیری ماشین رفتاری شبیه به آرایه‌های NumPy دارند و به همان سادگی هم ساخته می‌شوند. + +برای مشخص کردن نوع تِنسوری که می‌خواهیم به عنوان خروجی دریافت کنیم(پایتورچ، تِنسورفِلو یا NumPy ساده)، از آرگومان `return_tensors` استفاده می‌کنیم: + +
+ +{#if fw === 'pt'} +```python +raw_inputs = [ + "I've been waiting for a HuggingFace course my whole life.", + "I hate this so much!", +] +inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="pt") +print(inputs) +``` +{:else} +```python +raw_inputs = [ + "I've been waiting for a HuggingFace course my whole life.", + "I hate this so much!", +] +inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="tf") +print(inputs) +``` +{/if} + +
+ + +هنوز لازم نیست نگران آرگومان‌های `padding` و `truncation` باشید؛ زیرا بعدتر به آنها خواهیم پرداخت. مسئله اصلی که باید به به خاطر بسپارید، امکان دادن یک جمله یا آرایه‌ای از جمله‌ها به عنوان ورودی و مشخص کردن نوع تِنسورهای خروجی است. اگر نوع خروجی را مشخص نکنید، لیستی از لیست‌ها را دریافت خواهید کرد. + +{#if fw === 'pt'} + +خروجی تِنسورهای پایتورچ به این شکل است: + +
+ +```python out +{ + 'input_ids': tensor([ + [ 101, 1045, 1005, 2310, 2042, 3403, 2005, 1037, 17662, 12172, 2607, 2026, 2878, 2166, 1012, 102], + [ 101, 1045, 5223, 2023, 2061, 2172, 999, 102, 0, 0, 0, 0, 0, 0, 0, 0] + ]), + 'attention_mask': tensor([ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] + ]) +} +``` + +
+ +{:else} + +خروجی تِنسورهای تِنسورفِلو به این شکل است: + +
+ +```python out +{ + 'input_ids': , + 'attention_mask': +} +``` + +
+ +{/if} + + +خروجی خود یک دیکشنری با دو کلید `input_ids` و `attention_mask` است. `input_ids` دو ردیف عدد صحیح(یک ردیف برای هر جمله) که شناسه‌های منحصر به فرد توکِن‌های هر جمله هستند. `attention_mask` را بعدتر در همین فصل توضیح خواهیم داد. + +## گذر از مدل + +{#if fw === 'pt'} + +می توانیم مدل از پیش تعلیم دیده را، همانند آن چه در مورد توکِنایزر انجام شد، دانلود کنیم. ترنسوفورمرهای هاگینگ‌فِیس کلاس `AutoModel` را ارا‌ئه می‌دهد که تابعی به نام `from_pretrained()` هم دارد: + +
+ +```python +from transformers import AutoModel + +checkpoint = "distilbert-base-uncased-finetuned-sst-2-english" +model = AutoModel.from_pretrained(checkpoint) +``` + +
+ +{:else} + +می توانیم مدل از پیش تعلیم دیده را، همانند آن چه در مورد توکِنایزر انجام شد، دانلود کنیم. ترنسوفورمرهای هاگینگ‌فِیس کلاس `TFAutoModel` را ارا‌ئه می‌دهد که تابعی به نام `from_pretrained()` هم دارد: + +
+ +```python +from transformers import TFAutoModel + +checkpoint = "distilbert-base-uncased-finetuned-sst-2-english" +model = TFAutoModel.from_pretrained(checkpoint) +``` + +
+ +{/if} + +در این قطعه کد، همان نقطه تعلیمی که در خط تولیدمان قبلا استفاده کردیم را دانلود کرده(که البته باید الان دانلود شده باشد و در سیستم شما موجود است پس نیازی به دانلود مجدد ندارد) و مدلی جدید با آن می‌سازیم. + +این معماری تنها شامل ماژول پایهٔ `Transformer` است: با دریافت ورودی،‌ *وضعیت پنهان* را در خروجی تحویل می‌دهد. به این وضعیت‌های پنهان *فیچر* هم می‌گوییم. برای هر ورودی مدل، برداری چندین ‌بعدی که معادل *درک کلی مدل ترنسفورمر از آن ورودی* است را دریافت می‌کنیم. + +نگران نباشید اگر درک این مفاهیم سخت است. همه آنها را بعدتر توضیح خواهیم داد. + +اگرچه وضعیت‌های پنهان به خودی خود می توانند مفید باشند، آن‌ها معمولا ورودی بخش دیگری از مدل که به آن *سر* مدل می گوییم هستند. در [فصل اول](/course/chapter1)، همه مسائل مختلف را می‌توانستیم توسط یک معماری حل کنیم، و سپس خروجی را به سر متفاوتی در ادامه مدل پاس بدهیم. + +### بردار‌های چند بعدی؟ + +خروجی ماژول `Transformer` تِنسوری است که معمولا سه بعد دارد: + +- **اندازه بتج**: تعداد رشته‌های مورد پردازش در یک دسته، که در مثال ما دو عدد است. +- **طول رشته**: طول بردار عددی معادل رشته‌ها، که در مثال ما ۱۶ است. +- **اندازه پنهان**: ابعاد بردار برای هر ورودی مدل. + + به خاطر همین مقدار آخر به این تِنسور «چندین بعدی» می گوییم. اندازه پنهان می‌تواند بسیار بزرگ باشد(معمولا ۷۶۸ برای مدل‌های کوچکتر، و در مدل‌های بزرگتر این عدد به ۳۰۷۲ یا بیشتر هم می رسد) + +این را با پاس دادن ورودی‌های پیش‌پردازش شده به مدل خود می توانیم ببینیم: + +
+ + +{#if fw === 'pt'} +```python +outputs = model(**inputs) +print(outputs.last_hidden_state.shape) +``` + +```python out +torch.Size([2, 16, 768]) +``` +{:else} +```py +outputs = model(inputs) +print(outputs.last_hidden_state.shape) +``` + +```python out +(2, 16, 768) +``` +{/if} + + +
+ + +توجه کنید که خروجی‌های ترنسفورمرهای هاگینگ‌فِیس، مانند `namedtuple`‌ها یا دیکشنری‌ها هستند. شما می‌توانید به هر عضو، با استفاده از نامش(مانند آنچه ما انجام دادیم) یا با کلیدش(`outputs["last_hidden_state"]`) یا حتی اگر دقیقاً از مکان آن اطلاع دارید با شماره‌اش(`outputs[0]`) دسترسی پیدا کنید. + +### سر مدل: درک اعداد درون مدل + +قسمت سر، بردارهای چندین بعدی وضعیت پنهان را به عنوان ورودی می‌پذیرد و آن‌ها را به ابعادی در فضایی دیگر برای بخش بعدی پروجکت می‌کند. سرها معمولا از یک یا چند لایه خطی تشکیل شده‌اند. + + +
+A Transformer network alongside its head. + +
+ +خروجی مدل ترنسفورمر، مستقیماً به سر بخش بعدی پاس داده می‌شود. در این نمودار، مدل ترنسفورمر به لایه embeddings و لایه‌های بعدی آن تقسیم شده است. لایه embeddings هر شناسه ورودی در ورودی توکِنیزه شده را به یک بردار که نماینده آن توکِن است تبدیل می‌کند. لایه‌های بعدی با دستکاری در این بردار‌ها توسط فرآیند اتِنشِن، شکل پایانی بردار نماینده جملات را تولید می‌کنند. + +تعداد زیادی از معماری‌‌های مختلف در ترنفورمر‌های هاگینگ‌فِیس وجود دارد که هرکدام برای حل یک مسئله خاص طراحی شده‌اند. در این‌جا فهرست کوتاهی از‌ آنها را آورده‌ایم: + +- `*Model` (برای دسترسی به وضعیت‌های پنهان) +- `*ForCausalLM` +- `*ForMaskedLM` +- `*ForMultipleChoice` +- `*ForQuestionAnswering` +- `*ForSequenceClassification` +- `*ForTokenClassification` +- و نمونه‌های دیگر در ‌هاگینگ‌فِیس + +{#if fw === 'pt'} +برای این مثال، نیازمند مدلی با سر مخصوص دسته‌بندی رشته‌ها(برای تشخیص منفی یا مثبت بودن جملات) هستیم. پس به جای کلاس `AutoModel` از کلاس `AutoModelForSequenceClassification` استفاده می‌کنیم: + +
+ +```python +from transformers import AutoModelForSequenceClassification + +checkpoint = "distilbert-base-uncased-finetuned-sst-2-english" +model = AutoModelForSequenceClassification.from_pretrained(checkpoint) +outputs = model(**inputs) +``` + +
+ +{:else} +برای این مثال، نیازمند مدلی با سر مخصوص دسته‌بندی رشته‌ها(برای تشخیص منفی یا مثبت بودن جملات) هستیم. پس به جای کلاس `TFAutoModel` از کلاس `TFAutoModelForSequenceClassification` استفاده می‌کنیم: + +
+ +```python +from transformers import TFAutoModelForSequenceClassification + +checkpoint = "distilbert-base-uncased-finetuned-sst-2-english" +model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint) +outputs = model(inputs) +``` + +
+ +{/if} + + +حالا اگر نگاهی به ویژگی shape ورودی‌ها بیاندازیم، خوهیم دید که تعداد ابعاد بردارهای نماینده بسیار کمتر است: قسمت سر مدل بردارهای چندین بعدی که قبلا دیدیم را به عنوان ورودی دریافت کرده، و به عنوان خروجی بردارهایی با دو عضو(یکی برای هر دسته در عملیات دستبندی) تولید کرده است. + +
+ + +```python +print(outputs.logits.shape) +``` + +{#if fw === 'pt'} +```python out +torch.Size([2, 2]) +``` +{:else} +```python out +(2, 2) +``` + +{/if} + +
+ +از آنجا که ما تنها دو جمله و دو دسته ممکن داشتیم، خروجی مدل ما شکل ۲ در ۲ دارد. + +## پس پردازش خروجی + +مقادیری که به عنوان خروجی از مدل‌مان دریافت می‌کنیم به خودی خود قابل درک نیستند. بگذارید نگاهی به آن‌ها بیندازیم: + +
+ + +```python +print(outputs.logits) +``` + +{#if fw === 'pt'} +```python out +tensor([[-1.5607, 1.6123], + [ 4.1692, -3.3464]], grad_fn=) +``` +{:else} +```python out + +``` +{/if} + +
+ +پیش‌بینی مدل ما برای جمله اول `[-1.5607, 1.6123]` و برای جمله دوم `[ 4.1692, -3.3464]` است. این‌ خروجی‌ها مقادیر آماری نیستند، بلکه به آنها *لوجیت* می‌گوییم. آن‌ها مقادیر خام و نرمال‌نشده خروجی از آخرین لایه مدل هستند. برای تبدیل به مقادیر آماری باید آن‌ها را از یک لایه‌ [سافت‌مکس](https://en.wikipedia.org/wiki/Softmax_function) بگذرانیم(تمام ترنسفورمرهای هاگینگ‌فِیس در خروجی لوجیت تولید می‌کنند زیرا معمولا تابع لاس مورد استفاده در تعلیم مدل، آخرین تابع فعال‌ساز مانند سافت‌مکس‌ را با خود تابع لاس مانند کِراس‌آنتروپی ترکیب می‌کند). + + +
+ +{#if fw === 'pt'} +```py +import torch + +predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) +print(predictions) +``` +{:else} +```py +import tensorflow as tf + +predictions = tf.math.softmax(outputs.logits, axis=-1) +print(predictions) +``` +{/if} + +{#if fw === 'pt'} +```python out +tensor([[4.0195e-02, 9.5980e-01], + [9.9946e-01, 5.4418e-04]], grad_fn=) +``` +{:else} +```python out +tf.Tensor( +[[4.01951671e-02 9.59804833e-01] + [9.9945587e-01 5.4418424e-04]], shape=(2, 2), dtype=float32) +``` +{/if} + +
+ + +حالا می‌توانیم ببینیم که پیش‌بینی مدل برای جمله اول `[0.9995, 0.0005]` و برای جمله دوم `[0.9995, 0.0005]` است. این‌ها مقادیر آشنای آماری هستند. + +برای تبدیل این مقادیر به عنوان دسته تشخیص داده شده می‌توانیم از ویژگی `id2label` تنظیمات مدل استفاده کنیم(در بخش بعدی بیشتر در این مورد صحبت خواهیم کرد): + + +
+ +```python +model.config.id2label +``` + +```python out +{0: 'NEGATIVE', 1: 'POSITIVE'} +``` + +
+ +اکنون مشخص است که پیش‌بینی‌های مدل از این قرار هستند: + +- جمله اول: NEGATIVE: 0.0402, POSITIVE: 0.9598 +- جمله دوم: NEGATIVE: 0.9995, POSITIVE: 0.0005 + + +ما با موفقیت سه مرحله خط‌تولید را در اینجا نشان دادیم: پیش‌پردازش توسط توکِنایزرها، گذر ورودی‌ها از مدل و پس‌پردازش! حالا کمی زمان می‌گذاریم تا به صورت عمیق‌تر وارد هر‌کدام از این مراحل شویم. + + + +✏️ **خودتان امتحان کنید!** دو(یا بیشتر) نوشته از خودتان را از خط‌تولید `sentiment-analysis` بگذرانید. سپس مراحلی که در اینجا دیدیم را تکرار کنید و مطمئن شوید همان نتایج را دریافت می کنید! + + + +
diff --git a/chapters/fa/glossary/1.mdx b/chapters/fa/glossary/1.mdx index 8587b671b..2b2653590 100644 --- a/chapters/fa/glossary/1.mdx +++ b/chapters/fa/glossary/1.mdx @@ -5,14 +5,15 @@ |-----------------------|------------------| | Transformer | ترنسفورمر | | Pytorch | پایتورچ | -| TensorFlow | تنسورفلو | +| TensorFlow | تِنسورفِلو | | Chapter | فصل | +| Section | بخش | | Model | مدل | | Parameter | پارامتر | | Train | تعلیم | | Deploy | به‌کارگیری | -| 🤗 | هاگینگ‌فیس | -| Hugging Face | هاگینگ‌فیس | +| 🤗 | هاگینگ‌فِیس | +| Hugging Face | هاگینگ‌فِیس | | Load | بارگذاری | | Save | ذخیره‌سازی | | Library | کتابخانه | @@ -22,7 +23,7 @@ | Module | ماژول | | Abstraction | انتزاع انتزاعات | | Forward Pass | اجرای روی به جلو | -| Tokenizer | توکنایزر | +| Tokenizer | توکِنایزر | | Function | عملیات | | Configuration | تنظیمات | | Batch | بتچ | @@ -44,17 +45,71 @@ | Workload | محاسبه، محاسبات | | Package Manager | پکیج‌منیجر | | Command | دستور یا فرمان | -| Feature | قابلیت‌ | -| Development | توسعه نرم‌افزار | +| Feature, as for an app | قابلیت‌ | +| Development | توسعه | | Dependency | وابسته، وابستگی | | Virtual Environment | محیط مجازی | | Terminal | ترمینال | | Incompatibility | ناسازگاری | | Self-Contained | قائم به خود یا بدون وابستگی خارجی؟ | | Script | اسکریپت‌ | -| Feature | قابلیت | | Folder | پوشه | +| Neural Network | شبکه‌ی عصبی | +| Text | نوشته | +| Pipeline | خط تولید | +| Word | کلمه | +| Subword | قطعات کوچکتر کلمه؟ | +| Punctuation | علائم نگارشی | +| Symbol | علامت‌‌، علامت‌ها | +| Token | توکِن | +| Preprocess | پیش‌پردازش | +| Postprocess | پس‌پردازش | +| Method, as in code | تابع | +| Checkpoint | نقطه تعلیم؟ | +| Model Card | صفحه توضیحات مدل | +| Sentiment Analysis | تحلیل احساسات | +| Dictionary, as in Python | دیکشنری | +| List, as in code | لیست | +| Tensor | تِنسور | +| Framework | فریمورک | +| Flax | فلَکس | +| NumPy | NumPy | +| Scalar | عددی | +| Vector, as in math | برداری | +| Matrix | ماتریس | +| Instantiate | ساختن | +| Argument, as in code | آرگومان | +| Key, as in Python dictionary | کلید | +| Row | ردیف | +| Integer | عدد صحیح | +| ID | شناسه | +| Unique ID | شناسه منحصر به فرد | +| Code Snippet | قطعه کد | +| Hidden State | وضعیت پنهان | +| Feature, as in model | فیچر | +| High-Dimensional | چندین بعدی | +| Vector, as in Python | وِکتور | +| Sequence | رشته | +| Index, as in an array or list | شماره | +| Project, as in math | پروجکت؟ | +| Embedding | embedding? | +| Tokenized | توکِنیزه؟ قطعه قطعه شده؟ | +| Attention Mechanism | مکانیزم دقت؟ فرآیند دقت؟ فرآیند اتِنشِن | +| Classification | دسته‌بندی | +| Attribute, as for a class in code | ویژگی؟ | +| Label, as in classification | عنوان دسته | +| Prediction, as in nn model | پیش‌بینی | +| Logit, as in math and also in Pytorch | لوجیت؟ | +| SoftMax | سافت‌مکس | +| Loss Function | کمممممممککککک!!!!! ‌ لاس‌فانکشن؟، تابع لاس؟ تابع یادگیری شبکه؟ | +| Activation Layer | لایه فعال‌سازی؟ لایه خروجی؟ لایه تبدیل لوجیت به مقدار آماری؟ کمککککککک | +| Cross Entropy | کِراس آنتروپی؟ | +معادل‌هایی که استفاده نمی‌کنیم: + +| معادل در منبع | معادل اشتباه در ترجمه | +|-----------------------|------------------| +| Application, as in an app and not as in apply | کاربرد | معادل‌هایی که استفاده نمی‌کنیم: @@ -62,6 +117,10 @@ |-----------------------|------------------| | Application, as in an app and not as in apply | کاربرد | +| املای مورد استفاده کلمات فارسی | +|-------------------------------| +| ارائه | + کلمات مخفف: @@ -73,49 +132,8 @@ | TPU | TPU | | ML | یادگیری ماشین | - -املای مورد استفاده کلمات فارسی: - -|ارائه| -
- * Used in chapter1/page2 to loosely mean 'running' the model. If used anywhere else to exact technical meaning we could go with 'استنتاج' probably? But that sounds archaic to me. - -- Don't translate industry-accepted acronyms. e.g. TPU or GPU. - -- Translate acronyms used for convenience in English to full Persian form. e.g. ML - -- Keep voice active and consistent. Don't overdo it but try to avoid a passive voice. - -- 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. - -- Keep POV consistent. - -- Smaller sentences are better sentences. Apply with nuance. - -- If translating a technical word, keep the choice of Persian equivalent consistent. - If workspace is mohit-e-kari don't just switch to faza-ye-kari. This ofc - does not apply for non-technical choices, as in those cases variety actually - helps keep the text engaging. - -- This is merely a translation. Don't add any technical/contextual information - not present in the original text. Also don't leave stuff out. The creative - choices in composing this information were the original authors' to make. - Our creative choices are in doing a quality translation. - -- Note on translating indefinite articles(a, an) to Persian. Persian syntax does - not have these. Common problem in translations is using - the equivalent of 'One'("Yek", "Yeki") as a direct word-for-word substitute - which makes for ugly Persian. Be creative with Persian word order to avoid this. - - For example, the sentence "we use a library" should be translated as - "ما از کتابخانه‌ای استفاده می‌کنیم" and not "ما از یک کتابخانه استفاده می‌کنیم". - "Yek" here implies a number(1) to the Persian reader, but the original text - was emphasizing the indefinite nature of the library and not its count. - -- Be exact when choosing equivalents for technical words. Package is package. - Library is library. Don't mix and match.