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).
- להזהיר משתמשים על אפשרות דחייה של התמונות שלהם, על סמך האיכות שנמדדת על ידי המודל.
למה כדאי לבחור בלמידת מכונה ולא בפתרונות אחרים?
בעזרת למידת מכונה אפשר לבצע משימות שחוזרות על עצמן באופן ידני, שצורכות זמן רב או פחות מעשי. במקרה של 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 השתמשה בספריית זיהוי הפנים של TensorFlow, שכוללת מודלים להרצת זיהוי פנים בזמן אמת.
בפתרון הזה, המודל MediaPipeFaceDetector-TFJS נמצא בספרייה הזו ומטמיע את סביבת זמן הריצה tfjs
.
לפני שנכנס לפרטים של ההטמעה, נסכם בקצרה מהו MediaPipe. MediaPipe מאפשר ליצור ולפרוס פתרונות למידת מכונה במכשיר בנייד (Android, iOS), באינטרנט, במחשב, במכשירי קצה וב-IoT.
נכון למועד כתיבת הפוסט הזה, יש 14 פתרונות שונים שהוצעו על ידי MediaPipe. אפשר להשתמש בסביבת זמן ריצה של mediapipe
או של tfjs
. סביבת זמן הריצה של tfjs
מבוססת על JavaScript, והיא מספקת חבילת JavaScript שאפשר להוריד באופן חיצוני על ידי אפליקציית האינטרנט. זה שונה מסביבת זמן ריצה של mediapipe
, שנוצרת באמצעות C++ ומתומללת למודול WebAssembly. ההבדלים העיקריים הם בביצועים, ביכולת לנפות באגים ובקיבוץ. אפשר לצרף את חבילת ה-JavaScript בחבילה עם בנדרים קלאסיים כמו webpack. לעומת זאת, מודול Wasm הוא משאב בינארי גדול ונפרד (הבעיה הזו מתמתנת כי הוא לא תלוי בזמן הטעינה), ונדרש תהליך עבודה שונה לניפוי באגים ב-Wasm. עם זאת, הוא פועל מהר יותר כדי לעמוד בדרישות הטכניות ובדרישות הביצועים.
בחזרה להטמעה של 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'
, בהתאמה.
כפי שצוין בתחילת הפוסט הזה, כדי להשלים את תהליך האימות של המוכר, הוא צריך להעלות את תעודת הזהות שלו ותמונת סלפי עם התעודה.
הפלט של המודל משמש לבדיקה אל הקריטריונים לקבלה, כלומר, כדי שתהיה התאמה לשש נקודות המפתח שצוינו קודם לכן, שייחשבו ככרטיס זיהוי ותמונת סלפי חוקיים.
אחרי שהאימות יושלם, פרטי בית העסק הרלוונטיים יועברו לקצה העורפי. אם האימות נכשל, המוכר יקבל הודעת כשל ואפשרות לנסות שוב. לא יישלח מידע לקצה העורפי.
שיקולי ביצועים למכשירים פשוטים
החבילה הזו היא רק 24.8KB (מקוצרת ומעוברת ב-Gzip), כך שהיא לא משפיעה באופן משמעותי על זמן ההורדה. עם זאת, במכשירים בסיסיים מאוד, עיבוד זמן הריצה נמשך זמן רב. הוספנו לוגיקה נוספת כדי לבדוק את ה-RAM וה-CPU של המכשיר לפני העברת שתי התמונות למודל זיהוי הפנים של למידת המכונה.
אם במכשיר יש יותר מ-4GB של זיכרון RAM, חיבור לרשת מהיר יותר מ-4G ו-CPU עם יותר מ-6 ליבות, התמונות מועברות לדגם במכשיר לצורך אימות הפנים. אם הדרישות האלה לא מתקיימות, המערכת מדלגת על המודל במכשיר והתמונות נשלחות ישירות לשרת לצורך אימות, באמצעות גישה היברידית כדי להתאים למכשירים הישנים האלה. עם הזמן, יותר מכשירי חומרה יוכלו להעביר עומסי עיבוד מהשרת, ככל שהחומרה תמשיך להתפתח.
השפעה
בעקבות השילוב של ה-ML, הצוות של Tokopedia הצליח לפתור את שיעור הדחייה הגבוה, והתוצאות היו:
- שיעור הדחייה ירד ביותר מ-20%.
- מספר האישורים הידניים ירד בכמעט 70%.
כך לא רק חוויית המשתמש של המוכרים השתפרה, אלא גם עלות התפעול של צוות Tokopedia ירדה.
סיכום
באופן כללי, התוצאות של מחקר המקרה הזה הראו שבתרחישים המתאימים, פתרונות למידת מכונה במכשיר באינטרנט יכולים לשפר את חוויית המשתמש ואת היעילות של התכונות, וגם לחסוך בעלויות ולספק יתרונות עסקיים אחרים.
כדאי לנסות את התכונה זיהוי פנים של MediaPipe באמצעות MediaPipe Studio ואת דוגמת הקוד של MediaPipe Face Detector לדפדפן.
אם אתם רוצים להרחיב את היכולות של אפליקציית האינטרנט שלכם באמצעות למידת מכונה במכשיר, כדאי לעיין במקורות המידע הבאים: