Qual è il miglior algoritmo per abbinare i curriculum ai lavori?
Non c'è davvero un algoritmo definitivo, indiscutibilmente migliore per un problema di ML / data mining come questo (i vincitori del premio Netflix hanno impiegato una moltitudine di tecniche diverse nel loro sistema di corrispondenza), ma ecco alcune idee.
Non sono sicuro di quale sia la tua configurazione per l'addestramento del modello, ma assumerò che tu abbia un set di allenamento di apprendimento automatico costituito da un insieme R di curriculum, un insieme J di lavori, e coppie di buone partite note. In pratica, se questo fosse un sito web di lavoro, raccogliereste queste coppie per addestrare e convalidare gli algoritmi dei candidati dalle azioni degli utenti (lavori visti, richiesti, presi, ecc.). Forse i bordi sono anche ponderati.
Con questi input, si ha un grafo bipartito G di curriculum e lavori, dal quale si può facilmente creare un grafo ponderato G_j di lavori per modellare la somiglianza dei lavori, dove "simile" significa "probabile attrazione dello stesso tipo di candidati". Per esempio, se i vertici di G_j sono tutti i lavori in G, si può immaginare di creare (o incrementare il peso di) un bordo per tutti i curriculum r per i quali ci sono bordi e in G. Si potrebbero anche considerare le connessioni di lavoro che sono più di un curriculum a parte. L'idea generale è di usare la vicinanza e la connessione dei lavori attraverso i curriculum per ottenere un grafico che modellizzi la vicinanza dei lavori. Si può analogamente creare un grafo ponderato G_r di curriculum per modellare la vicinanza dei curriculum.
Con G, G_j e G_r, un possibile algoritmo che prende la descrizione di un lavoro e trova i curriculum corrispondenti con punteggi di forza funzionerebbe così:
1. Un lavoro ha un mucchio di "caratteristiche", nel caso semplice solo parole chiave, così si può eseguire un algoritmo di vicinato più vicino sui lavori in G_j (semplice k-nearest neighbors basato sulle caratteristiche, cioè, non usa la struttura di G_j).
2. Ora avete un sottoinsieme di lavori pesati J' che sono vicini nel senso che c'è un alto grado di sovrapposizione dei candidati.
3. Per tutti i lavori in J', usa G_j per espandere / ripesare l'insieme dei lavori candidati in un insieme J''.
4. Per tutti i lavori in J'', usa il grafico originale G per raccogliere le corrispondenze ponderate dei curriculum R'.
5. Per tutti i curriculum in R', usa G_r per espandere / ripesare l'insieme dei candidati in una lista finale R'' di candidati ponderati.
Uno dei punti di forza qui è che i curriculum del lavandino della cucina non ottengono il vantaggio indicato nella domanda perché non c'è davvero alcuna analisi diretta basata sulle caratteristiche fatta sui curriculum. Inoltre, questo dovrebbe fare un lavoro ragionevolmente buono per non essere ingannato di fronte all'equivalenza semantica anche se non fa direttamente nulla su questo fronte. Ad esempio, le persone con tecnologie di database nei loro curriculum dovrebbero essere raggruppate in G e G_r, e allo stesso modo i lavori DB dovrebbero essere raggruppati in G e G_j, quindi potremmo ragionevolmente assumere che siano presenti abbastanza dati per una descrizione di lavoro con parole chiave come "MySQL" e "Oracle" per corrispondere con persone che elencano "PostgreSQL" e "Microsoft SQL Server" nei loro curriculum senza che il sistema abbia bisogno di alcuna conoscenza della semantica.
Ci sono certamente dei punti deboli però. L'algoritmo si basa sul fatto che i dati di input siano ragionevolmente densi. L'algoritmo sarà buono quanto la connessione dei curriculum e dei lavori dai grafici. Per i dati sparsi, potresti voler considerare approcci più fortemente basati sulle caratteristiche. Ad esempio, invece di terminare al punto 5, si potrebbe immaginare di costruire un modello di punteggio basato sulle caratteristiche basato sui candidati in R'' (in inglese, "Quali variabili e coefficienti separano al meglio questi curriculum dal resto?") ed eseguire tale modello contro l'insieme più ampio di curriculum.
Oltre a guardare il problema a questo livello di "pattern matching", si potrebbero ottenere enormi guadagni di precisione in una fase di pre-elaborazione che faccia un'estrazione di caratteristiche più intelligente piuttosto che hardcoding di caratteristiche e/o relazioni di caratteristiche. Piuttosto che far combaciare le caratteristiche grezze del lavoro con le caratteristiche grezze del curriculum, si trasforma il modello delle caratteristiche in qualcosa di più potente in modo che, ad esempio, una variabile altamente correlata ma più debole possa essere ignorata nel modello finale delle caratteristiche. La PCA (analisi delle componenti principali) può essere usata per trasformare un vettore di caratteristiche di input in un vettore (più piccolo) i cui valori variabili spiegano i dati nel modo più efficace. Nel caso del curriculum/lavoro, guardate all'MCA (analisi delle corrispondenze multiple) dato che i dati saranno più categorici.
Sul fronte della pre-elaborazione, potreste guardare alle tecniche NLP per estrarre le relazioni semantiche e usarle in anticipo piuttosto che lasciare che queste relazioni emergano in seguito durante la fase di corrispondenza.
Articoli simili
- L'algoritmo di Dijkstra è un algoritmo greedy o un algoritmo di programmazione dinamica?
- Qual è il miglior colore da abbinare al verde quando si crea un logo?
- Qual è il miglior monitor da gioco da abbinare alla prossima GPU RTX 3080?
- Qual è una buona GPU da abbinare a Ryzen 5 2600X per costruire un computer da gioco decente?