O uso do Vertex AI Matching Engine no Virtual Career Center (VCC) do Google Cloud

Rubens Zimbres
google-cloud-brasil
8 min readDec 5, 2022

Recentemente o Google Cloud lançou no mercado o Virtual Career Center (VCC), uma solução de recrutamento para empresas e governos. Esse Centro de Carreira Virtual utiliza um mecanismo de similaridade entre os word embeddings (vetores numéricos de palavras) de requisitos de vagas disponíveis e os word embeddings de competências de candidatos para oferecer as vagas com mais aderência para cada candidato e vice-versa. Esse mecanismo de similaridade é executado dentro do Vertex AI Matching Engine.

O Virtual Career Center permite a interação de seus usuários por meio de uma interface web. Administradores podem acessar dashboards feitos em Looker Studio com estatísticas de uso e analytics das demandas de mercado, competências dos candidatos, perfis das vagas disponíveis pelos recrutadores e geolocalização. Com a ajuda de algoritmos de Machine Learning, administradores podem visualizar os gaps de habilidades no mercado. Ou seja, o governo pode descobrir, por exemplo, que certas cidades do país possuem demanda de vagas de tecnologia, mas carecem de mão-de-obra qualificada para preencher essas vagas. Assim, essa descoberta pode influenciar políticas públicas para treinamento e desenvolvimento de uma mão-de-obra qualificada para, no futuro, preencher essas vagas.

Recrutadores também acessam o portal do VCC para postar vagas, buscar candidatos e acessar dashboards de estatísticas de preenchimento de vagas, habilidades disponíveis, grau de aderência de candidatos às suas vagas postadas. O sistema também possibilita a atuação de coaches, que orientam candidatos em sua atuação nas entrevistas, montagem de currículos e apresentação pessoal para a aplicação nas vagas disponíveis.

Candidatos podem desenvolver seus currículos com a ajuda desses coaches, fazer upload de seus currículos e buscar vagas disponíveis. A interação entre candidatos e coaches se dá via Google Workspace, onde eles podem fazer uso de ferramentas como GMail, Google Drive, Google Docs, Meet, Hangouts e Calendar para agendar a facilitar suas interações.

Há basicamente quatro maneiras dos candidatos criarem seu resumo no VCC:

  • A primeira é por meio de preenchimento de um formulário web onde o candidato coloca seu nome, dados de contato, localização, endereço, habilidades, educação, experiências passadas e educação.
  • A segunda é por meio de interação via chatbot ou até mesmo voicebot usando o Dialogflow, onde o bot vai entrevistar o candidato e fazer perguntas de modo a criar um currículo para ele.
  • Outra maneira de se criar um currículo na interface web é por meio de upload de um currículo já pronto em formato PDF.
  • Por fim, o candidato também pode efetuar o upload de um áudio ou vídeo com seu currículo e apresentação pessoal.

Caso o candidato tenha criado seu currículo via formulário web, esses dados serão diretamente salvos em um banco de dados. O mesmo acontece para currículos criados via chatbot ou voicebot. Para currículos nos quais foi feito upload (PDF), pode-se usar o Google Cloud Document AI em sua especificação Form Parser para extrair os dados desse PDF e salvá-los em uma base de dados. Currículos em áudio são submetidos ao Google Cloud Speech-to-Text e salvos no banco de dados, e currículos em vídeo sofrem uma preparação com ffmpeg para se separar áudio de vídeo e submeter o áudio ao Speech-to-Text para serem subsequentemente salvos no banco de dados.

Tipos de entradas de dados para currículos

Uma vez que tenhamos na interface web as vagas cadastradas e os currículos dos candidatos, pode-se então efetuar uma busca de melhores vagas para cada candidato, e também uma busca dos melhores candidatos para uma vaga específica. Essa busca é feita dentro do Vertex AI Matching Engine.

