A Tokopedia é uma empresa de tecnologia da Indonésia com um dos maiores marketplaces de e-commerce, que hospeda mais de 40 produtos digitais e mais de 14 milhões de vendedores registrados na plataforma.
O Mitra Tokopedia, parte das verticais de negócios da Tokopedia, é um aplicativo da Web que ajuda proprietários de pequenas empresas a vender produtos digitais, como créditos e vouchers de jogos, pacotes de dados, tokens de eletricidade, contas de saúde nacionais e outros. O site é um dos principais canais para os vendedores da Mitra Tokopedia em mais de 700 cidades, o que torna fundamental garantir uma experiência do usuário tranquila.
Uma etapa importante do processo de integração exige que esses vendedores confirmem a identidade. O vendedor precisa fazer o upload do documento de identidade nacional e de uma selfie com o documento para concluir a verificação. Esse é o processo "Conheça seu cliente" (KYC, na sigla em inglês).
Ao adicionar recursos de machine learning a esse processo essencial de KYC no app da Web, a Mitra Tokopedia conseguiu melhorar a experiência do usuário com uma redução de mais de 20% nas falhas de verificação. Eles também reduziram os custos operacionais ao diminuir as aprovações manuais em quase 70%.
Desafio
A maior parte dos dados de KYC estava sendo rejeitada, criando milhares de tíquetes por semana para a equipe de operações para verificação manual. Isso não só causava um alto custo operacional, mas também resultava em uma experiência ruim para os vendedores, que tinham o processo de verificação atrasado. O principal motivo da rejeição foi que os vendedores não enviaram selfies com documentos de identificação corretamente. A Mitra Tokopedia queria resolver esse problema de forma escalonável usando recursos modernos da Web.
Solução
A equipe da Tokopedia decidiu usar o ML com o TensorFlow.js para resolver esse problema na primeira etapa do processo de KYC, quando o usuário faz upload das imagens. Eles usaram o MediaPipe e a biblioteca de detecção facial do TensorFlow para detectar o rosto do vendedor com seis pontos-chave quando ele faz upload do documento de identificação e das selfies. A saída do modelo é usada para verificar se ele atende aos critérios de aceitação. Após a verificação, as informações são enviadas para o back-end. Se a verificação falhar, o vendedor vai receber uma mensagem de erro e uma opção para tentar novamente. Foi usada uma abordagem híbrida em que o modelo realiza a inferência no dispositivo ou no servidor, dependendo das especificações do smartphone. Um dispositivo de baixo custo realizaria a inferência no servidor.
Usar um modelo de ML no início do processo de KYC permite que eles:
- Melhorar a taxa de rejeição no processo de KYC.
- Avisar os usuários sobre a possível rejeição das imagens com base na qualidade avaliada pelo modelo.
Por que escolher o ML em vez de outras soluções?
O ML pode automatizar tarefas repetitivas que, de outra forma, seriam demoradas ou impraticáveis de serem realizadas manualmente. No caso da Tokopedia, otimizar a solução atual sem ML não geraria resultados significativos, enquanto uma solução de ML poderia reduzir significativamente a carga da equipe de operações, que precisava processar manualmente milhares de aprovações por semana. Com uma solução de ML, as verificações de imagem podem ser feitas quase instantaneamente, proporcionando uma melhor experiência do usuário e melhorando a eficiência operacional. Leia mais sobre enquadramento de problemas para determinar se o ML é uma solução adequada para seu problema.
Considerações ao escolher um modelo
Os fatores a seguir foram considerados ao escolher o modelo de ML.
Custo
Eles avaliaram o custo geral de uso do modelo. Como o TensorFlow.js é um pacote de código aberto bem mantido pelo Google, economizamos nos custos de licenciamento e manutenção. Outra consideração é o custo da inferência. A capacidade de executar inferências no lado do cliente economiza muito dinheiro em comparação com o processamento no lado do servidor com GPUs caras, especialmente se os dados forem inválidos e inutilizáveis.
Escalonabilidade
Eles consideraram a escalonabilidade do modelo e da tecnologia. Ele é capaz de lidar com o crescimento dos dados e da complexidade do modelo à medida que nosso projeto evolui? Ela pode ser estendida para atender a outros projetos ou casos de uso? O processamento no dispositivo ajuda porque o modelo pode ser hospedado em uma CDN e entregue ao lado do cliente, o que é muito escalonável.
Desempenho
Eles consideraram o tamanho da biblioteca (em KB) e a latência do processo de ambiente de execução. A maioria da base de usuários do Mitra Tokopedia tem dispositivos de médio a baixo desempenho com velocidade da internet e conectividade moderadas. Assim, o desempenho em termos de download e tempo de execução (ou seja, a rapidez com que o modelo pode produzir uma saída) é uma prioridade para atender às necessidades específicas deles e garantir uma ótima experiência do usuário.
Outras considerações
Conformidade regulatória: eles precisavam garantir que a biblioteca escolhida estivesse em conformidade com as regulamentações relevantes de proteção de dados e regulamentos de privacidade.
Conjunto de habilidades: eles avaliaram a experiência e o conjunto de habilidades da equipe. Alguns frameworks e bibliotecas de ML podem exigir linguagens de programação específicas ou experiência em uma área específica. Ao considerar esses fatores, eles tomaram uma decisão informada ao escolher o modelo certo para o projeto de machine learning.
Tecnologia escolhida
O TensorFlow.js atendeu às necessidades deles, depois de considerar esses fatores. Ele pode ser executado totalmente no dispositivo usando o back-end do WebGL para usar a GPU do dispositivo. A execução de um modelo no dispositivo permite um feedback mais rápido ao usuário devido à latência reduzida do servidor e reduz o custo de computação do servidor. Leia mais sobre o ML no dispositivo no artigo Vantagens e limitações do ML no dispositivo.
"O TensorFlow.js é uma biblioteca de machine learning de código aberto do Google voltada para desenvolvedores de JavaScript que pode ser executada no lado do cliente no navegador. É a opção mais madura para IA na Web, com suporte abrangente a operadores de back-end WebGL, WebAssembly e WebGPU que podem ser usados no navegador com desempenho rápido."—Como a Adobe usou o Web ML com o TensorFlow.js para aprimorar o Photoshop para Web
Implementação técnica
A Mitra Tokopedia usou o MediaPipe e a
biblioteca de detecção facial do TensorFlow,
um pacote que fornece modelos para executar a detecção facial em tempo real.
Especificamente, o modelo
MediaPipeFaceDetector-TFJS
fornecido nessa biblioteca, que implementa o ambiente de execução tfjs, foi usado para
essa solução.
Antes de começar a implementação, vamos recapitular o que é o MediaPipe. Com o MediaPipe, é possível criar e implantar soluções de ML no dispositivo em dispositivos móveis (Android, iOS), Web, computadores, dispositivos de borda e IoT.
Há
14 soluções diferentes
oferecidas pelo MediaPipe no momento em que este post foi escrito. É possível usar um ambiente de execução mediapipe ou tfjs. O ambiente de execução tfjs é criado com JavaScript e
fornece um pacote JavaScript que pode ser baixado externamente pelo aplicativo
da Web. Isso é diferente de um ambiente de execução mediapipe, que é criado com
C++ e compilado em um módulo WebAssembly. As principais diferenças são desempenho,
depuração e agrupamento. O pacote JavaScript pode ser agrupado com bundlers clássicos, como o webpack. Por outro lado, o módulo Wasm é um recurso binário maior e separado (o que é mitigado por não ser uma dependência de tempo de carregamento) e
requer um fluxo de trabalho de
depuração do Wasm diferente. No entanto,
ele é executado mais rapidamente para ajudar a atender aos requisitos técnicos e de desempenho.
Voltando à implementação da Tokopedia, a primeira etapa é inicializar o
modelo da seguinte maneira. Quando o usuário faz upload de uma foto, um HTMLImageElement é transmitido
como entrada para o detector.
// 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);
O resultado da lista de rostos contém os rostos detectados para cada rosto na imagem. Se o modelo não detectar rostos, a lista vai ficar vazia. Para cada rosto, ele contém uma caixa delimitadora do rosto detectado, bem como uma matriz de seis pontos-chave para o rosto detectado. Isso inclui recursos como olhos, nariz e boca. Cada ponto-chave contém x e y, além de um 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 },
...
],
}
]
O box representa a caixa delimitadora do rosto no espaço de pixels da imagem, com
xMin, xMax indicando os limites x, yMin, yMax indicando os limites y e
width, height são as dimensões da caixa delimitadora.
Para keypoints, x e y representam a posição real do ponto de referência no espaço de pixel da imagem.
O name fornece um rótulo para o ponto-chave, que são 'rightEye', 'leftEye',
'noseTip', 'mouthCenter', 'rightEarTragion' e 'leftEarTragion', respectivamente.
Como mencionado no início deste post, o vendedor precisa fazer upload do
documento de identidade nacional e de uma selfie com o documento para concluir a verificação
de vendedor.
A saída do modelo é usada para verificar os critérios de aceitação, ou seja,
ter uma correspondência dos seis pontos-chave mencionados anteriormente para ser considerada uma imagem válida
de documento de identificação e selfie.
Após a verificação, as informações relevantes do vendedor são transmitidas ao back-end. Se a verificação falhar, o vendedor vai receber uma mensagem de falha e uma opção para tentar novamente. Nenhuma informação será enviada ao back-end.
Considerações de desempenho para dispositivos básicos
Esse pacote tem apenas 24,8 KB (minificado e compactado com gzip), o que não afeta significativamente o tempo de download. No entanto, para dispositivos muito básicos, o processamento de ambiente de execução leva muito tempo. Uma lógica adicional foi adicionada para verificar a RAM e a CPU do dispositivo antes de transmitir as duas imagens para o modelo de detecção facial de machine learning.
Se o dispositivo tiver mais de 4 GB de RAM, uma conexão de rede superior a 4G e uma CPU com mais de 6 núcleos, as imagens serão transmitidas ao modelo no dispositivo para verificação facial. Se esses requisitos não forem atendidos, o modelo no dispositivo será ignorado, e as imagens serão enviadas diretamente ao servidor para verificação usando uma abordagem híbrida para atender a esses dispositivos mais antigos. Com o tempo, mais dispositivos poderão descarregar a computação do servidor à medida que o hardware continuar evoluindo.
Impacto
Devido à integração de ML, a Tokopedia conseguiu resolver a alta taxa de rejeição e teve os seguintes resultados:
- A taxa de rejeição diminuiu em mais de 20%.
- O número de aprovações manuais diminuiu em quase 70%.
Isso não apenas criou uma experiência do usuário mais tranquila para os vendedores, mas também reduziu o custo operacional para a equipe da Tokopedia.
Conclusão
No geral, os resultados deste estudo de caso mostraram que, para os casos de uso certos, as soluções de ML no dispositivo na Web podem ser valiosas para melhorar a experiência do usuário e a eficácia dos recursos, além de gerar economia de custos e outros benefícios comerciais.
Teste o recurso de detecção facial do MediaPipe usando o MediaPipe Studio e o exemplo de código do Detector Facial do MediaPipe para Web.
Se você quiser ampliar os recursos do seu app da Web com ML no dispositivo, confira os seguintes recursos: