Raccomandazioni e profilazione degli utenti basato su feedback implicito

Raccomandazioni e feedback

three men sitting while using laptops and watching man beside whiteboardLa maggior parte dei servizi B2C sta rapidamente scoprendo l’importanza strategica di solidi motori di raccomandazione per migliorare i tassi di conversione e stabilire una maggiore fedeltà dei clienti. Le strategie più comuni si basano [3] sulla segmentazione degli utenti in base alle loro caratteristiche (fascia d’età, sesso, interessi, interazioni sociali e così via) o alle valutazioni che danno a determinati articoli. Quest’ultimo approccio si basa in genere su un feedback esplicito (ad esempio, una valutazione da 0 a 10) che riassume l’esperienza complessiva. Purtroppo, ci sono degli svantaggi in entrambi i casi.

I dati personali sono sempre più difficili da recuperare e le ultime normative (ad esempio, il GDPR) consentono agli utenti di interagire con un servizio senza raccogliere dati. Inoltre, un profilo personale affidabile deve essere costruito utilizzando molti attributi spesso nascosti e può essere dedotto solo utilizzando modelli predittivi. Al contrario, i feedback impliciti sono facili da raccogliere ma incredibilmente scarsi. Le strategie basate sulla fattorizzazione della matrice utente-voce [3] sono facili da implementare (considerando la possibilità di impiegare algoritmi parallelizzati). Tuttavia, la discrepanza tra il numero di valutazioni e i prodotti è solitamente troppo alta per consentire una stima accurata.

La nostra esperienza ha dimostrato che è possibile creare profili utente molto accurati (anche per utenti anonimi identificati solo da un ID casuale) sfruttando il feedback implicito nelle recensioni testuali. La nostra ipotesi principale è che le recensioni classificate come spam riflettano i desideri di un utente in merito a un’esperienza specifica. In altre parole, una semplice frase come “Il posto era molto rumoroso” implica che preferisco i luoghi tranquilli o, aggiungendo ulteriori vincoli, che, in una situazione specifica (caratterizzata da n fattori), un luogo tranquillo è preferibile a uno rumoroso. Il nostro approccio si basa su questa ipotesi e può essere adattato per affrontare molti scenari diversi.

Presupposti

Assumiamo che un utente sia rappresentato come un vettore di caratteristiche a valore reale di lunghezza fissa Nu:

Ogni argomento ti è rappresentato da un’etichetta corrispondente a un insieme di parole semanticamente coerenti, ad esempio:

Gli approcci standard di modellazione dei temi (come LDA [1]) possono essere impiegati per scoprire gli argomenti definiti in un ampio insieme (corpus) di recensioni. Tuttavia, questa strategia può portare a una grande quantità di risultati incoerenti. I motivi principali sono:

    • LDA lavora con vettorizzazioni basate sulle frequenze o TF-IDF, quindi le parole non vengono considerate nel loro contesto semantico.
    • Un presupposto fondamentale è che ogni argomento è caratterizzato da un piccolo insieme di parole che gli sono peculiari.

Mentre quest’ultima può essere facilmente gestita, la prima è estremamente problematica. Le recensioni non sono documenti omogenei che possono essere banalmente classificati (ad esempio, politica, sport, economia e così via). Al contrario, sono spesso costituiti dallo stesso sottoinsieme di parole che possono acquisire significati diversi grazie al relativo contesto.

Questo problema può essere risolto con diverse soluzioni di Deep-Learning (come Word2Vec [5], GloVe [6] o FastText [7]), ma noi ci siamo concentrati su Word2Vec con un modello Skip-Gram.

L’idea principale è quella di addestrare una rete neurale profonda per trovare la migliore rappresentazione vettoriale di una parola, considerando il contesto in cui è collocata in tutti i documenti. La struttura generica della rete è mostrata nella figura seguente:

Ogni recensione viene suddivisa in sotto-recensioni di 2n parole intorno a un perno che forniamo come input. L’obiettivo del processo di addestramento è quello di forzare la rete a ricostruire il contesto dato il perno. Poiché i vettori sono piuttosto lunghi (100-300 valori float a 32 bit), il processo convergerà verso una soluzione globale in cui le parole semanticamente simili sono collocate in sfere molto dense il cui raggio è molto più piccolo dell’intero sottospazio del dizionario.

Quindi, ad esempio, la parola “camera” sarà implicitamente un sinonimo di “camera” e la distanza del coseno tra i due vettori sarà estremamente piccola. Poiché molte persone utilizzano termini gergali nelle loro recensioni (insieme a faccine o altri caratteri speciali), questo approccio garantisce la robustezza necessaria per valutare il contenuto senza pregiudizi indesiderati.

Per ulteriori dettagli tecnici, suggerisco di leggere [5], tuttavia la dinamica generale si basa normalmente su un’inizializzazione casuale dei vettori e su un processo di formazione in cui lo strato di uscita è composto da unità softmax che rappresentano la probabilità di ogni parola. Poiché questo approccio non è fattibile considerando il numero di parole, vengono impiegate tecniche come Hierarchical Softmax o Negative Contrastive Estimations come funzioni di costo. In generale, dopo alcune iterazioni (10 – 50), la rappresentazione globale è coerente con la struttura semantica sottostante.

Il nostro modello

Per creare il raccomandatore, abbiamo selezionato 500.000 recensioni scritte in inglese e abbiamo utilizzato Gensim [9] per creare la rappresentazione vettoriale dopo una pre-elaborazione NLP di base (in particolare, la rimozione delle stop-words e della punteggiatura). La dimensione del vettore è stata scelta a 256 per ottimizzare il supporto della GPU nelle fasi successive.

Come spiegato in precedenza, la LDA standard non può essere applicata ai vettori di parole, ma Das et al. hanno proposto una soluzione [2] che consente di modellare gli argomenti come distribuzioni gaussiane multivariate. Come hanno osservato gli autori, questa scelta offre una soluzione ottimale per le rappresentazioni a valore reale che possono essere confrontate utilizzando la distanza euclidea. Un esempio è mostrato nella figura seguente:

Quello che osserviamo alla fine della formazione è:

Questa è una conseguenza ovvia della disuguaglianza del triangolo, ma è estremamente utile quando si lavora con un feedback implicito; possiamo evitare di preoccuparci dei sinonimi fraintesi, a meno che non siano in contesti incoerenti. Tuttavia, questa eventualità è rara, supponendo che le recensioni siano pre-filtrate per evitare lo spam.

La LDA gaussiana richiede la specificazione di un numero desiderato di argomenti. Nel nostro progetto, abbiamo iniziato con 100 argomenti, e dopo alcune valutazioni, abbiamo ridotto il numero a 10. Un esempio di 3 argomenti (nel contesto delle recensioni di hotel a Berlino) è mostrato nella seguente tabella:

Queste sono solo alcune parole selezionate, ma abbiamo filtrato molti termini ridondanti durante la nostra analisi. Tuttavia, è facile verificare che, ad esempio, non ci siano problemi:

Per comprendere le recensioni e sfruttarle per creare profili di utenti, abbiamo impiegato anche un modello di analisi del sentimento, addestrato per eseguire quella che abbiamo chiamato “analisi vestigiale”. In altre parole, dobbiamo estrarre il sentimento di ogni parola agnostica (come “Letto”) considerando un piccolo contesto circostante. Consideriamo il seguente esempio:

Considerando l’esempio precedente, vogliamo creare un vettore di caratteristiche sparse come funzione dell’utente e dell’articolo:

Ogni coefficiente rappresenta il sentimento medio dell’argomento specifico (normalizzato tra -1,0 e 1,0). Poiché ogni recensione copre solo un sottoinsieme di argomenti, ipotizziamo che la maggior parte di Beta = 0. Per esempio, nel caso precedente, stiamo considerando solo le parole chiave camera, hotel, piazza e situato, che si riferiscono agli argomenti t1 = {Camera. Qualità} e t3 = {Location}. In questo caso, l’attributo “economico” ha un sentimento neutro, perché questa parola può essere utilizzata anche per definire hotel di scarsa qualità. Il vettore risultante diventa:

Una volta elaborate tutte le recensioni (all’inizio, il processo è puramente batch, ma diventa incrementale durante la fase di produzione), possiamo ottenere i vettori di caratteristiche del profilo utente come:

Il vettore risultante contiene una media di tutti gli argomenti con un peso ottenuto attraverso l’analisi del sentimento. In scenari particolari, abbiamo anche testato la possibilità di riponderare i coefficienti in base alla media globale o a fattori secondari. Questo approccio ci permette di evitare pregiudizi indesiderati per argomenti che dovrebbero essere secondari.

Il modello neurale per eseguire l’analisi del sentimento è mostrato nel seguente schema:

Il set di dati è stato etichettato, selezionando le parole chiave e il loro sentimento relativo. Il ruolo del “Selettore di vettori di parole” è quello di creare un “meccanismo di attenzione” che permette di concentrarsi solo sulle parti rilevanti. In particolare, riceve l’intera sequenza e le posizioni dei tasti target e produce un vettore sintetico che viene alimentato dalla seguente sottorete.

Per sfruttare la capacità di composizione dei vettori di parole, abbiamo implementato delle convoluzioni 1D che possono valutare le relazioni locali. Gli strati di pooling orizzontali non hanno aumentato le prestazioni come previsto e sono stati esclusi. Tutte le convoluzioni si basano sulle attivazioni ReLU.

L’output della rete è composto da 15 unità tangenti iperboliche che rappresentano il sentiment per ogni argomento. Questa scelta ha permesso di scartare i sentimenti neutri, il cui valore è prossimo allo zero. Nella nostra implementazione pratica, abbiamo sogliato l’uscita per accettare valori assoluti superiori a 0,1. Questa scelta ci ha permesso di denoisare le previsioni mantenendo l’accuratezza. L’addestramento è stato eseguito utilizzando 480.000 recensioni e la validazione è stata effettuata su 20.000 recensioni. L’accuratezza di convalida finale è di circa l’88%, ma i modelli più profondi con corpora più ampi ottengono risultati migliori. Un approccio alternativo si basa su uno strato LSTM che cattura la sequenza strutturale della revisione:

Le LSTM sono estremamente utili quando le recensioni non sono molto brevi. In questo caso, la particolare capacità di scoprire le dipendenze a lungo termine ci permette di elaborare contesti in cui la parola chiave target e gli elementi qualificanti non sono molto vicini. Ad esempio, una frase come: “L’hotel che abbiamo prenotato utilizzando il servizio Acme suggerito da un nostro amico è eccellente” richiede un’elaborazione più complessa per evitare che la rete rimanga bloccata in contesti brevi. Seq2Seq, con attenzione, è stato testato con successo per produrre vettori sintetici in cui gli elementi più critici sono immediatamente elaborabili. Abbiamo anche notato che le convoluzioni imparano molto più velocemente quando si confrontano con strutture standardizzate. Questo approccio e altri miglioramenti sono l’obiettivo degli sviluppi futuri.

Dai profili degli utenti alle raccomandazioni

