חזרה למחברת
AI12 דקות קריאה

איך ליצור מודל שפה: להבין את הדרך ולאמן מודל קטן

מה LLM לומד, מתי לבחור RAG או התאמה ומה כולל אימון מאפס. אימון, מדידה ושמירה של מודל עצבי מקורי קטן.

מה פירוש ליצור LLM משלי?

שימוש במודל קיים עם הוראות יוצר יישום סביבו. RAG מוסיף מסמכים בזמן השאלה. fine-tuning משנה משקלים של מודל קיים. אימון מאפס מתחיל במשקלים אקראיים. אלו מטרות ועלויות שונות.

כאן תלמדו את האפשרויות ותאמנו באמת רשת שפה זעירה במחשב: חיזוי תווים, שמירת משקלים ויצירת טקסט. זה MLP לימודי, לא Transformer גדול או עוזר צ׳אט שימושי. המטרה היא לראות נתונים, חיזוי, שגיאה, עדכון ותוצאה מדידה ולא לבלבל עטיפת API עם מודל שאימנתם.

1. לבחור לפי הצורך

למדריכים משתנים התחילו בהערכת RAG. לפורמט עקבי או התנהגות ייעודית שקלו פרומפטים או fine-tuning; הם אינם מבטיחים אמת. להבנת המנגנון מתאים הניסוי הקטן. LLM כללי בייצור הוא פרויקט מחקר ותשתית גדול בהרבה.

עוזר אירועים צריך הוראות עדכניות ומקורות. מסווג כרטיסים ל-JSON יכול להתחיל בפרומפט ואימות. שחזור יכולת חשיבה רב-לשונית ממשקלים אקראיים אינו התוצר כאן. הגדירו משימה מדידה לפני בחירת GPU.

2. המושגים הבסיסיים

טוקנייזר ממפה טקסט למזהים; כאן מזהה לכל תו. embedding הופך מזהה למספרים נלמדים. פרמטרים הם המספרים שמתעדכנים. ההקשר הוא ההיסטוריה הגלויה. logits עוברים softmax להסתברויות, והפסד מעניש הסתברות נמוכה לתו הבא האמיתי. גרדיאנטים מורים כיצד להפחית שגיאה.

batch הוא קבוצת דוגמאות, צעד הוא עדכון ו-epoch הוא מעבר על הנתונים. כאן דוגמים קבוצות, לכן 400 צעדים אינם 400 מעברים. checkpoint שומר משקלים; הסקה משתמשת בהם בלי לשנותם. דגימה משנה גיוון ולא מוסיפה ידע.

3. מסלול אימון מלא

הגדירו משימה והערכה, אספו נתונים עם זכויות, הסירו מידע רגיש וכפילויות ופצלו לאימון/אימות/בדיקה ללא חפיפה. בחרו טוקנייזר וארכיטקטורה, חשבו זיכרון וחישוב, עקבו אחר הפסד, שמרו גרסאות ובדקו על נתונים שלא שימשו לאימון. תעדו קוד, נתונים ותצורה.

עוזר שימושי עשוי להזדקק לאימון הוראות, יישור והערכת בטיחות. שירות דורש אימות, מגבלות וניטור. אין תקציב קבוע: גודל, טוקנים, אופטימייזר, דיוק, רצף וחומרה משפיעים. אין כאן הבטחת LLM ייצור במחיר קבוע.

4. מה יש במודל שבקובץ

המודל המקורי משתמש בהקשר של שמונה תווים, embedding בגודל 12, שכבת tanh עם 48 יחידות ופלט על אוצר התווים. בקורפוס הנתון יש 6,303 פרמטרים. NumPy ו-CPU מספיקים ועדכוני הגרדיאנטים גלויים. אין attention או Transformer.

הקורפוס הוא כמה משפטים מקוריים פיקטיביים. הבדיקות בוחנות ירידת הפסד אימון, הסתברויות סופיות שסכומן אחד, שגיאה לתו לא מוכר ושחזור חיזוי אחרי שמירה. הן אינן בוחנות ידע כללי.

5. התקנה, אימון ושמירה

חלצו לתיקייה חדשה. נדרשים Python 3.9+ ו-NumPy. ההתקנה פונה למאגר חבילות; האימון אינו צריך הורדת מודל, חשבון, מפתח או GPU. מותר NumPy 2.x ומספרים יכולים להשתנות מעט.

הריצו בדיקות ואז model.py. תקבלו מספר פרמטרים, הפסד ודוגמה, ו-tiny-model.npz יישמר בתיקייה הנוכחית. התחילו בקורפוס הנתון. אם מחליפים אותו, שמרו רווח באוצר לצורך ריפוד ובדקו זכויות. אל תשתמשו בסודות או שיחות פרטיות.

