Alternative a TF-IDF e Cosine Somiglianza quando si confrontano documenti di formati diversi


12

Ho lavorato su un piccolo progetto personale che prende le competenze lavorative di un utente e suggerisce la carriera più ideale per loro sulla base di tali competenze. Uso un database di elenchi di lavoro per raggiungere questo obiettivo. Al momento, il codice funziona come segue:

1) Elaborare il testo di ogni elenco di lavoro per estrarre le competenze menzionate nell'elenco

2) Per ogni carriera (ad es. "Analista dei dati"), combinare il testo elaborato delle liste di lavoro per quella carriera in un unico documento

3) Calcola il TF-IDF di ciascuna abilità all'interno dei documenti di carriera

Dopo questo, non sono sicuro quale metodo dovrei usare per classificare le carriere in base a un elenco delle competenze di un utente. Il metodo più popolare che ho visto sarebbe quello di trattare anche le competenze dell'utente come un documento, quindi di calcolare il TF-IDF per il documento di abilità e usare qualcosa come la somiglianza del coseno per calcolare la somiglianza tra il documento di abilità e ciascuno documento di carriera.

Questa non mi sembra la soluzione ideale, poiché la somiglianza del coseno è meglio usata quando si confrontano due documenti dello stesso formato. Del resto, TF-IDF non sembra affatto la metrica appropriata da applicare all'elenco delle competenze dell'utente. Ad esempio, se un utente aggiunge ulteriori competenze al proprio elenco, il TF per ciascuna abilità diminuirà. In realtà, non mi interessa quale sia la frequenza delle abilità nell'elenco delle abilità dell'utente - mi interessa solo che abbiano quelle abilità (e forse quanto bene conoscano quelle abilità).

Sembra che una metrica migliore sarebbe quella di fare quanto segue:

1) Per ogni abilità posseduta dall'utente, calcola il TF-IDF di tale competenza nei documenti di carriera

2) Per ogni carriera, sommare i risultati TF-IDF per tutte le abilità dell'utente

3) Classifica carriera basata sulla somma sopra

Sto pensando seguendo le linee giuste qui? In tal caso, esistono algoritmi che funzionano in questo senso, ma sono più sofisticati di una semplice somma? Grazie per l'aiuto!


3
Dai un'occhiata a Doc2vec, Gensim ha l'implementazione
Blue482

Risposte:


1

Forse potresti usare gli incantesimi di parole per rappresentare meglio la distanza tra determinate abilità. Ad esempio, "Python" e "R" dovrebbero essere più vicini di "Python" e "Gestione del tempo" poiché sono entrambi linguaggi di programmazione.

L'idea è che le parole che appaiono nello stesso contesto dovrebbero essere più vicine.

Una volta che hai questi incantesimi, avrai una serie di competenze per il candidato e serie di abilità di varie dimensioni per i lavori. È quindi possibile utilizzare Earth Mover's Distance per calcolare la distanza tra i set. Questa misura della distanza è piuttosto lenta (tempo quadratico), quindi potrebbe non adattarsi bene se si hanno molti lavori da svolgere.

Per affrontare il problema della scalabilità, potresti forse classificare i lavori in base a quante competenze il candidato ha in comune in primo luogo e favorire questi lavori.


1

Un metodo semplice e comune per abbinare "documenti" è quello di utilizzare la ponderazione TF-IDF, come è stato descritto. Tuttavia, poiché capisco la tua domanda, vuoi classificare ogni carriera (-documento) in base a una serie di competenze degli utenti.

Se crei un "vettore di query" dalle abilità, puoi moltiplicare il vettore con la tua matrice di carriera (con tutti i pesi tf-idf come valori). Il vettore risultante ti darebbe un punteggio di classifica per documento di carriera che puoi usare per scegliere le migliori carriere per l'insieme di "abilità di query".

Ad esempio, se il vettore della query composto da zero e uno ed è di dimensionie la matrice del documento di termine dimensioni, quindi comporterebbe un vettore di dimensionecon elementi pari alla somma del peso TF-IDF di ogni termine della query per documento di carriera.q¯1×|terms|M|terms|×|documents|v¯M1×|documents|

Questo metodo di classificazione è uno dei più semplici e esistono molte varianti. Anche la voce TF-IDF su Wikipedia descrive brevemente questo metodo di classificazione. Ho anche trovato queste domande e risposte su SO riguardanti i documenti corrispondenti.


Sorprendentemente, una semplice media di incorporamenti di parole è spesso buona quanto una media ponderata di incorporamenti eseguiti con pesi Tf-Idf.
Wacax,


0

Puoi provare a usare "gensim". Ho fatto un progetto simile con dati non strutturati. Gensim ha dato punteggi migliori rispetto allo standard TFIDF. Funzionava anche più veloce.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.