Una volta elaborate tutte le recensioni, i vettori di caratteristiche possono essere utilizzati direttamente per le raccomandazioni. In particolare, abbiamo testato e implementato le seguenti soluzioni:

    • Raggruppamento degli utenti: in questo caso, gli utenti vengono raggruppati utilizzando K-Means e Clustering spettrale (particolarmente utile in quanto i cluster sono spesso non convessi) a un livello superiore. Poi, ogni cluster viene mappato utilizzando un Ball-Tree, e un algoritmo k-Nearest Neighbors seleziona gli utenti più simili in base a un raggio variabile. Poiché i vettori di caratteristiche rappresentano i commenti e i desideri latenti, gli utenti molto vicini possono condividere le loro esperienze e, di conseguenza, il motore suggerisce nuovi articoli in una sezione di scoperta. Questo approccio è un esempio di filtraggio collaborativo che può essere personalizzato con parametri aggiuntivi (suggerimenti in tempo reale, vicinanza al luogo di un evento e così via).
    • Suggerimento locale: quando sono necessarie raccomandazioni con vincoli geospaziali, possiamo forzare il peso di un argomento (ad esempio, vicino a un aeroporto) o, quando possibile, utilizzare il GPS del cellulare per determinare la posizione e creare un quartiere locale.
    • Corrispondenza articolo-tag: Quando gli articoli sono etichettati, i profili vengono sfruttati in due modi:
      • Per rivalutare l’etichettatura (ad esempio, “L’hotel ha la TV satellitare” viene identificato come falso dalla maggioranza delle recensioni e il suo peso viene diminuito).
      • Per abbinare immediatamente utenti e articoli senza dover ricorrere al filtraggio collaborativo o ad altri approcci di clustering.

Inoltre, la rete di profili utente è stata progettata per considerare un sistema di feedback, come mostrato nella figura seguente:

L’obiettivo è quello di ripesare le raccomandazioni considerando i fattori comuni tra ogni articolo e il profilo dell’utente. Supponiamo che l’articolo i sia stato consigliato perché corrisponde alla preferenza favorevole per gli argomenti t1, t3 e t5. Se l’utente invia un messaggio di feedback negativo, il motore ripeserà questi argomenti utilizzando una funzione esponenziale (basata sul numero di feedback ricevuti). Al contrario, un feedback positivo aumenterà il peso. L’approccio si basa su una semplice strategia di apprendimento per rinforzo, ma consente una regolazione fine in base a ciascun utente.

Conclusioni

Le raccomandazioni stanno diventando sempre più importanti e, in molti casi, il successo di un servizio dipende da esse. La nostra esperienza ci ha insegnato che le recensioni sono più “accettate” dei sondaggi e forniscono molte più informazioni rispetto al feedback esplicito. Le attuali tecniche di deep learning consentono di elaborare il linguaggio naturale e tutte le espressioni gergali in tempo reale, con una precisione paragonabile a quella di un agente umano. Inoltre, quando le recensioni sono pre-filtrate per eliminare tutto lo spam e le recensioni senza senso, il loro contenuto riflette ogni esperienza personale, spesso molto meglio di una semplice valutazione. Nei nostri sviluppi futuri, prevediamo di implementare il motore in diversi settori, raccogliendo recensioni, insieme a Tweet pubblici con hashtag specifici e aumentando la capacità di “analisi del sentimento vestigiale” con modelli più profondi e diverse strategie di vettori di parole (come FastText che lavora con i fonemi e non ha una perdita di prestazioni con le parole rare).

Riferimenti

    1. Blei D. M., Ng A. Y., Jordan M. I., Latent Dirichlet Allocation, Journal of Machine Learning Research 3/2003
    2. Das R., Zaheer M., Dyer C., Gaussian LDA for Topic Models with Word Embeddings, Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing, 07/2015
    3. Bonaccorso G., Machine Learning Algorithms, Packt Publishing, 2017
    4. Bonaccorso G., Mastering Machine Learning Algorithms, Packt Publishing, 2018
    5. Mikolov T., Sutskever I., Chen K., Corrado G., Dean J., Distributed Representations of Words and Phrases and their Compositionality, arXiv:1310.4546 [cs .CL]
    6. Pennington J., Socher R., Manning C. D., GloVe: Global Vectors for Word Representation, Stanford University
    7. Joulin A., Grave E., Bojanowski P., Mikolov T., Bag of Tricks for Efficient Text Classification, arXiv:1607.01759 [cs .CL]
    8. https://radimrehurek.com/gensim/models/word2vec.html

Se ti piace l’articolo, puoi sempre fare una donazione per supportare la mia attività. Basta un caffè!


Share this post on:
FacebookTwitterPinterestEmail