סוגי נתונים וטרנספורמציות

בדף הזה מתואר איך Vertex AI עובד עם סוגים שונים של נתונים טבלאיים עבור מודלים של AutoML.

מבוא לטרנספורמציות ב-Vertex AI

אימון המודל

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

יש תמיכה בטרנספורמציות הבאות:

אם מקור הנתונים הוא קובץ CSV ב-Cloud Storage, צריך להשתמש בפסיקים (',') כמפריד. ב-Vertex AI נעשה שימוש בפורמט CSV‏ RFC 4180.

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

אם ערך הסוג חסר או null, ‏ Vertex AI מטפל בו על סמך יעד המודל והטרנספורמציה שחלה על התכונה הזו. פרטים נוספים מופיעים במאמר בנושא איך המערכת מטפלת בערכים חסרים או בערכי null.

חיזוי (Prediction)

הפורמט של הנתונים שמשמשים לחיזוי צריך להיות זהה לפורמט ששימש לאימון. פרטים נוספים זמינים במאמר בנושא פורמט הנתונים לתחזיות.

טרנספורמציות ב-Vertex AI

קטגורי

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

לדוגמה:

  • בוליאני – true, false.
  • מדינה – "USA",‏ "Canada",‏ "China" וכן הלאה.
  • קוד סטטוס של HTTP – "200",‏ "404",‏ "500" וכן הלאה.

הערכים הקטגוריים הם תלויי-רישיות (case-sensitive), כלומר הבדלים באיות נחשבים לקטגוריות שונות (לדוגמה, 'Color' ו-'Colour' לא משולבים).

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

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

אפשר להחיל טרנספורמציות קטגוריות על נתוני STRING בקובצי CSV או על סוגי הנתונים הבאים ב-BigQuery:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • BOOL
  • מחרוזת
  • תאריך
  • DATETIME
  • שעות
  • TIMESTAMP

טקסט

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

הנה כמה דוגמאות לערכי טקסט:

  • "The quick brown fox"
  • "This restaurant is the best! The food is delicious"

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

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

  • הטקסט כמו שהוא – ללא שינוי של אותיות רישיות, פיסוק, איות, זמן וכו'.
  • הופכים טקסט לאסימונים של מילים ויוצרים 1-גרם ו-2-גרם ממילים. ממירים כל n-gram לאינדקס של חיפוש במילון ויוצרים הטמעה לכל אינדקס. שילוב ההטמעה של כל הרכיבים להטמעה אחת באמצעות הממוצע.

    יצירת טוקנים מבוססת על גבולות של סקריפטים ביוניקוד.

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

אפשר להחיל טרנספורמציות של טקסט על נתוני STRING בקובצי CSV או על סוגי הנתונים הבאים ב-BigQuery:

  • מחרוזת
  • DATETIME

Numeric

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

רווחים לבנים בתחילת הטקסט או בסופו נחתכים.

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

פורמט דוגמאות הערות
מחרוזת מספרית ‫"101", ‏ 101.5" התו היחיד שמותר להשתמש בו כמפריד עשרוני הוא הנקודה ('.'). ‫"101,5" ו-"100,000" הם לא מחרוזות מספריות תקינות.
סימון מדעי ‪"1.12345E+11", "1.12345e+11" שימו לב להערה לגבי מחרוזות מספריות בנוגע לתווי הפרדה עשרוניים.
לא מספר ‫"NAN",‏ "nan",‏ "+NAN" אין חשיבות לאותיות רישיות או קטנות. המערכת מתעלמת מסימני פלוס (+) או מינוס (-) שמופיעים לפני המספר. הערך יפורש כערך NULL.
Infinity ‫"INF",‏ "+inf" אין חשיבות לאותיות רישיות או קטנות. המערכת מתעלמת מסימני פלוס (+) או מינוס (-) שמופיעים לפני המספר. הערך יפורש כערך NULL.

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

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

  • הערך שהומר ל-float32.
  • ציון ה-Z של הערך.
  • מדד של משבצת (bucket) של הערך על סמך חלוקה לעשירונים. גודל הקטגוריה הוא 100.
  • ‫log(value+1) אם הערך גדול מ-0 או שווה לו. אחרת, הטרנספורמציה הזו לא מוחלת והערך נחשב כערך חסר.
  • ציון Z של log(value+1) אם הערך גדול מ-0 או שווה לו. אחרת, הטרנספורמציה הזו לא מוחלת והערך נחשב כערך חסר.
  • ערך בוליאני שמציין אם הערך הוא null.
  • שורות עם קלט מספרי לא תקין (לדוגמה, מחרוזת שלא ניתן לנתח ל-float32) לא נכללות באימון ובחיזוי.
  • המערכת לא מתייחסת באופן מיוחד לערכים קיצוניים או לערכי חריגה.

