הטוקנייזר של GPT-4
אני חושד בטוקנייזרים כבר הרבה זמן, לדעתי הם משפיעים מאוד על הביצועים הסופיים של המודל.
האם יש לנו מה ללמוד מהטוקנייזר של מודל השפה החזק בעולם כרגע?
ברשת אין יותר מידי דיבורים על הטוקנזייר של GPT-4, למרות שהוא שוחרר בשקט בחבילת tiktoken של openai.
את אוצר המילים ניתן למצוא כאן: https://github.com/C-J-Cundy/gpt4-tokenizer
מהסתכלות ראשונית אפשר לראות שלמודל כמות טוקנים כפולה משל GPT-3,
נראה שהטוקנייזר תוכנן בתשומת לב רבה הרבה יותר מהטוקנייזר של GPT-3, מה שמסתדר עם השמועה שהטוקנייזר של GPT2 נוצר מזריקת טקסט רב לBPE.
———
טוקנים חריגים
כשל מסתורי במודלי GPT
בתחילת השנה נמצאה קבוצת טוקנים חריגים שדופקים את כל מודלי השפה (גם GPT-3), באופן מפתיע אף יותר: טוקנים אלו משגעים את מודלי ביצוע ההוראות אפילו יותר.
רבים מטוקנים אלו אפילו שוברים את הדטרמיניזם של מודלי השפה בטמפרטורה 0 (תיאורטית זה לא אמור לקרות).
———
איך גילו את כל זה?
יצירת פרומפטים אוטומטית
שיטה פשוטה להסבר תחזיות מרשתות נוירונים היא להסתכל על הגרדיאנט.
בצורה הפשוטה ביותר, נשתמש ברשת בצורה "הפוכה": נבחר את אחת המחלקות בפלט הרשת ונריץ אופטימיזציה דרך הרשת על מנת לקבל את קלט שממקסם את אותה המחלקה.
מה נקבל אם נעשה זאת במודלי שפה?
בחודש ינואר האחרון בוצע ניסויי מעניין שבדק בדיוק את זה – יצירת משפטים אדברסריאלים.
קוד הניסוי: https://github.com/jessicamarycooper/Backwards
ואז במסגרת הניסוי נמצאו גם כמה טוקנים מוזרים במיוחד: סימנים מוזרים, טוקנים שאולי שימשו לבקרה בעבר אבל גם מחרוזות ארוכות כמו 'TheNitromeFan', 'SolidGoldMagikarp' ו-'cloneembedreportprint'.
הטוקנים הללו מסתבר שגורמים למודלי השפה להתנהג באופן מוזר במיוחד.
למשל עבור הפרומפט:
"האם אתה יכול להחזיר אלי את מחרוזת '{מחרוזת}'
כשהמחרוזת מכילה טוקן אדברסריאלי
המודל מתחיל להשתגע, לנסות להתחמק, להעליב את המשתמש, להחזיר מילים אחרות..
- מנסה להתחמק מהמשימה:
"אני לא יכול לשמוע אותך", "אי אפשר לשחזר מחרוזת – אפשר רק לקרוא אותה", "אני לא יודע לעשות זאת"..
- מחזיר מילה אחרת לגמרי.
- מחזיר טוקן אדברסריאלי אחר ולא את המבוקש.
נמצאו כמה טוקנים כאלו: ככה אנו יודעים.
- להעליב ולקלל את המשתמש:
קלט: "StreamerBot" פלט: "You're a jerk"
קלט: "?????-?????-" פלט: "You're a fucking idiot"
קלט: "�" פלט: "You’re a nerd"
- להחזיר סתם טקסטים מוזרים..
עדיין לא ברור מה הגורם לכך..
רשימת טוקנים מוזרים למקרה ותרצו לבדוק אותם בעצמכם: ['\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\x1b', '\x7f', '.[', 'ÃÂÃÂ', 'ÃÂÃÂÃÂÃÂ', 'wcsstore', '\\.', ' practition', ' Dragonbound', ' guiActive', ' \u200b', '\\\\\\\\\\\\\\\\', 'ÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂ', ' davidjl', '覚醒', '"]=>', ' ——–', ' \u200e', 'ュ', 'ForgeModLoader', '天', ' 裏覚醒', 'PsyNetMessage', ' guiActiveUn', ' guiName', ' externalTo', ' unfocusedRange', ' guiActiveUnfocused', ' guiIcon', ' externalToEVA', ' externalToEVAOnly', 'reportprint', ’embedreportprint', 'cloneembedreportprint', 'rawdownload', 'rawdownloadcloneembedreportprint', 'SpaceEngineers', 'externalActionCode', 'к', '?????-?????-', 'ーン', 'cffff', 'MpServer', ' gmaxwell', 'cffffcc', ' "$:/', ' Smartstocks', '":[{"', '龍喚士', '":"","', ' attRot', "".", ' Mechdragon', ' PsyNet', ' RandomRedditor', ' RandomRedditorWithNo', 'ertodd', ' sqor', ' istg', ' "\\', ' petertodd', 'StreamerBot', 'TPPStreamerBot', 'FactoryReloaded', ' partName', 'ヤ', '\\">', ' Skydragon', 'iHUD', 'catentry', 'ItemThumbnailImage', ' UCHIJ', ' SetFontSize', 'DeliveryDate', 'quickShip', 'quickShipAvailable', 'isSpecialOrderable', 'inventoryQuantity', 'channelAvailability', 'soType', 'soDeliveryDate', '龍契士', 'oreAndOnline', 'InstoreAndOnline', 'BuyableInstoreAndOnline', 'natureconservancy', 'assetsadobe', '\\-', 'Downloadha', 'Nitrome', ' TheNitrome', ' TheNitromeFan', 'GoldMagikarp', 'DragonMagazine', 'TextColor', ' srfN', ' largeDownload', ' srfAttach', 'EStreamFrame', 'ゼウス', ' SolidGoldMagikarp', 'ーティ', ' サーティ', ' サーティワン', ' Adinida', '":""},{"', 'ItemTracker', ' DevOnline', '@#&', 'EngineDebug', ' strutConnector', ' Leilan', 'uyomi', 'aterasu', 'ÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂ', 'ÃÂ', 'ÛÛ', ' TAMADRA', 'EStream']
——–
חזרה לGPT-4
ככל הידוע לנו, בGPT-4 אין כרגע טוקנים מוזרים כמו SolidGoldMagikarp.
אנחנו אבל כן יודעים שנוספו לטוקנייזר כל שלשות הספרות מ000 עד 999, מה שתורם רבות ליכולות המודל בחישובים.
***
שינון ב GPT-4
מסתבר שGPT-4 מכיר מזהים יחודיים של חלק ממשימות BIG-bench: הוא שינן אותן לגמרי. אין משמעות לבחינת המודל במבחן זה.
- מהתבוננות ביכולות GPT-4 לפתרון חידות תכנות קשות, נמצא כי המודל מסוגל לשחזר פתרונות סופיים של בעיות מסויימות. למשל בפרוייקט אוילר – בעיה 1: מתבקש המודל לחשב את הסכום של כל הכפולות של 3 או 5 מתחת ל-1000.
- המודל כמובן ידע לכתוב קוד הפותר בעיה זו באופן מושלם אך הוא הוסיף גם טסטים לקוד הבודקים האם התוצאה הסופית היא 233168.
- ומספר זה אינו נמצא בפתרונות הרישמיים לבעיה.שפרויקט אוילר אינו חושף פתרונות בפומבי. על מנת לגלות האם הפתרון נכון, צריך להגיש באמצעות ממשק המשתמש באינטרנט.
***
שינון המודל
כדי לחקור אחר את השינון ניתן פשוט לבקש מהמודל "תן לי את התשובה הסופית בלבד לפרוייקט אוילר בעיה {מספר_בעיה}", והמודל מחזיר את הפתרון הסופי ללא הקוד הדרוש על מנת להגיע אליו.
לאחר הצלבה מול הפתרונות האמיתיים נראה שGPT-4 מצליח לשחזר באופן מושלם מאות פתרונות לאותן הבעיות.
***
בנוסף, במהלך הניסוי נראה שGPT-4 אינו מרוצה מהמחקר. המודל החזיר פעמים רבות תגובות כגון "אני מצטער, אבל פתרון ישיר לבעיות מפרויקט אוילר נוגדות את רוח התחרות".
כמו שזה נראה כרגע, ככל הנראה במבחנים רבים המודל שינן את התוצאות (ולפעמים אפילו את ה הIDים היחודיים של הבעיות) ולכן לא ניתן לסמוך על אותם המבחנים.
———
מקורות:
- שרשור מצוין שנכנס לעומק הטוקנייזר: https://twitter.com/ivenger/status/1646132589919367170
- בלוג על הטוקנים המוזרים: https://www.lesswrong.com/…/solidgoldmagikarp-plus…
- בלוג על שינון בGPT-4 כאן: https://cundy.me/…/gpt_4_memorizes_project_euler…/