bash
# Python 3.9+; create an isolated environment in the extracted folder.
python3 -m venv .venv
# macOS/Linux (Windows: .venv\Scripts\activate)
. .venv/bin/activate
python -m pip install -r requirements.txt
python -m unittest discover -p 'test_*.py'
python model.py --steps 400
# Output checkpoint: tiny-model.npz

6. פירוש המדידה

בהרצה המקומית ירד ההפסד מכ-3.3004 ל-0.9185 אחרי 400 צעדים. המודל משתפר בחיזוי תווי האימון, אבל הטקסט עדיין חסר היגיון. זו מגבלת התרגיל.

ההפסד נמדד על אותם נתוני אימון, ללא טענה להכללה. שינון יכול להיראות כהצלחה. עוד צעדים עלולים להגדיל התאמת יתר. בהמשך הכינו ערכת אימות נפרדת והשוו שני הפסדים ואותם תחילי טקסט. הפסד נמוך אינו אמת או שימושיות.

Example and interpretation
Measured local run, seed 7, supplied corpus, 400 training steps:
parameters: 6303
training_loss_before: 3.3004
training_loss_after: 0.9185
sample begins: seatimin whean sert tes s vitg ...

Interpretation: the model learned local character patterns.
It still produces nonsense and has not demonstrated general knowledge.
These are training-set measurements, not held-out quality scores.

7. טעינה ויצירה הן הסקה

טוענים משקלים ודוגמים תו אחר תו בלי עדכון. חלון שמונה התווים נע. תו לא מוכר גורר שגיאה ברורה. קובץ NumPy נטען ללא pickle, אך עדיין יש לבדוק מקור ואמינות של קובצי מודל.

python
# The training objective: predict the NEXT character.
# Input:  "seating "
# Target: the following character in the training text.
# In the supplied model, each input contains exactly 8 characters.

# Generation uses the last 8 characters to predict a distribution,
# samples one character, appends it, then repeats.
from model import load
model = load("tiny-model.npz")
print(model.generate("seat", count=120, seed=42))

7ב. שימוש במודל מיישום מקומי

אחרי model.py נוצר tiny-model.npz. השרת Python המצורף טוען משקלים ומגיש POST /generate מקומי. שולחים prefix="seat" ו-count=40 ומקבלים generated_text ו-educational=true. זה טקסט לימודי ולא עצה אמינה.

האימון נשאר ב-Python/NumPy. ארבע הלשוניות קוראות לאותו מודל ולא מאמנות אותו ב-PHP או בדפדפן. השרת מיועד ל-localhost, מגביל קלט ואינו מאזין לציבור. ייצור דורש מסגרת מתאימה, אימות ותפעול.

bash
# First train the model with the instructions above.
# Keep your Python virtual environment active.
python server.py
# Keep this terminal open. The API listens only on 127.0.0.1:8765.
# Browser demo: open http://127.0.0.1:8765/

# In ANOTHER terminal, from this same project folder:
# Choose your client (Python needs the same environment).
python client.py
# OR: Node.js 22+
node client.mjs
# OR: PHP 8.1+ with HTTP URL wrappers enabled
php client.php

7ג. בחירת שפת הלקוח

בחרו לשונית והריצו את הקובץ המתאים. Python, Node.js ו-PHP קוראים לכתובת המקומית המלאה. JavaScript בדפדפן פועל בדף http://127.0.0.1:8765/ שהשרת מגיש; /generate הוא מאותו מקור. אל תדביקו באתר אחר. פתחו הדגמה ולחצו Generate 40 characters.

כל הלקוחות שולחים JSON זהה ומקבלים מדגם קבוע. educational=true אינו הוכחת הבנה. אם אין חיבור בדקו אימון, שרת ופורט 8765. תו לא מוכר או count מחוץ ל-1..200 מחזירים שגיאה ברורה.

קריאה למודל שאימנתם
import json
from urllib.request import Request,urlopen
request=Request('http://127.0.0.1:8765/generate',
 data=json.dumps({'prefix':'seat','count':40}).encode(),
 headers={'Content-Type':'application/json'},method='POST')
with urlopen(request,timeout=10) as response:
 result=json.load(response)
print(json.dumps(result,indent=2))
Measured local response after 400 training steps
{
  "model": "tiny-character-mlp",
  "educational": true,
  "generated_text": "seatimin whean sert tes s vitg bemovge peans"
}

8. הקשר ל-Transformer אמיתי

Transformer אוטורגרסיבי חוזה את הטוקן הבא בארכיטקטורה עמוקה ונתונים רבים. attention משלב מידע ממיקומים מותרים ומסכה סיבתית חוסמת מידע עתידי. יש גם מידע מיקום, שכבות הזנה קדימה, קיצורי דרך ונרמול. ה-MLP שלנו אינו מימוש מלא מוקטן שלהם.

