fbpx

Per diffondere la conoscenza sul funzionamento degli algoritmi di apprendimento automatico, abbiamo pensato di condividere una nostra implementazione, realizzata per soddisfare l’esigenza di estendere delle keyword con dei termini correlati come similitudini o sinonimi.

Una ricerca testuale con espressioni regolari ci è parsa una soluzione poco efficace, poiché non in grado di rilevare le variazioni comunemente usate nel linguaggio naturale. Inoltre una keyword rischia sempre di assumere un significato ambiguo in base al contesto.

L’espansione delle keyword e disambiguazione dei termini

Implementare tecniche per l’espansione delle parole chiave disambiguandole dal contesto, è una pratica largamente usata in differenti ambiti: dal digital marketing alla gestione documentale.

Nel digital marketing riuscire a trovare keyword aggiuntive significa migliorare la SEO, ottimizzare il posizionamento sui motori di ricerca e, di conseguenza, aumentare il traffico organico. Mentre, all’interno di un sistema complesso, i termini correlati possono affinare la ricerca in un database. Nel caso di un e-commerce potremmo estendere la ricerca di “Scarpe scure” includendo automaticamente “Scarpe nere” e “Scarpe marroni”.

Nei progetti di machine learning l’estensione delle keyword correlate può migliorare l’etichettatura dei testi tramite algoritmi di apprendimento non supervisionati. Un caso d’uso tipico è l’individuazione di email spam o l’attivazione di azioni basate sulla presenza di determinate keyword nel messaggio ricevuto.

Un esempio di correlazioni tra termini e ambiguità di significato

Le keyword correlate condividono uno stesso spazio semantico, tale spazio varia a seconda del tipo di relazione tra parole prese in considerazione. Se consideriamo la relazione di sinonimia,  il termine “prodotto” è in relazione con “merce” perché si trovano nello stesso spazio semantico. Aggiungendo una relazione di similarità, queste parole potrebbero essere intese come “vendita” di merci al consumatore oppure come “risultato economico” della vendita di merci; inoltre “prodotto” potrebbe essere inteso come  “moltiplicazione” in senso aritmetico.

Risolvere il problema dell’ambiguità di significato (Word Sense Disambiguation) determina anche la direzione verso cui si espandono le keyword, per questo con la keyword “prodotto” potremo ottenere diversi gruppi di termini correlati:

  • prodotto, merce, articolo, bene (solo relazione di sinonimia stretta);
  • prodotto, merce, articolo, bene, risultato, guadagno (sinonimia e similarità in contesto economico);
  • prodotto, servizio, listino, catalogo (similarità in contesto commerciale);
  • prodotto, moltiplicazione, divisione (similarità in contesto matematico).

Le relazioni di significato e i database semantico-lessicali

Rispettando la complessità del linguaggio umano, le relazioni di significato tra le parole sono molteplici: sinonimiaantonimiaiperonimiaiponimiameronimiaolonimiapolisemiatroponimia, ecc.

Normalmente per la ricerca di queste relazioni si utilizzano database semantico-lessicali prodotte da varie Università, tra questi WordNet è il più utilizzato, ma poco adatto al nostro caso, poiché fornisce solo relazioni di sinonimia, antonimia e iperonimia. Inoltre il popolare database elaborato dall’Università di Princeton si è dimostrato incompleto rispetto ai possibili sinonimi forniti dai dizionari ufficiali della lingua italiana.

Avere a che fare con un ventaglio di sinonimi maggiore all’interno dello stesso spazio semantico (gruppo di sinonimi) aumenterà la precisione del metodo di disambiguazione tra i contesti. Per questo motivo abbiamo scelto di estrarre personalmente un database lessicale di sinonimi dal  Wikizionario, il dizionario libero e gratuito supportato da Wikimedia foundation.

WordNet o Wikizionario? Un confronto pratico

Continuiamo il nostro esempio confrontando i gruppi di sinonimi del termine “prodotto” ottenuti con i due database sopracitati, ricordando che ogni gruppo di sinonimi ha senso solo in un determinato spazio semantico.

Gruppi di sinonimi ottenuti tramite WordNet:

  • derrata, merce, roba;
  • produzione;
  • risultato;
  • frutto, risultato.

Gruppi di sinonimi ottenuti tramite Wikizionario:

  • merce, derrata, articolo, manufatto, bene (spazio semantico commercio)
  • guadagno, rendita, reddito, profitto, provento (spazio semantico economia)
  • frutto della terra, produzione agricola; colo, manufatto, bene
  • effetto, conseguenza, risultato
  • moltiplicazione  (per estensione in matematica)
  • altri 7 gruppi di sinonimi

È ben visibile la differenza tra i risultati ottenuti dai due diversi database semantici: il Wikizionario è indubbiamente più preciso e completo.

Le relazioni di similarità e la distanza di similarità

Il grado di similarità tra termini (o correlazione tra termini) si misura in base alla frequenza di volte in cui i termini in questione si presentano vicini tra loro in un corpus di testi. Quindi, se in un testo due parole ricorrono spesso vicine l’un l’altra, avremo un’alta correlazione tra i due termini.

Utilizzando, ad esempio, come corpus i messaggi di assistenza di un gestionale, un possibile gruppo di termini simili a “prodotto” potrebbe essere: “anagrafica”, “catalogo”, “listino” e “giacenza”. Termini che, in questo contesto, sono usati frequentemente al fianco della parola “prodotto”.

Per calcolare la distanza di similarità tra due termini esistono molti algoritmi e svariate metodologie che rientrano appieno tra le tecniche di machine learning, come il Latent semantic indexing (LSI), usato anche da Google per il calcolo del ranking.
Nel nostro caso utilizzeremo la tecnica euristica della similarità di coseno su due tipi di modello: GloVe e word2vec, entrambi addestrati sul corpus delle voci Wikipedia in italiano.

Word Sense Disambiguation (WSD)

La disambiguazione del significato (in inglese Word Sense Disambiguation) è il processo per rendere preciso il significato di una parola che, a seconda del contesto, denota significati diversi.

Il già citato dizionario WordNet fornisce per ogni lemma un significato e per ogni significato tutti i possibili iponimi. Una tecnica di disambiguazione potrebbe essere quella di confrontare gli iponimi dei termini da disambiguare: se questi coincidono si trovano nello stesso spazio semantico.

Purtroppo questa tecnica non è fruttuosa, perché WordNet codifica le distinzioni di significato troppo raffinate (espressioni non di senso comune) con assenza di iponimi. Per questo motivo abbiamo introdotto un modello addestrato su contesti generici, sul quale misureremo la similarità del coseno con i termini da disambiguare. In particolare andremo a misurare la vicinanza tra i gruppi di sinonimi trovati con il database lessico-semantico (Wikizionario) e tutto l’insieme delle keyword di input.

Nel fare questa operazione assumeremo il presupposto che l’insieme di keyword di input siano nello stesso spazio semantico, cioè ammetteremo di espandere delle keyword in relazione tra loro.

Utilizzeremo la stessa tecnica con il gruppo di termini simili trovati con il modello di similarità e, avendo un solo gruppo, confronteremo ogni singolo termine con l’insieme dei sinonimi già disambiguati nel passo precedente. Questa distanza, unita allo score di similarità, sarà utile per selezionare un sottoinsieme di termini simili il più possibile disambiguato rispetto alle keyword di input. 

WSD Word sense disambiguation schema graph

Il dataset per il modello di disambiguazione dovrebbe contenere espressioni linguistiche di senso comune e largamente usate, in tal modo ridurremo la probabilità di scegliere gruppi di sinonimi dal significato raffinato, che comunque vengono restituiti anche dal Wikizionario (se pur in maniera ridotta rispetto a WordNet).

Per il caricamento del modello (word2vec o GloVe) e per il calcolo della similarità di coseno utilizzeremo la libreria  gensim; riportiamo di seguito il codice python di esempio:

from gensim.models import Word2Vec
model = Word2Vec.load(model_file_path)
d = model.wv.n_similarity(input_keywords_array,syns_group_array)

Conclusione

Il nostro approccio ha prodotto una buona accuratezza sul gruppo di sinonimi restituiti, ma il grado di disambiguazione è stato influenzato dal set di keyword in ingresso. Infatti, per un risultato ottimale, tali set di keyword dovrebbero essere correlate a loro volta.

Per la ricerca di similarità, invece, sarebbe stato più efficace usare un modello addestrato su dataset specifici (coerenti con il dominio delle keyword da estrarre), piuttosto che un dataset generico basato su Wikipedia in italiano.

Siamo soddisfatti dei risultati emersi e stiamo già lavorando per applicare tale metodologia anche ad altri casi d’uso.

Vuoi parlarne di persona?
Non esitare, contattaci ora!