O Matching Engine é uma ferramenta de similaridade entre duas entidades. Essas entidades podem ser usuários e filmes, candidatos e vagas, estudantes e cursos, consumidores e produtos. A idéia é realizar uma recomendação de produtos/filmes/vagas para os usuários, baseados nas características das duas entidades.

Esse mecanismo de similaridade já é usado em motores de busca, customização de campanhas de Marketing, classificação de textos, sistemas de recomendação, repostas a perguntas e chatbots. Assim, um filme tem suas características, como gênero, duração, atores, história, que serão transformados em um vetor numérico de dimensão N. Os usuários também tem suas características, como gênero, idade, preferência, histórico de escolhas, ratings dados a produtos/filmes. Essas características também serão convertidas em um vetor numérico de dimensão N.

Num espaço multidimensional, essas entidades serão posicionadas de modo a permitir que se encontre as entidades relacionadas mais similares.

Mecanismo de criação de word embeddings

Existem duas maneiras de se criar esses word embeddings:

  • A primeira e mais simples é se usar modelos pré-treinados do Tensorflow Hub, por exemplo BERT-Large multilingual (para a língua portuguesa) com dimensão 512, por exemplo. Essa solução é muito útil para casos onde temos até 100.000 usuários por mês. Essa solução tem a desvantagem de apresentar um tempo maior para a geração de cada embedding, não oferece métricas de desempenho, mas possui a vantagem de ser uma solução de baixo custo.
  • A segunda possibilidade é se usar o modelo baseado em Tensorflow-Keras chamado Two Towers. Essa solução escala até bilhões de qps (queries per second, chamadas por segundo), é muito mais rápida e a inferência é feita em milissegundos. É também uma solução de baixa complexidade, customizável e precisa. Oferece métricas de desempenho como AUC (Area Under Curve), é eficiente em termos de custo e possui baixíssima latência.

O modelo de redes neurais Two Towers é apresentado abaixo:

Modelo Two Towers

Inicialmente temos dois modelos paralelos na mesma rede neural. O modelo Query receberá as características do currículo do candidato, suas competências, fará um StringLookup em Keras criando números inteiros de acordo com o dicionário criado (número total de palavras únicas na amostra de todos os currículos). Em seguida, será aplicada uma camada Embedding em Keras, onde se criará os word embeddings de cada candidato, no formato float, com dimensão N por exemplo de 512. Esse mesmo procedimento será feito na outra torre, Database, de vagas de emprego e suas características (requisitos). Uma função de custo do tipo FactorizedTopK será utilizada para mapear uma torre à outra em uma otimização do tipo Stochastic Gradient Descent com Adagrad, que adapta a taxa de aprendizado (learning rate) de acordo com o gradiente encontrado.

Uma vez treinada a rede neural, os embeddings da torre Database (vagas de emprego) serão colocados em um Index no Vertex AI Matching Engine, contendo o id da vaga e o embedding de suas características/requisitos. Quando um candidato vai buscar uma vaga, o sistema usa a torre Query treinada e salva em um modelo de Tensorflow tipo .pb, para gerar os embeddings das competências desse candidato e submeter esses embeddings para a torre Database, que está no Matching Engine. Assim, quando os embeddings do candidato são submetidos ao Matching Engine, ele retorna as vagas Top 10 em termos de aderência para esse candidato.

Resumidamente, PDFs são salvos em um bucket do Cloud Storage, aplica-se o Document AI do tipo Form Parser, salva-se os dados em um banco de dados (BigQuery) e em seguida, fazemos o preparo dos dados com Processamento de Linguagem Natural. Nossa experiência nos mostrou que os resultados são melhores quando se removem os artigos, preposições e advérbios dos textos (requisitos de vagas e competências dos candidatos). Uma vez preparados os dados, cria-se um dataset em Tensorflow com tensores, treina-se a rede neural Two Towers e se salva a torre do candidato em uma instância do Cloud Run, um serviço à base de containers do Google Cloud, contendo uma aplicação em Flask.

