+ All Categories
Home > Documents > Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf ·...

Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf ·...

Date post: 29-Sep-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
22
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]
Transcript
Page 1: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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]

Page 2: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

Laboratorio Recommender Systems

Suggerimenti d’acquisto personali: Recommendation

• 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

Page 3: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 4: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 5: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 6: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 7: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 8: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 9: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 10: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 11: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 12: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 13: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 14: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 15: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 16: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 17: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 18: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 19: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 20: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 21: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Page 22: Recommender Systems Laboratoriodia.apice.unibo.it/download/labs/recommendation-lab.pdf · Recommendation • L’oiettivo dell’eseritazione è fornire agli utenti del sito di e

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

Data Intensive Applications 22


Recommended