Зеҳн
Омӯзиши моделҳои бузурги забонӣ (LLM)

Китоби омӯзишӣ дар бораи моделҳои бузурги забонӣ (LLM) ба забони тоҷикӣ: аз мафҳумҳои аввалия то усулҳои муосир. Токенсозӣ ва векторҳо, шабакаҳои нейронӣ, механизми таваҷҷуҳ ва Transformer, оилаҳои моделҳо, омӯзиши пешакӣ, танзими дақиқ ва LoRA, мутобиқсозӣ (RLHF, DPO), тавлиди матн, муҳандисии промпт, RAG, агентҳо, самаранокӣ, арзёбӣ ва бехатарӣ, тафсирпазирӣ ва истифодаи LLM барои забони тоҷикӣ. Бо мисолҳои код дар Python ва PyTorch, замимаҳои математика ва луғати истилоҳот.

Агенти Зеҳнӣ · 13 октябри 2026 · 18 саҳифа · 2 писанд

БарномасозӣТехнология
Аз аввал хондан

Замимаҳо

Дар ин қисм маводи ёрирасон ҷамъ оварда шудааст, ки барои фаҳмидани бобҳои техникии китоб лозим аст:

  • Замимаи А — асосҳои математика: вектор, матритса, эҳтимол, softmax, ҳосила, фуромади градиентӣ ва паҳншавии баръакси хато.
  • Замимаи Б — асосҳои Python ва PyTorch: ҳамон қадаре, ки барои хондан ва иҷро кардани мисолҳои китоб кифоя аст.
  • Замимаи В — луғати истилоҳот: истилоҳоти тоҷикии китоб бо муодили англисӣ ва рақами боб.

Замимаҳоро пай дар пай хондан шарт нест. Ҳангоми хондани бобҳо, агар ба мафҳуми номаълум дучор шавед, ба қисми мувофиқ баргардед.

Замимаи А. Асосҳои математика

Барои фаҳмидани моделҳои забонӣ математикаи мураккаб лозим нест. Қариб ҳама чиз ба чанд ғояи асосӣ такя мекунад: рақамҳоро дар векторҳо ва матритсаҳо ҷамъ мекунем, онҳоро зарб мезанем, натиҷаро ба эҳтимолҳо табдил медиҳем ва хаторо бо ҳосилаҳо кам мекунем.

Ҳар мисоли ин замима бо коди Python тафтиш шудааст. Шумо низ метавонед онҳоро бо NumPy ё PyTorch (Замимаи Б) такрор кунед.

А.1. Скаляр, вектор, матритса ва тензор

Скаляр (Scalar) — як адади оддӣ: (3), (-0{,}5), (\eta = 0{,}001).

Вектор (Vector) — рӯйхати тартибноки ададҳо:

[
\mathbf{a} = (1,\ 2,\ 3)
]

Шумораи ададҳо андоза (Dimension)-и вектор ном дорад. Вектори (\mathbf{a}) сеандоза аст. Дар бобҳои 2 ва 4 дидем, ки ҳар токен бо вектори садҳо ё ҳазорҳо андоза ифода мешавад.

Матритса (Matrix) — ҷадвали ададҳо бо сатрҳо ва сутунҳо. Матритсаи (m \times n) (m) сатр ва (n) сутун дорад:

[
A = \begin{pmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \end{pmatrix} \quad (2 \times 3)
]

Тензор (Tensor) — номи умумии ҳамаи инҳо: скаляр тензори сифрченака, вектор — якченака, матритса — дученака аст. Дар моделҳо тензорҳои сеченака ва чорченака хеле маъмуланд. Масалан, бастаи (Batch) 4 ҷумла, ки ҳар кадом 10 токен ва ҳар токен вектори 768-андоза дорад, тензори (4 \times 10 \times 768) мебошад.

А.2. Амалҳо бо векторҳо

Ду вектори якандозаро ҷамъ мекунанд, ададҳои мувофиқро ҷамъ карда:

[
(1,\ 2,\ 3) + (4,\ 0,\ -1) = (5,\ 2,\ 2)
]

Векторро ба скаляр зарб мезананд, ҳар ададро зарб зада: (2 \cdot (1, 2, 3) = (2, 4, 6)).

Дарозӣ (ё норма, Norm)-и вектор аз рӯи теоремаи Пифагор ҳисоб мешавад:

[
|\mathbf{a}| = \sqrt{1^2 + 2^2 + 3^2} = \sqrt{14} \approx 3{,}742
]

Зарби скалярӣ

Зарби скалярӣ (Dot Product) — муҳимтарин амал дар ин китоб. Ададҳои мувофиқро зарб мезанем ва натиҷаҳоро ҷамъ мекунем:

[
\mathbf{a} \cdot \mathbf{b} = \sum_{i} a_i b_i
]

[
(1,\ 2,\ 3) \cdot (4,\ 0,\ -1) = 1 \cdot 4 + 2 \cdot 0 + 3 \cdot (-1) = 1
]

Зарби скалярӣ нишон медиҳад, ки ду вектор то чӣ андоза ба як самт нигаронида шудаанд. Механизми таваҷҷуҳ (боби 4) маҳз бо зарби скалярии вектори дархост ва векторҳои калид ҳисоб мекунад, ки кадом токенҳо ба ҳамдигар «мувофиқ» ҳастанд.

Монандии косинусӣ

Агар зарби скаляриро ба дарозии ҳарду вектор тақсим кунем, монандии косинусӣ (Cosine Similarity) ҳосил мешавад:

[
\cos(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}|\ |\mathbf{b}|}
]

Қимати он ҳамеша аз (-1) то (1) аст:

ВекторҳоМонандӣМаъно
((0{,}8;\ 0{,}6)) ва ((0{,}6;\ 0{,}8))(0{,}96)қариб як самт — маънои наздик
((0{,}8;\ 0{,}6)) ва ((-0{,}6;\ 0{,}8))(0)амудӣ — алоқа надоранд
((0{,}8;\ 0{,}6)) ва ((-0{,}8;\ -0{,}6))(-1)самтҳои муқобил

