Due reti a due torri e campionamento negativo nei sistemi di raccomandazione

La connessione tra le reti a due torri e il problema del campionamento negativo nei sistemi di raccomandazione

Comprendere gli elementi chiave che alimentano i motori di raccomandazione avanzati

Uno dei tipi più importanti di modelli nei sistemi di raccomandazione attuali sono le reti neurali a doppia torre. Sono strutturati come segue: una parte della rete neurale (torre) elabora tutte le informazioni sulla query (utente, contesto), mentre l’altra torre elabora le informazioni sull’oggetto. Le uscite di queste torri sono embedding, che vengono poi moltiplicati (prodotto scalare o coseno, come abbiamo già discusso qui). Una delle prime menzioni dell’applicazione di tali reti per le raccomandazioni si trova in un ottimo articolo su YouTube. A proposito, ora definirei questo articolo un classico e molto adatto per entrare nel campo delle raccomandazioni.

Dall'articolo Deep Neural Networks for YouTube Recommendations

Che cosa caratterizza tali reti? Sono molto simili alla fattorizzazione matriciale, che è in realtà un caso speciale, prendendo solo l’input dell’user_id e dell’item_id. Tuttavia, se li confrontiamo con reti arbitrarie, la restrizione al late crossing (non consente l’input da diverse torri per fondersi fino alla fine) rende le reti a doppia torre estremamente efficienti nell’applicazione. Per costruire raccomandazioni per un singolo utente, è necessario calcolare la torre di query una volta e quindi moltiplicare questo embedding con gli embedding dei documenti, che di solito vengono pre-calcolati. Questo processo è molto veloce. Inoltre, questi embedding dei documenti pre-calcolati possono essere organizzati in un indice ANN (ad es. HNSW) per trovare rapidamente buoni candidati senza dover passare attraverso l’intero database.

Ricerca di similarità, Parte 4: Hierarchical Navigable Small World (HNSW)

Hierarchical Navigable Small World (HNSW) è un algoritmo all’avanguardia utilizzato per una ricerca approssimata dei più vicini…

towardsdatascience.com

Possiamo aumentare ulteriormente l’efficienza calcolando la parte dell’utente non per ogni query, ma in modo asincrono, con una certa regolarità. Tuttavia, ciò significa sacrificare la considerazione della storia e del contesto in tempo reale.

Le torri stesse possono essere piuttosto sofisticate. Ad esempio, nella parte dell’utente, possiamo utilizzare il meccanismo di auto-attenzione per elaborare la storia, che produce un trasformatore per la personalizzazione. Ma qual è il costo dell’introduzione della restrizione sul late crossing? Naturalmente, influisce sulla qualità. Nel medesimo meccanismo di attenzione, non possiamo utilizzare gli elementi che attualmente desideriamo raccomandare. Idealmente, vorremmo concentrarci su elementi simili nella storia dell’utente. Pertanto, le reti con early crossing sono tipicamente utilizzate nelle fasi successive di classifica, quando ci sono solo poche dozzine o centinaia di candidati rimasti, mentre quelle con late crossing (a doppia torre) vengono utilizzate, al contrario, nelle prime fasi e per la generazione di candidati.

(Tuttavia, esiste un argomento puramente teorico secondo cui qualsiasi ragionevole classificazione di documenti per diverse query può essere codificata attraverso embedding di una sufficiente dimensionalità. Inoltre, i decodificatori in NLP operano effettivamente sullo stesso principio, riccalcolando solo la torre di query per ogni token.)

Funzioni di perdita e campionamento negativo

Un punto particolare di interesse è la funzione di perdita utilizzata per addestrare le reti a doppia torre. In principio, possono essere addestrate con qualsiasi funzione di perdita, mirando a vari risultati e anche avendone diverse per diverse testate (con embedding diversi in ogni torre). Tuttavia, una variante interessante è l’addestramento con una perdita softmax su negativi all’interno del batch. Per ogni coppia query-documento nel set di dati, gli altri documenti nella stessa mini-batch sono utilizzati come negativi in combinazione con la stessa query nella perdita softmax. Questo metodo è una forma altamente efficace di hard negative mining.

Ma è importante considerare l’interpretazione probabilistica di una tale funzione di perdita, che non è sempre ben compresa. In una rete addestrata,

L’esponente del punteggio è proporzionale non alla probabilità a priori del documento dato la query, ma al PMI (Mutua informazione punto a punto), specifico della query. I documenti più popolari non saranno necessariamente raccomandati più spesso da un tale modello, perché durante l’addestramento, essi appaiono proporzionalmente più spesso come negativi. Utilizzare il punteggio come caratteristica può essere vantaggioso, ma per la classifica finale e la generazione dei candidati, ciò può portare a documenti molto specifici, ma di bassa qualità.

Google, in una pubblicazione, ha suggerito di affrontare questo problema con la correzione logQ durante l’addestramento. Noi, d’altra parte, affrontiamo tipicamente questa problematica nella fase di applicazione, non durante l’addestramento, semplicemente moltiplicando per la probabilità a priori del documento P(d). Tuttavia, non abbiamo mai confrontato questi approcci, cosa che sarebbe sicuramente un confronto interessante.

Regolarizzazione Implicita: Come Collegare ALS e le Reti Neurali Moderne

Esiste un algoritmo di filtraggio collaborativo noto come Implicit ALS (IALS). Ne ho già parlato in precedenza. Nell’era pre-rete neurale, era probabilmente uno degli algoritmi più popolari. La sua caratteristica distintiva è l’efficace ‘mining’ dei negativi: tutte le coppie utente-oggetto senza una storia di interazione sono trattate come negativi (seppur con un peso inferiore rispetto alle interazioni effettive). Inoltre, a differenza di un vero processo di mining, questi negativi non vengono campionati ma vengono utilizzati nella loro interezza ad ogni iterazione. Questo approccio è noto come regolarizzazione implicita.

Come è possibile ciò? Dati le dimensioni ragionevoli del task (numero di utenti e oggetti), ci dovrebbero essere così tanti negativi che elencarli richiederebbe più tempo dell’intero processo di addestramento. La bellezza dell’algoritmo sta nel fatto che, utilizzando la perdita MSE e il metodo dei minimi quadrati, è possibile calcolare preventivamente determinati elementi separatamente per tutti gli utenti e separatamente per tutti gli oggetti prima di ogni iterazione completa, e ciò è sufficiente per realizzare la regolarizzazione implicita. In questo modo, l’algoritmo evita una dimensione quadratica. (Per ulteriori dettagli, vi rimando a uno dei miei articoli preferiti di quel periodo).

Un paio di anni fa, mi sono chiesto se fosse possibile combinare questa meravigliosa idea della regolarizzazione implicita con la tecnologia più avanzata delle reti neurali a due torri. È una questione complessa, poiché vi è un’ottimizzazione stocastica invece di un batch completo e una riluttanza a tornare alla perdita MSE (almeno per l’intero task; specificamente per la regolarizzazione, potrebbe essere accettabile) in quanto tende a produrre risultati inferiori.

Ho pensato a lungo e infine ho trovato una soluzione! Per un paio di settimane, ero entusiasta, in attesa con impazienza di come avremmo provato questa idea al posto dei negativi in batch.

E poi, naturalmente (come spesso accade in tali casi), ho letto in un articolo che tutto era già stato pensato tre anni prima. Di nuovo, era Google. Successivamente, in quella stessa pubblicazione sulla correzione logQ, hanno dimostrato che la perdita softmax con i negativi in-batch funziona meglio della regolarizzazione implicita.

Ecco come siamo riusciti a risparmiare tempo e a non testare questa idea 🙂

Abbiamo Davvero Bisogno del Campionamento Negativo per i Modelli di Raccomandazione?

