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

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

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

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

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

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

האתגר

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

פתרון

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

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

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

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

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

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

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

עלות

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

מדרגיות

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

ביצועים

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

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

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

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

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

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

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

הטמעה טכנית

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

לפני שנכנס לפרטים של ההטמעה, נסכם בקצרה מהו MediaPipe. MediaPipe מאפשר ליצור ולפרוס פתרונות למידת מכונה במכשיר בנייד (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 של המכשיר לפני העברת שתי התמונות למודל זיהוי הפנים של למידת המכונה.

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

השפעה

בעקבות השילוב של ה-ML, הצוות של Tokopedia הצליח לפתור את שיעור הדחייה הגבוה, והתוצאות היו:

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

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

סיכום

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

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

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