Tokopedia è un'azienda tecnologica indonesiana con uno dei più grandi marketplace di e-commerce, che ospita oltre 40 prodotti digitali e più di 14 milioni di venditori registrati sulla sua piattaforma.
Mitra Tokopedia, parte dei verticali di business di Tokopedia, è un'applicazione web che aiuta i proprietari di piccole attività a vendere prodotti digitali come coupon di credito e di gioco, pacchetti dati, token di elettricità, fatture sanitarie nazionali e altro ancora. Il sito web è uno dei canali principali per i venditori di Mitra Tokopedia in oltre 700 città, il che rende fondamentale garantire un'esperienza utente fluida.
Un passaggio chiave della procedura di onboarding richiede a questi venditori di verificare la propria identità. Il venditore deve caricare il proprio documento di identità nazionale e un selfie con il documento per completare la verifica del venditore. Questo processo è noto come Know-Your-Customer (KYC).
Aggiungendo funzionalità di machine learning a questo processo KYC fondamentale all'interno della sua app web, Mitra Tokopedia è riuscita a ottenere un'esperienza utente migliore con una riduzione di oltre il 20% degli errori di verifica. Inoltre, ha ottenuto risparmi sui costi operativi riducendo le approvazioni manuali di quasi il 70%.
La sfida
La maggior parte dei dati KYC veniva rifiutata, creando migliaia di ticket a settimana per il team operativo per la verifica manuale. Questo non solo ha comportato costi operativi elevati, ma ha anche generato un'esperienza utente negativa per i venditori, la cui procedura di verifica ha subito ritardi. Il motivo principale del rifiuto è stato che i venditori non hanno caricato correttamente i selfie con i documenti d'identità. Mitra Tokopedia voleva risolvere questo problema in modo scalabile utilizzando le moderne funzionalità web.
Soluzione
Il team di Tokopedia ha deciso di utilizzare il machine learning con TensorFlow.js per risolvere questo problema nella primissima fase del processo KYC, ovvero quando l'utente carica le immagini. Hanno utilizzato MediaPipe e la libreria di riconoscimento facciale di TensorFlow per rilevare il volto del venditore con sei punti chiave quando il venditore carica le immagini del documento d'identità e del selfie. L'output del modello viene quindi utilizzato per verificare i criteri di accettazione. Una volta completata la verifica, le informazioni vengono inviate al backend. Se la verifica non va a buon fine, il venditore riceve un messaggio di errore e un'opzione per riprovare. È stato utilizzato un approccio ibrido in cui il modello esegue l'inferenza on-device o lato server a seconda delle specifiche dello smartphone. Un dispositivo di fascia più bassa eseguirà l'inferenza sul server.
L'utilizzo di un modello di ML nelle prime fasi del processo KYC consente di:
- Migliorare il tasso di rifiuto nella procedura KYC.
- Avvisa gli utenti del possibile rifiuto delle loro immagini, in base alla qualità valutata dal modello.
Perché scegliere il ML rispetto ad altre soluzioni?
Il machine learning può automatizzare attività ripetitive che altrimenti richiederebbero molto tempo o sarebbero poco pratiche da eseguire manualmente. Nel caso di Tokopedia, l'ottimizzazione della soluzione attuale non basata sul ML non ha prodotto risultati significativi, mentre una soluzione di ML potrebbe ridurre in modo significativo il carico sul team operativo che doveva elaborare manualmente migliaia di approvazioni ogni settimana. Con una soluzione ML, i controlli delle immagini possono essere eseguiti quasi istantaneamente, offrendo un'esperienza utente migliore e migliorando l'efficienza operativa. Scopri di più sulla definizione del problema per determinare se il ML è una soluzione adatta al tuo problema.
Considerazioni per la scelta di un modello
I seguenti fattori sono stati presi in considerazione nella scelta del modello ML.
Costo
Hanno valutato il costo complessivo dell'utilizzo del modello. Poiché TensorFlow.js è un pacchetto open source ben gestito da Google, risparmiamo sui costi di licenza e manutenzione. Un'ulteriore considerazione riguarda il costo dell'inferenza. La possibilità di eseguire l'inferenza sul lato client consente di risparmiare molto rispetto all'elaborazione sul lato server con GPU costose, soprattutto se i dati risultano non validi e inutilizzabili.
Scalabilità
Hanno considerato la scalabilità del modello e della tecnologia. È in grado di gestire la crescita dei dati e la complessità del modello man mano che il nostro progetto si evolve? Può essere esteso per soddisfare altri progetti o casi d'uso? L'elaborazione su dispositivo è utile perché il modello potrebbe essere ospitato su una CDN e distribuito sul lato client, il che è molto scalabile.
Prestazioni
Hanno preso in considerazione le dimensioni della libreria (in kB) e la latenza del processo di runtime. La maggior parte della base utenti di Mitra Tokopedia dispone di dispositivi di fascia medio-bassa con velocità di internet e connettività moderate. Pertanto, le prestazioni in termini di download e runtime (ovvero la velocità con cui il modello può produrre un output) sono una priorità assoluta per soddisfare le loro esigenze specifiche e garantire un'esperienza utente ottimale.
Altre considerazioni
Conformità legale: dovevano assicurarsi che la libreria scelta fosse conforme alle normative pertinenti sulla protezione dei dati e sulla privacy.
Competenze: hanno valutato le competenze e le abilità del loro team. Alcuni framework e librerie di ML potrebbero richiedere linguaggi di programmazione o competenze specifiche in un'area particolare. Prendendo in considerazione questi fattori, hanno preso una decisione ponderata nella scelta del modello giusto per il loro progetto di machine learning.
Tecnologia scelta
TensorFlow.js ha soddisfatto le loro esigenze, dopo aver considerato questi fattori. È in grado di funzionare completamente on-device utilizzando il suo backend WebGL per utilizzare la GPU del dispositivo. L'esecuzione di un modello on-device consente di fornire un feedback più rapido all'utente grazie alla latenza ridotta del server e riduce i costi di calcolo del server. Scopri di più sul ML on-device nell'articolo Vantaggi e limitazioni del ML on-device.
"TensorFlow.js è una libreria di machine learning open source di Google rivolta agli sviluppatori JavaScript, in grado di essere eseguita lato client nel browser. È l'opzione più matura per l'AI web con un supporto completo degli operatori di backend WebGL, WebAssembly e WebGPU che può essere utilizzato nel browser con prestazioni elevate."—How Adobe used Web ML with TensorFlow.js to enhance Photoshop for web
Implementazione tecnica
Mitra Tokopedia ha utilizzato MediaPipe e la libreria di riconoscimento facciale di TensorFlow, un pacchetto che fornisce modelli per eseguire il riconoscimento facciale in tempo reale.
In particolare, per questa soluzione è stato utilizzato il modello MediaPipeFaceDetector-TFJS fornito in questa libreria, che implementa il runtime tfjs.
Prima di passare all'implementazione, facciamo un breve riepilogo di cos'è MediaPipe. MediaPipe ti consente di creare ed eseguire il deployment di soluzioni ML on-device su dispositivi mobili (Android, iOS), web, computer, dispositivi edge e IoT.
Al momento della stesura di questo post, MediaPipe offre 14 soluzioni diverse. Puoi utilizzare un runtime mediapipe o tfjs. Il runtime tfjs è creato con JavaScript e fornisce un pacchetto JavaScript che può essere scaricato esternamente dall'applicazione web. Questo è diverso da un runtime mediapipe, che è creato con C++ e compilato in un modulo WebAssembly. Le differenze principali sono le prestazioni,
la possibilità di eseguire il debug e il raggruppamento. Il pacchetto JavaScript può essere raggruppato con bundler classici come webpack. Al contrario, il modulo Wasm è una risorsa binaria più grande e separata (un problema mitigato dal fatto che non è una dipendenza in fase di caricamento) e richiede un flusso di lavoro di debug Wasm diverso. Tuttavia, l'esecuzione è più rapida per soddisfare i requisiti tecnici e di prestazioni.
Tornando all'implementazione di Tokopedia, il primo passaggio consiste nell'inizializzare il modello come segue. Quando l'utente carica una foto, un HTMLImageElement viene passato come input al rilevatore.
// 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);
Il risultato dell'elenco dei volti contiene i volti rilevati per ogni volto nell'immagine. Se il modello non riesce a rilevare alcun volto, l'elenco sarà vuoto. Per ogni volto, contiene un riquadro di delimitazione del volto rilevato, nonché un array di sei punti chiave per il volto rilevato. Sono inclusi elementi come occhi, naso e bocca. Ogni punto chiave contiene x e y, oltre a un nome.
[
{
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 rappresenta il riquadro di delimitazione del volto nello spazio dei pixel dell'immagine, con
xMin, xMax che indicano i limiti x, yMin, yMax che indicano i limiti y e
width, height che indicano le dimensioni del riquadro di delimitazione.
Per keypoints, x e y rappresentano la posizione effettiva del punto di riferimento nello spazio dei pixel dell'immagine.
name fornisce un'etichetta per il keypoint, che sono rispettivamente 'rightEye', 'leftEye',
'noseTip', 'mouthCenter', 'rightEarTragion' e 'leftEarTragion'.
Come accennato all'inizio di questo post, il venditore deve caricare il proprio documento di identità nazionale e un selfie con il documento per completare la verifica del venditore.
L'output del modello viene quindi utilizzato per verificare i criteri di accettazione, ovvero per trovare una corrispondenza tra i sei punti chiave menzionati in precedenza per essere considerati un documento di identità e un'immagine selfie validi.
Una volta completata la verifica, i dati del venditore pertinenti vengono trasmessi al backend. Se la verifica non va a buon fine, il venditore riceve un messaggio di errore e l'opzione per riprovare. Nessuna informazione verrà inviata al backend.
Considerazioni sulle prestazioni per i dispositivi di fascia bassa
Questo pacchetto è di soli 24,8 kB (minimizzato e compresso con gzip), il che non influisce in modo significativo sul tempo di download. Tuttavia, per i dispositivi di fascia molto bassa, l'elaborazione in fase di runtime richiede molto tempo. È stata aggiunta una logica aggiuntiva per controllare la RAM e la CPU del dispositivo prima di passare le due immagini al modello di machine learning per il riconoscimento facciale.
Se il dispositivo ha più di 4 GB di RAM, una connessione di rete superiore a 4G e una CPU con più di 6 core, le immagini vengono passate al modello on-device per la verifica del volto. Se questi requisiti non vengono soddisfatti, il modello on-device viene ignorato e le immagini vengono inviate direttamente al server per la verifica utilizzando un approccio ibrido per soddisfare questi dispositivi meno recenti. Con il tempo, man mano che l'hardware continuerà a evolversi, un numero maggiore di dispositivi sarà in grado di trasferire il calcolo dal server.
Impatto
Grazie all'integrazione del ML, Tokopedia è riuscita a risolvere il problema dell'alto tasso di rifiuto e ha ottenuto i seguenti risultati:
- Il tasso di rifiuto è diminuito di oltre il 20%.
- Il numero di approvazioni manuali è diminuito di quasi il 70%.
In questo modo, non solo l'esperienza utente per i venditori è stata più fluida, ma sono stati anche ridotti i costi operativi per il team di Tokopedia.
Conclusione
Nel complesso, i risultati di questo case study hanno dimostrato che, per i casi d'uso giusti, le soluzioni di ML on-device sul web possono essere utili per migliorare l'esperienza utente e l'efficacia delle funzionalità, oltre a generare risparmi sui costi e altri vantaggi aziendali.
Prova la funzionalità di riconoscimento facciale di MediaPipe utilizzando MediaPipe Studio e l'esempio di codice per MediaPipe Face Detector per il web.
Se ti interessa estendere le funzionalità della tua app web con il machine learning on-device, consulta le seguenti risorse: