Junior Learner, Senior Lover
2 subscribers
1 video
1 file
2 links
چیزایی که توی حوزه جدید و عزیزم میخونم و یاد میگیرم، اینجا میگم شاید به درد شما هم خورد

@ellyvesfahani
Download Telegram
اول هر کار با نام خدا
#مفاهیم_NLP
بیاید باهم درباره «بازنمایی معنا» یا 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
خب خب خب
بیاید باهم انواع توکنایزرها رو در 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
image_2025-10-04_10-47-54.png
808.9 KB
#InSearchOf

برای من همیشه دیدن اینطور نمودارها خیلی وحشت‌برانگیز بود چون چیزی ازشون سر درنمی‌آوردم و مسلط به ابزار نبودم. اما الان میدونم چنین نموداری فقط با یک خط درست شده:

sns.pairplot(df)

(البته با یه عالمه خط دیگه که مبنای اینو میسازن😅)
باید بتونم تحلیلش کنم.
اونو هم میتونم، با صبر، صبر زیاد
بیاید باهم ببینیم INLP یعنی چه
INLP = Iterative Nullspace Projection
این یه روشه که با استفاده از اون لایه های word embedding یه جوری نمایش داده میشن که ویژگیهایی مثل جنسیت، نژاد و مذهب که خود به خود حاوی bias هستند از بین برن.
این روش خروجی شبکه های عصبی رو در مدلهای زبانی بزرگ کنترل میکنند و تلاش میکنند تا بایاس رو کاهش بدن.
متدشون چیه؟
براساس رگرسیون منطقی ما classifierهایی رو trainمیدیم که بدونن کجا باید اطلاعات رو از سیستم شبکه عصبی ریموو کنند. (یعنی اونا رو به null space تبدیل کنند)
این روش مخصوصا در تسک های classification بکار میره اما محدودیت هایی هم داره. اینکه اصلا چی رو بایاس بدونیم و چی رو بایاس ندونیم خودش خیلی مفصله. خطر دیگه ای که این روش داره اینه که ممکنه در یک مدل بایاس رو کاهش بده، ولی ممکنه پرفورمنس مدل رو پایین بیاره، کمااینکه روی مدل GPT-2 این اتفاق افتاده: بایاس تا حد خوبی کم شده ولی در عوض نتایج کمتر مطلوب بوده ن

@junior_learner
#InSearchOf

اینقدرر این چند روز دارم منابع مختلف میخونم و با اصطلاحات جدید بمبارون میشم که حد نداره🫠

میدونم که همه اینا ارزششو داره و آخر سر اونی که سود میکنه منم
#abbrivation_list

این لیست مدام به‌روز میشه

#INLP
#RAG
#CoT
#PEFT
Forwarded from CL & NLP Enthusiasts
Media is too big
VIEW IN TELEGRAM
مدل جدیدی به نام Jan-Nano اخیرا معرفی شد.
همانطور که در ویدیو می بینید ۴ میلیارد پارامتر داره که برای کارهای deep research اپتیمایز شده است. بخصوص برای وصل شدن به  Model Context Protocol (MCP) servers و انواع tools/ابزارها. و از لحاظ دقت هم خیلی خوبه. راهنمای نصب و استفاده بومی هم در لینک آورده شد.
@computationallinguisticsNLP
#RAG = Retrieval - Argument Generation

RAG هم مثل INLP یک روشه، البته باهم فرق دارند ولی توی دنیای تکنولوژی باید حتما بدونیم چی روش هست و چی نیست
rag به مدل زبانی اجازه میده از پایگاه داده برای تقویت پاسخش استفاده کنه.
خب خب خب
بریم ببینیم دقیقا چه تنظیماتی میشه به توکنایزرمون بدیم و هرکدوم چه عملکردی دارن:

سؤال خیلی خوبی پرسیدی 👏
چون AutoTokenizer.from_pretrained(model_name) یکی از پرکاربردترین خطوط در پروژه‌های NLPه — و می‌تونه کلی تنظیم اضافه بگیره که رفتار توکنایزر رو دقیق‌تر کنترل کنه.
بریم جزءبه‌جزء توضیح بدیم:

---

## 🧠 ساختار کلی

tokenizer = AutoTokenizer.from_pretrained(
model_name,
**پارامترهای_اختیاری
)


اینجا model_name مثلاً می‌تونه "bert-base-uncased" یا "facebook/bart-large-cnn" باشه،
و پارامترهای اختیاری می‌تونن چیزهایی باشن که توکنایزر رو مطابق نیازت تنظیم کنن.

---

## ⚙️ پارامترهای مهم و کاربردی

### 1️⃣ use_fast

use_fast=True  # یا False


* اگر True باشه (پیش‌فرض معمولاً Trueه)، از نسخه‌ی سریع‌تر توکنایزر استفاده می‌کنه (بر پایه‌ی Rust).
* نسخه‌ی "fast" سریع‌تره و اطلاعات دقیق‌تری درباره‌ی نگاشت توکن به متن اصلی می‌ده (برای tasks مثل NER یا alignment).

---

### 2️⃣ revision

revision="main"  # یا مثلاً 'v1.2.0'


* مشخص می‌کنه از کدوم نسخه‌ی مدل در Hugging Face Hub استفاده کنه.
مثلاً اگه مدل نسخه‌های مختلف داشته باشه، می‌تونی یه نسخه خاص رو لود کنی.

---

### 3️⃣ trust_remote_code

trust_remote_code=True


* برای مدل‌هایی که توکنایزرشون **کد سفارشی** دارن (نه فقط پیکربندی ساده).
* به Hugging Face اجازه می‌ده کد Python داخل ریپوی مدل رو اجرا کنه (امنیتش بستگی به منبع داره؛ مراقب باش).

---

### 4️⃣ cache_dir

cache_dir="./models_cache"


* مسیر محلی برای ذخیره‌ی فایل‌های دانلودی (توکنایزر، vocab و غیره).
* مفیده اگه نمی‌خوای هر بار از اینترنت دانلود کنه.

---

### 5️⃣ force_download

force_download=True


* حتی اگر فایل قبلاً دانلود شده، دوباره از اینترنت می‌گیره (مثلاً برای اطمینان از آخرین نسخه).

---

### 6️⃣ local_files_only

local_files_only=True


* فقط از فایل‌های لوکال استفاده کن، حتی اگه فایل در کش یا اینترنت نباشه.

---

### 7️⃣ tokenizer_type

در بعضی مدل‌ها می‌تونی نوع توکنایزر رو مشخص کنی (اگر مدل چند تا نوع پشتیبانی کنه)،
مثلاً:

tokenizer = AutoTokenizer.from_pretrained(model_name, tokenizer_type="gpt2")


---

### 8️⃣ padding_side

padding_side="right"  # یا "left"


* مشخص می‌کنه پدینگ در سمت راست یا چپ جمله انجام بشه.
* برای مدل‌هایی مثل GPT (که چپ‌پد می‌خوان) خیلی مهمه.

---

### 9️⃣ truncation_side

truncation_side="right"  # یا "left"


* مشخص می‌کنه اگر جمله خیلی طولانی بود، از سمت راست بریده بشه یا از چپ.

---

### 🔟 add_prefix_space

add_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
)