A Tokopedia é uma empresa de tecnologia indonésia com um dos maiores marketplaces de comércio eletrônico, hospedando mais de 40 produtos digitais e mais de 14 milhões de vendedores registrados na plataforma.
A Mitra Tokopedia, parte dos setores de negócios da Tokopedia, é um aplicativo da Web que ajuda proprietários de pequenas empresas a vender produtos digitais, como cupons de crédito e de jogos, pacotes de dados, tokens de eletricidade, contas de saúde nacionais e outros. O site é um dos principais canais para vendedores do Mitra Tokopedia em mais de 700 cidades, o que torna essencial garantir uma experiência do usuário tranquila.
Uma etapa importante do processo de integração exige que esses vendedores verifiquem a identidade. O vendedor precisa fazer upload do documento de identidade nacional e de uma selfie com ele para concluir a verificação. Isso é chamado de processo de Conheça seu cliente (KYC, na sigla em inglês).
Ao adicionar recursos de machine learning a esse processo de verificação de identidade essencial no app da Web, a Mitra Tokopedia conseguiu melhorar a experiência do usuário com mais de 20% de redução nas falhas de verificação. Eles também economizaram custos operacionais reduzindo as aprovações manuais em quase 70%.
Desafio
A maioria dos dados de KYC estava sendo rejeitada, criando milhares de tickets por semana para a equipe de operações para verificação manual. Isso não apenas causou um alto custo operacional, mas também resultou em uma experiência ruim para os vendedores, cujo processo de verificação foi atrasado. O principal motivo da rejeição foi que os vendedores não enviaram selfies com documentos de identificação corretamente. Mitra Tokopedia queria resolver esse problema de forma escalonável usando recursos modernos da Web.
Solução
A equipe da Tokopedia decidiu usar a ML com o TensorFlow.js para resolver esse problema na primeira etapa do processo de verificação de identidade, quando o usuário faz o upload das imagens. Eles usaram o MediaPipe e a biblioteca Face Detection do TensorFlow para detectar o rosto do vendedor com seis pontos-chave quando o vendedor enviou as imagens de identificação e selfie. A saída do modelo é usada para verificar os 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. Uma abordagem híbrida foi usada em que o modelo realiza a inferência no dispositivo ou no servidor, dependendo das especificações do smartphone. Um dispositivo de baixo nível realizaria a inferência no servidor.
O uso de um modelo de ML no início do processo de verificação de identidade permite que eles:
- Melhorar a taxa de rejeição no processo de verificação de identidade.
- Avise os usuários sobre a possível rejeição das imagens com base na qualidade avaliada pelo modelo.
Por que escolher a ML em vez de outras soluções?
O aprendizado de máquina pode automatizar tarefas repetitivas que, de outra forma, seriam demoradas ou imprecisas de fazer manualmente. No caso da Tokopedia, a otimização da solução atual que não usa ML não gera resultados significativos, enquanto uma solução de ML pode reduzir significativamente a carga na 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 o enquadramento de problemas para determinar se o ML é uma solução adequada para o problema.
Considerações ao escolher um modelo
Os seguintes fatores foram considerados ao escolher o modelo de ML.
Custo
Eles avaliaram o custo geral de usar o 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. Ser capaz de executar a inferência no lado do cliente economiza muito dinheiro em comparação com o processamento no lado do servidor com GPUs caras, especialmente se os dados se mostrarem inválidos e inutilizáveis.
Escalonabilidade
Eles consideraram a escalabilidade do modelo e da tecnologia. Ele é capaz de processar o crescimento da complexidade de dados e modelos à medida que o projeto evolui? Ele pode ser estendido para atender a outros projetos ou casos de uso? O processamento no dispositivo ajuda porque o modelo pode ser hospedado em um 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 execução. A maioria da base de usuários da Mitra Tokopedia tem dispositivos de nível médio a baixo com velocidade e conectividade de Internet moderadas. Portanto, a performance em termos de download e tempo de execução (ou seja, a rapidez com que o modelo pode produzir uma saída) é uma prioridade principal para atender às necessidades específicas e garantir uma ótima experiência do usuário.
Outras considerações
Compliance regulatória:eles precisavam garantir que a biblioteca escolhida obedecesse às regulamentações relevantes de proteção de dados e 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 consciente 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 à redução da latência do servidor e do 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 JavaScript que pode ser executada no lado do cliente no navegador. É a opção mais madura para IA da Web com suporte abrangente de operador de back-end WebGL, WebAssembly e WebGPU que pode ser usado no navegador com desempenho rápido."—Como a Adobe usou a IA da Web com o TensorFlow.js para aprimorar o Photoshop para Web
Implementação técnica
Mitra Tokopedia usou o MediaPipe e a
biblioteca Face Detection do TensorFlow,
um pacote que fornece modelos para executar a detecção facial em tempo real.
Especificamente, o modelo
MediaPipeFaceDetector-TFJS
fornecido nesta biblioteca, que implementa o ambiente de execução tfjs
, foi usado para
esta solução.
Antes de mergulhar na implementação, confira uma breve recapitulação do que é o MediaPipe. O MediaPipe permite 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 artigo foi escrito. É possível usar um ambiente de execução
mediapipe
ou tfjs
. O ambiente de execução tfjs
é criado com JavaScript e
oferece um pacote JavaScript que pode ser feito o download externamente pelo aplicativo
da Web. Isso é diferente de um ambiente de execução mediapipe
, que é criado com
C++ e compilado para um módulo do WebAssembly. As principais diferenças são desempenho,
depuração e agrupamento. O pacote JavaScript pode ser agrupado com agrupadores
clássicos, como o webpack. Por outro lado, o módulo Wasm é um recurso binário maior e separado, 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 uma 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 na imagem. Se o modelo não conseguir detectar rostos, a lista vai estar vazia. Para cada rosto, ele contém uma caixa delimitadora do rosto detectado, além de uma matriz de seis pontos-chave para o rosto detectado. Isso inclui características 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
denotando os limites x, yMin
, yMax
denotando 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 controle no espaço de pixels 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 desta postagem, o vendedor precisa fazer upload do
documento de identificação nacional e uma selfie com o documento para concluir a verificação.
A saída do modelo é usada para verificar os critérios de aceitação, ou seja,
para que um documento de identificação e uma selfie sejam considerados válidos, eles precisam corresponder aos seis pontos principais mencionados anteriormente.
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 sobre desempenho para dispositivos básicos
Esse pacote tem apenas 24,8 KB (minimizado e compactado em GZIP), o que não impacta significativamente o tempo de download. No entanto, para dispositivos de baixo custo, o processamento 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 de rosto de machine learning.
Se o dispositivo tiver mais de 4 GB de RAM, uma conexão de rede maior que 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
Graças à 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 mais de 20%.
- O número de aprovações manuais diminuiu 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 da equipe da Tokopedia.
Conclusão
No geral, os resultados desse 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 MediaPipe Face Detector para Web.
Se você quiser estender os recursos do seu app da Web com a ML no dispositivo, confira estes recursos: