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

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

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

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

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

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

האתגר

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

פתרון

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

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

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

למה לבחור ב-ML ולא בפתרונות אחרים?

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

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

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

עלות

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

מדרגיות

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

ביצועים

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

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

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

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

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

אחרי שהם שקלו את הגורמים האלה, הם החליטו ש-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 מאפשר לכם ליצור ולפרוס פתרונות ML במכשיר בניידים (Android, ‏iOS), באינטרנט, במחשבים, במכשירי קצה וב-IoT.

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

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

נחזור להטמעה של 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 מייצג את התיבה התוחמת (bounding box) של הפנים במרחב הפיקסלים של התמונה, כאשר xMin, xMax מציינים את גבולות ציר ה-X, ‏yMin, yMax מציינים את גבולות ציר ה-Y, ו-width, height הם המימדים של התיבה התוחמת. בשביל keypoints, x ו-y מייצגים את המיקום בפועל של נקודת המפתח במרחב הפיקסלים של התמונה. השדה name מספק תווית לנקודת הציון, שהן 'rightEye',‏ 'leftEye',‏ 'noseTip',‏ 'mouthCenter',‏ 'rightEarTragion' ו-'leftEarTragion' בהתאמה. כמו שצוין בתחילת הפוסט הזה, כדי להשלים את אימות המוכר, המוכר צריך להעלות את התעודה המזהה הלאומית שלו ותמונת סלפי עם התעודה המזהה. הפלט של המודל משמש לבדיקה מול קריטריוני הקבלה – כלומר, כדי שתמונת הסלפי והתעודה המזהה ייחשבו כתקפות, צריכה להיות התאמה בין שש נקודות המפתח שצוינו קודם.

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

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

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

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

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

השפעה

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

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

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

סיכום

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

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

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