מילה אחת חודרת לשלושה עולמות
שלושה עולמות
במדעי המחשב קיימים שלושה עולמות.
עולם הרשתות. נתונים זורמים כזרמי בתים. בתים נכנסים דרך שקעי TCP, ובתים יוצאים. אוצר המילים של מהנדס הרשת הוא פקטות, כותרות ומטענים.
עולם האחסון. נתונים נשמרים בפורמטי קבצים. נכתבים לדיסק, נקראים מהדיסק. אוצר המילים של מהנדס האחסון הוא בלוקים, היסטים ויישור.
עולם ה-AI. נתונים מעובדים כרצפי טוקנים. LLM-ים מקבלים טוקנים ומפיקים טוקנים. אוצר המילים של מהנדס ה-AI הוא הטמעות, קשב והקשר.
שלושת העולמות מדברים שפות שונות. וביניהם, תרגום נדרש תמיד.
עלות התרגום
נעקוב אחר הנתיב שנתונים עוברים במערכת AI מודרנית.
ידע מאוחסן בקובץ. כ-JSON או טקסט רגיל.
כדי להעביר את זה ל-AI:
- פתח את הקובץ וקרא את הטקסט.
- נתח את הטקסט. אם זה JSON, פרש את המבנה וחלץ שדות.
- הזן את הטקסט שחולץ לטוקנייזר.
- הטוקנייזר ממיר את הטקסט לרצף מזהי טוקנים.
- רצף הטוקנים מוזן ל-LLM.
כשה-AI מייצר תשובה:
- ה-LLM מוציא רצף טוקנים.
- פענוח הטוקנים חזרה לטקסט.
- סריאליזציה של הטקסט לפורמט מובנה.
- כתיבת הנתונים המסודרים לקובץ.
פעולת “קריאה וכתיבה” פשוטה דורשת תשעה שלבים.
כל שלב עולה זמן. כל שלב עולה זיכרון. כל שלב מסכן אובדן מידע.
שלבים 3 ו-4 – תהליך הטוקניזציה – בעייתיים במיוחד. כיוון שגבולות המילים בשפה טבעית לא מתיישרים עם גבולות הטוקנים של הטוקנייזר, שם פרטי כמו “Yi Sun-sin” עלול להתפצל לשברים שרירותיים, או שיחידה סמנטית אחת מתפזרת על פני מספר טוקנים.
זו המחיר של שלושה עולמות שמדברים שפות שונות.
מה אם יחידה אחת חדרה לכל שלושת העולמות?
בשפה זו, מילה אחת היא 16 ביט (2 בתים).
מילה אחת בת 16 ביט היא בו-זמנית שלושה דברים.
יחידה של זרם הבתים. מילים בנות 16 ביט מגיעות בזרימה רציפה ברשת. Big Endian. מיושרות על גבולות של 2 בתים. אין צורך בניתוח נוסף. פשוט קרא אותן בסדר שהן מגיעות.
יחידה של פורמט הקובץ. כתוב את הזרם ישירות לדיסק, וזהו הקובץ שלך. קרא את הבתים ישירות מהדיסק ושלח אותם ברשת, וזהו הזרם שלך. ללא סריאליזציה. ללא דה-סריאליזציה.
יחידה של טוקן LLM. 16 ביט = 65,536 סמלים שונים. גודל אוצר המילים של LLM-ים מודרניים נע בדרך כלל בין 50,000 ל-100,000. מודלים ממשפחת GPT משתמשים בכ-50,000; מודלים מותאמים לקוריאנית בכ-100,000. 65,536 נמצא בדיוק במרכז הטווח הזה. מילה אחת בת 16 ביט הופכת לטוקן LLM אחד.
שלושה עולמות חולקים את אותה יחידה. התרגום נעלם.
אפס המרה, אפס אובדן, אפס עלות נלווית
נראה מה זה אומר קונקרטית.
גישה מקובלת: 9 שלבים
[File] -> Read -> Parse -> Extract text -> Tokenize -> [LLM]
[LLM] -> Decode -> Serialize -> Write -> [File]
גישת זרם בינארי: שלב אחד
[File/Stream] -> [LLM]
[LLM] -> [File/Stream]
קרא קובץ, וזה כבר רצף טוקנים. כתוב את רצף הטוקנים שה-LLM מפיק, וזה כבר קובץ. קח זרם מהרשת והזן אותו ישירות ל-LLM.
אפס המרה. אפס ניתוח. אפס טוקניזציה. אפס אובדן. אפס עלות נלווית.
למה לא 8 ביט?
8 ביט נותנים לך 256 סמלים שונים.
256 סמלים הם מעט מדי לייצג את העולם. הקצה את האלפבית, הספרות ופיסוק בסיסי, וחצי מהמרחב כבר נגמר.
אם אתה משתמש ב-8 ביט כיחידה בסיסית, רוב הטוקנים המשמעותיים בסופו של דבר דורשים 2 בתים או יותר. זה מאלץ קידוד באורך משתנה, ואורך משתנה הופך את הניתוח למורכב.
מתאים כיחידת זרם בתים, אבל לא מספיק כיחידת טוקן.
למה לא 32 ביט?
32 ביט נותנים לך כ-4.3 מיליארד סמלים שונים.
כוח הביטוי מספיק ומעבר לכך – הרבה יותר מהנדרש. אבל הבעיה היא היעילות.
הפקטה בשכיחות הגבוהה ביותר בפורמט הזה היא Tiny Verb Edge, בת 2 מילים. ב-16 ביט למילה, זה 4 בתים. ב-32 ביט למילה, זה הופך ל-8 בתים. הפקטה הנפוצה ביותר מכפילה את גודלה.
מנקודת המבט של ה-LLM, יש גם בעיה. אם טוקן אחד הוא 32 ביט, רק מחצית מהטוקנים נכנסים לאותו חלון הקשר. בהתחשב בכך שאורך ההקשר של LLM הוא משאב מוגבל כיום, המקום שטוקן תופס הופך ללא יעיל ביחס למידע שהוא נושא.
מילה של 32 ביט היא מוגזמת כטוקן לשפה זו.
למה לא אורך משתנה?
UTF-8 הוא קידוד באורך משתנה. אורך התו נע מבית אחד ל-4 בתים, תלוי בתו.
יש לזה יתרונות ביעילות אחסון, אבל זה מכניס חולשה קריטית ביעילות עיבוד.
כדי למצוא את התו ה-n, צריך לספור מההתחלה. גישה אקראית בלתי אפשרית. עיבוד מקבילי SIMD הופך לקשה.
שפה זו משתמשת במילים קבועות-רוחב בנות 16 ביט כיחידה הבסיסית. המיקום של המילה ה-n הוא תמיד n * 2 בתים. גישה אקראית היא O(1). SIMD יכול להשוות מספר מילים בפקודה אחת. GPU-ים יכולים לסרוק מיליארדי מילים במקביל.
ועם זאת, ברמת הפקטה, אורך משתנה עדיין מותר. Tiny Verb Edge היא 2 מילים; Event6 Edge יכולה להגיע ל-8 מילים. יחידת המילה קבועה, אבל יחידת הפקטה גמישה.
יעילות העיבוד של רוחב קבוע בשילוב עם כוח הביטוי של אורך משתנה. מילת ה-16 ביט משיגה את שניהם בו-זמנית.
הנתיב שיוניקוד הוכיח
יוניקוד הוא תקן הקידוד המוצלח ביותר שהאנושות יצרה אי-פעם.
היחידה הבסיסית של UTF-16 היא 16 ביט (2 בתים). היא מייצגת את 65,536 התווים של מישור רב-לשוני בסיסי (BMP) במילה אחת, ומרחיבה לתווים מעבר לזה באמצעות זוגות סרוגטים (2 מילים = 4 בתים).
אנחנו פשוט עוקבים אחר המבנה המוכח הזה.
ייצוג 65,536 פרימיטיביים סמנטיים בסיסיים במילה אחת, והרחבת פקטות מורכבות על פני מספר מילים.
כשם שיוניקוד מבטא כל תו בעולם על בסיס היחידה הבסיסית של “תו אחד = 2 בתים,” שפה זו מבטאת כל אלמנט של הסקת AI על בסיס היחידה הבסיסית של “מילה אחת = 2 בתים.”
תאימות לאחור והרחבה כלפי מעלה
יתרון נוסף של 16 ביט הוא היישור.
16 הוא כפולה של 8, מחלק של 32, מחלק של 64 ומחלק של 128.
זה אומר שהיישור לעולם לא נשבר, לא משנה לאיזה כיוון מרחיבים.
מה אם ארכיטקטורת הטרנספורמר תשתנה בעתיד והטוקנים יהפכו ל-32 ביט? שתי מילים בנות 16 ביט מהוות טוקן אחד. ללא בעיות יישור.
מה לגבי 64 ביט? ארבע מילים בנות 16 ביט מהוות טוקן אחד. עדיין ללא בעיות יישור.
ולהפך, מה אם מערכת משובצת של 8 ביט מעבדת את הפורמט הזה? פשוט קרא כל מילה בת 16 ביט כבית עליון ובית תחתון.
תאימות לאחור חייבת להישמר באופן מוחלט. מילת ה-16 ביט מבטיחה זאת ברמה הפיזית.
אנחנו לא יכולים לחזות את גודל המילה של אינטליגנציות עתידיות, אבל יישור הכפולות של 16 ביט מבטיח תאימות עם כל גודל.
המבנה המשולש
נסכם.
מילה אחת בת 16 ביט היא בו-זמנית שלושה דברים.
| עולם | תפקיד מילה אחת |
|---|---|
| רשת | יחידה של זרם הבתים |
| אחסון | יחידה של פורמט הקובץ |
| AI | יחידה של טוקן LLM |
יחידה אחת חודרת לכל שלושת העולמות.
אחסן זרם כמו שהוא, וזהו קובץ. קרא קובץ כמו שהוא, ואלה טוקנים. שלח טוקנים כמו שהם, וזהו זרם.
ללא המרה. ללא תרגום. ללא אובדן.
זו הסיבה ל-16 ביט. לא 8 ביט, לא 32 ביט, לא אורך משתנה. המספר שנמצא בדיוק בצומת של שלושה עולמות.