אפשר להחיל המרות מספריות על נתוני STRING בקובצי CSV או על סוגי הנתונים הבאים ב-BigQuery:

  • INT64
  • NUMERIC, BIGNUMERIC
  • FLOAT64
  • מחרוזת
  • TIMESTAMP

חותמת הזמן

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

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

בטבלה הבאה מוצגים כל הפורמטים התואמים של מחרוזות חותמת זמן:

פורמט דוגמה הערות
%E4Y-%m-%d ‪"2017-01-30" במאמר תיעוד של Abseil מופיע תיאור של הפורמט הזה.
%E4Y/%m/%d ‪"2017/01/30"
%Y/%m/%d %H:%M:%E*S "2017/01/30 23:59:58"
%d-%m-%E4Y "30-11-2018"
%d/%m/%E4Y ‪"30/11/2018"
%d-%B-%E4Y ‪"30-November-2018"
%Y-%m-%dT%H:%M:%E*S%Ez "2019-05-17T23:56:09.05+00:00" RFC 3339. מציינים את ההפרש מאזור הזמן (z) בפורמט: ±HH:MM[:SS[.ffffff]]
מחרוזת של חותמת זמן של מערכת Unix בשניות ‪"1541194447" רק לתקופות שבין 01/Jan/1990 לבין 01/Jan/2030.
מחרוזת של חותמת זמן של מערכת Unix באלפיות השנייה ‪"1541194447000"
מחרוזת של חותמת זמן של מערכת Unix במיקרו-שניות ‪"1541194447000000"
מחרוזת של חותמת זמן של מערכת Unix בננו-שניות ‪"1541194447000000000"

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

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

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

אפשר להחיל המרות של חותמות זמן על נתוני STRING בקובצי CSV או על סוגי הנתונים הבאים ב-BigQuery:

  • INT64
  • מחרוזת
  • תאריך
  • DATETIME
  • TIMESTAMP

סוגי נתונים מורכבים

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

Struct

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

הנה כמה דוגמאות למבנים:

  • לחץ דם – {"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
  • מוצר – {"name": "iPhone", price: 1000}

משתמשים בסוג הנתונים STRUCT של BigQuery כדי לייצג מבנים.

המערכת משטחת ערכי Struct לשדות באופן אוטומטי. ‫Vertex AI מחיל את טרנספורמציית הנתונים על השדות המפושטים בהתאם לסוג הטרנספורמציה שלהם.

מערך

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

מערכים ב-Vertex AI מעובדים כמשקל יחסי. במילים אחרות, לפריטים שמופיעים בהמשך המערך יש משקל גבוה יותר מאשר לפריטים שמופיעים בתחילת המערך.

הנה כמה דוגמאות למערכים:

  • קטגוריות מוצרים:

    ["Clothing", "Women", "Dress", ...]

  • הרכישות האחרונות:

    ["iPhone", "Laptop", "Suitcase", ...]

  • רשומות משתמשים:

    [{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]

משתמשים בסוג הנתונים ARRAY של BigQuery כדי לייצג מערכים.

הטרנספורמציה של הנתונים שמבוצעת על ידי Vertex AI תלויה בסוג הטרנספורמציה שמוחל על המערך:

סוג המערך שינוי
מערך מספרי
  • כל השינויים שבוצעו בסוג מספרי חלים על הממוצע של N הפריטים האחרונים, כאשר N = {1, 2, 4, 8, all}. לכן, הפריטים שמופיעים בסוף המערך מקבלים את הדגש הכי חזק, ולא הפריטים שמופיעים בהתחלה.
  • הממוצע של מערכים ריקים נחשב לאפס.
מערך קטגורי
  • לכל רכיב במערך של N הפריטים האחרונים שבהם N = {1, 2, 4, 8, all}, ממירים את שם הקטגוריה לאינדקס של מילון חיפוש ויוצרים הטמעה לכל אינדקס. משלבים את ההטמעה של כל הרכיבים להטמעה אחת באמצעות הממוצע.
  • מערכים ריקים נחשבים להטמעה של אפסים.
מערך טקסט
  • שרשור כל ערכי הטקסט במערך לערך טקסט יחיד באמצעות רווח (" ") כמפריד, ולאחר מכן התייחסות לתוצאה כאל ערך טקסט יחיד. החלת הטרנספורמציות על עמודות Text (טקסט).
  • מערכים ריקים נחשבים להטמעה של אפסים.
מערך של חותמות זמן
  • החלת הטרנספורמציות על עמודות מספריות לממוצע של N הפריטים האחרונים במערך. ‫N = {1, 2, 4, 8, all}. המשמעות היא שהפריטים שהכי חשובים הם אלה שמופיעים לקראת סוף המערך.
מערך של מבנים
  • המבנים במערך משוטחים לשדות נפרדים, ונוצרים מהם מערכים לפי שדה. הטרנספורמציה של המערך (כפי שמתואר בטבלה הזו) מוחלת בהתאם לסוג השדה של המערך.

איך המערכת מטפלת בערכים חסרים או בערכי null

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

סיווג ורגרסיה

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

תחזיות

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

מותרות שורות חסרות (לדוגמה, אין שורה לתאריך מסוים, עם גרנולריות נתונים יומית), אבל Vertex AI לא משלים ערכים לנתונים החסרים. שורות חסרות עלולות להפחית את איכות המודל, ולכן מומלץ להימנע משורות חסרות ככל האפשר. לדוגמה, אם שורה חסרה כי כמות המכירות באותו יום הייתה אפס, צריך להוסיף שורה לאותו יום ולהגדיר במפורש את נתוני המכירות כ-0.

אילו ערכים נחשבים לערכי null

כשמאמנים מודל טבלאי של AutoML, ‏ Vertex AI מתייחס לערכים הבאים כאל ערכים ריקים (null):

  • ערך NULL ב-BigQuery.

  • ערכים מספריים אינסופיים או NaN.

  • מחרוזת ריקה. ‫Vertex AI לא מסיר רווחים ממחרוזות. כלומר, הערך " " לא נחשב לערך Null.

  • מחרוזת שאפשר להמיר ל-NaN או לערך מספרי אינסופי.

    • ‫NAN: לא תלוי-רישיות, עם סימן פלוס או מינוס אופציונליים בתחילת המחרוזת.
    • ‫INF: לא תלוי-רישיות, עם סימן פלוס או מינוס אופציונליים לפני.
  • חסרים ערכים.

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

פורמט הנתונים לתחזיות

פורמט הנתונים שמשמש לחיזוי צריך להיות זהה לפורמט שמשמש לאימון.

אם אימנתם את המודל על נתונים בקובץ CSV ב-Cloud Storage, הנתונים היו מסוג STRING. אם אתם משתמשים באובייקט JSON כדי לשלוח את בקשת החיזוי, ודאו שכל הערכים בצמדי המפתח/ערך הם גם מסוג STRING.

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

סוג נתונים ב-BigQuery סוג הנתונים JSON
INT64 String
NUMERIC, BIGNUMERIC מספר
FLOAT64 מספר
BOOL בוליאני
מחרוזת String
תאריך String
DATETIME String
שעות String
TIMESTAMP String
מערך מערך
STRUCT אובייקט

לדוגמה, אם נתוני האימון מכילים length מאפיינים מסוג FLOAT64, צמד המפתח-ערך הבא ב-JSON הוא נכון:

"length":3.6,

לעומת זאת, צמד המפתח-ערך הבא ב-JSON יגרום לשגיאה:

"length":"3.6",

המאמרים הבאים