Ҷустуҷӯи векторӣ дар RAG (боби 11) ҳуҷҷатҳоеро меёбад, ки векторашон бо вектори савол монандии косинусии баландтарин дорад.

А.3. Зарби матритсаҳо

Матритсаи (A) ((m \times n))-ро ба матритсаи (B) ((n \times p)) зарб зада, матритсаи (m \times p) мегирем. Ҳар унсури натиҷа зарби скалярии як сатри (A) ва як сутуни (B) аст:

[
\begin{pmatrix} 1 & 2 & 3 \ 4 & 5 & 6 \end{pmatrix}
\begin{pmatrix} 1 & 0 \ 0 & 1 \ 1 & 1 \end{pmatrix}

\begin{pmatrix} 1+0+3 & 0+2+3 \ 4+0+6 & 0+5+6 \end{pmatrix}

\begin{pmatrix} 4 & 5 \ 10 & 11 \end{pmatrix}
]

Қоидаи асосӣ: шумораи сутунҳои матритсаи якум бояд ба шумораи сатрҳои матритсаи дуюм баробар бошад. Аксари хатоҳо дар коди PyTorch («shapes cannot be multiplied») аз вайрон шудани ҳамин қоида пайдо мешаванд (ниг. Замимаи Б).

Транспонкунӣ (Transpose) сатрҳо ва сутунҳоро иваз мекунад: агар (A) (2 \times 3) бошад, (A^{\top}) (3 \times 2) аст. Дар формулаи таваҷҷуҳ (QK^{\top}) (боби 4) транспонкунӣ лозим аст, то ҳар дархост бо ҳар калид зарби скалярӣ шавад.

Қабати хаттӣ: (\mathbf{y} = W\mathbf{x} + \mathbf{b})

Қабати оддии шабакаи нейронӣ (боби 3) маҳз зарби матритса ба вектор ва ҷамъи вектори «ғараз» (Bias) аст:

[
W = \begin{pmatrix} 0{,}5 & -1 & 0 \ 1 & 1 & 1 \end{pmatrix},\quad
\mathbf{x} = \begin{pmatrix} 2 \ 1 \ 3 \end{pmatrix},\quad
\mathbf{b} = \begin{pmatrix} 0{,}1 \ -0{,}5 \end{pmatrix}
]

[
W\mathbf{x} + \mathbf{b} = \begin{pmatrix} 1 - 1 + 0 \ 2 + 1 + 3 \end{pmatrix} + \begin{pmatrix} 0{,}1 \ -0{,}5 \end{pmatrix} = \begin{pmatrix} 0{,}1 \ 5{,}5 \end{pmatrix}
]

Қабат вектори сеандозаро ба вектори дуандоза табдил дод. Ададҳои (W) ва (\mathbf{b}) — параметрҳо (ё вазнҳо)-и модел мебошанд, ки ҳангоми омӯзиш тағйир меёбанд. Модели бузурги забонӣ асосан аз ҳазорҳо чунин матритсаҳо иборат аст.

А.4. Эҳтимол ва логарифм

Эҳтимол (Probability) — адади аз 0 то 1, ки нишон медиҳад ҳодиса то чӣ андоза мумкин аст. Тақсимоти эҳтимолҳо (Probability Distribution) ба ҳар натиҷаи мумкин эҳтимол медиҳад ва ҷамъи ҳамаи эҳтимолҳо ба 1 баробар аст.

Модели забонӣ дар ҳар қадам маҳз чунин тақсимотро барои ҳамаи токенҳои луғат месозад (боби 9).

Эҳтимоли шартӣ (P(y \mid x)) — эҳтимоли (y), ба шарте ки (x) маълум бошад. Модели забонӣ эҳтимоли токени навбатиро бо шарти ҳамаи токенҳои пешина ҳисоб мекунад: (P(w_t \mid w_1, \dots, w_{t-1})).

Эҳтимоли тамоми ҷумла аз рӯи қоидаи занҷирии эҳтимол ҳосили зарби ин эҳтимолҳост:

[
P(w_1, w_2, \dots, w_n) = \prod_{t=1}^{n} P(w_t \mid w_1, \dots, w_{t-1})
]

Ҳамин формула асоси омӯзиши пешакии ҳамаи моделҳои GPT аст (боби 6).

Чаро логарифм?

Агар эҳтимоли се токен (0{,}2), (0{,}5) ва (0{,}1) бошад, эҳтимоли ҳар сеяш якҷоя (0{,}2 \cdot 0{,}5 \cdot 0{,}1 = 0{,}01) аст. Барои ҷумлаи 1000-токенӣ ҳосили зарб он қадар хурд мешавад, ки компютер онро ҳамчун сифр нигоҳ медорад.

Барои ҳамин бо логарифм кор мекунанд. Логарифм зарбро ба ҷамъ табдил медиҳад:

[
\log(a \cdot b) = \log a + \log b
]

[
\log 0{,}2 + \log 0{,}5 + \log 0{,}1 \approx -4{,}605 = \log 0{,}01
]

Дар ин китоб (\log) логарифми натуралӣ (бо асоси (e \approx 2{,}718)) аст. Логарифми эҳтимол ҳамеша манфӣ ё сифр аст, зеро эҳтимол аз 1 зиёд нест.

Печидагӣ (Perplexity)

Агар логарифми эҳтимоли ҳар токенро бо аломати манфӣ гирем ва миёнаашро ҳисоб кунем, хатои миёна ба даст меояд. Экспонентаи он печидагӣ ном дорад (боби 14):

[
\text{PPL} = \exp\left(-\frac{1}{n}\sum_{t=1}^{n} \log P(w_t \mid w_{<t})\right)
]