Dopotutto, abbiamo istanze reali di impressioni di raccomandazione, e se un utente non interagisce con esse, queste possono essere utilizzate come forti negativi. (Ciò non considera il caso in cui il servizio di raccomandazione stesso non sia ancora stato lanciato e non ci siano ancora impressioni.)

La risposta a questa domanda non è così banale; dipende da come intendiamo applicare il modello allenato: per la classificazione finale, per la generazione dei candidati o semplicemente come caratteristiche da inserire in un altro modello.

Cosa succede quando alleniamo il modello solo su impressioni effettive? Si verifica una forte selezione di bias, e il modello impara a distinguere bene solo quei documenti che sono stati mostrati in quel particolare contesto. Su documenti (o più precisamente, coppie di query-documento) che non sono stati mostrati, il modello avrà prestazioni peggiori: potrebbe sovrastimare le previsioni per alcuni documenti e sottovalutarle per altri. Certamente, questo effetto può essere mitigato applicando l’esplorazione nella classificazione, ma spesso questa è solo una soluzione parziale.

Se un generatore di candidati è allenato in questo modo, può produrre una moltitudine di documenti in risposta a una query, documenti che non ha mai visto in quel contesto e per i quali sovrastima le previsioni. Tra questi documenti, spesso ci sono solo rifiuti completi. Se il modello di classificazione finale è abbastanza buono, filtrerà questi documenti e non li mostrerà all’utente. Tuttavia, sprechiamo ancora la quota dei candidati per loro inutilmente (e potrebbero non essere rimasti documenti adatti del tutto). Pertanto, i generatori di candidati dovrebbero essere allenati in modo da capire che la maggior parte della base documentaria è di scarsa qualità e non dovrebbe essere raccomandata (nominata come candidato). Il negative sampling è un buon metodo per questo.

I modelli per la classificazione finale sono molto simili alla generazione di candidati da questo punto di vista, ma c’è una differenza importante: imparano dai loro errori. Quando il modello commette un errore sovrastimando le previsioni per alcuni documenti, questi documenti vengono mostrati agli utenti e quindi possono essere inclusi nel successivo dataset di allenamento. Possiamo riaddestrare il modello su questo nuovo dataset e renderlo disponibile nuovamente agli utenti. Nuovi falsi positivi emergeranno. La raccolta del dataset e il processo di riaddestramento possono essere ripetuti, ottenendo una sorta di apprendimento attivo. In pratica, sono sufficienti solo poche iterazioni di riaddestramento affinché il processo converga e il modello smetta di raccomandare sciocchezze. Ovviamente, i danni delle raccomandazioni casuali devono essere valutati, e a volte vale la pena prendere precauzioni extra. Ma in generale, non è necessario il negative sampling. Al contrario, può compromettere l’esplorazione, facendo sì che il sistema rimanga in un ottimo locale.

Se il modello viene utilizzato come caratteristiche per un altro modello, allora la stessa logica si applica, ma il danno derivante dalla sovrastima delle previsioni per documenti candidati casuali è ancora meno significativo perché altre caratteristiche possono contribuire ad adeguare la previsione finale. (Se un documento non arriva nemmeno nella lista dei candidati, non calcoleremo le sue caratteristiche.)

Ad un certo punto, abbiamo testato direttamente e abbiamo scoperto che come caratteristiche, ALS standard funziona meglio di IALS, ma non dovrebbe essere utilizzato per la generazione di candidati.

In sintesi, la nostra esplorazione ha enfatizzato l’efficacia delle reti a due torri nella classificazione, ha esaminato la significatività delle funzioni di perdita e del negative sampling nella precisione del modello, ha colmato il divario con il collaborative filtering classico attraverso la regolarizzazione implicita e ha dibattuto il ruolo essenziale del negative sampling nei sistemi di raccomandazione. Questa discussione sottolinea la complessità e la sofisticazione in continua evoluzione delle tecnologie dei sistemi di raccomandazione.