עיבוד מקדים של נתונים עבור ML: אפשרויות והמלצות

מסמך זה הוא הראשון בסדרה בת שני חלקים הבוחנת את הנושא של הנדסת נתונים והנדסת תכונות ללמידת מכונה (ML), תוך התמקדות במשימות למידה מפוקחות. חלק ראשון זה דן בשיטות העבודה המומלצות לעיבוד מוקדם של נתונים בצינור ML ב-Google Cloud. המסמך מתמקד בשימוש ב- TensorFlow ובספריית הקוד הפתוח TensorFlow Transform ( tf.Transform ) כדי להכין נתונים, לאמן את המודל ולשרת את המודל לחיזוי. מסמך זה מדגיש את האתגרים של עיבוד מוקדם של נתונים עבור ML, והוא מתאר את האפשרויות והתרחישים לביצוע טרנספורמציה של נתונים ב-Google Cloud ביעילות.

מסמך זה מניח שאתה מכיר את BigQuery , Dataflow , Vertex AI ו- TensorFlow Keras API.

המסמך השני, עיבוד מקדים של נתונים עבור ML עם Google Cloud , מספק מדריך שלב אחר שלב כיצד ליישם צינור tf.Transform .

מבוא

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

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

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

מסמך זה דן באתגרים הללו עבור רמות שונות של פירוט של פעולות הנדסת תכונה: צבירות ברמת מופע, מעבר מלא וחלון זמן. מסמך זה מתאר גם את האפשרויות והתרחישים לביצוע שינוי נתונים עבור ML ב-Google Cloud.

מסמך זה מספק גם סקירה כללית של TensorFlow Transform ( tf.Transform ), ספרייה עבור TensorFlow המאפשרת לך להגדיר גם טרנספורמציה של נתונים ברמת המופע וגם במעבר מלא באמצעות צינורות עיבוד מקדים של נתונים. צינורות אלה מבוצעים עם Apache Beam , והם יוצרים חפצים המאפשרים לך להחיל את אותן טרנספורמציות במהלך חיזוי כמו בעת הגשת המודל.

עיבוד מוקדם של נתונים עבור ML

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

הנדסת נתונים בהשוואה להנדסת תכונות

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

נתונים גולמיים (או רק נתונים )
הנתונים בצורת המקור שלהם, ללא כל הכנה מוקדמת ל-ML. בהקשר זה, הנתונים עשויים להיות בצורתם הגולמית (באגם נתונים) או בצורה שעברה טרנספורמציה (במחסן נתונים). ייתכן שנתונים שעברו שינוי שנמצאים במחסן נתונים הומרו מהצורה הגולמית המקורית שלהם כדי לשמש לניתוח. עם זאת, בהקשר זה, נתונים גולמיים פירושם שהנתונים לא הוכנו במיוחד עבור משימת ה-ML שלך. נתונים נחשבים גם לנתונים גולמיים אם הם נשלחים ממערכות סטרימינג שבסופו של דבר מתקשרות למודלים של ML לצורך תחזיות.
נתונים מוכנים
מערך הנתונים בטופס מוכן למשימת ה-ML שלך: מקורות נתונים נותחו, הצטרפו והוכנסו לטופס טבלה. נתונים מוכנים מצטברים ומסוכמים לפי הפירוט הנכון - לדוגמה, כל שורה במערך הנתונים מייצגת לקוח ייחודי, וכל עמודה מייצגת מידע מסכם עבור הלקוח, כמו סך כל ההוצאות בששת השבועות האחרונים. בטבלת נתונים שהוכנה, עמודות לא רלוונטיות נשמטו ורשומות לא חוקיות סוננו. עבור משימות למידה בפיקוח, תכונת היעד קיימת.
תכונות מהונדסות
מערך הנתונים עם התכונות המכווננות הצפויות על ידי המודל - כלומר, תכונות שנוצרות על ידי ביצוע פעולות מסוימות ספציפיות ל-ML בעמודות במערך הנתונים המוכן, ויצירת תכונות חדשות עבור המודל שלך במהלך אימון וחיזוי, כפי שמתואר בהמשך בפעולות עיבוד מקדים . דוגמאות לפעולות אלו כוללות שינוי קנה מידה של עמודות מספריות לערך שבין 0 ל-1, ערכי חיתוך ותכונות קטגוריות בקידוד חם אחד .

