Fine-Tuning של LLM
— ומתי בכלל צריך
לפני שאתה מכוונן מודל — עצור. ב-90% מהמקרים prompting טוב או RAG יפתרו את הבעיה מהר וזול יותר. אבל כשבאמת צריך התנהגות עקבית, פורמט קבוע או סגנון ייחודי — fine-tuning הוא הכלי. במדריך: מתי לכוונן ומתי לא, מה זה LoRA ו-QLoRA, איך מכינים דאטהסט, ובאילו כלים.
מה כיוונון באמת עושה
Fine-tuning הוא להמשיך לאמן מודל קיים על דוגמאות שלכם, כדי שהוא ילמד להתנהג בדרך מסוימת. לא לאמן מאפס — לקחת מודל שכבר יודע שפה ולהראות לו איך אתם רוצים שהוא יענה.
והנקודה שקובעת את כל השאר, כי היא הפוכה לציפייה הנפוצה: כיוונון מלמד התנהגות, לא ידע.
המודל לומד דפוסים — מבנה תשובה, טון, סגנון, פורמט, איך לסווג. מה שהוא לא לומד באמינות הוא עובדות: מחירי המוצרים שלכם, מדיניות ההחזרות, מי הלקוחות. נתונים שהוזנו באימון עשויים לצוץ בתשובה, והם יצוצו גם מעוותים, גם חלקית, וגם כשהמציאות כבר השתנתה — ואין דרך לדעת מתי.
אם הבעיה שלכם מתחילה ב"המודל לא יודע ש..." — כיוונון אינו הפתרון. אם היא מתחילה ב"המודל לא עונה כמו ש..." — אולי כן.
שלושה דברים לנסות קודם
רוב מי שמגיע לכיוונון לא צריך אותו, ומגלה את זה אחרי שבועיים ואלפי דוגמאות. שלוש האפשרויות האלה זולות יותר, מהירות יותר, ומתקנות את עצמן — ובסדר הזה:
- הנחיה טובה יותר. נשמע מובן מאליו וזה המקום שבו רוב הבעיות נפתרות. הנחיה שמתארת במפורש את הטון, את המבנה ואת מה שאסור — עם שתיים-שלוש דוגמאות מלאות — משיגה חלק גדול ממה שכיוונון משיג, בעשר דקות במקום בשבועיים.
- שליפה. אם הבעיה היא שהמודל לא מכיר את התוכן שלכם — זו שליפה, לא אימון. היא זולה, מתעדכנת ברגע שמסמך משתנה, ואפשר להצביע על המקור.
- פלט מובנה. אם הבעיה היא שהתשובה לא בפורמט הנכון — אכיפת סכמה פותרת את זה בוודאות, ולא בהסתברות.
וכלל אצבע שחוסך הרבה: אם לא בניתם מערך הערכה, אתם עוד לא בשלים לכיוונון. בלי דרך למדוד, לא תדעו אם הכיוונון שיפר, לא תדעו מה נשבר בדרך, ולא תוכלו להצדיק את העלות.
מתי כיוונון כן מצדיק את עצמו
ויש מקרים כאלה. ארבעה, וכולם עוסקים בהתנהגות ולא בידע:
- סגנון עקבי שקשה לנסח. "תכתוב כמו שאנחנו כותבים" הוא דבר שקל להראות ב-500 דוגמאות וקשה להסביר בפסקה.
- פורמט מורכב וקבוע. כשהפלט צריך להיות במבנה ייחודי שהסבר בהנחיה לא מצליח לייצב.
- משימה צרה בנפח גבוה. סיווג שרץ מיליון פעם בחודש. כאן ההצדקה אינה איכות אלא עלות: מודל קטן ומכוונן יכול להשתוות למודל גדול במשימה הצרה הזו, בשבריר המחיר ובמהירות גבוהה יותר.
- הנחיה שהתנפחה. כשההנחיה הגיעה לאלפי טוקנים של כללים ודוגמאות ונשלחת בכל קריאה — כיוונון "מטמיע" חלק מזה ומקצר אותה. זו החלטה כלכלית.
שימו לב למה שמשותף לשלושת האחרונים: הם מצדיקים את עצמם בנפח. בנפח נמוך, הנחיה ארוכה וזולה תנצח כמעט תמיד.
הדאטהסט הוא כל העבודה
אם החלטתם לכוונן, כדאי לדעת איפה תלך רוב האנרגיה: לא באימון עצמו — באיסוף ובניקוי של הדוגמאות. האימון הוא פקודה; הדאטהסט הוא שבועות.
ארבעה כללים שקובעים את התוצאה:
- איכות מנצחת כמות, ובגדול. 500 דוגמאות שנבדקו ידנית שוות יותר מ-5,000 שנאספו אוטומטית. המודל ילמד בדיוק את מה שיש בדוגמאות — כולל את הטעויות, חוסר העקביות והתשובות הבינוניות.
- עקביות חשובה יותר מנפח. אם שתי דוגמאות דומות מקבלות תשובות בסגנון שונה, לימדתם את המודל שאין כלל. זו הסיבה הנפוצה ביותר לכיוונון שלא עובד.
- הדוגמאות חייבות להיראות כמו הקלט האמיתי. אם משתמשים כותבים קצר, עם שגיאות כתיב וניסוח חלקי — הדוגמאות צריכות להיראות כך. דאטהסט של שאלות מנוסחות יפה מלמד את המודל לטפל בשאלות שלא יגיעו.
- חלוקה לבדיקה, מההתחלה. הפרישו חלק מהדוגמאות ואל תאמנו עליהן. בלי זה לא תוכלו לדעת אם המודל למד או רק שינן.
ומאיפה משיגים אותן: מהייצור. אם יש לכם מערכת שרצה, התשובות שאושרו ידנית הן הדאטהסט הטוב ביותר שתמצאו — הן אמיתיות, הן בסגנון שלכם, והן כבר עברו שיפוט אנושי.
איך נראית דוגמה
הפורמט עצמו פשוט — שיחה, בדיוק כמו שהמודל יראה בייצור. מה שקובע הוא מה יש בתוכה:
{"messages": [
{"role": "system",
"content": "אתה מסווג פניות לשירות לקוחות."},
{"role": "user",
"content": "הזמנתי לפני שבועיים וזה עוד לא הגיע, אפשר לבטל?"},
{"role": "assistant",
"content": "{\"category\": \"cancellation\", \"urgency\": \"high\"}"}
]}
שלוש הערות שמשנות את התוצאה יותר מכל פרמטר אימון:
- הנחיית המערכת צריכה להיות זהה לזו שתשתמשו בה בייצור. אם תאמנו עם הנחיה אחת ותריצו עם אחרת, ביטלתם חלק מהלמידה.
- הקלט צריך להיראות כמו קלט אמיתי. בדוגמה למעלה יש משפט מרושל עם שתי שאלות — וזה טוב, כי כך אנשים כותבים. דאטהסט של "אני מבקש לבטל את הזמנתי" מלמד לטפל במה שלא יגיע.
- הפלט צריך להיות בדיוק מה שאתם רוצים, כולל הפורמט. המודל יחקה את זה בדיוק — ואם חלק מהדוגמאות מוסיפות הסבר וחלק לא, לימדתם אותו שזה אופציונלי.
LoRA: למה זה נגיש היום
כיוונון מלא מעדכן את כל משקלי המודל, דורש חומרה רצינית ומייצר עותק מלא. LoRA עושה משהו חכם יותר: הוא מקפיא את המודל המקורי ומאמן שכבה קטנה נוספת לצדו.
שלוש השלכות מעשיות:
- זה זול ומהיר. אפשר לכוונן מודל בינוני על כרטיס מסך אחד, בשעות ולא בימים.
- התוצר קטן. מגה-בייטים במקום גיגה-בייטים, ולכן אפשר להחזיק כמה התאמות לאותו מודל בסיס ולהחליף ביניהן — למשל התאמה אחת לסיווג ואחת לניסוח.
- וזה הפיך. אפשר לכבות את ההתאמה ולחזור למודל המקורי. במערכת שרצה זה שווה הרבה, כי כיוונון שהחמיר אינו אירוע שצריך לשחזר ממנו.
QLoRA לוקח את זה צעד נוסף ומאמן על מודל מכווץ, מה שמוריד עוד את דרישות הזיכרון — במחיר של מעט איכות. לרוב המקרים המעשיים, LoRA הוא ברירת המחדל הנכונה, וכיוונון מלא הוא מה שעושים כשהוכח שהוא נחוץ.
שלושת הפרמטרים שבאמת משנים
יש עשרות פרמטרים באימון, ורובם אפשר להשאיר בברירת המחדל. שלושה שכן שווה להבין, כי הם מסבירים את שני הכשלים הנפוצים:
- מספר הסבבים על הדאטהסט. מעט מדי — המודל לא למד. יותר מדי — הוא שינן, כלומר מצטיין על דוגמאות האימון ונכשל על חדשות. זה הכשל הנפוץ ביותר, וזו בדיוק הסיבה להפריש חלק מהדוגמאות מראש.
- קצב הלמידה. גבוה מדי — המודל "שוכח" יכולות שהיו לו קודם ומתנהג באופן מוזר במשימות אחרות. נמוך מדי — כמעט שום דבר לא השתנה. אם אחרי הכיוונון המודל נשמע שונה לרעה גם במה שלא אימנתם, זה החשוד הראשון.
- גודל ההתאמה ב-LoRA. קטן יותר לומד פחות ושומר טוב יותר על המודל המקורי. להתחיל קטן — קל להגדיל, ופחות קל לגלות שפגעתם במשהו.
וההרגל שחוסך ימים: הרצה קטנה קודם. מאתיים דוגמאות, סבב או שניים, ומדידה. זה לוקח דקות ומגלה את רוב הבעיות — פורמט שגוי, דוגמאות שנחתכו, דאטהסט לא עקבי — לפני שמשקיעים בהרצה מלאה.
מה זה באמת עולה
עלות האימון היא הסעיף הקטן, וזה מה שמפתיע. העלות האמיתית מחולקת לארבעה, ורק אחד מהם נמדד בשעות GPU:
- זמן אדם על הדאטהסט. הסעיף הגדול ביותר, כמעט תמיד. איסוף, ניקוי, סימון ובדיקת עקביות.
- אימון. עם LoRA — לרוב עשרות דולרים, לא אלפים.
- הרצה. וכאן שווה לשים לב: מודל מכוונן שרץ אצל ספק לעתים יקר יותר לטוקן מהמודל הבסיסי. הכלכלה עובדת כשהחסכתם בהנחיה או ירדתם בגודל המודל — לא אוטומטית.
- תחזוקה. הסעיף שנשכח: כשיוצא מודל בסיס טוב יותר, הכיוונון לא עובר אליו. צריך לחזור על התהליך, ובתחום שמתחלף בקצב הזה זה מצטבר.
ההשלכה התכנונית: כיוונון הוא התחייבות, לא שיפור חד-פעמי. כדאי להיכנס אליו כשהמשימה יציבה ולא צפויה להשתנות — ולא בשלב שבו עוד מגלים מה המערכת אמורה לעשות.
כמה דוגמאות באמת צריך
השאלה הראשונה שנשאלת, והתשובה תלויה במשימה יותר מאשר בגודל המודל:
- סיווג למספר קטגוריות מצומצם — מאות דוגמאות לרוב מספיקות, בתנאי שהן מכסות את כל הקטגוריות באיזון סביר. קטגוריה עם חמש דוגמאות לא תילמד.
- פורמט או מבנה קבוע — גם כאן מאות, כי הדפוס חזק וחוזר.
- סגנון וטון — יותר, כי הדפוס עדין. אלפים, ובעברית יותר.
ומה שחשוב מהמספר: להתחיל קטן. כוונו על מאתיים דוגמאות ומדדו לפני שאוספים אלפיים. אם מאתיים לא הזיזו כלום לכיוון הנכון, אלפיים בדרך כלל לא יצילו — בעיה בעקביות הדוגמאות לא נפתרת בכמות, היא מתעצמת בה.
וסימן מובהק שכדאי לזהות: אם בזמן שאתם מנקים את הדאטהסט אתם מתלבטים הרבה מה התשובה הנכונה — עצרו. זה אומר שההגדרה לא ברורה לכם, והמודל בוודאי לא ילמד אותה. כיוונון לא יכול לפתור חוסר החלטה.
כיוונון על עברית
כאן יש הצדקה שאין לה מקבילה באנגלית, וגם מלכודת.
ההצדקה: מודלים ראו הרבה פחות עברית מאנגלית, ולכן יש יותר מה להרוויח מכיוונון על עברית — במיוחד בניסוח טבעי, בעקביות סגנונית, ובמונחים מקצועיים בתחום שלכם. מודל בינוני שכוונן היטב על עברית עסקית יכול לעלות על מודל גדול יותר שלא כוונן, במשימה הצרה.
והמלכודת: כמות הדוגמאות הנדרשת גדולה יותר. אותו מספר דוגמאות מלמד פחות, כי המודל מתחיל מנקודה חלשה יותר — ומכיוון שהטקסט נשבר ליותר טוקנים, גם עלות האימון גבוהה מהערכה שנעשתה לפי מספר מילים.
ושלושה פרטים מעשיים שחוסכים סבב: לנקות סימני כיווניות נסתרים שמגיעים מטקסט שהועתק מ-PDF; לשמור על כתיב אחיד בכל הדאטהסט — "תוכנה" ו"תכנה" מלמדים את המודל שאין כלל; ולבדוק את החלוקה לטוקנים לפני האימון, כי דוגמאות ארוכות בעברית עשויות להיחתך בשקט.
מקרה מוחשי: סיווג פניות
כדי שהשיקול יהיה ברור, הנה המקרה הנפוץ ביותר שבו כיוונון באמת מצדיק את עצמו — וגם איך מגיעים אליו נכון.
עסק מקבל אלפי פניות בחודש וצריך לנתב כל אחת לאחת משמונה קטגוריות. שלב ראשון: הנחיה עם המודל החזק. זה עובד מצוין, וזה גם עולה — כי ההנחיה מכילה תיאור של שמונה הקטגוריות ודוגמאות, והיא נשלחת בכל פנייה.
שלב שני: לאסוף. אחרי חודש יש אלפי פניות שסווגו, וחלקן תוקנו ידנית. התיקונים הם הנכס — הם בדיוק המקרים שבהם המודל טעה.
שלב שלישי: לכוונן מודל קטן על אלפיים דוגמאות מסודרות, ולמדוד מול המודל הגדול על אותו מערך.
התוצאה האופיינית: המודל הקטן המכוונן מגיע לדיוק דומה או טוב יותר במשימה הצרה הזו, בשבריר המחיר ובמהירות גבוהה יותר — כי אין צורך לשלוח את ההנחיה הארוכה בכל פעם. זה הדפוס שבו כיוונון עובד: משימה אחת, צרה, בנפח גבוה, עם דוגמאות אמיתיות שהצטברו ממילא.
ומה שלא עובד באותו עסק: לכוונן את אותו מודל גם לנסח תשובות ללקוחות. זו משימה אחרת, היא דורשת דאטהסט אחר, ולערבב את השתיים באימון אחד יפגע בשתיהן.
איך יודעים אם זה עבד
וכאן חוזרת הנקודה מההתחלה, כי בלעדיה כל התהליך הוא ניחוש יקר. צריך להשוות שלושה דברים על אותו מערך מקרים: המודל הבסיסי עם ההנחיה המקורית, המודל הבסיסי עם הנחיה משופרת, והמודל המכוונן.
ההשוואה השנייה היא זו שמדלגים עליה, והיא החשובה: לעתים קרובות מתברר שהנחיה משופרת השיגה את רוב השיפור — וגילוי כזה חוסך את כל התהליך.
ושני דברים שחייבים להיבדק ולא נבדקים:
- מה נשבר. כיוונון על משימה אחת עלול לפגוע ביכולות אחרות של המודל. אם הוא אומן לסווג פניות, בדקו שהוא עדיין יודע לנסח — במיוחד אם אותה מערכת עושה את שניהם.
- האם הוא שינן. אם הביצועים על דוגמאות האימון מצוינים ועל מה שהופרש בינוניים — הוא שינן ולא למד, והוא ייכשל על קלט אמיתי.
איפה זה רץ, ומה זה אומר על הנתונים
שאלה מעשית שיש לה גם צד שאינו טכני: איפה מתבצע האימון, ומה קורה לדוגמאות שלכם בדרך.
אצל ספק, דרך API. הפשוט ביותר — מעלים קובץ, מקבלים מודל מכוונן, וההרצה אצלו. אין חומרה לנהל. המחיר: הדאטהסט שלכם עובר לספק, והמודל שנוצר יושב אצלו ולא בידיכם.
אצלכם, על מודל פתוח. עם LoRA זה נגיש — כרטיס מסך אחד לרוב מספיק למודל בינוני. הדאטהסט לא עוזב, והתוצר הוא קובץ שלכם.
ההחלטה בין השניים היא כמעט תמיד לא טכנית אלא שאלה של מה מותר לשלוח. והיא חדה כאן יותר מבכל שימוש אחר ב-AI, מסיבה שקל לפספס: דאטהסט לכיוונון הוא ריכוז מרוכז של המידע הרגיש ביותר שלכם — מאות שיחות אמיתיות עם לקוחות, במקום אחד, בפורמט נוח לקריאה. שיחה בודדת שנשלחת למודל היא דבר אחד; קובץ עם אלף שיחות הוא דבר אחר לגמרי.
ולכן, לפני שמעלים: לטשטש פרטים מזהים בדוגמאות. ברוב משימות הסיווג והניסוח השם האמיתי של הלקוח אינו נחוץ ללמידה — והחלפתו בערך בדוי לא פוגעת בדפוס שהמודל לומד.
התהליך, מקצה לקצה
- לוודא שאין דרך זולה יותר. הנחיה, שליפה, סכמה. כנה, לא פורמלית.
- לבנות מערך הערכה ולמדוד את המצב הנוכחי. בלי זה אין נקודת ייחוס.
- לאסוף דוגמאות — עדיף מהייצור — לנקות, ולוודא עקביות. כאן רוב הזמן.
- להפריש חלק לבדיקה לפני שמתחילים.
- לכוונן עם LoRA, בהרצה אחת קטנה קודם.
- למדוד מול שלוש נקודות הייחוס ולבדוק גם מה נשבר.
- להחליט בכנות אם השיפור מצדיק את התחזוקה — ולהיות מוכנים לומר שלא.
כיוונון ושליפה ביחד
ההצגה של השניים כאלטרנטיבות מועילה כשמתחילים, והיא לא מדויקת. הם פותרים שתי בעיות שונות, ובמערכת בוגרת שניהם נמצאים.
החלוקה פשוטה ושווה לזכור: כיוונון קובע איך המערכת עונה; שליפה קובעת על מה היא עונה.
מערכת שמשלבת אותם נראית כך: שליפה מביאה את הקטעים הרלוונטיים מהמסמכים שלכם — מדיניות, מחירים, נהלים — ומודל מכוונן מנסח מהם תשובה בסגנון ובמבנה שהגדרתם. הידע נשאר במסמכים, שם הוא מתעדכן; ההתנהגות נמצאת במודל, שם היא יציבה.
היתרון מעשי מאוד: כשהמדיניות משתנה, מעדכנים מסמך ולא מאמנים מחדש. וכשרוצים לשנות את הטון, לא נוגעים במסמכים. שתי צירי שינוי נפרדים — וזה בדיוק מה שהופך מערכת לתחזוקתית.
ומה שלא כדאי: לנסות ללמד את המודל את המסמכים באימון וגם לשלוף אותם. זה מייצר סתירות — מה שהמודל "זוכר" מהאימון מול מה שנשלף עכשיו — ובמקרה של פער הוא עלול להעדיף את הגרסה הישנה שלמד. הידע במקום אחד בלבד.
מתי ממש לא
- כדי שהמודל "יכיר" את הנתונים שלכם. זו שליפה. הטעות הנפוצה ביותר בתחום.
- כשהתוכן משתנה. מודל מכוונן מקפיא את מה שלמד; מסמך שהתעדכן דורש אימון מחדש.
- לפני שיש מערך הערכה. לא תדעו אם השתפרתם.
- בנפח נמוך. הנחיה ארוכה זולה מתחזוקת מודל.
- כשאין דוגמאות אמיתיות. דאטהסט שנוצר במודל מלמד את הממוצע שכבר קיים בו.
- כשהמשימה עוד לא יציבה. אתם עוד מגלים מה אתם רוצים.
מה קורה אחרי שזה עובד
כיוונון מוצג בדרך כלל כפרויקט עם סוף, והוא מתחיל התחייבות. שלושה דברים שיקרו, ושווה לתכנן אותם מראש:
- יצא מודל בסיס טוב יותר. וזה קורה כמה פעמים בשנה. הכיוונון שלכם לא עובר אליו — צריך לחזור על התהליך, וזו הסיבה שהדאטהסט המסודר שווה יותר מהמודל המכוונן עצמו. שמרו אותו כמו קוד, בבקרת גרסאות, עם תיעוד של מה נכלל ולמה.
- הקלט יזוז. משתמשים ישאלו דברים אחרים, יופיעו מוצרים חדשים, ינוסחו קטגוריות מחדש. המודל למד את מה שהיה נכון פעם, והוא לא יידע שהשתנה משהו. מדידה תקופתית על מערך קבוע היא מה שיגלה את זה לפני שמישהו יתלונן.
- יהיה פיתוי להוסיף עוד משימה. זה המקום שבו מערכות מתקלקלות: כיוונון נוסף על משימה שנייה בדרך כלל פוגע בראשונה. עדיף התאמה נפרדת לכל משימה — וזה בדיוק מה ש-LoRA מאפשר בזול, כי ההתאמות קטנות וניתנות להחלפה.
ולכן ההחלטה הכנה לפני שמתחילים אינה "האם זה ישפר" אלא "האם נחזור על זה בעוד חצי שנה". אם התשובה שלילית, כנראה שהנחיה טובה ושליפה ישרתו אתכם טוב יותר לאורך זמן.
טעויות שחוזרות
- לצפות שילמד עובדות. הוא לומד התנהגות, והעובדות יצוצו מעוותות.
- לדלג על שיפור ההנחיה. לרוב שם נמצא רוב השיפור, בעשירית המאמץ.
- דאטהסט לא עקבי. מלמד את המודל שאין כלל.
- דוגמאות מנוסחות יפה מדי. לא דומות לקלט שיגיע.
- בלי הפרשה לבדיקה. אין דרך להבדיל בין למידה לשינון.
- לא לבדוק מה נשבר. שיפור במשימה אחת על חשבון אחרת.
- להניח שזה מוזיל. מודל מכוונן לעתים יקר יותר לטוקן.
- לשכוח את התחזוקה. מודל בסיס חדש פירושו לחזור על הכול.
- כתיב לא אחיד בעברית. אותה מילה בשתי צורות מבלבלת בדיוק במקום שכבר חלש.
- להתחיל בכיוונון מלא. LoRA הוא ברירת המחדל, הוא זול יותר, והוא הפיך.
- לערבב שתי משימות באימון אחד. בדרך כלל פוגע בשתיהן; עדיף התאמה נפרדת לכל אחת.
- ללמד את המודל את המסמכים וגם לשלוף אותם. מייצר סתירות, והוא עלול להעדיף את הגרסה שלמד.