#مفاهیم_NLP
بیاید باهم درباره «بازنمایی معنا» یا meaning representation صحبت کنیم.
توی دستور زبان، ما با مقولههای دستوری ای کار داریم که در کنار هم قرار گرفتنشون باعث میشه معنا را بازنمایی کنند.
حالا چی میشه اگه بخوایم چنین مفهومی رو به کامپیوتر آموزش بدیم؟
کامپیوتر مقوله دستوری نمیفهمه اما عدد و رقم میفهمه و گراف و نمودار.
پس
ما روشهای آماری زیادی داریم که جمله رو به کامپیوتر بفهمونیم.
بیاید خیلی کوتاه اول از همه درباره این روشها و ساختارهاشون بدونیم:
1. منطق مرتبه اول
یا
First Order Predicate Calculus
یا
First-Order Logic
بیاید با یه مثال ببینیم این چی میگه:
∀x (Human(x) → Mortal(x))
این مثال میگه هر انسانی مردنیه، پس اگه علی انسان باشه حتما مردنیه.
این توی هوش مصنوعی کجا کاربرد داره؟
جایی که مدل شروع به فکر کردن و نتیجه گیری میکنه
بذارید با یه مثال بگم
مثلا توی پرامپتتون نوشتید:
«من 20 سالمه و برادرم از من کوچیکتره»
کامپیوتر از این جمله استنتاج میکنه که برادر شما حتما کمتر از 20 سالشه.
see?
به همین راحتی!
حالا چطور اینو با کد به سیستم حالی کنیم؟
باید با nltk آشنا باشیم.
@junior_learner
بیاید باهم درباره «بازنمایی معنا» یا meaning representation صحبت کنیم.
توی دستور زبان، ما با مقولههای دستوری ای کار داریم که در کنار هم قرار گرفتنشون باعث میشه معنا را بازنمایی کنند.
حالا چی میشه اگه بخوایم چنین مفهومی رو به کامپیوتر آموزش بدیم؟
کامپیوتر مقوله دستوری نمیفهمه اما عدد و رقم میفهمه و گراف و نمودار.
پس
ما روشهای آماری زیادی داریم که جمله رو به کامپیوتر بفهمونیم.
بیاید خیلی کوتاه اول از همه درباره این روشها و ساختارهاشون بدونیم:
1. منطق مرتبه اول
یا
First Order Predicate Calculus
یا
First-Order Logic
بیاید با یه مثال ببینیم این چی میگه:
∀x (Human(x) → Mortal(x))
این مثال میگه هر انسانی مردنیه، پس اگه علی انسان باشه حتما مردنیه.
این توی هوش مصنوعی کجا کاربرد داره؟
جایی که مدل شروع به فکر کردن و نتیجه گیری میکنه
بذارید با یه مثال بگم
مثلا توی پرامپتتون نوشتید:
«من 20 سالمه و برادرم از من کوچیکتره»
کامپیوتر از این جمله استنتاج میکنه که برادر شما حتما کمتر از 20 سالشه.
see?
به همین راحتی!
حالا چطور اینو با کد به سیستم حالی کنیم؟
باید با nltk آشنا باشیم.
@junior_learner
Junior Learner, Senior Lover
#مفاهیم_NLP بیاید باهم درباره «بازنمایی معنا» یا meaning representation صحبت کنیم. توی دستور زبان، ما با مقولههای دستوری ای کار داریم که در کنار هم قرار گرفتنشون باعث میشه معنا را بازنمایی کنند. حالا چی میشه اگه بخوایم چنین مفهومی رو به کامپیوتر آموزش بدیم؟…
در ادامه بحث بازنمایی معنا بیاید درباره Conceptual Dependency Diagram حرف بزنیم.
ما معمولا نمودارها رو به اسم چامسکی میشناسیم، میدونیم که چامسکی نمودارها رو براساس نقش نحوی کشید. ولی ما اینجا یه کم از نحو فاصله میگیریم و به سمت نقشهای معنایی میریم.
مثلا در جمله Ali gave a book to Sarah ما با نقشهای معنایی طرفیم، فارغ از اینکه فعل چیه
این میشه نمودار ما:
ATRANS
/ | \
Ali Book Sara
AGENT OBJ RECIPIENT
برای هوش مصنوعی و مدل زبانی، خصوصا سیستمهای پرسش و پاسخ کدوم اولویت داره؟
مدل چامسکی. نحو در واقع اولین مرحله پروسس هست. بعد از نحوه که وارد حیطه معنا میشیم
برای کد زدن باید به کدوم پکیج مسلط باشیم؟
پکیج spaCy
@junior_learner
ما معمولا نمودارها رو به اسم چامسکی میشناسیم، میدونیم که چامسکی نمودارها رو براساس نقش نحوی کشید. ولی ما اینجا یه کم از نحو فاصله میگیریم و به سمت نقشهای معنایی میریم.
مثلا در جمله Ali gave a book to Sarah ما با نقشهای معنایی طرفیم، فارغ از اینکه فعل چیه
این میشه نمودار ما:
ATRANS
/ | \
Ali Book Sara
AGENT OBJ RECIPIENT
برای هوش مصنوعی و مدل زبانی، خصوصا سیستمهای پرسش و پاسخ کدوم اولویت داره؟
مدل چامسکی. نحو در واقع اولین مرحله پروسس هست. بعد از نحوه که وارد حیطه معنا میشیم
برای کد زدن باید به کدوم پکیج مسلط باشیم؟
پکیج spaCy
@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
بیاید باهم انواع توکنایزرها رو در 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
)