התרשים הבא, איור 1, מציג את השלבים הכרוכים בהכנת נתונים מעובדים מראש:

דיאגרמת זרימה המציגה נתונים גולמיים העוברים לנתונים מוכנים העוברים למאפיינים מהונדסים.
איור 1. זרימת הנתונים מנתונים גולמיים לנתונים מוכנים למאפיינים מהונדסים ועד למידת מכונה.

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

פעולות עיבוד מקדים

עיבוד מקדים של נתונים כולל מספר פעולות. כל פעולה נועדה לעזור ל-ML לבנות מודלים חיזויים טובים יותר. הפרטים של פעולות עיבוד מקדים אלו נמצאים מחוץ לתחום של מסמך זה, אך חלק מהפעולות מתוארות בקצרה בסעיף זה.

עבור נתונים מובנים, פעולות עיבוד מקדים של נתונים כוללות את הדברים הבאים:

  • ניקוי נתונים: הסרה או תיקון של רשומות שיש בהן ערכים פגומים או לא חוקיים מנתונים גולמיים, והסרת רשומות שחסרות בהן מספר רב של עמודות.
  • בחירת מופעים ומחיצות: בחירת נקודות נתונים ממערך הקלט ליצירת הדרכה, הערכה (אימות) וערכות בדיקה . תהליך זה כולל טכניקות לדגימה אקראית שניתן לחזור עליה, דגימת יתר של מחלקות מיעוט וחלוקה מרובדת.
  • כוונון תכונה: שיפור האיכות של תכונה עבור ML, הכוללת קנה מידה ונימול של ערכים מספריים, זקיפת ערכים חסרים, חיתוך חריגים והתאמת ערכים בעלי התפלגות מוטות.
  • טרנספורמציה של תכונה: המרת תכונה מספרית לתכונה קטגורית (באמצעות bucketization ), והמרת מאפיינים קטגוריים לייצוג מספרי (באמצעות קידוד חם אחד, למידה עם ספירות , הטמעות תכונות דלילות וכו'). דגמים מסוימים עובדים רק עם תכונות מספריות או קטגוריות, בעוד שאחרים יכולים להתמודד עם תכונות מסוג מעורב. גם כאשר מודלים מטפלים בשני הסוגים, הם יכולים להפיק תועלת מייצוגים שונים (מספריים וקטגוריים) של אותה תכונה.
  • חילוץ תכונות: צמצום מספר התכונות על ידי יצירת ייצוגי נתונים במימד נמוך יותר ועוצמתיים יותר באמצעות טכניקות כגון PCA , חילוץ הטבעה ו- hashing .
  • בחירת תכונה: בחירת תת-קבוצה של תכונות הקלט לאימון המודל, והתעלמות מהלא רלוונטיות או המיותרות, תוך שימוש בשיטות סינון או עטיפה . בחירת תכונות יכולה גם לכלול ביטול פשוט של תכונות אם חסרים לתכונות מספר רב של ערכים.
  • בניית תכונה: יצירת תכונות חדשות באמצעות טכניקות טיפוסיות, כגון התרחבות פולינומית (על ידי שימוש בפונקציות מתמטיות חד-משתניות) או חציית תכונה (כדי ללכוד אינטראקציות בין תכונה). ניתן לבנות תכונות גם באמצעות לוגיקה עסקית מהתחום של מקרה השימוש ב-ML.

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

  • עבור מסמכי טקסט: סטנד ולמטיזציה , חישוב TF-IDF וחילוץ n-gram , בדיקת הטבעת.
  • לתמונות: גזירה, שינוי גודל, חיתוך, טשטוש גאוס ומסננים קנריים.
  • עבור כל סוגי הנתונים (כולל טקסט ותמונות): למידה של העברה , שמתייחסת לשכבות הכול חוץ אחרונות של המודל שעבר הכשרה מלאה כשלב הנדסי תכונה.

פירוט עיבוד מוקדם

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

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

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

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

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

    לדוגמה, כדי לנרמל תכונה מספרית לאימון, אתה מחשב את הממוצע שלה (μ) ואת סטיית התקן שלה (σ) על פני כל נתוני האימון. חישוב זה נקרא פעולת מעבר מלא (או ניתוח ). כאשר אתה מגיש את המודל לחיזוי, הערך של נקודת נתונים חדשה מנורמל כדי למנוע הטיית אימון-הגשה. לכן, ערכי μ ו- σ שמחושבים במהלך האימון משמשים להתאמת ערך התכונה, שהוא הפעולה הפשוטה הבאה ברמת המופע :

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    טרנספורמציות במעבר מלא כוללות את הדברים הבאים:

    • MinMax קנה מידה של תכונות מספריות תוך שימוש במינימום ומקסימום מחושבים מתוך מערך האימון.
    • קנה מידה סטנדרטי (נורמליזציה של ציון z) תכונות מספריות באמצעות μ ו-σ המחושבים על מערך האימון.
    • מיזוג תכונות מספריות באמצעות קוונטילים.
    • זקיפת ערכים חסרים באמצעות החציון (מאפיינים מספריים) או המצב (מאפיינים קטגוריים).
    • המרת מחרוזות (ערכים נומינליים) למספרים שלמים (אינדקסים) על ידי חילוץ כל הערכים (אוצר המילים) המובחנים של תכונה קטגורית קלט.
    • ספירת התרחשות של מונח (ערך תכונה) בכל המסמכים (מופעים) לחישוב עבור TF-IDF.
    • חישוב ה-PCA של תכונות הקלט כדי להקרין את הנתונים לתוך מרחב ממדי נמוך יותר (עם תכונות תלויות ליניארית).

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

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

  • צבירות היסטוריות במהלך אימון, אך צבירות בזמן אמת במהלך חיזוי . גישה זו כוללת יצירת תכונה על ידי סיכום ערכי זמן אמת לאורך זמן. בגישה זו, המופעים שיש לצבור מוגדרים באמצעות סעיפי חלון זמניים. לדוגמה, אתה יכול להשתמש בגישה זו אם אתה רוצה להכשיר מודל שמעריך את זמן הנסיעה במונית על סמך מדדי התנועה של המסלול ב-5 הדקות האחרונות, ב-10 הדקות האחרונות, ב-30 הדקות האחרונות, ובשאר מרווחים. אתה יכול גם להשתמש בגישה זו כדי לחזות כשל של חלק מנוע בהתבסס על הממוצע הנע של ערכי הטמפרטורה והרעידות שחושבו במהלך 3 הדקות האחרונות. למרות שניתן להכין צבירות אלו במצב לא מקוון להדרכה, הן מחושבות בזמן אמת מזרם נתונים במהלך ההגשה.

    ליתר דיוק, כאשר אתה מכין נתוני אימון, אם הערך המצטבר אינו נמצא בנתונים הגולמיים, הערך נוצר בשלב הנדסת הנתונים. הנתונים הגולמיים מאוחסנים בדרך כלל במסד נתונים בפורמט של (entity, timestamp, value) . בדוגמאות הקודמות, entity היא מזהה מקטע המסלול עבור נתיבי המוניות ומזהה חלק המנוע עבור כשל המנוע. אתה יכול להשתמש בפעולות חלונות לחישוב (entity, time_index, aggregated_value_over_time_window) ולהשתמש בתכונות הצבירה כקלט לאימון המודל שלך.

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

צינור ML ב-Google Cloud

סעיף זה דן במרכיבי הליבה של צינור טיפוסי מקצה לקצה להכשרה ושירות של מודלים של TensorFlow ML ב-Google Cloud באמצעות שירותים מנוהלים. זה גם דן היכן אתה יכול ליישם קטגוריות שונות של פעולות עיבוד מוקדם של נתונים, ואתגרים נפוצים שאתה עלול להתמודד איתם כאשר אתה מיישם טרנספורמציות כאלה. החלק כיצד tf.Transform עובד מראה כיצד ספריית TensorFlow Transform עוזרת להתמודד עם אתגרים אלו.

ארכיטקטורה ברמה גבוהה

התרשים הבא, איור 2, מציג ארכיטקטורה ברמה גבוהה של צינור ML טיפוסי לאימון והגשה של מודלים של TensorFlow. התוויות A, B ו-C בתרשים מתייחסות למקומות השונים בצנרת שבהם יכול להתבצע עיבוד מקדים של נתונים. פרטים על שלבים אלה מסופקים בסעיף הבא.

דיאגרמת אדריכלות המציגה שלבים לעיבוד נתונים.
איור 2. ארכיטקטורה ברמה גבוהה להדרכה והגשה ב-ML ב-Google Cloud.

הצינור מורכב מהשלבים הבאים:

  1. לאחר ייבוא ​​נתונים גולמיים, נתונים טבלאיים מאוחסנים ב-BigQuery, ונתונים אחרים כמו תמונות, אודיו ווידאו מאוחסנים ב-Cloud Storage. החלק השני של סדרה זו משתמש בנתונים טבלאיים המאוחסנים ב-BigQuery כדוגמה.
  2. הנדסת נתונים (הכנה) והנדסת תכונות מבוצעות בקנה מידה באמצעות Dataflow. ביצוע זה מייצר ערכות הדרכה, הערכה ובדיקות מוכנות ל-ML המאוחסנים ב-Cloud Storage. באופן אידיאלי, מערכי נתונים אלה מאוחסנים כקבצי TFRecord , שהוא הפורמט הממוטב עבור חישובי TensorFlow.
  3. חבילת מאמן מודל TensorFlow מוגשת ל-Vertex AI Training, המשתמשת בנתונים המעובדים מראש מהשלבים הקודמים כדי לאמן את המודל. הפלט של שלב זה הוא TensorFlow SavedModel מאומן שמיוצא ל-Cloud Storage.
  4. מודל TensorFlow המאומן נפרס ל-Vertex AI Prediction כשירות שיש לו REST API כך שניתן להשתמש בו עבור תחזיות מקוונות. אותו מודל יכול לשמש גם עבור עבודות חיזוי אצווה.
  5. לאחר פריסת המודל כ- REST API, אפליקציות לקוח ומערכות פנימיות יכולות להפעיל את ה-API על ידי שליחת בקשות עם כמה נקודות נתונים, וקבלת תגובות מהמודל עם תחזיות.
  6. לתזמור ואוטומציה של צינור זה, אתה יכול להשתמש ב-Vertex AI Pipelines כמתזמן כדי להפעיל את שלבי הכנת הנתונים, אימון המודלים והפריסה של המודל.

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

איפה לעשות עיבוד מקדים

באיור 2, התוויות A, B ו-C מראות שפעולות עיבוד מקדים של נתונים יכולות להתבצע ב-BigQuery, Dataflow או TensorFlow. הסעיפים הבאים מתארים כיצד פועלת כל אחת מהאפשרויות הללו.

אפשרות א': BigQuery

בדרך כלל, לוגיקה מיושמת ב-BigQuery עבור הפעולות הבאות:

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

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

עם זאת, אנו ממליצים להשתמש ב-BigQuery להנדסת תכונות רק אם אתה משתמש במודל שלך לחיזוי אצווה (ניקוד), או אם התכונות מחושבות מראש ב-BigQuery, אך מאוחסנות ב-Vertex AI Feature Store לשימוש במהלך חיזוי מקוון. אם אתה מתכנן לפרוס את המודל לחיזוי מקוון, ואם אין לך את התכונה המהונדסת בחנות תכונות מקוונת, עליך לשכפל את פעולות העיבוד המקדים של SQL כדי לשנות את נקודות הנתונים הגולמיות שמערכות אחרות מייצרות. במילים אחרות, אתה צריך ליישם את ההיגיון פעמיים: פעם אחת ב-SQL כדי לעבד מראש נתוני אימון ב-BigQuery, ופעם שנייה בלוגיקה של האפליקציה שצורכת את המודל כדי לעבד מראש נקודות נתונים מקוונות לצורך חיזוי.

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

אם אתה משתמש במודל שלך רק עבור חיזוי אצווה (לדוגמה, שימוש בחיזוי אצווה של Vertex AI), ואם הנתונים שלך לניקוד מקורם ב-BigQuery, תוכל ליישם את פעולות העיבוד המקדים האלה כחלק מהסקריפט של BigQuery SQL. במקרה זה, תוכל להשתמש באותו סקריפט SQL לעיבוד מקדים כדי להכין נתוני אימון וניקוד כאחד.

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

אפשרות ב': זרימת נתונים

כפי שמוצג באיור 2, אתה יכול ליישם פעולות עיבוד מקדים יקרות מבחינה חישובית ב-Apache Beam, ולהפעיל אותן בקנה מידה באמצעות Dataflow. Dataflow הוא שירות קנה מידה אוטומטי מנוהל במלואו לעיבוד נתונים אצווה וזרם. כאשר אתה משתמש ב-Dataflow, אתה יכול גם להשתמש בספריות מיוחדות חיצוניות לעיבוד נתונים, בניגוד ל-BigQuery.

Dataflow יכול לבצע טרנספורמציות ברמת המופע, ושינויים היסטוריים ובזמן אמת של תכונות צבירה. בפרט, אם דגמי ה-ML שלך מצפים לתכונת קלט כמו total_number_of_clicks_last_90sec , פונקציות החלונות של Apache Beam יכולות לחשב תכונות אלו על סמך צבירת ערכי חלונות זמן של נתוני אירועים בזמן אמת (הזרמה) (לדוגמה, אירועי קליקים). בדיון המוקדם יותר בפירוט של טרנספורמציות , זה כונה "הצטברויות היסטוריות במהלך אימון, אבל צבירות בזמן אמת במהלך חיזוי."

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

ארכיטקטורה לשימוש בנתוני זרמים לצורך חיזוי.
איור 3. ארכיטקטורה ברמה גבוהה באמצעות נתוני זרמים לחיזוי ב-Dataflow.

כפי שמוצג באיור 3, במהלך העיבוד, אירועים הנקראים נקודות נתונים נקלטים ב- Pub/Sub . Dataflow צורך את נקודות הנתונים הללו, מחשב תכונות על סמך אגרגטים לאורך זמן, ולאחר מכן קורא ל-API של מודל ML הפרוס לצורך תחזיות. תחזיות נשלחות לאחר מכן לתור Pub/Sub יוצא. מ-Pub/Sub, ניתן לצרוך תחזיות על ידי מערכות במורד הזרם כמו ניטור או בקרה, או שניתן לדחות אותן אחורה (לדוגמה, כהתראות) ללקוח המבקש המקורי. ניתן לאחסן תחזיות גם במאגר נתונים עם אחזור נמוך כמו Cloud Bigtable לאחזור בזמן אמת. ניתן להשתמש ב-Cloud Bigtable גם כדי לצבור ולאחסן צבירות אלו בזמן אמת, כך שניתן יהיה לחפש אותן בעת ​​הצורך לצורך חיזוי.

ניתן להשתמש באותו יישום Apache Beam לעיבוד אצווה של נתוני אימון המגיעים מחנות נתונים לא מקוונת כמו BigQuery ולעיבוד נתונים בזמן אמת בזרימה לצורך הגשת תחזיות מקוונות.

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

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

אפשרות ג': TensorFlow

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

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

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

אתגרי עיבוד מוקדם

להלן האתגרים העיקריים של הטמעת עיבוד מקדים של נתונים:

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

    אם הטרנספורמציות הופכות לחלק מהמודל עצמו, זה יכול להיות פשוט לטפל בטרנספורמציות ברמת המופע, כפי שתואר קודם לכן באפשרות C: TensorFlow . במקרה זה, ממשק הגשת המודל (הפונקציה serving_fn ) מצפה לנתונים גולמיים, בעוד שהמודל הופך את הנתונים הללו באופן פנימי לפני חישוב הפלט. הטרנספורמציות זהות לאלו שהוחלו על נקודות האימון הגולמיות והניבוי.

  • טרנספורמציות במעבר מלא . אינך יכול ליישם טרנספורמציות של מעבר מלא כגון שינוי קנה מידה ונורמליזציה במודל TensorFlow שלך. בטרנספורמציות של מעבר מלא, יש לחשב כמה נתונים סטטיסטיים (לדוגמה, ערכי max min כדי לשנות את קנה המידה של תכונות מספריות) על נתוני האימון מראש, כמתואר באפשרות ב': זרימת נתונים . לאחר מכן יש לאחסן את הערכים במקום כלשהו כדי להשתמש בהם במהלך הגשת המודל לצורך חיזוי כדי להפוך את נקודות הנתונים הגולמיות החדשות כטרנספורמציות ברמת המופע, מה שמונע הטיית אימון-הגשה. אתה יכול להשתמש בספריית TensorFlow Transform ( tf.Transform ) כדי להטמיע ישירות את הנתונים הסטטיסטיים במודל TensorFlow שלך. גישה זו מוסברת בהמשך כיצד tf.Transform עובד .

  • הכנת הנתונים מראש ליעילות אימון טובה יותר . הטמעת טרנספורמציות ברמת המופע כחלק מהמודל עשויה לפגוע ביעילות תהליך ההדרכה. השפלה זו מתרחשת מכיוון שאותן טרנספורמציות מוחלות שוב ושוב על אותם נתוני אימון בכל תקופה. תאר לעצמך שיש לך נתוני אימון גולמיים עם 1,000 תכונות, ואתה מיישם שילוב של טרנספורמציות ברמת המופע כדי ליצור 10,000 תכונות. אם אתה מיישם את הטרנספורמציות האלה כחלק מהמודל שלך, ואם אתה מזין את המודל בנתוני האימון הגולמיים, 10,000 הפעולות האלה מיושמות N פעמים בכל מופע, כאשר N הוא מספר העידנים. בנוסף, אם אתה משתמש באקסלרטורים (GPUs או TPUs), הם יושבים בטל בזמן שה-CPU מבצע את הטרנספורמציות האלה, וזה לא שימוש יעיל במאיצים היקרים שלך.

    באופן אידיאלי, נתוני האימון עוברים טרנספורמציה לפני האימון, תוך שימוש בטכניקה המתוארת תחת אפשרות ב': זרימת נתונים , שבה 10,000 פעולות השינוי מיושמות פעם אחת בלבד בכל מופע אימון. לאחר מכן מוצגים למודל נתוני האימון שעברו טרנספורמציה. לא מופעלות טרנספורמציות נוספות, והמאיצים עסוקים כל הזמן. בנוסף, השימוש ב-Dataflow עוזר לך לעבד כמויות גדולות של נתונים בקנה מידה, תוך שימוש בשירות מנוהל במלואו.

    הכנת נתוני האימון מראש יכולה לשפר את יעילות האימון. עם זאת, הטמעת לוגיקת הטרנספורמציה מחוץ למודל (הגישות המתוארות באופציה א': BigQuery או אפשרות ב': זרימת נתונים ) אינה פותרת את הבעיה של הטיית אימון-הגשה. אלא אם כן אתה מאחסן את התכונה המהונדסת במאגר התכונות כדי לשמש הן לאימון והן לחיזוי, יש ליישם את לוגיקת הטרנספורמציה במקום כלשהו כדי להחיל אותה על נקודות נתונים חדשות המגיעות לחיזוי, מכיוון שממשק המודל מצפה לנתונים שעברו טרנספורמציה. ספריית TensorFlow Transform ( tf.Transform ) יכולה לעזור לך לטפל בבעיה זו, כמתואר בסעיף הבא.

איך tf.Transform עובד

ספריית tf.Transform שימושית עבור טרנספורמציות הדורשות מעבר מלא. הפלט של ספריית tf.Transform מיוצא כגרף TensorFlow המייצג את היגיון הטרנספורמציה ברמת המופע ואת הנתונים הסטטיסטיים המחושבים מהטרנספורמציות של מעבר מלא, שישמש להדרכה והגשה. שימוש באותו גרף גם לאימון וגם להגשה יכול למנוע הטיה, מכיוון שאותן טרנספורמציות מיושמות בשני השלבים. בנוסף, ספריית tf.Transform יכולה לפעול בקנה מידה בצינור עיבוד אצווה ב-Dataflow כדי להכין את נתוני ההדרכה מראש ולשפר את יעילות ההדרכה.

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

תרשים המציג זרימה מנתונים גולמיים דרך tf.Transform לתחזיות.
איור 4. התנהגות של tf.Transform לעיבוד מוקדם והמרת נתונים.

שינוי נתוני הכשרה והערכה

אתה מעבד מראש את נתוני האימון הגולמיים באמצעות הטרנספורמציה המיושמת ב- tf.Transform Apache Beam APIs, ומפעיל אותם בקנה מידה ב-Dataflow. העיבוד המקדים מתרחש בשלבים הבאים:

  • שלב הניתוח: במהלך שלב הניתוח, הנתונים הסטטיסטיים הנדרשים (כגון אמצעים, שונות וכמותיות) עבור טרנספורמציות מצב מחושבים על נתוני האימון עם פעולות מעבר מלא. שלב זה מייצר קבוצה של חפצי טרנספורמציה, כולל גרף transform_fn . הגרף transform_fn הוא גרף TensorFlow שיש לו את לוגיקת הטרנספורמציה כפעולות ברמת המופע. הוא כולל את הנתונים הסטטיסטיים המחושבים בשלב הניתוח כקבועים.
  • שלב הטרנספורמציה: במהלך שלב הטרנספורמציה, גרף ה- transform_fn מוחל על נתוני האימון הגולמיים, כאשר הנתונים הסטטיסטיים המחושבים משמשים לעיבוד רשומות הנתונים (לדוגמה, לשינוי קנה מידה של עמודות מספריות) בצורה ברמת המופע.

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

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

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

צרף טרנספורמציות למודל המיוצא

כפי שצוין, גרף transform_fn שמופק על ידי צינור tf.Transform מאוחסן כגרף TensorFlow מיוצא. הגרף המיוצא מורכב מהלוגיקת הטרנספורמציה כפעולות ברמת המופע, וכל הנתונים הסטטיסטיים מחושבים בטרנספורמציות המלאות כקבועי גרף. כאשר המודל המאומן מיוצא להגשה, גרף transform_fn מצורף ל- SavedModel כחלק מפונקציית serving_fn שלו.

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

גרף transform_fn , שהוא כעת חלק מהמודל, מחיל את כל הלוגיקה של העיבוד המקדים על נקודת הנתונים הנכנסת. הוא משתמש בקבועים המאוחסנים (כמו μ ו-σ כדי לנרמל את התכונות המספריות) בפעולה ברמת המופע במהלך חיזוי. לכן, גרף transform_fn ממיר את נקודת הנתונים הגולמיים לפורמט שעבר טרנספורמציה. הפורמט שעבר טרנספורמציה הוא מה שמצופה מהממשק הפנימי של המודל על מנת לייצר חיזוי, כפי שמוצג באיור 4.

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

סיכום אפשרויות עיבוד מוקדם

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

אפשרות עיבוד מקדים של נתונים ברמת המופע
(טרנספורמציות חסרות מדינה)

מעבר מלא במהלך האימון ורמת המופע במהלך ההגשה (טרנספורמציות ממלכתיות)

צבירות בזמן אמת (חלון) במהלך אימון והגשה (טרנספורמציות סטרימינג)

BigQuery (SQL)

ניקוד אצווה: בסדר - אותו יישום טרנספורמציה מיושם על נתונים במהלך אימון וניקוד אצווה.

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

ניקוד אצווה: לא מומלץ .

תחזית מקוונת: לא מומלץ .

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

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

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

זרימת נתונים (Apache Beam)

ניקוד אצווה: בסדר - אותו יישום טרנספורמציה מיושם על נתונים במהלך אימון וניקוד אצווה.

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

ניקוד אצווה: לא מומלץ .

תחזיות מקוונות: לא מומלץ .

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

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

חיזוי מקוון: בסדר - אותה טרנספורמציה של Apache Beam מוחלת על נתונים במהלך אימון (אצווה) והגשה (זרם).

זרימת נתונים (Apache Beam + TFT)

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

חיזוי מקוון: מומלץ - הוא נמנע הטיית אימון ומכין נתוני אימון מראש.

ניקוד אצווה: מומלץ .

תחזית מקוונת: מומלץ .

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

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

חיזוי מקוון: בסדר - אותה טרנספורמציה של Apache Beam מוחלת על נתונים במהלך אימון (אצווה) והגשה (זרם).

TensorFlow *
( input_fn & serving_fn )

ניקוד אצווה: לא מומלץ .

תחזית מקוונת: לא מומלץ .

ליעילות האימון בשני המקרים, עדיף להכין את נתוני האימון מראש.

ניקוד אצווה: לא אפשרי .

תחזית מקוונת: לא אפשרי .

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

תחזית מקוונת: לא אפשרי .

* עם TensorFlow, טרנספורמציות כמו הצלבה, הטמעה וקידוד חד-חם צריכות להתבצע באופן הצהרתי כעמודות feature_columns .

מה הלאה