המשיכו ל-Transformer סיבתי נפרד עם בדיקות מסכה וטנזורים או לקורס Stanford. למוצר בדקו מודל מאומן מראש ברישיון מתאים. LoRA משנה חלק מהמשקלים בעדכונים נמוכי דרגה ולא יוצר מודל יסוד מאפס. בדקו זכויות והערכה לפני פרסום.

9. AI כמורה וכמבקר ניסוי

הפרומפט הראשון מבקש להסביר קוד ולהריץ ניסוי עם מדידות ודוגמה. טענה שיצרתם ChatGPT משלכם תהיה מטעה. השני מגדיר תכנון התאמה אמיתי ומונע התחלת אימון יקר בלי היקף מוסכם.

English AI prompt
Act as a patient machine-learning teacher. Inspect this tiny NumPy character
language model and explain its data flow before modifying anything.
Identify the vocabulary, eight-character context, embeddings, hidden layer,
softmax probabilities, next-character targets, loss and gradient update.
Run the local tests, train with 400 steps, save the checkpoint and reload it.
Report actual parameter count, training loss before/after and a generated sample.
Explain why reduced training loss is not evidence of held-out quality or truth.
Do not describe this 6,303-parameter educational MLP as a large Transformer,
a chat assistant or a production LLM. Do not download a model or private dataset.
Propose one next learning experiment with a measurable success criterion.

10. התוצר והמשך סביר

אימנתם משקלים מאפס, מדדתם, שמרתם, טענתם ויצרתם טקסט. אתם מבחינים בין מודל, יישום, RAG והתאמה. שנו גורם אחד עם נתוני בדיקה נפרדים והשוו לבסיס. לעוזר עסקי השוו מודלים קיימים ו-RAG לפי צורך המשתמש.

English AI prompt
Before proposing a REAL model adaptation, ask for the task, licensed base model,
data rights, deployment language, evaluation set, hardware and budget.
Compare RAG, prompting, LoRA fine-tuning and training from scratch for that task.
If fine-tuning is justified, propose an isolated reproducible experiment:
base-model revision, tokenizer, non-overlapping train/validation/test splits,
training configuration, checkpoint policy, metrics and comparison with baseline.
Include privacy leakage, memorization and unsupported-answer evaluations.
State estimates and untested assumptions explicitly. Do not start an expensive
training job, publish weights or use private data without the agreed scope.

מקורות רשמיים והמשך לימוד

מכאן לפרויקט שלכם

הורידו את הקבצים, שמרו את המדריך או תנו לעוזר הפיתוח תיאור משימה מוכן.

מכינים את הפרויקט עם AI

העתיקו את הפרומפט באנגלית לעוזר הפיתוח. הוא כולל את המאמר, הקבצים הזמינים ושלבי ההכנה.

הצגת פרומפט ההכנה
AI setup prompt · English
Read this tutorial as reference material:
https://nethanelfitoussi.com/article/create-language-model-explained?lang=en

Goal: apply the documented workflow to my development project.
Read the existing project instructions, inspect the relevant files and explain the smallest useful setup.

Available starter files:
https://nethanelfitoussi.com/api/media/08d5b33c-5d92-4495-ae4a-729eb570d94d.zip
Download and inspect these files in a temporary folder before using them. Do not overwrite existing project instructions.

If I have not supplied a project folder, ask which development project to use. Do not invent a repository URL.

Additional project setup instructions:
Extract the supplied ZIP into a NEW folder. Read README.md before installing or running code.

Act as a patient machine-learning teacher. Inspect this tiny NumPy character
language model and explain its data flow before modifying anything.
Identify the vocabulary, eight-character context, embeddings, hidden layer,
softmax probabilities, next-character targets, loss and gradient update.
Run the local tests, train with 400 steps, save the checkpoint and reload it.
Report actual parameter count, training loss before/after and a generated sample.
Explain why reduced training loss is not evidence of held-out quality or truth.
Do not describe this 6,303-parameter educational MLP as a large Transformer,
a chat assistant or a production LLM. Do not download a model or private dataset.
Propose one next learning experiment with a measurable success criterion.

Before proposing a REAL model adaptation, ask for the task, licensed base model,
data rights, deployment language, evaluation set, hardware and budget.
Compare RAG, prompting, LoRA fine-tuning and training from scratch for that task.
If fine-tuning is justified, propose an isolated reproducible experiment:
base-model revision, tokenizer, non-overlapping train/validation/test splits,
training configuration, checkpoint policy, metrics and comparison with baseline.
Include privacy leakage, memorization and unsupported-answer evaluations.
State estimates and untested assumptions explicitly. Do not start an expensive
training job, publish weights or use private data without the agreed scope.

Adapt example paths, commands and acceptance criteria to this repository rather than assuming they match.

Give me a short plan, then make the agreed local changes and run the relevant checks. Report actual results and anything not verified. Stop before credentials, paid services, production changes, push, merge or deployment.
LLMAIMachine learningPython