Qual é o melhor algoritmo para combinar currículos com empregos?
Existe'não vai ser realmente um algoritmo definitivo e inquestionavelmente melhor para um problema de ML / data mining como este (os vencedores do Prêmio Netflix empregaram uma infinidade de técnicas diferentes em seu sistema de correspondência), mas aqui estão algumas idéias.
I'não tenho certeza de qual é a sua configuração para treinar o seu modelo, mas I'assumirá que você tem um conjunto de treinamento de aprendizado de máquina consistindo de um conjunto R de currículos, um conjunto J de empregos, e pares de boas correspondências conhecidas. Na prática, se este fosse um site de empregos, você coletaria esses pares para treinamento e validação de algoritmos candidatos a partir de ações do usuário (empregos visualizados, inscritos, tirados, etc.). Talvez as bordas sejam até ponderadas.
Com esses inputs, você tem um gráfico bipartido G de currículos e empregos, a partir do qual você pode facilmente criar um gráfico ponderado G_j de empregos para modelar a similaridade de empregos, onde "similar" significa "com probabilidade de atrair o mesmo tipo de candidatos". Por exemplo, se os vértices de G_j são todos empregos em G, você pode criar imagens criando (ou aumentando o peso de) uma borda para todos os currículos r para os quais existem bordas e em G. Você também pode considerar conexões de empregos que são mais de um currículo separado. A idéia geral é usar a proximidade e conexão de empregos via currículos para criar um gráfico para modelar a proximidade de empregos. Você pode, analogamente, criar um gráfico ponderado G_r de currículos para modelar a proximidade de currículos.
Com G, G_j, e G_r, um algoritmo possível que pega uma descrição do trabalho e encontra currículos correspondentes com pontuação de força seria executado da seguinte forma:
1. Um trabalho tem um monte de "características", no caso simples basta dizer palavras-chave, assim você pode executar um algoritmo de vizinhos mais próximos nos trabalhos em G_j (simples vizinhos k-nearest baseados em características, ou seja does't use a estrutura de G_j).
2. Agora você tem um subconjunto de trabalhos ponderados J' que são próximos no sentido de que há's um alto grau de sobreposição de candidatos.
3. Para todos os empregos em J' use G_j para expandir / reponderar o conjunto de empregos candidatos em um conjunto J''.
4. Para todos os empregos em J'' use o gráfico G original para coletar o currículo ponderado corresponde a R'.
5. Para todos os currículos em R' use G_r para expandir / repesar o conjunto de candidatos em uma lista final R'' de candidatos ponderados.
Um dos pontos fortes aqui é que a pia da cozinha resume don'não obtenha a vantagem apontada na pergunta porque lá'não há realmente nenhuma análise direta baseada em recursos feita nos currículos. Além disso, isso deve fazer um trabalho razoavelmente bom em não ser enganado diante da equivalência semântica, mesmo que não't faça nada diretamente nessa frente. Por exemplo, pessoas com tecnologias de banco de dados em seus currículos deveriam ser agrupadas em G e G_r, e de forma similar trabalhos de DB deveriam ser agrupados em G e G_j, então poderíamos razoavelmente assumir que dados suficientes estariam presentes para uma descrição de trabalho com palavras-chave como "MySQL" e "Oracle" para combinar com pessoas listando "PostgreSQL" e "Microsoft SQL Server" em seus currículos sem que o sistema precise de qualquer conhecimento de semântica.
Existem certamente fraquezas, no entanto. O algoritmo depende de os dados de entrada serem razoavelmente densos. O algoritmo vai ser tão bom quanto a conexão de currículos e trabalhos dos gráficos. Para dados escassos, você pode querer considerar abordagens mais fortemente baseadas em recursos. Por exemplo, ao invés de terminar na etapa 5, você poderia imaginar construir um modelo de pontuação baseado em recursos baseado nos candidatos em R'' (em inglês, "What variables and coefficients best separate these resumes apart from the rest?") e executar esse modelo contra o conjunto mais amplo de currículos.
Além de olhar para o problema neste nível de "correspondência de padrões", pode-se fazer enormes ganhos de precisão em uma fase de pré-processamento que faz uma extração mais inteligente de recursos, ao invés de recursos de codificação rígida e/ou relacionamentos de recursos. Em vez de combinar características de trabalho em bruto com características de currículo em bruto, você transforma o modelo de característica em algo mais poderoso para que, por exemplo, uma variável altamente correlacionada, mas mais fraca, possa ser ignorada no modelo de característica final. PCA (análise de componentes principais) pode ser usada para transformar um vetor de característica de entrada em um vetor (menor) cujos valores de variáveis explicam os dados da forma mais eficaz. No caso do currículo / job, olhe para MCA (análise de correspondência múltipla) uma vez que os dados serão mais categóricos.
Na frente de pré-processamento, você poderia olhar para as técnicas de PNL para extrair relações semânticas e usá-las antes do tempo, ao invés de deixar essas relações aparecerem mais tarde durante a fase de correspondência.