Laboratorio Recommender Systems Recommender Systems Laboratorio Programmazione di Applicazioni Data Intensive Laurea in Ingegneria e Scienze Informatiche DISI – Università di Bologna, Cesena Proff. Gianluca Moro, Giacomo Domeniconi, Roberto Pasolini [email protected]
22
Embed
Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Laboratorio Recommender Systems
Recommender Systems Laboratorio
Programmazione di Applicazioni Data Intensive
Laurea in Ingegneria e Scienze Informatiche DISI – Università di Bologna, Cesena
• L’obiettivo dell’esercitazione è fornire agli utenti del sito di e-commerce suggerimenti sui prodotti da acquistare
• Trattiamo nello specifico suggerimenti di acquisto personali, mirati allo specifico utente che sta visitando il sito – L’utente deve autenticarsi al sito per essere identificato
• Un sistema di recommendation analizza le relazioni esistenti tra utenti e prodotti (oggetti) per dare suggerimenti mirati
• Molti fornitori di prodotti e servizi (es. streaming audio/video) usano sistemi di recommendation più o meno sofisticati – Casi particolarmente noti sono ad es. Amazon e Netflix
Data Intensive Applications 2
Laboratorio Recommender Systems
Collaborative Filtering
• Il collaborative filtering (CF) prevede nuove associazioni utente-prodotto solamente in base a quelle già presenti – L’insieme delle associazioni forma la cosiddetta utility matrix
• Si ignorano le caratteristiche specifiche di utenti e prodotti
• I metodi di CF sono applicabili in molti contesti differenti – Il sistema di recommendation deve solamente distinguere tra loro
utenti e oggetti diversi, senza conoscerne i dettagli
• Servono ampie quantità di dati per generare buone previsioni – Gli utenti devono dare sufficienti valutazioni per ricevere consigli
– Difficoltà soprattutto all’avvio di un servizio (cold start)
Data Intensive Applications - Laboratorio sulla recommendation 3
Laboratorio Recommender Systems
Obiettivo: integrazione di recommendation nel sito di e-commerce
• Nel sito, vogliamo mostrare ad ogni utente autenticato una lista di prodotti a cui può essere interessato – Scegliamo di mostrare la lista
nella home page
• Vediamo dapprima come usare il software per le recommendation
• Vedremo poi come integrarne le funzioni nella webapp
Data Intensive Applications 4
Laboratorio Recommender Systems
Apache Mahout
• Mahout è una libreria Java per il machine learning in via di sviluppo, che fornisce (tra le altre cose) un framework per il CF – caricamento dati da varie fonti, diversi algoritmi di CF con parametri
impostabili, funzionalità per la stima dell’accuratezza
• Utenti e oggetti sono identificati in Mahout da numeri long – risparmio di tempo e memoria rispetto all’uso di oggetti Java completi,
di cui nel CF non si usano le informazioni
– nell’esercitazione, questi numeri corrisponderanno alle chiavi primarie di utenti e prodotti nel DB
• Le API fondamentali definite da Mahout sono – DataModel: insieme di dati da cui estrarre conoscenza per il CF
– Recommender: modello di conoscenza in grado di prevedere punteggi per coppie utente-oggetto senza rating
Data Intensive Applications 5
Laboratorio Recommender Systems
Progetto Eclipse per Mahout
• Abbiamo predisposto nel file MahoutLab.zip un progetto Eclipse per svolgere gli esercizi su Mahout – File > Import > Existing Gradle project
– Sono già dichiarate le dipendenze necessarie in build.gradle
• Nel package it.unibo.dia.rec sono già fornite alcune classi che saranno usate negli esercizi
• È inoltre fornita come utilità una classe Stopwatch per misurare e stampare il tempo impiegato ad eseguire i calcoli
Stopwatch.start(); // inizia a misurare il tempo esecuzione calcoli ... Stopwatch.print( "evaluation" );
output > ELAPSED TIME (evaluation): 6741 ms.
Data Intensive Applications - Laboratorio sulla recommendation 6
Laboratorio Recommender Systems
DataModel
• Un DataModel incapsula un insieme di dati su cui è possibile addestrare e valutare i recommender, costituito da: – gli insiemi di ID degli utenti e degli oggetti (prodotti) conosciuti
– le associazioni tra utenti e prodotti, ciascuna con un punteggio
• Mahout fornisce varie implementazioni di DataModel – FileDataModel per caricare i dati da un file
– GenericDataModel per incapsulare un insieme di array con i dati
– sottoclassi di JDBCDataModel per interfacciarsi ad un RDBMS: col metodo exportWithPrefs si scaricano tutti i dati in array in RAM
• Un DataModel fornisce diversi metodi per leggere i dati – getUserIDs restituisce un iteratore degli ID di tutti gli utenti
• LongPrimitiveIterator con metodi hasNext e nextLong
Data Intensive Applications 7
Laboratorio Recommender Systems
Esercizio 1: caricamento dati e-commerce
• Nella classe EStoreData, implementare il metodo loadReviewsInMemory che restituisce un DataModel con tutte le recensioni del database caricate in memoria
• Usare la sorgente dati fornita dal campo DB – Se non si sta svolgendo l’esercizio sui PC del laboratorio, cambiare se
necessario i parametri della connessione nel blocco static
• Utilizzare la vista predisposta estore.user_review, che presenta le seguenti colonne – user_id: ID dell’utente
– product_id: ID del prodotto
– score: valutazione (da 1 a 5 stelle)
• Questo metodo sarà utilizzato nei prossimi esercizi
Data Intensive Applications 8
Laboratorio Recommender Systems
Recommender
• Un Recommender rappresenta un modello di conoscenza in grado di predire associazioni utente-oggetto sconosciute
• Esistono varie implementazioni per diversi metodi di CF – UserBasedRecommender, ItemBasedRecommender, SVDRecommender (scomposizione matrici), …
• I calcoli per addestrare un Recommender sono eseguiti dal costruttore dell’oggetto, a cui va passato un DataModel – Oltre ad esso vanno passati i parametri specifici dell’implementazione
(es. misura di similarità e vicinato per UserBasedRecommender)
• Un Recommender può essere interrogato tramite i metodi – estimatePreference: voto previsto per utente ed oggetto dati
– recommend: N oggetti con voto previsto maggiore per utente dato
Data Intensive Applications 9
Laboratorio Recommender Systems
Valutazione di un recommender in Mahout
• I RecommenderEvaluator consentono di valutare l’accuratezza di un algoritmo CF tramite il metodo hold-out – Un DataModel è diviso in training e test set: sul primo si addestra un Recommender, sul secondo se ne valuta la bontà delle predizioni
– Le implementazioni calcolano diverse misure, ad esempio RMSRecommenderEvaluator calcola il Root Mean Square Error
• Al metodo evaluate che esegue la valutazione si passano: – il DataModel che verrà diviso in training e test set
– un DataModelBuilder per filtrare il training set (non lo usiamo)
– un RecommenderBuilder che deve costruire un Recommender col DataModel di training fornito da Mahout
– la percentuale di preferenze per utente da inserire nel training set
– la percentuale totale di preferenze da considerare (le usiamo tutte)
Data Intensive Applications 10
Laboratorio Recommender Systems
Esercizio 2: valutazione della recommendation sui dati di e-commerce
• Scrivere una classe main che esegua una valutazione del RMSE di un recommender sui dati del sito
• Caricare i dati attraverso il metodo di EStoreData implementato nell’esercizio precedente
• Come RecommenderBuilder, usare la classe EStoreRecommBuilder fornita – Questa utilizza l’algoritmo di fattorizzazione ALSWR, che si è
dimostrato tra i più efficaci ed efficienti sui dati trattati
• Eseguire prove con diverse percentuali di training – Usando il 70% dei dati per il training, si dovrebbe ottenere un RMSE
compreso tra 1 e 1,02 (a seconda della divisione casuale training/test)
Data Intensive Applications 11
Laboratorio Recommender Systems
Integrazione recommendation nell’applicazione di e-commerce
• Vediamo ora come integrare un sistema di recommendation nel nostro portale di e-commerce
• Si desidera che il sito suggerisca ad un qualsiasi utente autenticato quali articoli è più probabile che voglia acquistare, in base alle recensioni sue e di altri utenti
• Software come Mahout possono essere usati per calcolare i suggerimenti
• Quando richiesti, i suggerimenti di un utente dovrebbero essere ottenuti in tempi molto brevi (una frazione di secondo) per non rallentare il caricamento della pagina
Data Intensive Applications - Laboratorio sulla recommendation 12
Laboratorio Recommender Systems
Precalcolo delle recommendation
• Anche per un solo utente con un modello di conoscenza già costruito, il calcolo di recommendation può essere inefficiente – Molti secondi o minuti, a seconda della mole di dati e dell’algoritmo
• In alcuni casi tuttavia, le stesse recommendation calcolate ad una richiesta possono rimanere valide per le successive – Se da una richiesta all’altra non sono stati introdotti nuovi dati
(recensioni), non serve ripetere il calcolo
– Anche se sono disponibili alcuni dati nuovi, se la mole di quelli già presenti è grande, i risultati rimarrebbero (quasi) invariati
• Le recommendation potrebbero essere calcolate solo in alcune circostanze, presentando ad ogni richiesta i risultati già disponibili del calcolo più recente
Data Intensive Applications - Laboratorio sulla recommendation 13
Laboratorio Recommender Systems
Precalcolo delle recommendation: possibile approccio
• Si introduce nel database una tabella di suggerimenti precalcolati per tutti gli utenti – Ad ogni utente registrato associa un numero N di articoli suggeriti con
la valutazione prevista (per poterli ordinare dal più consigliato)
• Quando richiesti, i suggerimenti per un utente vengono letti dalla tabella in modo efficiente (è opportuno usare un indice)
• Periodicamente i suggerimenti vengono ricalcolati e salvati nella tabella, sostituendo i precedenti – Questa operazione può essere eseguita automaticamente ad intervalli
regolari (es. ogni giorno)
Data Intensive Applications - Laboratorio sulla recommendation 14
Laboratorio Recommender Systems
Integrazione di Mahout nell’applicazione e-commerce
• Sarebbe possibile usare Mahout all’interno dell’applicazione per ottenere un Recommender da usare per fornire i consigli
• Scegliamo però di salvare in una tabella le recommendation calcolate da Mahout le recommendation non van perse in caso di arresto dell’applicazione
• Nello specifico, scegliamo per ora di eseguire il calcolo delle recommendation in un processo separato dall’applicazione approccio generale: si potrebbero usare anche altri software che
vadano a scrivere i risultati sulla stessa tabella
non si consumano le risorse della webapp
Data Intensive Applications - Laboratorio sulla recommendation 15
Laboratorio Recommender Systems
Esercizio 3: tabella per il salvataggio delle recommendation
• Creare nel DB una tabella recommendation per salvare le recommendation precalcolate dal processo esterno
• La tabella deve contenere le seguenti colonne di tipo INTEGER (i nomi devono essere esattamente quelli indicati!) – oid: ID della recommendation (chiave primaria)
– user_oid: ID dell’utente a cui è rivolta
– product_oid: ID del prodotto suggerito
– score: punteggio (rating) previsto
• Per qualsiasi utente, sarà necessario ottenere tutte le relative recommendation in ordine per punteggio decrescente
• Creare sulla tabella un indice opportuno
Data Intensive Applications - Laboratorio sulla recommendation 16
Laboratorio Recommender Systems
Aggiornamento delle recommendation sul database
• Usiamo un programma esterno che salvi le recommendation nella tabella recommendation già predisposta
• Il programma deve – ottenere i dati degli acquisti dal database
– estrarre il modello di recommendation da essi
– usare il modello per calcolare N recommendation per ciascun utente
– salvare le recommendation sul database (cancellando quelle precedenti)
• In un contesto reale, si può programmare il server perché esegua periodicamente il programma – ad es. con Task Scheduler su Windows o cron su Linux
Data Intensive Applications - Laboratorio sulla recommendation 17
Laboratorio Recommender Systems
Esercizio 4: aggiornamento delle recommendation sul database
• Scrivere una classe main che aggiorni le recommendation sul database in base alle recensioni attuali
• Per il caricamento del DataModel dal database e la costruzione del Recommender utilizzare di nuovo le classi EStoreData e EStoreRecommBuilder – usare il metodo buildRecommender di quest’ultima
• Ottenere 10 suggerimenti per ogni utente del DataModel e salvarli in una List di oggetti Recommendation – costruttore: Recommendation(userId, itemId, score)
• Usare il metodo saveRecommendations già implementato nella classe EStoreData per salvare i dati nella tabella sul database (sostituendo eventuali già presenti)
Data Intensive Applications - Laboratorio sulla recommendation 18
Laboratorio Recommender Systems
Nuova versione della webapp con l’integrazione delle recommendation
• Lavoriamo ora su una versione modificata della webapp con la visualizzazione delle recommendation caricate da DB
• Rimuovere la versione precedente (se rimasta) – Nella scheda Servers (prospettiva Java EE), sotto il server configurato
(se presente), cliccare col destro sulla webapp e scegliere Remove
– Nel Project Explorer, cliccare col destro sulla radice del progetto precedente, scegliere Delete ed eliminare i contenuti anche dal disco
• Importare il progetto dal file Estore-recomm.zip – File > Import > Existing Projects into Workspace > Select archive file
• Testare l’esecuzione su Tomcat – clic destro su radice progetto > Run as > Run on server
Data Intensive Applications 19
Laboratorio Recommender Systems
Modifiche alla webapp per l’integrazione delle recommendation
• Abbiamo aggiunto al model dell’applicazione una classe Recommendation, con metodi get/set corrispondenti alle colonne dell’omonima tabella
• Un nuovo metodo del DAO getRecommendedProducts restituisce i prodotti da consigliare ad un dato utente, in ordine decrescente di punteggio – Sono restituiti direttamente Product, non Recommendation
• Vogliamo che nella home page, se un utente è autenticato, siano mostrati gli eventuali suggerimenti disponibili per lui
Data Intensive Applications 20
Laboratorio Recommender Systems
Esercizio 5: modifica servlet/JSP per mostrare prodotti suggeriti all’utente
• In FrontPageServlet reperire dal DB la lista dei prodotti suggeriti per l’utente, se autenticato
• Se un utente è autenticato, usare l’apposito metodo del DAO per reperire la lista e salvarla come attributo della richiesta
• Se nessun utente è autenticato, non fare nulla
• In FrontPage.jsp mostrare (se esiste e non è vuota) la lista dei prodotti suggeriti passata dalla servlet
• Ottenere l’eventuale lista dall’attributo salvato dalla servlet
• Mostrare un elenco con nomi dei prodotti e link alle relative pagine
Data Intensive Applications 21
Laboratorio Recommender Systems
Test delle recommendation
• Autenticarsi al sito con uno degli utenti predefiniti e verificare che le sue recommendation siano visibili in home page – Consultare i nomi disponibili dalla tabella estore.user: tutti (salvo
“user” e “admin”) hanno password vuota
• Opzionale: eseguire un ordine e assegnare punteggi ad alcuni prodotti con l’utente “user”, rigenerare le recommendation e verificare la bontà di quelle fornite per i prodotti ordinati