Quando o candidato procura uma vaga de emprego, o website chama essa aplicação em Flask no Cloud Run com o modelo treinado, que submete os word embeddings desse candidato para o endpoint em Matching Engine, que compara os embeddings de vagas que estão no Index. Assim, o Matching Engine vai retornar as Top N (5, 10, 20) vagas para esse candidato. O resultado então retorna à interface gráfica para o usuário ou pode ser salvo em um bucket do armazenamento.

A arquitetura completa da solução é apresentada na figura abaixo.

Para uma imagem em alta resolução, acesse este link.

Administradores, recrutadores, coaches e candidatos interagem via interface web. Essa interface web é o único ponto externo da solução, seguindo as melhores práticas de cybersegurança do Google Cloud, de restrição da superfície de ataque. Essa interface web é protegida pelo Cloud Armor, que previne ataques hackers dos tipos DoS (Denial-of-service), Camadas 3 e 4 do modelo OSI (camadas de rede e transporte), Cross-Site Scripting (XSS) e Injeção SQL (SQLi). Para verificação de segurança dessa aplicação web, pode-se usar o Web Security Scanner.

Um Cloud Load Balancer do tipo HTTPS (que suporta o Cloud Armor) distribui o tráfego da interface, podendo usar um Cloud CDN (Content Delivery Network) estático (bucket) ou dinâmico (serverless, como Cloud Run, backend da aplicação web).

Com exceção da interface web, que possui um IP externo, todos os serviços e APIs se comunicam por IP interno, habilitado pelo Acesso Privado Google. Para se verificar a segurança e vulnerabilidades da solução como um todo, usamos o Security Command Center. Além disso, contamos com o Recomendador IAM, que se baseia em práticas de mínimo privilégio para aumentar a segurança da solução, e o Policy Troubleshooter, que procura incoerências e vulnerabilidades em papéis do IAM.

Currículos em PDF, áudios e vídeos são salvos no storage e ativam um Cloud Functions para posterior aplicação de um script em Document AI, ffmpeg e Speech-to-Text, salvando o conteúdo em um banco de dados.

Paralelamente, candidatos podem acessar o chatbot e voicebot via Dialogflow embutido no site ou em WhatsApp para criarem seus currículos, que são salvos no banco de dados. O voicebot usa uma integração com VoxImplant para possibilitar o uso de voz e a utilização de um número de telefone fixo para as chamadas.

Quando um candidato busca uma vaga de emprego, o Cloud Run cria o word embedding de suas competências e submete ao endpoint do Matching Engine. Quando um recrutador busca um candidato, o Cloud Run cria o word embedding dos requisitos da vaga e submete a outro endpoint do Matching Engine, que contém os embeddings de candidatos.

Todas essas interações são salvas em um banco de dados NoSQL, Firestore e ficam disponíveis para analytics em BigQuery e Looker Studio.

Para se operacionalizar a dinâmica do processo pode-se usar o Cloud Composer, um orquestrador de soluções. Preferencialmente, deve-se usar o Terraform para se fazer o deploy da solução.

O notebook em Jupyter do Modelo Two Towers aplicado ao dataset MovieLens está disponível em:

Meu artigo sobre como treinar e fazer o deploy do Modelo Two Towers está disponível em:

https://medium.com/@rubenszimbres/train-and-deploy-google-clouds-two-towers-recommender-3ae5c29891af

O notebook de exemplo do Vertex AI Matching Engine ANN (Approximate Nearest Neighbor) está disponível no GitHub do Google Cloud:

https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/matching_engine/matching_engine_for_indexing.ipynb

--

--

Rubens Zimbres
google-cloud-brasil

I’m a Senior Data Scientist and Google Developer Expert in ML and GCP. I love studying NLP algos and Cloud Infra. CompTIA Security +. PhD. www.rubenszimbres.phd