איך Tokopedia מפחיתה את עלויות התפעול שלה על ידי שיפור אפליקציית האינטרנט של אתר המכירה באמצעות למידת מכונה

Dendi Sunardi
Dendi Sunardi
Geoffrey Prasetyo
Geoffrey Prasetyo
Swetha Gopalakrishnan
Swetha Gopalakrishnan

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

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

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

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

אתגר

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

פתרון

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

שימוש במודל למידת מכונה בשלב מוקדם של תהליך ה-KYC מאפשר להם:

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

למה כדאי לבחור בלמידת מכונה לעומת פתרונות אחרים?

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

שיקולים בבחירת מודל

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

עלות

הם העריכו את העלות הכוללת של השימוש במודל. מכיוון ש-TensorFlow.js היא חבילת קוד פתוח שמתוחזקת היטב על ידי Google, אנחנו חוסכים בעלויות הרישוי והתחזוקה. שיקול נוסף הוא עלות ההסקה. היכולת להריץ הסקת מסקנות בצד הלקוח חוסכת הרבה כסף בהשוואה לעיבוד שלה בצד השרת באמצעות יחידות GPU יקרות, במיוחד אם מתברר שהנתונים לא חוקיים ואי אפשר להשתמש בהם.

מדרגיות

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

ביצועים

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

שיקולים נוספים

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

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

הטכנולוגיה שנבחרה

TensorFlow.js עמד בדרישות של החברה אחרי שהם מביאים בחשבון את הגורמים האלה. הוא יכול לפעול באופן מלא במכשיר באמצעות הקצה העורפי של WebGL כדי להשתמש ב-GPU של המכשיר. הפעלת מודל במכשיר מאפשרת משוב מהיר יותר למשתמש, בגלל זמן אחזור קצר יותר בשרת ולהפחית את העלות של מחשוב השרת. תוכלו לקרוא מידע נוסף על למידת מכונה במכשיר במאמר היתרונות והמגבלות של למידת מכונה במכשיר.

"TensorFlow.js היא ספרייה של Google בקוד פתוח ללמידת מכונה שמטרתה מפתחי JavaScript שיכולים להריץ צד הלקוח בדפדפן. זו האפשרות הכי ותיקה ל-Web AI עם תמיכה מקיפה במפעילי WebGL, WebAssembly ו-WebGPU, שאפשר להשתמש בה בדפדפן עם ביצועים מהירים."איך Adobe השתמשה ב-Web ML בשילוב TensorFlow.js כדי לשפר את Photoshop לאינטרנט

הטמעה טכנית

ב-Mitra Tokopedia משתמשים ב-MediaPipe ובספרייה לזיהוי פנים של TensorFlow – חבילה שמספקת מודלים להפעלה של זיהוי פנים בזמן אמת. באופן ספציפי, המודל MediaPipeFaceDetector-TFJS שסופק בספרייה הזו, ושמטמיע את זמן הריצה של tfjs בפתרון הזה.

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

קיימים 14 פתרונות שונים שהוצעו על ידי MediaPipe נכון למועד כתיבת הפוסט הזה. אפשר להשתמש בסביבת זמן ריצה של mediapipe או tfjs. סביבת זמן הריצה של tfjs מבוססת על JavaScript ומספקת חבילת JavaScript שאפליקציית האינטרנט יכולה להוריד באופן חיצוני. היא שונה מסביבת זמן ריצה של mediapipe, שמבוססת על C++ ועבר הידור למודול WebAssembly. ההבדלים העיקריים הם ביצועים, יכולת ניפוי באגים וקיבוץ נתונים. אפשר לצרף את חבילת ה-JavaScript בחבילה עם חבילות של Bundler קלאסיות, כמו webpack. לעומת זאת, מודול Wasm הוא משאב בינארי גדול יותר ונפרד (שניתן לצמצם אותו באמצעות אי התלות בזמן טעינה) ונדרש לו תהליך עבודה שונה של ניפוי באגים ב-Wasm. עם זאת, הוא פועל מהר יותר כדי לעמוד בדרישות טכניות ובדרישות ביצועים.

תרשים של האופן שבו המודלים של MediaPipe ו-TensorFlow פועלים בזמני הריצה השונים, תוך שימוש ב-FaceDetection כדוגמה.
איור כללי של האופן שבו המודלים של MediaPipe ו-TensorFlow פועלים בסביבות זמן ריצה שונות, בעזרת זיהוי פנים כדוגמה

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

// Create the detector.
const model = faceDetection.SupportedModels.MediaPipeFaceDetector;
const detectorConfig = {
  runtime: 'tfjs'
};

const detector = await faceDetection.createDetector(model, detectorConfig);

// Run inference to start detecting faces.
const estimationConfig = {flipHorizontal: false};
const faces = await detector.estimateFaces(image, estimationConfig);

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

[
  {
    box: {
      xMin: 304.6476503248806,
      xMax: 502.5079975897382,
      yMin: 102.16298762367356,
      yMax: 349.035215984403,
      width: 197.86034726485758,
      height: 246.87222836072945
    },
    keypoints: [
      {x: 446.544237446397, y: 256.8054528661723, name: "rightEye"},
      {x: 406.53152857172876, y: 255.8, "leftEye },
      ...
    ],
  }
]

box מייצג את התיבה התוחמת של הפנים במרחב של פיקסל התמונה, כאשר xMin, xMax מציין את גבולות ה-x, yMin, yMax מציין את גבולות ה-y, ו-width, height הם המידות של התיבה התוחמת. עבור keypoints, x ו-y מייצגים את מיקום נקודת המפתח בפועל בשטח פיקסל התמונה. הפונקציה name מספקת תווית לנקודת המפתח, שהיא 'rightEye', 'leftEye', 'noseTip', 'mouthCenter', 'rightEarTragion' ו-'leftEarTragion', בהתאמה. כפי שצוין בתחילת הפוסט הזה, כדי להשלים את תהליך האימות של בית העסק, המוכר צריך להעלות את התעודה המזהה שלו ותמונת סלפי עם התעודה המזהה. הפלט של המודל משמש כדי לבדוק את הקריטריונים לקבלה – כלומר, למצוא התאמה בין 6 הנקודות העיקריות שצוינו קודם לכן כתמונה תקפה של כרטיס זיהוי ותמונת סלפי.

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

תרשים של דף ה-KYC ב-Mitra, מודל TensorFlow.js והשרת שמקיימים אינטראקציה זה עם זה.
האינטראקציה בין דף Mitra KYC, מודל TensorFlow.js והשרת

שיקולי ביצועים במכשירים פשוטים

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

אם יש במכשיר יותר מ-4GB של זיכרון RAM, חיבור לרשת יותר מ-4G ומעבד עם יותר מ-6 ליבות, התמונות מועברות לדגם במכשיר לצורך אימות הפנים. אם לא עומדים בדרישות האלה, המערכת מדלגת על המודל במכשיר והתמונות נשלחות ישירות לשרת לאימות בגישה היברידית שמתאימה למכשירים הישנים האלה. עם הזמן, מכשירים נוספים יוכלו להפחית את עומס הנתונים מהשרת ככל שהחומרה תמשיך להתפתח.

השפעה

בזכות השילוב עם למידת מכונה, Tokopedia הצליחה לפתור את שיעור הדחייה הגבוה והניבה את התוצאות הבאות:

  • שיעור הדחיות ירד ביותר מ-20%.
  • מספר האישורים הידניים ירד בכמעט 70%.

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

סיכום

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

אתם יכולים לנסות את התכונה 'זיהוי פנים של MediaPipe' בעצמכם באמצעות MediaPipe Studio ודוגמת הקוד של MediaPipe Face Detector באינטרנט.

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