خب خب خب
بیاید باهم انواع توکنایزرها رو در LLMs ببینیم.
توکنایز کردن به زبان ساده یعنی متن رو به واحدهای کوچیکتر تقسیم میکنیم. براساس تسکی که در nlp داریم میتونیم ببینیم از چه نوع توکنایزری میخوایم استفاده کنیم.
این مطلب رو من از لینک پایین برداشته م و اگه آپدیتی چیزی باشه براتون همینجا میذارم
https://machinelearningmastery.com/tokenizers-in-language-models/
بریم که با انواع توکنایزرها آشنا بشیم
اول بیاید باهم یه نگاه از بالا داشته باشیم، ما توی این مطلب قراره با اینا آشنا بشیم:
Naive Tokenization
Stemming and Lemmatization
Byte-Pair Encoding (BPE)
WordPiece
SentencePiece and Unigram
نوع اول:
Naive Tokenization
یا توکنایز کردن ساده
ما بر اساس white space میایم و متن رو توکن توکن میکنیم.
این کدشه:
text = "Hello, world! This is a test."
tokens = text.split()
print(f"Tokens: {tokens}")
اینم نتیجه ش:
Tokens: ['Hello,', 'world!', 'This', 'is', 'a', 'test.']
این روش کاملا سریعه اما خیلی محدودیت داره، گذشته از محدودیتهایی شبیه به اینکه "world!" یک توکن در نظر گرفته میشه، زبانهایی مثل فارسی که white space اصلا گزینه خوبی برای درک نحو نیستن واقعن به مشکل برمیخورن.
اگه ما بخوایم مدلمون رو براساس این نوع توکنایز آموزش بدیم، به متنهای خیلی خیلی بیشتری نیاز داریم که این هم خودش هم زمانبره و هم هزینه بر.
دومی
Stemming and Lemmatization
(ایده ای برای فارسی سازیش ندارم)
برای این باید با پکیج re آشنا بشیم.
re : Regular Expression Operations
این پکیج زحمت میکشه و کار ما رو در تشخیص اعداد و پانکچوئیشن راحت میکنه
اینم نمونه کد:
import re
text = "Hello, world! This is a test."
tokens = re.findall(r'\w+|[^\w\s]', text)
print(f"Tokens: {tokens}")
در زبان انگلیسی ما مشکل lowercase کردن هم داریم، در نتیجه این پکیج اون کار رو هم برای ما انجام میده:
import re
text = "Hello, world! This is a test."
tokens = re.findall(r'\w+|[^\w\s]', text.lower())
print(f"Tokens: {tokens}")
این هم خروجیمون:
Tokens: ['hello', ',', 'world', '!', 'this', 'is', 'a', 'test', '.']
ولی با این حال، مدل بزرگی رو در نظر بگیرید که «درخت»، «درختها»، «درختان»، «درختهای»، «درختهایی» رو هر کدوم توکنهای جدا در نظر میگیره. پس ما با طیف خیلی گسترده ای از کلمات سر و کار داریم و مجبوریم این مشکل رو حل کنیم. stemming و lemmatization اینجا به کمکمون میان.
هردوتای این فرایندها ما رو به ریشه کلمه میرسونن
اما
اولی، stemming، سختگیرتره، یعنی همه پیشوندها و پسوندهای کلمه رو حذف میکنه اما lemmatization اونها رو میبره به حالتی که توی دیکشنری ثبت شده ن.
همین خط بالا گفتیم stemming سختگیرتره، پس وقتی سختگیرتره، امکان اینکه کلمات بیمعنا هم برای ما تولید کنه خیلی بیشتره.
خب، بریم دست به کد بشیم، برای این قسمت به nltk احتیاج داریم (کلا به nltk) نیاز داریم، یادتون نره
اول ایمپورت کنیم
import nltk
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
خب، حالا بریم سراغ دانلود punkt که خیلی مهمه، چرا؟
توی یه پست جدا میگم بهتون
# download the necessary resources if haven't done so
nltk.download('punkt_tab')
خب حالا متنمون رو میدیم.
text = "These models may become unstable quickly if not initialized."
حالا یه متغیر میسازیم که داخلش PorterStemmer عمل کنه. دقت کنید که پایتون روی کوچیک و بزرگی حروف حساسه.
stemmer = PorterStemmer()
حالا بیایم متن رو توکنایز کنیم:
words = word_tokenize(text)
و در مرحله آخر، بگیم stemmer به ازای هر word در جمله، کار stemm رو انجام بده
stemmed_words = [stemmer.stem(word) for word in words]
print(stemmed_words)
و اینم نتیجه:
['these', 'model', 'may', 'becom', 'unstabl', 'quickli', 'if', 'not', 'initi', '.']
همونطور که میبینید، نتیجه برای unstabl اصلا valid نیست.
توی پست بعد میریم سراغ lemmatization
@junior_learner
بیاید باهم انواع توکنایزرها رو در LLMs ببینیم.
توکنایز کردن به زبان ساده یعنی متن رو به واحدهای کوچیکتر تقسیم میکنیم. براساس تسکی که در nlp داریم میتونیم ببینیم از چه نوع توکنایزری میخوایم استفاده کنیم.
این مطلب رو من از لینک پایین برداشته م و اگه آپدیتی چیزی باشه براتون همینجا میذارم
https://machinelearningmastery.com/tokenizers-in-language-models/
بریم که با انواع توکنایزرها آشنا بشیم
اول بیاید باهم یه نگاه از بالا داشته باشیم، ما توی این مطلب قراره با اینا آشنا بشیم:
Naive Tokenization
Stemming and Lemmatization
Byte-Pair Encoding (BPE)
WordPiece
SentencePiece and Unigram
نوع اول:
Naive Tokenization
یا توکنایز کردن ساده
ما بر اساس white space میایم و متن رو توکن توکن میکنیم.
این کدشه:
text = "Hello, world! This is a test."
tokens = text.split()
print(f"Tokens: {tokens}")
اینم نتیجه ش:
Tokens: ['Hello,', 'world!', 'This', 'is', 'a', 'test.']
این روش کاملا سریعه اما خیلی محدودیت داره، گذشته از محدودیتهایی شبیه به اینکه "world!" یک توکن در نظر گرفته میشه، زبانهایی مثل فارسی که white space اصلا گزینه خوبی برای درک نحو نیستن واقعن به مشکل برمیخورن.
اگه ما بخوایم مدلمون رو براساس این نوع توکنایز آموزش بدیم، به متنهای خیلی خیلی بیشتری نیاز داریم که این هم خودش هم زمانبره و هم هزینه بر.
دومی
Stemming and Lemmatization
(ایده ای برای فارسی سازیش ندارم)
برای این باید با پکیج re آشنا بشیم.
re : Regular Expression Operations
این پکیج زحمت میکشه و کار ما رو در تشخیص اعداد و پانکچوئیشن راحت میکنه
اینم نمونه کد:
import re
text = "Hello, world! This is a test."
tokens = re.findall(r'\w+|[^\w\s]', text)
print(f"Tokens: {tokens}")
در زبان انگلیسی ما مشکل lowercase کردن هم داریم، در نتیجه این پکیج اون کار رو هم برای ما انجام میده:
import re
text = "Hello, world! This is a test."
tokens = re.findall(r'\w+|[^\w\s]', text.lower())
print(f"Tokens: {tokens}")
این هم خروجیمون:
Tokens: ['hello', ',', 'world', '!', 'this', 'is', 'a', 'test', '.']
ولی با این حال، مدل بزرگی رو در نظر بگیرید که «درخت»، «درختها»، «درختان»، «درختهای»، «درختهایی» رو هر کدوم توکنهای جدا در نظر میگیره. پس ما با طیف خیلی گسترده ای از کلمات سر و کار داریم و مجبوریم این مشکل رو حل کنیم. stemming و lemmatization اینجا به کمکمون میان.
هردوتای این فرایندها ما رو به ریشه کلمه میرسونن
اما
اولی، stemming، سختگیرتره، یعنی همه پیشوندها و پسوندهای کلمه رو حذف میکنه اما lemmatization اونها رو میبره به حالتی که توی دیکشنری ثبت شده ن.
همین خط بالا گفتیم stemming سختگیرتره، پس وقتی سختگیرتره، امکان اینکه کلمات بیمعنا هم برای ما تولید کنه خیلی بیشتره.
خب، بریم دست به کد بشیم، برای این قسمت به nltk احتیاج داریم (کلا به nltk) نیاز داریم، یادتون نره
اول ایمپورت کنیم
import nltk
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
خب، حالا بریم سراغ دانلود punkt که خیلی مهمه، چرا؟
توی یه پست جدا میگم بهتون
# download the necessary resources if haven't done so
nltk.download('punkt_tab')
خب حالا متنمون رو میدیم.
text = "These models may become unstable quickly if not initialized."
حالا یه متغیر میسازیم که داخلش PorterStemmer عمل کنه. دقت کنید که پایتون روی کوچیک و بزرگی حروف حساسه.
stemmer = PorterStemmer()
حالا بیایم متن رو توکنایز کنیم:
words = word_tokenize(text)
و در مرحله آخر، بگیم stemmer به ازای هر word در جمله، کار stemm رو انجام بده
stemmed_words = [stemmer.stem(word) for word in words]
print(stemmed_words)
و اینم نتیجه:
['these', 'model', 'may', 'becom', 'unstabl', 'quickli', 'if', 'not', 'initi', '.']
همونطور که میبینید، نتیجه برای unstabl اصلا valid نیست.
توی پست بعد میریم سراغ lemmatization
@junior_learner
Junior Learner, Senior Lover
خب خب خب بیاید باهم انواع توکنایزرها رو در LLMs ببینیم. توکنایز کردن به زبان ساده یعنی متن رو به واحدهای کوچیکتر تقسیم میکنیم. براساس تسکی که در nlp داریم میتونیم ببینیم از چه نوع توکنایزری میخوایم استفاده کنیم. این مطلب رو من از لینک پایین برداشته م و اگه…
نوبتی هم که باشه نوبت lemmatization ه
بیاید باهم ببینیم که...
بیاید باهم ببینیم که...
image_2025-10-04_10-47-54.png
808.9 KB
#InSearchOf
برای من همیشه دیدن اینطور نمودارها خیلی وحشتبرانگیز بود چون چیزی ازشون سر درنمیآوردم و مسلط به ابزار نبودم. اما الان میدونم چنین نموداری فقط با یک خط درست شده:
sns.pairplot(df)
(البته با یه عالمه خط دیگه که مبنای اینو میسازن😅)
باید بتونم تحلیلش کنم.
اونو هم میتونم، با صبر، صبر زیاد
برای من همیشه دیدن اینطور نمودارها خیلی وحشتبرانگیز بود چون چیزی ازشون سر درنمیآوردم و مسلط به ابزار نبودم. اما الان میدونم چنین نموداری فقط با یک خط درست شده:
sns.pairplot(df)
(البته با یه عالمه خط دیگه که مبنای اینو میسازن😅)
باید بتونم تحلیلش کنم.
اونو هم میتونم، با صبر، صبر زیاد
بیاید باهم ببینیم INLP یعنی چه
INLP = Iterative Nullspace Projection
این یه روشه که با استفاده از اون لایه های word embedding یه جوری نمایش داده میشن که ویژگیهایی مثل جنسیت، نژاد و مذهب که خود به خود حاوی bias هستند از بین برن.
این روش خروجی شبکه های عصبی رو در مدلهای زبانی بزرگ کنترل میکنند و تلاش میکنند تا بایاس رو کاهش بدن.
متدشون چیه؟
براساس رگرسیون منطقی ما classifierهایی رو trainمیدیم که بدونن کجا باید اطلاعات رو از سیستم شبکه عصبی ریموو کنند. (یعنی اونا رو به null space تبدیل کنند)
این روش مخصوصا در تسک های classification بکار میره اما محدودیت هایی هم داره. اینکه اصلا چی رو بایاس بدونیم و چی رو بایاس ندونیم خودش خیلی مفصله. خطر دیگه ای که این روش داره اینه که ممکنه در یک مدل بایاس رو کاهش بده، ولی ممکنه پرفورمنس مدل رو پایین بیاره، کمااینکه روی مدل GPT-2 این اتفاق افتاده: بایاس تا حد خوبی کم شده ولی در عوض نتایج کمتر مطلوب بوده ن
@junior_learner
INLP = Iterative Nullspace Projection
این یه روشه که با استفاده از اون لایه های word embedding یه جوری نمایش داده میشن که ویژگیهایی مثل جنسیت، نژاد و مذهب که خود به خود حاوی bias هستند از بین برن.
این روش خروجی شبکه های عصبی رو در مدلهای زبانی بزرگ کنترل میکنند و تلاش میکنند تا بایاس رو کاهش بدن.
متدشون چیه؟
براساس رگرسیون منطقی ما classifierهایی رو trainمیدیم که بدونن کجا باید اطلاعات رو از سیستم شبکه عصبی ریموو کنند. (یعنی اونا رو به null space تبدیل کنند)
این روش مخصوصا در تسک های classification بکار میره اما محدودیت هایی هم داره. اینکه اصلا چی رو بایاس بدونیم و چی رو بایاس ندونیم خودش خیلی مفصله. خطر دیگه ای که این روش داره اینه که ممکنه در یک مدل بایاس رو کاهش بده، ولی ممکنه پرفورمنس مدل رو پایین بیاره، کمااینکه روی مدل GPT-2 این اتفاق افتاده: بایاس تا حد خوبی کم شده ولی در عوض نتایج کمتر مطلوب بوده ن
@junior_learner
#InSearchOf
اینقدرر این چند روز دارم منابع مختلف میخونم و با اصطلاحات جدید بمبارون میشم که حد نداره🫠
میدونم که همه اینا ارزششو داره و آخر سر اونی که سود میکنه منم
اینقدرر این چند روز دارم منابع مختلف میخونم و با اصطلاحات جدید بمبارون میشم که حد نداره🫠
میدونم که همه اینا ارزششو داره و آخر سر اونی که سود میکنه منم
Forwarded from CL & NLP Enthusiasts
Media is too big
VIEW IN TELEGRAM
مدل جدیدی به نام Jan-Nano اخیرا معرفی شد.
همانطور که در ویدیو می بینید ۴ میلیارد پارامتر داره که برای کارهای deep research اپتیمایز شده است. بخصوص برای وصل شدن به Model Context Protocol (MCP) servers و انواع tools/ابزارها. و از لحاظ دقت هم خیلی خوبه. راهنمای نصب و استفاده بومی هم در لینک آورده شد.
@computationallinguisticsNLP
همانطور که در ویدیو می بینید ۴ میلیارد پارامتر داره که برای کارهای deep research اپتیمایز شده است. بخصوص برای وصل شدن به Model Context Protocol (MCP) servers و انواع tools/ابزارها. و از لحاظ دقت هم خیلی خوبه. راهنمای نصب و استفاده بومی هم در لینک آورده شد.
@computationallinguisticsNLP
#RAG = Retrieval - Argument Generation
RAG هم مثل INLP یک روشه، البته باهم فرق دارند ولی توی دنیای تکنولوژی باید حتما بدونیم چی روش هست و چی نیست
rag به مدل زبانی اجازه میده از پایگاه داده برای تقویت پاسخش استفاده کنه.
RAG هم مثل INLP یک روشه، البته باهم فرق دارند ولی توی دنیای تکنولوژی باید حتما بدونیم چی روش هست و چی نیست
rag به مدل زبانی اجازه میده از پایگاه داده برای تقویت پاسخش استفاده کنه.
خب خب خب
بریم ببینیم دقیقا چه تنظیماتی میشه به توکنایزرمون بدیم و هرکدوم چه عملکردی دارن:
سؤال خیلی خوبی پرسیدی 👏
چون
بریم جزءبهجزء توضیح بدیم:
---
## 🧠 ساختار کلی
اینجا
و پارامترهای اختیاری میتونن چیزهایی باشن که توکنایزر رو مطابق نیازت تنظیم کنن.
---
## ⚙️ پارامترهای مهم و کاربردی
### 1️⃣
* اگر True باشه (پیشفرض معمولاً Trueه)، از نسخهی سریعتر توکنایزر استفاده میکنه (بر پایهی Rust).
* نسخهی "fast" سریعتره و اطلاعات دقیقتری دربارهی نگاشت توکن به متن اصلی میده (برای tasks مثل NER یا alignment).
---
### 2️⃣
* مشخص میکنه از کدوم نسخهی مدل در Hugging Face Hub استفاده کنه.
مثلاً اگه مدل نسخههای مختلف داشته باشه، میتونی یه نسخه خاص رو لود کنی.
---
### 3️⃣
* برای مدلهایی که توکنایزرشون **کد سفارشی** دارن (نه فقط پیکربندی ساده).
* به Hugging Face اجازه میده کد Python داخل ریپوی مدل رو اجرا کنه (امنیتش بستگی به منبع داره؛ مراقب باش).
---
### 4️⃣
* مسیر محلی برای ذخیرهی فایلهای دانلودی (توکنایزر، vocab و غیره).
* مفیده اگه نمیخوای هر بار از اینترنت دانلود کنه.
---
### 5️⃣
* حتی اگر فایل قبلاً دانلود شده، دوباره از اینترنت میگیره (مثلاً برای اطمینان از آخرین نسخه).
---
### 6️⃣
* فقط از فایلهای لوکال استفاده کن، حتی اگه فایل در کش یا اینترنت نباشه.
---
### 7️⃣
در بعضی مدلها میتونی نوع توکنایزر رو مشخص کنی (اگر مدل چند تا نوع پشتیبانی کنه)،
مثلاً:
---
### 8️⃣
* مشخص میکنه پدینگ در سمت راست یا چپ جمله انجام بشه.
* برای مدلهایی مثل GPT (که چپپد میخوان) خیلی مهمه.
---
### 9️⃣
* مشخص میکنه اگر جمله خیلی طولانی بود، از سمت راست بریده بشه یا از چپ.
---
### 🔟
* برای مدلهایی مثل GPT2 که نیاز دارن قبل از اولین کلمه یه فاصله اضافه بشه تا توکنها درست تطبیق پیدا کنن.
---
### 🧩 چند پارامتر پیشرفتهتر
| پارامتر | کاربرد |
| ------------------------------------- | -------------------------------------------------------- |
|
|
|
|
|
---
## ✨ مثال کامل
بریم ببینیم دقیقا چه تنظیماتی میشه به توکنایزرمون بدیم و هرکدوم چه عملکردی دارن:
سؤال خیلی خوبی پرسیدی 👏
چون
AutoTokenizer.from_pretrained(model_name) یکی از پرکاربردترین خطوط در پروژههای NLPه — و میتونه کلی تنظیم اضافه بگیره که رفتار توکنایزر رو دقیقتر کنترل کنه.بریم جزءبهجزء توضیح بدیم:
---
## 🧠 ساختار کلی
tokenizer = AutoTokenizer.from_pretrained(
model_name,
**پارامترهای_اختیاری
)
اینجا
model_name مثلاً میتونه "bert-base-uncased" یا "facebook/bart-large-cnn" باشه،و پارامترهای اختیاری میتونن چیزهایی باشن که توکنایزر رو مطابق نیازت تنظیم کنن.
---
## ⚙️ پارامترهای مهم و کاربردی
### 1️⃣
use_fastuse_fast=True # یا False
* اگر True باشه (پیشفرض معمولاً Trueه)، از نسخهی سریعتر توکنایزر استفاده میکنه (بر پایهی Rust).
* نسخهی "fast" سریعتره و اطلاعات دقیقتری دربارهی نگاشت توکن به متن اصلی میده (برای tasks مثل NER یا alignment).
---
### 2️⃣
revisionrevision="main" # یا مثلاً 'v1.2.0'
* مشخص میکنه از کدوم نسخهی مدل در Hugging Face Hub استفاده کنه.
مثلاً اگه مدل نسخههای مختلف داشته باشه، میتونی یه نسخه خاص رو لود کنی.
---
### 3️⃣
trust_remote_codetrust_remote_code=True
* برای مدلهایی که توکنایزرشون **کد سفارشی** دارن (نه فقط پیکربندی ساده).
* به Hugging Face اجازه میده کد Python داخل ریپوی مدل رو اجرا کنه (امنیتش بستگی به منبع داره؛ مراقب باش).
---
### 4️⃣
cache_dircache_dir="./models_cache"
* مسیر محلی برای ذخیرهی فایلهای دانلودی (توکنایزر، vocab و غیره).
* مفیده اگه نمیخوای هر بار از اینترنت دانلود کنه.
---
### 5️⃣
force_downloadforce_download=True
* حتی اگر فایل قبلاً دانلود شده، دوباره از اینترنت میگیره (مثلاً برای اطمینان از آخرین نسخه).
---
### 6️⃣
local_files_onlylocal_files_only=True
* فقط از فایلهای لوکال استفاده کن، حتی اگه فایل در کش یا اینترنت نباشه.
---
### 7️⃣
tokenizer_typeدر بعضی مدلها میتونی نوع توکنایزر رو مشخص کنی (اگر مدل چند تا نوع پشتیبانی کنه)،
مثلاً:
tokenizer = AutoTokenizer.from_pretrained(model_name, tokenizer_type="gpt2")
---
### 8️⃣
padding_sidepadding_side="right" # یا "left"
* مشخص میکنه پدینگ در سمت راست یا چپ جمله انجام بشه.
* برای مدلهایی مثل GPT (که چپپد میخوان) خیلی مهمه.
---
### 9️⃣
truncation_sidetruncation_side="right" # یا "left"
* مشخص میکنه اگر جمله خیلی طولانی بود، از سمت راست بریده بشه یا از چپ.
---
### 🔟
add_prefix_spaceadd_prefix_space=True
* برای مدلهایی مثل GPT2 که نیاز دارن قبل از اولین کلمه یه فاصله اضافه بشه تا توکنها درست تطبیق پیدا کنن.
---
### 🧩 چند پارامتر پیشرفتهتر
| پارامتر | کاربرد |
| ------------------------------------- | -------------------------------------------------------- |
|
model_max_length | حداکثر طول مجاز توالی؛ مثلاً model_max_length=512 ||
bos_token, eos_token, unk_token | تعیین توکنهای خاص برای شروع/پایان/ناشناخته ||
padding | مقداردهی پدینگ خودکار هنگام tokenizer(...) ||
clean_up_tokenization_spaces | حذف فاصلههای اضافی هنگام تبدیل توکنها به متن ||
legacy | مشخص میکنه از رفتارهای قدیمی توکنایزر استفاده کنه یا نه |---
## ✨ مثال کامل
tokenizer = AutoTokenizer.from_pretrained(
"facebook/bart-large-cnn",
use_fast=True,
cache_dir="./cache",
padding_side="right",
truncation_side="left",
add_prefix_space=True,
model_max_length=1024,
trust_remote_code=True
)
عالی 👌
در جدول زیر همهی پارامترهای مهم `AutoTokenizer.from_pretrained()` رو بهصورت دستهبندیشده آوردم تا راحت بتونی حفظ و استفادهشون کنی — مخصوصاً برای پروژههای NLP و مدلهای Hugging Face.
---
## 🧩 جدول دستهبندی پارامترهای
| دسته | پارامتر | توضیح | مثال |
| ------------------------------------- | ------------------------------ | --------------------------------------------------- | ------------------------------------------- |
| 🧠 پرفورمنس و سرعت |
| |
| |
| ⚙️ حافظه و فایلها |
| |
| |
| 🔠 تنظیمات توکنها و پدینگ |
| |
| |
| |
| |
| 🧱 توکنهای ویژه (Special Tokens) |
| |
| |
| |
| 🧩 رفتار در بازسازی متن |
| 🧰 سازگاری و کنترل نسخه |
| 🧪 دیگر تنظیمات خاص |
| |
---
## 🎯 مثال کامل و کاربردی
در جدول زیر همهی پارامترهای مهم `AutoTokenizer.from_pretrained()` رو بهصورت دستهبندیشده آوردم تا راحت بتونی حفظ و استفادهشون کنی — مخصوصاً برای پروژههای NLP و مدلهای Hugging Face.
---
## 🧩 جدول دستهبندی پارامترهای
AutoTokenizer.from_pretrained()| دسته | پارامتر | توضیح | مثال |
| ------------------------------------- | ------------------------------ | --------------------------------------------------- | ------------------------------------------- |
| 🧠 پرفورمنس و سرعت |
use_fast | از نسخهی سریعتر (Rust-based) استفاده میکند. | use_fast=True || |
revision | نسخهی خاصی از مدل را لود میکند. | revision="v1.2.0" || |
trust_remote_code | اجازهی اجرای کد سفارشی توکنایزر از ریپوی مدل. | trust_remote_code=True || ⚙️ حافظه و فایلها |
cache_dir | محل ذخیره فایلهای دانلودی مدل. | cache_dir="./cache_dir" || |
force_download | دانلود مجدد حتی اگر فایل در کش موجود باشد. | force_download=True || |
local_files_only | فقط از فایلهای محلی استفاده میکند. | local_files_only=True || 🔠 تنظیمات توکنها و پدینگ |
padding_side | سمت اعمال پدینگ را مشخص میکند. | padding_side="left" || |
truncation_side | سمت حذف توکنهای اضافی را مشخص میکند. | truncation_side="right" || |
model_max_length | حداکثر طول مجاز توالی. | model_max_length=512 || |
add_prefix_space | در ابتدا فاصله اضافه میکند (برای GPT-2 لازم است). | add_prefix_space=True || |
padding | مشخص میکند آیا پدینگ انجام شود یا نه. | padding="max_length" || 🧱 توکنهای ویژه (Special Tokens) |
bos_token | توکن شروع جمله (beginning of sentence). | bos_token="<s>" || |
eos_token | توکن پایان جمله (end of sentence). | eos_token="</s>" || |
unk_token | توکن ناشناخته برای واژههای خارج از واژگان. | unk_token="<unk>" || |
pad_token | توکن پدینگ برای پر کردن توالیها. | pad_token="<pad>" || 🧩 رفتار در بازسازی متن |
clean_up_tokenization_spaces | فاصلههای اضافی را در بازسازی جمله حذف میکند. | clean_up_tokenization_spaces=True || 🧰 سازگاری و کنترل نسخه |
legacy | استفاده از رفتار قدیمیتر توکنایزر (برای سازگاری). | legacy=False || 🧪 دیگر تنظیمات خاص |
tokenizer_type | نوع توکنایزر را مشخص میکند (اگر مدل چند نوع دارد). | tokenizer_type="gpt2" || |
special_tokens_map | نگاشت دستی توکنهای ویژه. | special_tokens_map={"cls_token": "[CLS]"} |---
## 🎯 مثال کامل و کاربردی
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(
"facebook/bart-large-cnn",
use_fast=True,
cache_dir="./cache",
padding_side="right",
truncation_side="left",
model_max_length=1024,
add_prefix_space=True,
trust_remote_code=True,
clean_up_tokenization_spaces=True
)
حتماً! در ادامه به زبان سانه توضیح میدم که این سه الگوریتم مهم در یادگیری ماشین چیستند و چه تفاوتهایی باهم دارند.
### خلاصه سریع و مقایسه
| الگوریتم | نام کامل | نحوه کار (تشبیه) | نقاط قوت | نقاط ضعف |
| :--- | :--- | :--- | :--- | :--- |
| SVM | ماشین بردار پشتیبان | پیدا کردن بهترین "خط یا مرز" برای جدا کردن دستهها | بسیار قدرتمند در دادههای با ابعاد بالا، مقاوم در برابر بیشبرازش | کند در مجموعه دادههای بسیار بزرگ، عملکرد ضعیف با دادههای پرنویز |
| RF | جنگل تصادفی | تصمیمگیری گروهی با رایگیری بین درختان تصمیم مختلف | بسیار قوی و دقیق، نیاز به پیشپردازش کمی دارد، اهمیت ویژگیها را میدهد | مانند جعبه سیاه است، ممکن است حافظه زیادی مصرف کند |
| MLP | پرسپترون چندلایه | شبیهسازی شبکه عصبی مغز برای یادگیری الگوهای پیچیده | فوقالعاده در یادگیری روابط غیرخطی و پیچیده، انعطافپذیر | نیاز به داده و قدرت پردازشی زیاد، تنظیم دقیق پارامترها سخت است |
---
### توضیح جزئیات هر کدام:
#### 1. SVM - ماشین بردار پشتیبان
- هدف اصلی: عمدتاً برای دستهبندی استفاده میشود (مثلاً تشخیص اسپم از غیراسپم).
- نحوه کار: SVM سعی میکند یک مرز یا صفحهای (Hyperplane) بین دستههای مختلف داده پیدا کند که بیشترین حاشیه امن (Margin) را داشته باشد. یعنی این مرز تا نزدیکترین دادههای هر دسته (بردارهای پشتیبان) حداکثر فاصله را دارد. این کار باعث میشود مدل در برابر دادههای جدید، عملکرد بهتری داشته باشد و "عمومیتپذیر" (Generalize) شود.
- یک تشبیه: فرض کنید دو نوع میوه (سیب و پرتقال) روی میز دارید. SVM سعی میکند بهترین خط مستقیمی را بکشد که این دو دسته را از هم جدا کند، طوری که فاصله این خط از نزدیکترین سیب و نزدیکترین پرتقال حداکثر باشد.
#### 2. RF - جنگل تصادفی
- هدف اصلی: هم برای دستهبندی و هم برای رگرسیون (پیشبینی مقادیر عددی) استفاده میشود.
- نحوه کار: RF نمونهای از "یادگیری گروهی" (Ensemble Learning) است. این الگوریتم تعداد زیادی درخت تصمیم (Decision Tree) میسازد. هر درخت تصمیم با بخشی تصادفی از دادهها آموزش میبیند. در نهایت، برای پیشبینی یک داده جدید، همه درختان رای میدهند و پاسخ نهایی، پاسخ اکثریت (در دستهبندی) یا میانگین آراء (در رگرسیون) است.
- یک تشبیه: به جای اینکه از یک متخصص (یک درخت تصمیم) بپرسید، از یک گروه متخصص (جنگل) نظر میخواهید. هر متخصص با تجربه کمی متفاوت آموزش دیده است. تصمیم نهایی که گروه میگیرد، معمولاً بسیار دقیقتر و قابلاعتمادتر از نظر یک متخصص به تنهایی است. این کار از "بیشبرازش" (Overfitting) جلوگیری میکند.
#### 3. MLP - پرسپترون چندلایه
- هدف اصلی: یک نوع ساده از شبکه عصبی مصنوعی است که هم برای دستهبندی و هم برای رگرسیون به کار میرود.
- نحوه کار: MLP از لایههای متوالی از "نورون"های مصنوعی تشکیل شده است:
- لایه ورودی: داده را دریافت میکند.
- لایه(های) پنهان: محاسبات پیچیده روی داده انجام میدهند و الگوها را یاد میگیرند. "چندلایه" بودن به همین لایههای پنهان اشاره دارد.
- لایه خروجی: نتیجه نهایی را تولید میکند.
هر نورون با نورونهای لایه بعدی ارتباط دارد و این ارتباطات دارای "وزن" هستند. فرآیند آموزش، در واقع تنظیم همین وزنها برای کم کردن خطا است.
- یک تشبیه: مغز انسان را در نظر بگیرید که از نورونهای به هم پیوسته تشکیل شده. MLP یک مدل سادهشده از این شبکه است که میتواند روابط بسیار پیچیده و غیرخطی را در دادهها یاد بگیرد.
### جمعبندی نهایی
- SVM: مثل یک نقشهکش است که دقیقترین مرز ممکن را بین مناطق ترسیم میکند.
- RF: مثل یک دموکراسی است که از جمعبندی نظرات چندین متخصص ساده (درختان) برای گرفتن بهترین تصمیم استفاده میکند.
- MLP: مثل یک مغز مصنوعی کوچک است که با تنظیم ارتباطات داخلیاش، مسائل پیچیده را حل میکند.
انتخاب بین این الگوریتمها به ماهیت مسئله، اندازه و نوع دادهها، و منابع محاسباتی بستگی دارد. معمولاً در عمل، چندین مدل را آزمایش میکنند و بهترین را انتخاب میکنند.
### خلاصه سریع و مقایسه
| الگوریتم | نام کامل | نحوه کار (تشبیه) | نقاط قوت | نقاط ضعف |
| :--- | :--- | :--- | :--- | :--- |
| SVM | ماشین بردار پشتیبان | پیدا کردن بهترین "خط یا مرز" برای جدا کردن دستهها | بسیار قدرتمند در دادههای با ابعاد بالا، مقاوم در برابر بیشبرازش | کند در مجموعه دادههای بسیار بزرگ، عملکرد ضعیف با دادههای پرنویز |
| RF | جنگل تصادفی | تصمیمگیری گروهی با رایگیری بین درختان تصمیم مختلف | بسیار قوی و دقیق، نیاز به پیشپردازش کمی دارد، اهمیت ویژگیها را میدهد | مانند جعبه سیاه است، ممکن است حافظه زیادی مصرف کند |
| MLP | پرسپترون چندلایه | شبیهسازی شبکه عصبی مغز برای یادگیری الگوهای پیچیده | فوقالعاده در یادگیری روابط غیرخطی و پیچیده، انعطافپذیر | نیاز به داده و قدرت پردازشی زیاد، تنظیم دقیق پارامترها سخت است |
---
### توضیح جزئیات هر کدام:
#### 1. SVM - ماشین بردار پشتیبان
- هدف اصلی: عمدتاً برای دستهبندی استفاده میشود (مثلاً تشخیص اسپم از غیراسپم).
- نحوه کار: SVM سعی میکند یک مرز یا صفحهای (Hyperplane) بین دستههای مختلف داده پیدا کند که بیشترین حاشیه امن (Margin) را داشته باشد. یعنی این مرز تا نزدیکترین دادههای هر دسته (بردارهای پشتیبان) حداکثر فاصله را دارد. این کار باعث میشود مدل در برابر دادههای جدید، عملکرد بهتری داشته باشد و "عمومیتپذیر" (Generalize) شود.
- یک تشبیه: فرض کنید دو نوع میوه (سیب و پرتقال) روی میز دارید. SVM سعی میکند بهترین خط مستقیمی را بکشد که این دو دسته را از هم جدا کند، طوری که فاصله این خط از نزدیکترین سیب و نزدیکترین پرتقال حداکثر باشد.
#### 2. RF - جنگل تصادفی
- هدف اصلی: هم برای دستهبندی و هم برای رگرسیون (پیشبینی مقادیر عددی) استفاده میشود.
- نحوه کار: RF نمونهای از "یادگیری گروهی" (Ensemble Learning) است. این الگوریتم تعداد زیادی درخت تصمیم (Decision Tree) میسازد. هر درخت تصمیم با بخشی تصادفی از دادهها آموزش میبیند. در نهایت، برای پیشبینی یک داده جدید، همه درختان رای میدهند و پاسخ نهایی، پاسخ اکثریت (در دستهبندی) یا میانگین آراء (در رگرسیون) است.
- یک تشبیه: به جای اینکه از یک متخصص (یک درخت تصمیم) بپرسید، از یک گروه متخصص (جنگل) نظر میخواهید. هر متخصص با تجربه کمی متفاوت آموزش دیده است. تصمیم نهایی که گروه میگیرد، معمولاً بسیار دقیقتر و قابلاعتمادتر از نظر یک متخصص به تنهایی است. این کار از "بیشبرازش" (Overfitting) جلوگیری میکند.
#### 3. MLP - پرسپترون چندلایه
- هدف اصلی: یک نوع ساده از شبکه عصبی مصنوعی است که هم برای دستهبندی و هم برای رگرسیون به کار میرود.
- نحوه کار: MLP از لایههای متوالی از "نورون"های مصنوعی تشکیل شده است:
- لایه ورودی: داده را دریافت میکند.
- لایه(های) پنهان: محاسبات پیچیده روی داده انجام میدهند و الگوها را یاد میگیرند. "چندلایه" بودن به همین لایههای پنهان اشاره دارد.
- لایه خروجی: نتیجه نهایی را تولید میکند.
هر نورون با نورونهای لایه بعدی ارتباط دارد و این ارتباطات دارای "وزن" هستند. فرآیند آموزش، در واقع تنظیم همین وزنها برای کم کردن خطا است.
- یک تشبیه: مغز انسان را در نظر بگیرید که از نورونهای به هم پیوسته تشکیل شده. MLP یک مدل سادهشده از این شبکه است که میتواند روابط بسیار پیچیده و غیرخطی را در دادهها یاد بگیرد.
### جمعبندی نهایی
- SVM: مثل یک نقشهکش است که دقیقترین مرز ممکن را بین مناطق ترسیم میکند.
- RF: مثل یک دموکراسی است که از جمعبندی نظرات چندین متخصص ساده (درختان) برای گرفتن بهترین تصمیم استفاده میکند.
- MLP: مثل یک مغز مصنوعی کوچک است که با تنظیم ارتباطات داخلیاش، مسائل پیچیده را حل میکند.
انتخاب بین این الگوریتمها به ماهیت مسئله، اندازه و نوع دادهها، و منابع محاسباتی بستگی دارد. معمولاً در عمل، چندین مدل را آزمایش میکنند و بهترین را انتخاب میکنند.