Барои се токени болоӣ: (\text{PPL} = \exp(4{,}605 / 3) \approx 4{,}64). Маънои содда: модел гӯё дар ҳар қадам аз байни тақрибан 4–5 варианти баробар интихоб мекунад. Ҳар қадар печидагӣ пасттар бошад, модел матнро беҳтар пешгӯӣ мекунад.

А.5. Функсияи softmax

Қабати охири модели забонӣ ба ҳар токени луғат як адади дилхоҳ — логит (Logit) — медиҳад. Функсияи softmax ин ададҳоро ба тақсимоти эҳтимолҳо табдил медиҳад:

[
\operatorname{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}
]

Мисол: логитҳои (z = (2;\ 1;\ 0{,}1)):

Токени 1Токени 2Токени 3
Логит (z_i)210,1
(e^{z_i})7,3892,7181,105
softmax0,6590,2420,099

Ҳамаи натиҷаҳо мусбатанд ва ҷамъашон ба 1 баробар аст. Логити калонтарин эҳтимоли калонтарин мегирад, вале токенҳои дигар ҳам эҳтимоли худро нигоҳ медоранд.

Ҳарорат

Дар боби 9 дидем, ки пеш аз softmax логитҳоро ба ҳарорат (T) тақсим мекунанд: (\operatorname{softmax}(z / T)). Барои ҳамон логитҳо:

ҲароратЭҳтимолҳоНатиҷа
(T = 0{,}5)(0{,}864;\ 0{,}117;\ 0{,}019)тақсимот «тез»-тар — интихоб боваринок ва якхела
(T = 1)(0{,}659;\ 0{,}242;\ 0{,}099)тақсимоти аслӣ
(T = 2)(0{,}502;\ 0{,}304;\ 0{,}194)тақсимот «ҳамвор»-тар — интихоб гуногунтар

Эзоҳи амалӣ: устувории ҳисоб

Барои логитҳои калон (e^{z}) аз ҳадди адади компютер мегузарад: (e^{1000}) ба «бепоён» (inf) табдил меёбад. Барои ҳамин дар амал пеш аз ҳисоб аз ҳамаи логитҳо қимати калонтаринро тарҳ мекунанд. Натиҷа тағйир намеёбад, зеро ҳам сурат ва ҳам махраҷ ба ҳамон адад тақсим мешаванд:

[
\operatorname{softmax}(z)_i = \frac{e^{z_i - \max(z)}}{\sum_j e^{z_j - \max(z)}}
]

torch.softmax инро худкор иҷро мекунад.

А.6. Энтропияи салибӣ

Барои омӯзиш бояд чен кунем, ки тақсимоти модел аз ҷавоби дуруст чӣ қадар дур аст. Барои ин энтропияи салибӣ (Cross-Entropy) истифода мешавад (боби 3):

[
\mathcal{L} = -\sum_i y_i \log p_i
]

Ин ҷо (p_i) — эҳтимолҳои модел, (y_i) — ҷавоби дуруст: барои токени дуруст 1, барои дигарҳо 0. Азбаски танҳо як (y_i) ба 1 баробар аст, формула ба шакли содда меояд:

[
\mathcal{L} = -\log p_{\text{дуруст}}
]

Эҳтимоли ҷавоби дурустХато (-\log p)
0,90,105
0,659 (мисоли softmax-и болоӣ)0,417
0,014,605

Модел ҳар қадар ба ҷавоби дуруст бештар бовар кунад, хато ҳамон қадар хурдтар аст. Ҷазо барои эҳтимоли хеле паст хеле калон аст.

А.7. Ҳосила ва градиент

Ҳосила (Derivative) нишон медиҳад, ки агар вурудро каме тағйир диҳем, натиҷаи функсия чӣ қадар ва ба кадом самт тағйир меёбад. Ба тарзи геометрӣ ин нишебии графики функсия дар нуқтаи додашуда аст.

Қоидаҳои асосӣ:

ФунксияҲосила
(c) (доимӣ)(0)
(x^n)(n x^{n-1})
(e^x)(e^x)
(\log x)(1 / x)
(f(x) + g(x))(f'(x) + g'(x))
(c \cdot f(x))(c \cdot f'(x))

Мисол: (f(w) = (w - 3)^2). Ҳосилааш (f'(w) = 2(w - 3)). Дар нуқтаи (w = 0) ҳосила (-6) аст: агар (w)-ро каме зиёд кунем, (f) кам мешавад. Дар (w = 3) ҳосила сифр аст — ин нуқтаи камтарин аст.

Қоидаи занҷирӣ

Агар функсия аз функсияи дигар иборат бошад, (f(g(x))), ҳосилааш ҳосили зарби ҳосилаҳост:

[
\frac{df}{dx} = \frac{df}{dg} \cdot \frac{dg}{dx}
]

Шабакаи нейронӣ занҷири дарози чунин функсияҳост: қабат пас аз қабат. Қоидаи занҷирӣ (Chain Rule) имкон медиҳад, ки ҳосилаи хаторо нисбат ба ҳар вазн, ҳатто дар қабати аввал, ҳисоб кунем (ниг. А.9).

Ҳосилаи хусусӣ ва градиент

Функсияи хатои модел аз миллионҳо вазн вобаста аст. Ҳосилаи хусусӣ (Partial Derivative) (\partial \mathcal{L} / \partial w_i) нишон медиҳад, ки хато бо тағйири танҳо як вазни (w_i) чӣ гуна тағйир меёбад, дар ҳоле ки дигар вазнҳо собит мемонанд.

Вектори ҳамаи ҳосилаҳои хусусӣ градиент (Gradient) ном дорад:

[
\nabla \mathcal{L} = \left(\frac{\partial \mathcal{L}}{\partial w_1},\ \frac{\partial \mathcal{L}}{\partial w_2},\ \dots\right)
]

Градиент ба самти зудтарин афзоиши хато нигаронида шудааст. Пас барои кам кардани хато бояд ба самти муқобили градиент ҳаракат кард.

А.8. Фуромади градиентӣ

Фуромади градиентӣ (Gradient Descent) ҳар вазнро ба самти муқобили градиент каме тағйир медиҳад (боби 3):

[
w \leftarrow w - \eta \cdot \frac{\partial \mathcal{L}}{\partial w}
]

Ин ҷо (\eta) — суръати омӯзиш (Learning Rate) аст.

Функсияи (f(w) = (w - 3)^2)-ро аз (w = 0) бо (\eta = 0{,}1) кам мекунем:

Қадам(w)Ҳосила (2(w-3))(w) нав
10(-6)(0 - 0{,}1 \cdot (-6) = 0{,}6)
20,6(-4{,}8)(1{,}08)
31,08(-3{,}84)(1{,}464)
41,464(-3{,}072)(1{,}771)
51,771(-2{,}458)(2{,}017)

Ҳар қадам (w)-ро ба 3 наздиктар мекунад. Пас аз 50 қадам (w \approx 3{,}0000) мешавад.

Агар суръати омӯзиш хеле калон бошад, масалан (\eta = 1{,}1), раванд вайрон мешавад: (w) ба қиматҳои (6{,}6;\ -1{,}32;\ 8{,}18;\ -3{,}22;\ 10{,}47) мепарад ва аз 3 торафт дур мешавад. Ҳамин мушкилро дар боби 3 бо ташбеҳи «аз водӣ паридан» тасвир кардем.

def train(eta, steps=5):  
    w = 0.0  
    for _ in range(steps):  
        grad = 2 * (w - 3)  
        w = w - eta * grad  
        print(round(w, 3))

train(0.1)   # 0.6, 1.08, 1.464, 1.771, 2.017  
train(1.1)   # 6.6, -1.32, 8.184, -3.221, 10.465  

А.9. Паҳншавии баръакси хато: мисол

Дар боби 3 гуфтем, ки паҳншавии баръакси хато (Backpropagation) барои ҳар вазн градиент ҳисоб мекунад. Инро дар шабакаи хурдтарин — як нейрон — қадам ба қадам иҷро мекунем.

Шабака:

[
z = w x + b, \qquad a = \sigma(z) = \frac{1}{1 + e^{-z}}, \qquad \mathcal{L} = (a - y)^2
]

Қиматҳо: вуруд (x = 2), ҷавоби дуруст (y = 1), вазнҳои ибтидоӣ (w = 0{,}5), (b = 0{,}1).

Гузариши мустақим (Forward Pass) — аз вуруд ба хато:

ҚадамҲисобНатиҷа
(z)(0{,}5 \cdot 2 + 0{,}1)(1{,}1)
(a)(\sigma(1{,}1))(0{,}7503)
(\mathcal{L})((0{,}7503 - 1)^2)(0{,}0624)

Гузариши баръакс (Backward Pass) — аз хато ба вазнҳо, бо қоидаи занҷирӣ. Ҳосилаи ҳар қадамро алоҳида ҳисоб мекунем:

ҲосилаФормулаҚимат
(\partial \mathcal{L} / \partial a)(2(a - y))(-0{,}4995)
(\partial a / \partial z)(a(1 - a)) — ҳосилаи сигмоид(0{,}1874)
(\partial \mathcal{L} / \partial z)(\dfrac{\partial \mathcal{L}}{\partial a} \cdot \dfrac{\partial a}{\partial z})(-0{,}0936)
(\partial \mathcal{L} / \partial w)(\dfrac{\partial \mathcal{L}}{\partial z} \cdot x)(-0{,}1872)
(\partial \mathcal{L} / \partial b)(\dfrac{\partial \mathcal{L}}{\partial z} \cdot 1)(-0{,}0936)

Ҳарду градиент манфӣ ҳастанд: барои кам кардани хато бояд (w) ва (b)-ро зиёд кард. Бо (\eta = 0{,}1):

[
w = 0{,}5 - 0{,}1 \cdot (-0{,}1872) = 0{,}5187, \qquad b = 0{,}1 - 0{,}1 \cdot (-0{,}0936) = 0{,}1094
]

Бо вазнҳои нав хато аз (0{,}0624) то (0{,}0581) кам шуд. Омӯзиши модели бузург ҳамин корро барои миллиардҳо вазн ва миллионҳо қадам такрор мекунад.

Хабари хуш: ин ҳисобро худатон кардан лозим нест. PyTorch онро худкор иҷро мекунад:

import torch

w = torch.tensor(0.5, requires_grad=True)  
b = torch.tensor(0.1, requires_grad=True)

a = torch.sigmoid(w * 2.0 + b)   # гузариши мустақим  
loss = (a - 1.0) ** 2  
loss.backward()                  # гузариши баръакс

print(loss.item())   # 0.0624  
print(w.grad)        # tensor(-0.1872)  
print(b.grad)        # tensor(-0.0936)  

Натиҷаҳо бо ҳисоби дастии мо мувофиқанд.

Ҳосилаи softmax ва энтропияи салибӣ

Як натиҷаи хеле муфид: агар softmax ва энтропияи салибӣ якҷоя истифода шаванд, градиенти хато нисбат ба логитҳо хеле содда мешавад:

[
\frac{\partial \mathcal{L}}{\partial z_i} = p_i - y_i
]

Яъне «эҳтимоли модел тарҳи ҷавоби дуруст». Барои мисоли А.5 (токени 1 дуруст): ((0{,}659 - 1;\ 0{,}242 - 0;\ 0{,}099 - 0) = (-0{,}341;\ 0{,}242;\ 0{,}099)). Градиент логити токени дурустро боло мебарад ва логитҳои дигарро паст мекунад. Ҳамин ҳисоби оддӣ дар ҳар қадами омӯзиши ҳар модели забонӣ иҷро мешавад.

Замимаи Б. Асосҳои Python ва PyTorch

Ин замима дарси пурраи барномасозӣ нест. Мақсади он — ҳамон қадар донишро додан, ки барои хондан ва иҷро кардани мисолҳои китоб лозим аст.

Б.1. Омода кардани муҳит

Барои иҷрои мисолҳо ду роҳ ҳаст:

  1. Google Colab — дафтарчаи Python дар браузер, ки бе насб кор мекунад ва барои муддати маҳдуд протсессори графикӣ (GPU)-и ройгон медиҳад. Барои оғоз роҳи осонтарин аст.
  2. Компютери худ. Python-и версияи 3.10 ё навтарро насб кунед ва барои ҳар лоиҳа муҳити алоҳида (Virtual Environment) созед:
python3 -m venv .venv  
source .venv/bin/activate          # дар Windows: .venv\Scripts\activate  
pip install torch "transformers>=4.41,<5" datasets numpy  

Муҳити алоҳида китобхонаҳои ҳар лоиҳаро аз лоиҳаҳои дигар ҷудо нигоҳ медорад. Мисолҳои китоб бо версияи 4-и Transformers навишта шудаанд; маҳдудияти <5 нигоҳ медорад, ки версияи 5, ки баъзе pipeline-ҳоро иваз кардааст, тасодуфан насб нашавад.

Б.2. Python дар як нигоҳ

Тағйирёбандаҳо ва навъҳо

name = "Тоҷикистон"     # str — сатр  
year = 1991             # int — адади бутун  
pi = 3.14               # float — адади даҳӣ  
ok = True               # bool — ҳа/не

print(len(name))        # 10  
print(name.upper())     # ТОҶИКИСТОН  
print(name[:4])         # Тоҷи  

Python матни тоҷикиро бе мушкил коркард мекунад: сатрҳо дар Python 3 дар Unicode нигоҳ дошта мешаванд.

Рӯйхат ва луғат

cities = ["Душанбе", "Хуҷанд", "Бохтар"]   # list — рӯйхат  
cities.append("Кӯлоб")  
print(cities[0], cities[-1])               # Душанбе Кӯлоб

population = {"Душанбе": 1_000_000, "Хуҷанд": 200_000}   # dict — луғат  
population["Бохтар"] = 120_000  
for city, n in population.items():  
    print(f"{city}: {n:,}")  

Сатрҳое, ки бо f"..." оғоз мешаванд (f-string), қимати тағйирёбандаҳоро дар дохили {} ҷой медиҳанд.

Функсия ва рӯйхатсозии кӯтоҳ

def word_count(text):  
    """Шумораи калимаҳои матнро бармегардонад."""  
    return len(text.split())

print(word_count("Забони тоҷикӣ забони давлатӣ аст."))   # 5

lengths = [len(c) for c in cities]                  # [7, 6, 6, 5]  
long_ones = [c for c in cities if len(c) > 5]       # ['Душанбе', 'Хуҷанд', 'Бохтар']  

Шакли [... for ... in ...] (List Comprehension) дар коди машинаомӯзӣ хеле зиёд вомехӯрад.

Кор бо файлҳо

with open("matn.txt", "w", encoding="utf-8") as f:  
    f.write("Салом, ҷаҳон!\nИн сатри дуюм аст.\n")

with open("matn.txt", encoding="utf-8") as f:  
    for i, line in enumerate(f, start=1):  
        print(i, line.strip())  

Эзоҳ: Барои матни тоҷикӣ ҳамеша encoding="utf-8"-ро нишон диҳед. Бе он, дар баъзе системаҳо (хусусан Windows) Python рамзгузории дигарро истифода мебарад ва ҳарфҳои «ӣ, ӯ, ҳ, қ, ҷ, ғ» вайрон мешаванд ё хато рух медиҳад.

Синф

Моделҳои PyTorch ҳамчун синф (Class) навишта мешаванд, барои ҳамин сохтори онро донистан лозим аст:

class Counter:  
    def __init__(self):          # ҳангоми сохтани объект иҷро мешавад  
        self.counts = {}

    def add(self, word):         # усул (Method)  
        self.counts[word] = self.counts.get(word, 0) + 1

c = Counter()  
for w in "ман ту ман ӯ ман".split():  
    c.add(w)  
print(c.counts)                  # {'ман': 3, 'ту': 1, 'ӯ': 1}  

self ба худи объект ишора мекунад. Ҳамаи қиматҳое, ки ба self.номи_чизе нигоҳ дошта мешаванд, дар тамоми усулҳои объект дастрасанд.

Б.3. NumPy

NumPy — китобхонаи асосии Python барои кор бо массивҳои ададӣ. PyTorch бисёр ғояҳои онро такрор мекунад.

import numpy as np

x = np.array([[1, 2, 3],  
              [4, 5, 6]])  
print(x.shape)            # (2, 3) — 2 сатр, 3 сутун

print(x.sum())            # 21 — ҳамаи унсурҳо  
print(x.sum(axis=0))      # [5 7 9] — аз рӯи сутунҳо  
print(x.sum(axis=1))      # [ 6 15] — аз рӯи сатрҳо

print(x * 10)             # ҳар унсур зарб ба 10  
print(x @ x.T)            # зарби матритсаҳо: (2×3) @ (3×2) = (2×2)  

Ду мафҳуми муҳим:

  • shape — андозаҳои массив. Ҳангоми хато аввал shape-ро чоп кунед.
  • Паҳншавӣ (Broadcasting) — массивҳои андозаашон гуногун худкор «васеъ» мешаванд. Масалан, x + np.array([100, 200, 300]) вектори сеандозаро ба ҳар сатри x ҷамъ мекунад.

Б.4. PyTorch

PyTorch — китобхонаест, ки қариб ҳамаи мисолҳои ин китоб бо он навишта шудаанд. Ду фарқи асосии он аз NumPy: тензорҳо метавонанд дар GPU ҳисоб шаванд ва PyTorch градиентҳоро худкор ҳисоб мекунад.

Тензорҳо

import torch

t = torch.tensor([[1.0, 2.0], [3.0, 4.0]])  
print(t.shape, t.dtype)          # torch.Size([2, 2]) torch.float32

torch.zeros(2, 3)                # тензори сифрҳо  
torch.ones(2, 3)                 # тензори якҳо  
torch.randn(2, 3)                # ададҳои тасодуфӣ

print(t @ t)                     # зарби матритсаҳо: [[7, 10], [15, 22]]  
print(t * t)                     # зарби унсур ба унсур: [[1, 4], [9, 16]]  

Фарқи @ ва *-ро дар хотир доред: @ зарби матритсаҳост (А.3), * — зарби унсурҳои мувофиқ.

Тағйири шакл

Дар коди моделҳо тензорҳо доимо шакли худро иваз мекунанд (масалан, дар таваҷҷуҳи чандсарӣ, боби 4):

a = torch.arange(6)              # tensor([0, 1, 2, 3, 4, 5])  
a.view(2, 3)                     # [[0, 1, 2], [3, 4, 5]]

b = torch.randn(4, 8, 16)        # баста × токенҳо × андоза  
b.transpose(1, 2).shape          # torch.Size([4, 16, 8])  
b.unsqueeze(0).shape             # torch.Size([1, 4, 8, 16])  
b[:, 0, :].shape                 # torch.Size([4, 16]) — токени аввали ҳар ҷумла  

Дастгоҳ: CPU ё GPU

device = "cuda" if torch.cuda.is_available() else (  
         "mps" if torch.backends.mps.is_available() else "cpu")  
t = t.to(device)  

cuda — GPU-ҳои NVIDIA, mps — протсессорҳои Apple. Ҳамаи тензорҳо ва модел бояд дар як дастгоҳ бошанд; вагарна PyTorch хато медиҳад.

Ҳисоби худкори градиент (Autograd)

w = torch.tensor(3.0, requires_grad=True)  
loss = (w - 5) ** 2  
loss.backward()  
print(w.grad)                    # tensor(-4.) — яъне 2·(3 − 5)

with torch.no_grad():            # ҳангоми истифода градиент лозим нест  
    y = w * 2  
print(y.requires_grad)           # False  

requires_grad=True ба PyTorch мегӯяд, ки амалҳоро бо ин тензор сабт кунад. backward() бо қоидаи занҷирӣ (А.7) градиентҳоро ҳисоб мекунад ва ба .grad менависад. Дар torch.no_grad() амалҳо сабт намешаванд — ин хотира ва вақтро сарфа мекунад.

Модел ҳамчун nn.Module

Ҳар модели PyTorch синфест, ки аз nn.Module мерос мегирад. Қабатҳо дар __init__ сохта мешаванд ва ҳисоб дар forward навишта мешавад:

import torch.nn as nn

class TinyClassifier(nn.Module):  
    """Ҷумларо ба яке аз n_classes синф гурӯҳбандӣ мекунад."""

    def __init__(self, vocab_size, dim, n_classes):  
        super().__init__()  
        self.embed = nn.Embedding(vocab_size, dim)   # ID-и токен → вектор  
        self.out = nn.Linear(dim, n_classes)         # вектор → логитҳо

    def forward(self, ids):              # ids: (баста, токенҳо)  
        vectors = self.embed(ids)        # (баста, токенҳо, dim)  
        sentence = vectors.mean(dim=1)   # (баста, dim) — миёнаи токенҳо  
        return self.out(sentence)        # (баста, n_classes)

model = TinyClassifier(vocab_size=1000, dim=32, n_classes=3)  
ids = torch.randint(0, 1000, (4, 10))    # 4 ҷумла, 10 токенӣ  
print(model(ids).shape)                  # torch.Size([4, 3])  
print(sum(p.numel() for p in model.parameters()))   # 32099  

Ба шарҳҳои шакл (# (баста, токенҳо, dim)) диққат диҳед. Навиштани онҳо дар коди худ одати хеле фоиданок аст.

Давраи омӯзиш бо DataLoader

DataLoader маълумотро ба бастаҳо тақсим ва омехта мекунад. Давраи омӯзиш ҳамон панҷ қадами боби 3 аст:

from torch.utils.data import DataLoader, TensorDataset

X = torch.randint(0, 1000, (256, 10))    # 256 ҷумлаи сохта  
y = torch.randint(0, 3, (256,))          # нишонаи синфи ҳар ҷумла  
loader = DataLoader(TensorDataset(X, y), batch_size=32, shuffle=True)

optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)  
loss_fn = nn.CrossEntropyLoss()

for epoch in range(3):  
    model.train()  
    total = 0.0  
    for batch_ids, batch_y in loader:  
        logits = model(batch_ids)            # 1. гузариши мустақим  
        loss = loss_fn(logits, batch_y)      #    ҳисоби хато  
        optimizer.zero_grad()                # 2. тоза кардани градиентҳои кӯҳна  
        loss.backward()                      # 3. гузариши баръакс  
        optimizer.step()                     # 4. навсозии вазнҳо  
        total += loss.item()  
    print(f"давраи {epoch}: талафот {total / len(loader):.3f}")  

Дар ин мисол маълумот тасодуфӣ аст, барои ҳамин талафот танҳо каме паст мешавад (тақрибан аз 1,12 то 1,11). Бо маълумоти воқеӣ он хеле зудтар кам мешавад.

Истифода ва нигоҳ доштан

model.eval()                             # ҳолати истифода (масалан, Dropout хомӯш)  
with torch.no_grad():  
    pred = model(X[:5]).argmax(dim=-1)   # синфи эҳтимолтарин барои 5 ҷумла

torch.save(model.state_dict(), "model.pt")          # нигоҳ доштани вазнҳо

model2 = TinyClassifier(1000, 32, 3)  
model2.load_state_dict(torch.load("model.pt"))      # бор кардан  

Б.5. Хатоҳои маъмул

Хато ё нишонаСабабИслоҳ
mat1 and mat2 shapes cannot be multiplied (2x8 and 16x4)Андозаи вуруд ба андозаи қабат мувофиқ нестshape-ро чоп кунед; андозаҳои nn.Linear-ро санҷед (А.3)
Expected all tensors to be on the same device (дар CUDA) ё ... is on cpu but expected on mps (дар Apple)Модел дар GPU, маълумот дар CPU (ё баръакс)Ҳамаро бо .to(device) ба як дастгоҳ баред
expected scalar type Long but found Float ё Expected tensor for argument #1 'indices' to have one of the following scalar types: Long, IntНавъи тензор нодуруст аст: ID-ҳои токенҳо ё нишонаҳои синф ҳамчун float дода шудаандID-ҳо ва нишонаҳоро бо .long() ба адади бутун табдил диҳед
Талафот кам намешавад ё nan мешавадСуръати омӯзиш хеле калон, ё zero_grad() фаромӯш шудаастlr-ро 10 маротиба кам кунед; zero_grad()-ро санҷед
CUDA out of memoryМодел ё баста ба хотираи GPU ҷой намешавадbatch_size-ро кам кунед; квантонӣ ё LoRA (бобҳои 7, 13)
Натиҷаҳо дар ҳар иҷро гуногунандАдадҳои тасодуфӣtorch.manual_seed(0) дар аввали скрипт
Ҳарфҳои тоҷикӣ вайронРамзгузории файлencoding="utf-8" (Б.2)

Б.6. Ба сӯи Hugging Face

Дар бобҳои 5–16 мо моделҳои тайёрро аз Hugging Face Hub истифода мебарем. Се синфи асосӣ:

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

tokenizer = AutoTokenizer.from_pretrained("номи-модел")        # токенсоз (боби 2)  
model = AutoModelForCausalLM.from_pretrained("номи-модел")     # модел (бобҳои 4–5)  
generator = pipeline("text-generation", model="номи-модел")    # ҳарду якҷоя (боби 5)  

Модели Hugging Face ҳамон nn.Module аст: ҳамаи он чи дар ин замима омӯхтед — тензорҳо, shape, to(device), no_grad, state_dict — бо он низ кор мекунад.

Замимаи В. Луғати истилоҳот (тоҷикӣ — англисӣ)

Дар ин луғат истилоҳоти асосии китоб бо муодили англисӣ ва рақами бобе, ки дар он шарҳ дода шудаанд, оварда шудаанд. Ҳарфҳои «А» ва «Б» дар сутуни «Боб» ба замимаҳо ишора мекунанд.

Барои баъзе мафҳумҳо дар адабиёти тоҷикӣ ҳоло истилоҳи ягона қабул нашудааст. Дар чунин ҳолатҳо шакли асосии ин китоб аввал омадааст ва шаклҳои дигаре, ки хонанда метавонад вохӯрад, пас аз калимаи «ҳамчунин» оварда шудаанд. Истилоҳоти англисӣ, ки дар тоҷикӣ бетағйир истифода мешаванд (масалан, RAG, LoRA, BERT), дар матни бобҳо шарҳ дода шудаанд.

А

ИстилоҳEnglishБоб
абзорtool12
агентagent12
адаптерadapter7
аз нав тартиб доданreranking11
андешаронӣreasoning8, 10
андозаи бастаҳоbatch size6
арзёбии инсонӣhuman evaluation14
арзёбӣevaluation14
арзишvalue (V)4

Б

ИстилоҳEnglishБоб
бастабандии пайвастаcontinuous batching13
бастабандӣbatching13
бастаҳоmini-batches, batches3, 4
бе мисолzero-shot10
бо чанд мисолfew-shot10

В

ИстилоҳEnglishБоб
вазнweight3
вазнҳои таваҷҷуҳattention weights4
васеъ кардани луғатvocabulary extension16
векторvector2, А
вектори контекстcontext vector3, 4

Г

ИстилоҳEnglishБоб
галлюсинатсия; ҳамчунин: тавлиди маълумоти сохтаhallucination11, 14
гиперпараметрҳоhyperparameters5
градиентgradient3, А
гузариши баръаксbackward pass3
гузариши мустақимforward pass3
гурӯҳбандӣclassification1, 5

Ғ

ИстилоҳEnglishБоб
ғаразнокӣbias14

Д

ИстилоҳEnglishБоб
давр задани маҳдудиятҳоjailbreak14
давраepoch3
даври агентagent loop12
дарвозаgate3
дарозии контекстcontext length9
дархостquery (Q)4
дастури системаsystem prompt10
декодкунии пешгӯёнаspeculative decoding13
дониши параметрӣparametric knowledge11
дусамтаbidirectional5

З

ИстилоҳEnglishБоб
занҷираи андешаронӣchain-of-thought, CoT10
зарби скалярӣdot product4, А
зерикалимавӣsubword2
зеҳни сунъии тавлидӣgenerative AI1
зеҳни сунъӣartificial intelligence, AI1

И

ИстилоҳEnglishБоб
индексатсияindexing11
истифодаи абзорҳоtool use, function calling12
истихроҷи ҷавоб аз матнextractive question answering5

К

ИстилоҳEnglishБоб
калидkey (K)4
камманбаъlow-resource (language)16
квантонӣquantization13
коркарди забони табиӣnatural language processing, NLP1
корти моделmodel card16
коршиносонexperts (MoE)13
кэши калидҳо ва арзишҳоKV cache4, 13

Қ

ИстилоҳEnglishБоб
қабатlayer3
қабатҳои ниҳонӣhidden layers3
қобилиятҳои зуҳуркунандаemergent abilities6
қоидаи занҷирӣchain rule3, А
қолаби суҳбатchat template10
қонунҳои миқёспазирӣscaling laws6

Л

ИстилоҳEnglishБоб
логитlogit4, 9
луғатvocabulary2, 4

М

ИстилоҳEnglishБоб
матнҳои мувозӣparallel corpora16
матритсаmatrixА
маҷбурсозии омӯзгорteacher forcing3
маҷмӯаи санҷишӣbenchmark14
механизми таваҷҷуҳattention mechanism4
меъёрсозии қабатӣlayer normalization4
меъморӣarchitecture4
модел ҳамчун доварLLM-as-a-Judge14
модели асосӣbase model8
модели бузурги забонӣlarge language model, LLM1
модели мукофотreward model8
моделсозии забонии ниқобшудаmasked language modeling, MLM5
моделсозии забонии сабабӣcausal language modeling, CLM5
моделҳои андешаронӣreasoning models8
монандии косинусӣcosine similarity11, А
мутобиқсозӣalignment8
мутобиқшавии аз ҳад зиёдoverfitting4
муҳандисии промптprompt engineering10
мӯътадилсозӣnormalization (text)11, 16

Н

ИстилоҳEnglishБоб
намунагирии ядроӣnucleus (top-p) sampling9
намунагирӣsampling9
нейрони сунъӣartificial neuron3
нестшавии градиентvanishing gradient3
ниқоби таваҷҷуҳattention mask4
ниқоби таваҷҷуҳи сабабӣcausal attention mask4
нишондиҳандаmetric11, 12, 13, 14, 16
нуқтаи назоратӣcheckpoint4

О

ИстилоҳEnglishБоб
олудашавии маълумотdata contamination14
омехтаи коршиносонmixture of experts, MoE5, 13
омӯзишtraining3
омӯзиш дар дохили контекстin-context learning1, 10
омӯзиши амиқdeep learning1
омӯзиши баъдӣpost-training8
омӯзиши интиқолӣtransfer learning5, 7
омӯзиши назоратшавандаsupervised learning5, 7
омӯзиши пешакии давомдорcontinued pre-training7, 16
омӯзиши пешакӣpre-training6
омӯзиши тақвиятӣreinforcement learning8
омӯзиши тақвиятӣ аз бозхӯрди инсонRLHF8
омӯзиши худназоратӣself-supervised learning5, 6

П

ИстилоҳEnglishБоб
пайвастҳои боқимондаresidual connections4
пайдарпайиҳои боздорандаstop sequences9
параметрparameter1
паҳншавии баръакси хатоbackpropagation3, А
печидагӣperplexity14, А
пойгоҳи маълумоти векторӣvector database11
порчаchunk11
промптprompt10

Р

ИстилоҳEnglishБоб
равзанаи контекстcontext window1
рамзгузорencoder3, 4, 5
рамзгузории мавқеии даврзанандаrotary positional embedding, RoPE4, 13
рамзгузории мавқеӣpositional encoding4
рамзгузор–рамзкушоencoder–decoder3, 5
рамзкушоdecoder3, 4, 5

С

ИстилоҳEnglishБоб
санҷиши ҳуҷумӣred-teaming8, 14
сари таваҷҷуҳattention head4
скалярscalarА
стратегияи декодкунӣdecoding strategy9
суръати омӯзишlearning rate3, А

Т

ИстилоҳEnglishБоб
таваҷҷуҳattention4
таваҷҷуҳи байнипайдарпайӣcross-attention4
таваҷҷуҳи равзанаи лағжандаsliding window attention5, 13
таваҷҷуҳи чандсарӣmulti-head attention4
тавлиди матнtext generation9
тавлиди тақвиятёфта бо ҷустуҷӯretrieval-augmented generation, RAG11
тазриқи ғайримустақими промптindirect prompt injection11, 14
тазриқи промптprompt injection10, 14
такрорзудоӣdeduplication6, 16
тақсими ҳуҷҷатҳо ба порчаҳоchunking11
тақсимоти эҳтимолҳоprobability distribution9, А
танзими дақиқfine-tuning7
танзими дақиқ бо самаранокии параметрҳоparameter-efficient fine-tuning, PEFT7
танзими дастурӣinstruction tuning7, 8
танзими пурраfull fine-tuning7
тафсирпазирӣinterpretability15
тензорtensorА, Б
токенtoken2
токенсозtokenizer2
токенсозӣtokenization2

Ф

ИстилоҳEnglishБоб
фаромӯшии фалокатборcatastrophic forgetting7, 16
функсияи softmaxsoftmax4, 9, А
функсияи фаъолсозӣactivation function3
функсияи хатоloss function3, А
фуромади градиентӣgradient descent3, А

Х

ИстилоҳEnglishБоб
худрегрессивӣautoregressive5, 9
худтаваҷҷуҳӣself-attention4
хусусиятfeature15

Ҳ

ИстилоҳEnglishБоб
ҳароратtemperature9
ҳиссаи хатои калимаҳоword error rate, WER16
ҳифзкунандаҳоguardrails14
ҳолати ниҳонӣhidden state3, 4
ҳосилаderivativeА

Ҷ

ИстилоҳEnglishБоб
ҷавоби сохторёфтаstructured output10
ҷустуҷӯи омехтаhybrid search11
ҷустуҷӯи ҳарисонаgreedy search9
ҷустуҷӯи чандмасираbeam search9

Ш

ИстилоҳEnglishБоб
шабакаи нейронии такроршавандаrecurrent neural network, RNN3
шабакаи нейронӣneural network3
шабакаи пешравfeed-forward network4
шинохти худкори нутқautomatic speech recognition, ASR5, 16

Э

ИстилоҳEnglishБоб
эмбеддингembedding2, 4, 11, 16
эмбеддингҳои контекстӣcontextual embeddings2
энтропияи салибӣcross-entropy3, А
пешина
аз 18