111
Indice 1 Introduzione 3 2 Stato dell’Arte 5 2.1 Recommendation ........................... 5 2.1.1 Il concetto del “The Long Tail” ............... 6 2.1.2 Classificazione degli algoritmi di Recommendation .... 7 2.1.3 User and Item Based Recommenders ............ 9 2.1.4 Slope-one Recommender ................... 15 2.1.5 Recommender distribuito con Matrice di co-occorrenza . . 17 3 Realizzazione 20 3.1 Frameworks .............................. 21 3.1.1 Cluster ............................ 21 3.1.2 Hadoop ............................ 23 3.1.3 Mahout ............................ 24 3.1.4 WikipediaMiner ....................... 25 3.1.5 Codeigniter .......................... 28 3.2 Architettura .............................. 28 3.3 Mock-up ................................ 29 3.3.1 Home Page .......................... 29 3.3.2 Header ............................. 30 3.3.3 Pagina dei suggerimenti video ................ 31 3.3.4 Pagina video ......................... 31 3.3.5 Pagina del Profilo ...................... 33 3.3.6 Pagina della Risorsa ..................... 34 3.3.7 Pagina della Categoria .................... 34 3.4 Database ............................... 35 3.4.1 MySql ............................. 35 3.4.2 Database di Intime ...................... 35 3.5 Strumenti per l’implementazione .................. 41 3.5.1 Jquery/AJAX ........................ 41 3.5.2 FFmpeg ............................ 54 3.5.3 Facebook integration ..................... 57 3.5.4 Media Wiki .......................... 63 3.6 Recommendation ........................... 66 3.6.1 Cold Start ........................... 66 3.6.2 Mantenimento ........................ 67 3.6.3 Raccomandazioni in Real Time ............... 68 1

Daniele Maddaluno Bachelor of Arts thesis

  • Upload
    micc

  • View
    663

  • Download
    3

Embed Size (px)

DESCRIPTION

InTime recommendation system

Citation preview

Page 1: Daniele Maddaluno Bachelor of Arts thesis

Indice

1 Introduzione 3

2 Stato dell’Arte 52.1 Recommendation . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1 Il concetto del “The Long Tail” . . . . . . . . . . . . . . . 62.1.2 Classificazione degli algoritmi di Recommendation . . . . 72.1.3 User and Item Based Recommenders . . . . . . . . . . . . 92.1.4 Slope-one Recommender . . . . . . . . . . . . . . . . . . . 152.1.5 Recommender distribuito con Matrice di co-occorrenza . . 17

3 Realizzazione 203.1 Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.1.1 Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.1.2 Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.3 Mahout . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.1.4 WikipediaMiner . . . . . . . . . . . . . . . . . . . . . . . 253.1.5 Codeigniter . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.2 Architettura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.3 Mock-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.3.1 Home Page . . . . . . . . . . . . . . . . . . . . . . . . . . 293.3.2 Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.3.3 Pagina dei suggerimenti video . . . . . . . . . . . . . . . . 313.3.4 Pagina video . . . . . . . . . . . . . . . . . . . . . . . . . 313.3.5 Pagina del Profilo . . . . . . . . . . . . . . . . . . . . . . 333.3.6 Pagina della Risorsa . . . . . . . . . . . . . . . . . . . . . 343.3.7 Pagina della Categoria . . . . . . . . . . . . . . . . . . . . 34

3.4 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.4.1 MySql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.4.2 Database di Intime . . . . . . . . . . . . . . . . . . . . . . 35

3.5 Strumenti per l’implementazione . . . . . . . . . . . . . . . . . . 413.5.1 Jquery/AJAX . . . . . . . . . . . . . . . . . . . . . . . . 413.5.2 FFmpeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.5.3 Facebook integration . . . . . . . . . . . . . . . . . . . . . 573.5.4 Media Wiki . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.6 Recommendation . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.6.1 Cold Start . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.6.2 Mantenimento . . . . . . . . . . . . . . . . . . . . . . . . 673.6.3 Raccomandazioni in Real Time . . . . . . . . . . . . . . . 68

1

Page 2: Daniele Maddaluno Bachelor of Arts thesis

3.6.4 Raccomandazioni sul Cluster . . . . . . . . . . . . . . . . 713.7 Categorizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

3.7.1 Tassonomia delle Categorie . . . . . . . . . . . . . . . . . 783.7.2 Clustering . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.7.3 Categorizzazione provvisoria . . . . . . . . . . . . . . . . 863.7.4 Cold Start . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.7.5 Profilazione degli utenti . . . . . . . . . . . . . . . . . . . 87

4 Esperimenti 904.1 Evaluate di un Recommender . . . . . . . . . . . . . . . . . . . . 904.2 Evaluate di un Recommender di Mahout . . . . . . . . . . . . . . 914.3 Risultati sperimentali . . . . . . . . . . . . . . . . . . . . . . . . 914.4 Selezione del Recommender . . . . . . . . . . . . . . . . . . . . . 94

5 Conclusioni 955.1 Sviluppi futuri: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

A Screenshot delle Pagine Web 98

Bibliografia 110

Ringraziamenti 111

2

Page 3: Daniele Maddaluno Bachelor of Arts thesis

Capitolo 1

Introduzione

Intime e un social network per l’annotazione ed il browsing video, basato sullaprofilazione semantica. Il sistema, sviluppato come web application, permetteagli utenti di commentare frame specifici dei video e di porre delle annotazioniche arricchiscano un commento con riferimenti a pagine di Wikipedia e utentidi Facebook [1].

Queste annotazioni vengono usate all’interno del network per modellare seman-ticamente gli interessi e piu in generale il profilo di ciascun utente. Inoltre, ilsistema suggerisce agli utenti nuovi video, risorse, amici o altri utenti in base ailoro interessi.

Queste pratiche di tagging rispondono alle esigenze nate con l’emergere del Web2.0, ovvero la ricerca e la navigazione in ampie raccolte di dati.

Oltre a permettere la profilazione degli utenti, le annotazioni sui video facilitanola navigazione all’interno del network.

Cosı come in molti social network, quali Facebook e Flickr, e possibile appor-re un tag soltanto su di una parte di un’immagine, in Intime e possibile porreun’annotazione su un singolo frame, piuttosto che sul video intero.

Non tutte le annotazioni sono uguali, si distingue tra annotazioni a pagine diWikipedia e annotazioni a profili Facebook.

Il sistema e anche una piccola enciclopedia, in quanto contiene dati informa-tivi sulle risorse contenute nel network: ogni risorsa inserita dagli utenti inun’annotazione arricchisce il sistema, ampliando il numero di voci consultabili.Queste risorse vengono raggruppate in categorie che hanno la funzione sia diraggruppare il sapere che di aggiungere semantica nel network.

Il meccanismo di annotazione non e l’unico metodo utilizzato da Intime perproporre contenuto di interesse; viene utilizzato un indice di gradimento chepuo essere specificato manualmente da un utente su di un video. Come in al-tri network basati su video, in Intime ogni utente ha la possibilita di esprimere

3

Page 4: Daniele Maddaluno Bachelor of Arts thesis

una valutazione per un video, selezionando un voto su una scala da uno a cinque.

Per estrarre parte del contenuto semantico da un video, ci sono due approcci.

� una forma di annotazione automatica generata da algoritmi di ComputerVision

� la possibilita di apporre sul video annotazioni poste manualmente dagliutenti o estratte in automatico dai commenti

Intime utilizza il secondo approccio, in quanto, da un lato permette la scopertadi nuovi video in base agli interessi degli utenti, dall’altro genera nuove formedi interazione sociale che incentivano gli utenti a porre sempre piu annotazioni.

La scoperta di nuovi contenuti di interesse per ogni utente e presente sotto duediverse forme:

� vengono raggruppate in categorie le risorse presenti nel network medianteun sistema di clustering. Le categorie di Intime potranno essere di interesseper gli utenti e nuove risorse saranno suggerite in base alle categorie diappartenenza

� vengono suggeriti nuovi video agli utenti tramite un elaborato sistema direcommendation che tiene conto sia dei voti assegnati dagli utenti stessiai video gia visti, sia delle informazioni estratte dalla profilazione degliutenti

4

Page 5: Daniele Maddaluno Bachelor of Arts thesis

Capitolo 2

Stato dell’Arte

2.1 Recommendation

Un sistema di information filtering e un sistema che elimina informazioni ri-dondanti o indesiderate da un flusso di informazioni utilizzando metodi semi-automatizzati o computerizzati prima della presentazione ad un utente umano.Il suo obiettivo principale e la gestione del sovraccarico di informazioni e l’in-cremento del rapporto segnale-rumore semantico.

I sistemi di raccomandazione sono una sottoclasse di sistema informativo di fil-traggio che cercano di prevedere il rating o preferenza che un utente darebbead un item (ad esempio musica, libri o filmati) o ad un elemento sociale (adesempio persone o gruppi) che non ha ancora preso in considerazione, tramiteun modello costituito dalle caratteristiche degli elementi (content-based approa-ches) o dall’ambiente sociale dell’utente (collaborative filtering approaches).

Un sistema di raccomandazione mette insieme varie tecniche computazionaliper selezionare item personalizzati in base agli interessi degli utenti e secondo ilcontesto in cui sono inseriti. Tali elementi possono assumere varie forme, comead esempio libri, film, notizie, musica, video, annunci, link sponsorizzati, pagineweb, prodotti di un negozio, ecc. I sistemi di raccomandazione sono diventatiestremamente comuni negli ultimi anni. Aziende come Amazon, Netflix e Goo-gle utilizzano intensivamente sistemi di raccomandazione con la quale riesconoa ricavare grandi vantaggi ed introiti.

Le raccomandazioni nei sistemi di calcolo di queste grandi aziende sono nate inrisposta alle difficolta che l’utente trova nello scegliere in una vasta varieta diprodotti e servizi tra le molte alternative che gli vengono presentate.

Grande risonanza fu data ai sistemi di raccomandazione durante il Netflix Prize.Netflix e una societa degli Stati Uniti, nata nel 1997, che offre un servizio dinoleggio di DVD e videogiochi via Internet.

Nel 2006 Netflix ha lanciato un premio di un milione di dollari per chi fossestato in grado di migliorare di almeno il 10% le performance dell’algoritmo di

5

Page 6: Daniele Maddaluno Bachelor of Arts thesis

suggerimento dei film. Tale algoritmo suggerisce agli utenti nuovi film da vederesulla base del gradimento espresso dagli utenti per i contenuti gia visti. Il 26luglio 2009 e stata annunciata la chiusura dell’invio di nuovi risultati: due sonostati i team che hanno superato la soglia del 10% richiesta dal regolamento. Il21 settembre di quello stesso anno i giudici di Netflix hanno assegnato il premioad uno dei due team( [2], [3], [4]).

2.1.1 Il concetto del “The Long Tail”

Per capire il vero valore delle recommendations e importante spiegare il signifi-cato del concetto del “The Long Tail”.

L’espressione “coda lunga”, in inglese “The Long Tail”, e stata coniata da ChrisAnderson in un articolo dell’ottobre 2004 su Wired Magazine [5] per descriverealcuni modelli economici e commerciali, come ad esempio Amazon.com o Netflix.

In pratica secondo Anderson nell’economia dell’abbondanza non e piu consi-gliabile limitarsi a produrre alcuni pochi beni di massa, tali da poter essereconsiderati un comune denominatore per tutti gli utenti, ma diviene sempre piuinteressante concentrarsi sulla coda, la “long tail”, capace di offrire un mercatodi piu vaste dimensioni, composto da infinite piccole richieste di altrettante di-verse comunita di utenti.

Il termine e anche utilizzato comunemente nelle scienze statistiche, ad esempioper definire modelli di distribuzione della ricchezza e di usi lessicali. In questedistribuzioni una popolazione ad alta frequenza e seguita da una popolazione abassa frequenza, che diminuisce gradatamente (tail off).

Ad esempio, applicando il concetto di coda lunga all’editoria, in una rivista conun milione di lettori, la parte editoriale sta solo nella porzione verde della curva(vedi Fig. 2.1); tutto il resto (porzione gialla) rappresenta la coda lunga in cuici sono un milione di scrittori con un lettore ciascuno. Questa strategia e moltopiu proficua poiche, grazie ai media digitali, circola maggior denaro nella codarispetto alla testa e quindi i prodotti di nicchia avranno molte piu possibilita diprofitto.

Il concetto del “Long Tail” spiega il vantaggio dei negozi on-line rispetto a quellitradizionali fisicamente esistenti (brick-and-mortar vendors). Prima di discuterele principali applicazioni dei sistemi di raccomandazione, e bene capire il feno-meno del “Long Tail”, che rende i sistemi di recommendation necessari [6].

I sistemi di trasporto fisici sono caratterizzati dalla scarsita di risorse. I negozitradizionali hanno uno spazio limitato e possono mostrare al consumatore solouna piccola frazione di tutte le scelte che sarebbero possibili.

D’altra parte i negozi online potenzialmente potrebbero mostrare al consuma-tore ogni prodotto disponibile nel “negozio”.

6

Page 7: Daniele Maddaluno Bachelor of Arts thesis

Figura 2.1: Fenomeno del “Long Tail”

Cosı un libraio fisicamente esistente potrebbe avere diverse migliaia di libri suisuoi scaffali ma Amazon, ad esempio, ne offre milioni. Un giornale fisico puostampare diverse dozzine di articoli al giorno, mentre i servizi online di infor-mazione ne offrono migliaia.

Le raccomandazioni nel mondo fisico sono abbastanza semplici. In primo luogonon e possibile personalizzare il negozio per ogni singolo cliente; quindi la sceltadi cio che viene messo a disposizione e regolata principalmente sui grandi numeri.

In un bookstore verranno visualizzati solo i libri che sono piu popolari e in ungiornale verranno stampati solo gli articoli per cui si ritiene che la maggior partedelle persone saranno interessate. Nel primo caso, i dati di vendita governano lascelta dei prodotti da mettere sugli scaffali; nel secondo, e una scelta editorialea farlo.

La distinzione tra il mondo fisico e il mondo on-line e stato chiamato il fenomenodel “Long Tail”, il cui nome deriva dalla Fig. 2.1.

I negozi fisici forniscono solo i prodotti piu popolari a sinistra dell’asse vertica-le, mentre i corrispondenti negozi on-line forniscono l’intera gamma di articoli:sia la coda che i prodotti piu popolari. Il fenomeno del “Long Tail” costringe inegozi on-line a personalizzare per ogni cliente la raccomandazione degli articoli.

Non e possibile presentare all’utente tutti i possibili elementi a disposizione; inegozi fisici possono, ma non e ragionevole aspettarsi che gli utenti conoscanotutti i prodotti che potrebbero interessare loro.

2.1.2 Classificazione degli algoritmi di Recommendation

I sistemi di raccomandazione in genere possono essere suddivisi in due categorie:

7

Page 8: Daniele Maddaluno Bachelor of Arts thesis

Figura 2.2: Fenomeno del “Long Tail” in termini di un recommender video

1. Collaborative filtering: l’approccio collaborativo costruisce un modello apartire dal comportamento passato dell’utente (per esempio item prece-dentemente acquistati e/o voti numerici assegnati a tali item) come pureper decisioni simili prese da altri utenti. Dopodiche tale modello viene uti-lizzato per predirre degli item verso i quali l’utente potrebbe essere interes-sato. Il termine “collaborative filtering” venne usato per la prima volta daDavid Golbert nel 1992 in un saggio (vedi [7]) intitolato “Using collabora-tive filtering to weave an information tapestry”. Golbert aveva progettatoun sistema chiamato Tapestry che permetteva alle persone di annotare idocumente come interessanti o meno e utilizzava quest’informazione perfiltrare i documenti da proporre ad altre persone [8].

2. Content-based filtering: tale approccio utilizza una serie di caratteristichediscrete di un item in modo tale da raccomandare items con proprietasimili.

Infine, esiste una terza categoria di sistemi di raccomandazione detti HybridRecommender Systems, in cui i due approcci descritti precedentemente sonocombinati.

Le due piu ampie categorie di algoritmi per motori di recommendation conapproccio collaborative filtering sono:

� User based: si individuano gli item che potrebbero piacere ad un utente apartire dagli utenti i cui gusti sembrano somigliare ai suoi.

� Item based: si individuano gli item che potrebbero piacere ad un utentecercando di individuare altri items simili a quelli per cui l’utente ha giaespresso una preferenza.

Queste categorie sono di tipo collaborative filtering perche le raccomandazioni,in questo modo, sono basate soltanto sulla conoscenza del legame esistente tragli utenti e gli item.

8

Page 9: Daniele Maddaluno Bachelor of Arts thesis

Queste tecniche non richiedono conoscenza sugli items di per se. In un certosenso puo essere un vantaggio; infatti in tal modo non ci si deve preoccupare segli item sono libri, fiori, film, video, fiori, o anche persone, poiche niente delleloro proprieta e dato come input a questi algoritmi.

Nel caso di algoritmi basati sull’approccio content-based, si devono utilizzareapprocci molto piu legati al dominio specifico del problema.

Capire le differenze, i punti di forza, e le debolezze dei due algoritmi user editem based e di importanza fondamentale nella scelta di un recommender.

2.1.3 User and Item Based Recommenders

Prima di descrivere gli algoritmi di questi recommenders e necessario descriveredue concetti fondamentali: la similarity su cui entrambi si basano, e la neigh-bourhoood necessaria solo per i recommenders user-based.

Questi concetti sono importanti per individuare e misurare quali entita, utentio item, sono piu simili tra loro e quindi raggrupparli insieme secondo un qualchegrado di similarita.

Similarity

Gran parte di un recommender si basa sull’implementazione della similarity.Non e possibile implementare un recommender user o item based veramente ef-ficace, senza una nozione affidabile ed appropriata di quanto item o utenti sianosimili tra loro.

Le preferenze sono triple (user, item, rate); ogni utente, come ogni item, puoessere descritto da un unico grande vettore di rates. Per esempio, facendo rife-rimento alla Tabella 2.1, l’utente 1 puo essere completamente descritto tramiteil vettore (5.0, 3.0, 2.5), l’utente 4 dal vettore (2.5,−,−), l’item 1 puo esserecompletamente descritto dal vettore (5.0, 2.0, 2.5, 5.0, 2.5), l’item 3 dal vettore(2.5, 5.0,−, 3.0,−). Come si puo notare la cardinalita dei vettori utente e parial numero di item presenti nel sistema, viceversa la cardinalita dei vettori iteme pari al numero di utenti presenti nel sistema.

Item 1 Item 2 Item 3User 1 5.0 3.0 2.5User 2 2.0 2.5 5.0User 3 2.5 - -User 4 5.0 - 3.0User 5 2.5 - -

Tabella 2.1: Tabella delle preferenze: un esempio

Una volta che siamo riusciti a descrivere un utente o un item tramite una nota-zione vettoriale, definire una nozione di similarita e un puro esercizio matema-tico.

9

Page 10: Daniele Maddaluno Bachelor of Arts thesis

Normalmente con valori piu alti si intende un alto grado di similarita, con valoripiu bassi una dissimilarita.

Le nozioni di similarita sono molteplici; di seguito ne saranno descritte breve-mente alcune delle piu comuni:

� Pearson Correlation-Based Similarity: l’indice di correlazione di Pearson,anche detto coefficiente di correlazione di Pearson (o di Bravais-Pearson)tra due variabili aleatorie e un coefficiente che esprime la linearita tra laloro covarianza e il prodotto delle rispettive deviazioni standard, ovvero:

ρxy =σxyσxσy

.

Questa similarita misura quanto verosimilmente un numero in una seriedovrebbe essere relativamente grande quando il corrispondente numeronell’altra serie e alto e viceversa. In altre parole misura la tendenza chei numeri di due serie hanno nello spostarsi insieme proporzionalmente.Quando questa tendenza a muoversi proporzionalmente e molto alta, ilcoefficiente di correlazione vale 1, e vicino a 0 se non c’e una stretta rela-zione, e prossimo a -1 se quando i numeri in una serie sono alti nell’altraserie risultano piccoli o viceversa.

Se indichiamo con x il primo vettore, con y il secondo vettore e con N lacardinalita dei due vettori, possiamo calcolare la Pearson Similarity tra idue elementi rappresentati dai vettori nel seguente modo:

r =

∑Nk=1 xkyk −

∑Nk=1 xk

∑Nk=1 yk

N√(∑N

i=1 x2i −

(∑N

i=1 xi)2

N )(∑N

j=1 y2j −

(∑N

j=1 yj)2

N )

Tale misura ha alcuni punti di debolezza:

– non tiene conto del numero di valori che coincidono nelle due serie

– per come e definita la similarita non e possibile calcolare la correla-zione se le due serie coincidono su un solo valore.

– la correlazione e indefinita se le due serie coincidono esattamente

Fortunatamente per risolvere tali punti di debolezza e possibile applica-re delle forme di weighting al computo della similarita che tenderanno aspingere il valore di similarita verso +1 se il numero di valori delle seriesu cui tale valore e computato e alto, mentre verso -1 se questo numeroe basso. Il weighting e un’operazione utile poiche altrimenti le serie conpochi valori simili tra loro avrebbero una similarita alta non giustificatada numero sufficiente di valori.

� Cosine Measure Similarity: se si pensa ai vettori che descrivono gli uten-ti o gli items, come vettori in uno spazio euclideo di dimensione pari allacardinalita dei vettori, il computo della Cosine Measure Similarity e moltosemplice. Per ottere il valore di tale similarita tra due vettori x e y e suffi-ciente calcolare il coseno dell’angolo compreso tra la prima retta passante

10

Page 11: Daniele Maddaluno Bachelor of Arts thesis

Figura 2.3: Cosine similarity and Pearson correlation for centered data

per l’origine e parallela al vettore x e la seconda retta passante per l’originee parallela al vettore y (vedi Fig. 2.3). Tale valore e compreso tra -1 e +1per come e definito l’operatore coseno. Comunque sia si puo dimostrareche questa similarita e identica alla Pearson Correlation-Based Similarityse le due serie dei valori di input sono entrambe a media 0 (normalizzate).

� Euclidean Distance Similarity: anche in questo caso e necessario pensare aivettori nello spazio euclideo. Questa volta pero e necessario pensarli comepunti nello spazio euclideo di dimensione pari alla cardinalita dei vettori,le cui coordinate saranno date dai rate indicati nei vettori. Il computodella distanza euclidea e dato semplicemente dalla distanza euclidea inuno spazio euclideo con cardinalita pari alla cardinalita dei vettori.

Anche intuitivamente e facile capire che due vettori saranno simili tra lorose i due punti posizionati nello spazio sono molto vicini tra loro. Piu ipunti sono vicini tra loro piu la distanza euclidea tende a 0.

poiche pero vogliamo che vettori molto simili tra loro abbiano un valoredi similitudine alto (possibilmente prossimo ad 1), una volta computatala distanza euclidea e necessario operare una trasformazione. Il valore disimilitudine sara dato quindi da:

s0,1 =1

1 + d

dove d rappresenta il valore della distanza euclidea. Come e facile ca-pire, tale similitudine restituisce valori compresi tra 0 e 1, che possonocomunque essere facilmente rinormalizzati tra -1 e +1 con:

s−1,+1 = 2s0,1 − 1

� Spearman Correlation Similarity: E una variante della Pearson Correla-tion dove pero la correlazione e computata sulla base del rango relativodei rate. E come se per ogni user il suo rate piu alto fosse modificato con 1il suo secondo voto piu alto con un 2 e cosı via. Una volta sovrascritti tali

11

Page 12: Daniele Maddaluno Bachelor of Arts thesis

Figura 2.4: Tanimoto similarity

valori, si riapplica la Pearson Correlation Similarity. Certamente, nel farecio, si perde parte dell’informazione contenuta nelle preferenze; in partico-lare si perde informazione circa quanto un item sia stato votato in piu delsuccessivo. Ma non e possibile a priori stabilire quale tra le similarita siala piu adatta ad un problema; a volte rimuovere informazione puo volerdire aumentare il rapporto segnale-rumore: e possibile stabilirlo solo dopouna prova empirica. Tale calcolo e piuttosto costoso, in quanto devonoessere mantenute in memoria informazioni circa i nuovi valori assegnatiche non possono fisicamente sovrascrivere i precedenti.

� Tanimoto Coefficient Similarity: La Tanimoto Coefficient Similarity igno-ra completamente durante tutto il suo computo quelli che sono i valori deirate all’interno delle preferenze. Noto anche con il nome di coefficientedi Jaccard, viene calcolato come l’intersezione degli elementi per cui si eespressa una preferenza (gli elementi in comune tra due vettori) frattol’unione degli elementi per cui si e espressa una preferenza (vedi Fig. 2.4).Ad esempio facendo riferimento alla Tabella 2.2, l’utente 1 e 2 risultanoavere una Tanimoto Coefficient Similarity pari ad 1 poiche i due vettorisono praticamente uguali:

User1 : (X,X,X)

User2 : (X,X,X)

Mentre l’utente 3 e 4 risultano avere un Tanimoto Coefficient Similaritypari ad 1/2, perche:

User3 : (X,−,−)

User4 : (X,−, X)

Per quanto riguarda il Tanimoto Coefficient nel caso di similarita traitems il discorso e simmetrico, l’item 2 e 3 risultano avere un TanimotoCoefficient Similarity pari ad 2/3, perche:

Item2 : (X,X,−,−,−)

Item3 : (X,X,−, X,−)

12

Page 13: Daniele Maddaluno Bachelor of Arts thesis

Item 1 Item 2 Item 3User 1 X X XUser 2 X X XUser 3 X - -User 4 X - XUser 5 X - -

Tabella 2.2: Tanimoto e Log-Likelihood Similarity: un esempio

Normalmente e utile utilizzare questa nozione di similarity quando si han-no preferenze di tipo ’booleano’, ovvero nel caso in cui le preferenze nonabbiano un rate associato. Anche questa similarita, come pure quellaEuclidea, restituisce un valore compreso tra 0 e 1; e possibile pero nor-malizzarlo tra -1 e +1 con la seguente trasformazione gia descritta inprecedenza: s−1,+1 = 2s0,1 − 1

� Log-Likelihood Similarity: e molto simile alla Tanimoto Similarity; anchela Log-Likelihood Similarity infatti non tiene conto dei valori assegnatiai rates delle preferenze. Come per il coefficiente di Tanimoto, la Log-Likelihood Similarity si basa sul numero di elementi in comune tra duevettori, ma il suo valore e piu un’espressione di quanto inverosimile sia perdue vettori che questi abbiano dei valori coincidenti. Generalmente questaSimilarity e migliore della Tanimoto, in quanto e un po’ piu intelligente.

Si puo spiegare meglio il funzionamento della Log-Likelihood Similarityintroducendo un esempio:

Neighbourhood

La nozione di Neighbourhood e un altro importante tassello che va a comporreun recommender user-based. poiche prendere in considerazione tutti gli utentinel computo della raccomandazione sarebbe un’operazione troppo costosa, inquanto si dovrebbero esaminare praticamente tutti gli item presenti, allora pervelocizzare l’algoritmo si sceglie tra tutti gli utenti un insieme ridotto di questi,privilegiando, in ordine gli utenti che, rispetto all’utente per cui desideriamo unaraccomandazione, hanno una similarita piu alta rispetto agli altri interessati.

In questo modo non saranno presi in considerazione tutti gli items, ma soloquelli per cui questa stretta cerchia di utenti ha dato una preferenza.

Esistono piu modi per stabilire quali utenti appartengano a questa cerchia ri-stretta di utenti piu simili all’utente interessato. Principalmente i piu utilizzatisono due:

� Fixed-size neighbourhood: ogni utente viene confrontato con l’utente percui e richiesta una raccomandazione attraverso una delle nozioni di simila-rita, stabilendo tramite questa un valore di similarita s. Tra tutti gli utentisi selezionano i primi N utenti che hanno s maggiore o uguale rispetto atutti gli altri utenti (vedi Fig. 2.5)

13

Page 14: Daniele Maddaluno Bachelor of Arts thesis

� Threshold-based neighbourhood: ogni utente viene confrontato con l’utenteper cui e richiesta una raccomandazione attraverso una delle nozioni disimilarita, stabilendo tramite questa un valore di similarita s. Tra tuttigli utenti si selezionano tutti gli utenti che hanno s maggiore di una certasoglia stabilita a priori (vedi Fig. 2.6). La soglia dovrebbe essere un valoretra -1 e +1, perche tutte le similarita restituiscono un valore in questorange.

Algoritmi

Ora che sono state definite le nozioni di similarita e di neighbourhood e possibilecomprendere appieno gli algoritmi di raccomandazione.

I recommenders user based si basano sul principio di trovare utenti simili all’u-tente in questione. Per meglio dire, viene stimata la similitudine tra l’utenteinteressato e ogni singolo altro utente con un valore numerico generalmente com-preso tra -1 e +1 (oppure tra 0 e 1). Una volta individuati gli utenti piu similiall’utente interessato trovare item di interesse per quest’ultimo e un’operazionepiuttosto semplice.

I recommender di tipo user-based sono veloci nel caso in cui il numero di utentie relativamente piccolo rispetto al numero di item. Di seguito viene indicatol’algoritmo di un recommender User-Based (Algorithm 1).

Figura 2.5: Fixed-size neighbourhood

14

Page 15: Daniele Maddaluno Bachelor of Arts thesis

Figura 2.6: Threshold-based neighbourhood

Data: Users preferencesResult: Some predictions about user preferencesforeach other user w do

compute a similarity s between u and w retain the top users, rankedby similarity, as a neighboorhood n

endforeach item i that some user in n has a preference for, but that u hasno preference for yet do

foreach other user v in n that has a preference for i docompute a similarity s between u and v incorporate v’s preferencefor i, weighted by s, into a running avarage

end

endreturn the top items, ranked by weighted average

Algorithm 1: User based recommender

Per i recommenders item based puo essere fatto un discorso del tutto analogo.Questi recommenders si basano sul principio di individuare gli item che potreb-bero piacere ad un utente cercando di individuare altri items simili a quelli percui l’utente ha gia espresso una preferenza. I recommender di tipo item-basedsono veloci nel caso in cui il numero di item e relativamente piccolo rispetto alnumero di utenti. Lo pseudocodice 2 ne descrive il funzionamento.

Data: Users preferencesResult: Some predictions about user preferencesforeach item i that u has no preference for yet do

foreach item j that u has a preference for docompute a similarity s between i and j, add u’s preference for j,weighted by s, to a running avarage

end

endreturn the top items, ranked by weighted average

Algorithm 2: Item based recommender

2.1.4 Slope-one Recommender

I recommender Slope si basano sulla tesi che c’e una qualche relazione linearetra il valore assunto da una preferenza e quello di un’altra.

15

Page 16: Daniele Maddaluno Bachelor of Arts thesis

Formalizzando si assume che e possibile stimare il valore di una preferenza perun item Y a partire dal valore di una preferenza per l’item X tramite una fun-zione lineare come: Y = mX + b.

Lo Slope-One fa inoltre un’ulteriore assunzione, ovvero che m = 1 da cui il no-me Slope-One. Lo Slope-One fu per la prima volta introdotto in un articolo del2005 da Daniel Lemire e Anna Maclachlan [9]. In pratica quindi sara sufficienteper ogni coppia di item calcolare le differenze medie (diffs) tra gli item a partireda b = Y −X.

L’algoritmo ha infatti bisogno di una parte di preprocessing computazionalmen-te costosa e un impegno in termini di spazio non indifferente. In pratica deveessere precomputata la differenza media tra i valori dei voti su un item e su diun altro per tutti gli utenti che li hanno votati entrambi. La precomputazionepuo essere effettuata come segue:

Data: Users preferencesResult: average diffs for each couple of itemsforeach item i do

foreach other item j doforeach user u expressing preference for both i and j do

add the difference in u’s preference for i and j to an averageend

end

endreturn item item diffs

Algorithm 3: Slope-One: precomputation

Una volta calcolate le differenze effettuare la raccomandazione e molto semplice:

Data: item item diffsResult: Some predictions about user preferencesforeach item i the user u expressed no preference for do

foreach item j that user u expressed a preference for dofind the average preference difference beetween j and i add thisdiff to u’s preference value for j add this to a running average

end

endreturn the top items, ranked by this average

Algorithm 4: Slope-One: recommender algorithm

Questo algoritmo soffre di una vulnerabilita; le differenze item-item hanno lostesso peso indipendentemente da quanto siano credibili. Se una differenza ecalcolata solo su un utente (se ad esempio e l’unico ad aver votato una coppiadi item) allora probabilmente tale differenza dovrebbe avere un peso minorerispetto a differenze calcolate sul giudizio di molti utenti.

La soluzione e applicare una forma di weighting, per migliorare il recommenderin modo tale che ogni differenza abbia pesi diversi a seconda di quante coppiedi item sono state necessarie per generarla.

16

Page 17: Daniele Maddaluno Bachelor of Arts thesis

2.1.5 Recommender distribuito con Matrice di co-occorrenza

Gli algoritmi precedentemente descritti permettono di gestire una quantita didati anche molto grande, ma se il dataset inizia a crescere sostanzialmente enecessario distribuire il calcolo della raccomandazione su piu macchine.

Distribuire il calcolo su piu macchine, non rende l’algoritmo piu efficiente; alcontrario molto spesso richiede un dispendio di molte piu risorse.

Inoltre distribuendo il calcolo bisogna tener presente che le raccomandazioninon sono fornite all’utente in real-time, ma si procede a calcolarle a scadenzeperiodiche.

Per distribuire il calcolo di una raccomandazione e necessario ripensare al mododi fare raccomandazioni.

Matrice di Co-occorrenza

Ripensiamo alla raccomandazione come un banale prodotto matriciale, ricon-ducendoci in qualche modo ad una sorta di algoritmo item-based descritto apag. 15.

Infatti gli algoritmi di raccomandazione Item-Based sono fondati su di una qual-che ItemSimilarity, che fornisce un modo per valutare un grado di similarita tradue item interessati.

La matrice di co-occorrenza e quadrata e simmetrica(in quanto l’operazione disimilarita e simmetrica), con il numero di righe e di colonne pari al numero diitem del sistema.

Viene costituita contando quante volte ogni coppia di item occorre simultane-mente nelle preferenze di ogni utente ed inserendo tale valore (che se vogliamoe una sorta di valore di similarity) dentro questa grande matrice.

Per esempio se ci sono 7 utenti che hanno espresso una propria preferenza siaper l’item X che per l’item Y , allora la matrice avra un 7, sia nella posizione(X,Y ) che nella posizione (Y,X) (poiche, come abbiamo detto, la matrice esimmetrica).

La co-occorrenza e come una sorta di similarity, in quanto piu due item sonopresenti in coppia all’interno delle preferenze, piu e probabile che siano similitra loro.

Raccomandazione con matrice di Co-occorrenza

Per raccomandare un video ad un utente tramite una matrice di co-occorrenzae necessario un’altra volta ripensare agli utenti come dei vettori di dimensionepari alla cardinalita degli item prensenti.

17

Page 18: Daniele Maddaluno Bachelor of Arts thesis

Figura 2.7: Raccomandazione tramite matrice di co-occorrenza

Una volta descritto un utente come un vettore di rates per i diversi item,calcolare una raccomandazione e un’operazione molto semplice.Infatti la raccomandazione consiste semplicemente in una semplice moltiplica-zione tra la matrice di co-occorrenza ed il vettore colonna che descrive l’utenteper cui si richiede una raccomandazione.

Ad esempio, facendo riferimento alla Figura 2.7, avendo la matrice di co-occorrenzarappresentata ed un utente, User3 che ha come preferenze,

(U3, I101, 2.0)

(U3, I104, 4.0)

(U3, I105, 4.5)

(U3, I107, 5.0)

e possibile ottenere una raccomandazione tramite il prodotto matriciale tra lamatrice e il vettore colonna dello User3, come viene rappresentato nella Figu-ra 2.7. In celeste sono rappresentate le possibili recommendation per l’utentein questione, quelle in giallo sono da escludere in quanto per gli item 102, 103 e106 l’utente ha gia espresso una preferenza.

Quindi la migliore raccomandazione sara data dall’item 103 in quanto e quelloche ha ricevuto un voto piu alto, 24.5, tra gli item per cui l’utente non ha ancoraespresso una preferenza.

L’importanza di questo algoritmo e che, a differenza di quelli visti precedente-mente, puo essere distribuito su piu macchine.

Implementare l’algoritmo in modo distribuito

Per dare un’implementazione distribuita di questo algoritmo e necessario sud-dividere il dataset in tanti piccoli pezzi e tener di conto di alcune osservazioniimportanti:

� Creare i vettori utenti e semplicemente un problema di raggruppamentodi tutte le preferenze di un utente da cui poi ricostruire un unico vettoreutente

18

Page 19: Daniele Maddaluno Bachelor of Arts thesis

� In secondo luogo per calcolare le co-occorrenze della matrice e sufficienteesaminare un vettore utente alla volta

� una volta ottenuta la matrice di co-occorrenza e i vettori utente, e possibileanche distribuire il computo del prodotto matriciale. Infatti e possibileottenere il prodotto di una matrice per un vettore colonna in due modi:

– facendo il prodotto vettoriale tra la matrice e il vettore, ovvero perogni riga, si calcola l’i-esimo valore del vettore risultato R come ilprodotto vettoriale tra l’i-esima riga e il vettore utente

– inizializzare il vettore risultato R a 0, per ogni colonna della matricecalcolare il vettore ri dato dal prodotto tra la i-esima colonna e l’i-esimo valore del vettore utente. Il vettore finale R sara dato dallasomma di tutti i vettori ri: R = R+ r1 + r2 + . . .+ ri + . . .+ rN

Il secondo modo si presta molto bene ad essere utilizzato all’interno di unalgoritmo distribuito in quanto, poiche molto spesso i vettori utenti sonovettori sparsi, gran parte dei valori saranno pari a 0. In tal modo l’al-goritmo dovra calcolare il vettore ri solo nel caso in cui il vettore utenteall’indice i non presenti uno 0; questo non solo evita molte computazioni,ma permette anche di distribuire meglio i calcoli tra piu macchine. In-fatti e possibile passare come input ad una macchina semplicemente unvettore colonna della matrice i co-occorrenza e i rispettivi valori per cui enecessario moltiplicarla per distribuire il calcolo

Una volta messi in evidenza questi fatti e possibile comprendere il funzionamentodell’algoritmo che segue il paradigma MapReduce implementato all’interno delFramework Mahout, come descritto successivamente a Pag. 71.

19

Page 20: Daniele Maddaluno Bachelor of Arts thesis

Capitolo 3

Realizzazione

Si e scelto di sviluppare una web application in modo tale che fosse completa-mente portabile su tutte le piattaforme, quindi fruibile da tutti; inoltre l’utentenon avra bisogno di installare software aggiuntivi o di terze parti. La scelta deglistrumenti di sviluppo e ricaduta su software open source, in quanto facilmentereperibili e adattabili al proprio scopo.

L’applicazione e composta da tre componenti principali:

1. Un server PHP

2. Un server Tomcat

3. Un cluster composto da una macchina master e 4 macchine slave

Ognuna di queste parti ha un contributo essenziale all’interno di Intime.

Come linguaggio web e stato scelto PHP, per la sua semplicita e versatilita.Per facilitare il lavoro a livello di programmazione e per avere un codice benstrutturato, e stato utilizzato il framework PHP Codeigniter, scelto fra molte al-ternative (Symfony, CakePHP, Zend Framework, ecc.), per la sua semplicita edampia documentazione. Per il lato client e stato utilizzato javascript per aumen-tare il livello di interattivita con l’utente in combinazione con la libreria jQuery,per la sua straordinaria semplicita e per l’alta compatibilita cross-browser. Perla gestione del database relazione e stato usato MySql.

Intime e stato pensato come un sistema capace di supportare un ampio trafficodi dati che non sarebbe altrimenti gestibile su una singola macchina, ma sol-tanto distribuendo la computazione tra piu macchine. Infatti nel computo dellarecommendation e della categorization sono stati utilizzati algoritmi distribuitidella libreria Apache Mahout che possono essere eseguiti tramite il frameworkApache Hadoop su un cluster, ovvero un sistema distribuito composto da piumacchine.

20

Page 21: Daniele Maddaluno Bachelor of Arts thesis

3.1 Frameworks

3.1.1 Cluster

Un computer cluster, o piu semplicemente un cluster, e un insieme di computerconnessi tra loro tramite una rete telematica. Lo scopo di un cluster e quellodi distribuire un’elaborazione molto complessa tra i vari computer componentiil cluster. In sostanza un problema che richiede molte elaborazioni per esse-re risolto viene scomposto in sottoproblemi separati, i quali vengono risolti inparallelo. Questo ovviamente aumenta la potenza di calcolo del sistema.Il cluster utilizzato rispetta l’architetture Master-Slave: e composto da quattrocomputer node Slave (4 Core di cui 2 reali e 4 logici, 8GB di RAM, 320Gb diHDD 7.2k rpm) e un singolo node Master (4 Core di cui 2 reali e 4 logici, 8GB diRAM, 320Gb di HDD 10k rpm), un dispositivo SAS (4 TB di HDD in RAID0,connessione in fibra ottica).Il sistema operativo installato e Linux con distribuzione Rocks Cluster. RocksCluster e un derivato da CentOS 5, update 5 che a sua volta e derivato da RedHat Enterprise Linux 5.

L’unico punto di accesso al cluster e il nodo master, il frontend dell’interastruttura. E sufficiente utilizzare questa macchina per tutte le esigenze.Il cluster possiede una coda di lavori da eseguire e gestisce automaticamentel’allocazione dei jobs sulla base delle esigenze espresse e delle disponibilita dirisorse. I jobs vengono gestiti dal software Sun Grid Engine. Il software dimanagement permette di allocare risorse come processori, memoria, spazio sudisco, a programmi funzionanti in modalita batch.

Ogni utente puo sottomettere un job specificando uno script bash/sh/csh. Op-zionalmente puo richiedere anche una quantita di memoria e di tempo di cpu.E utile indicare sempre una quantita di tempo di cpu, per evitare che in caso diproblemi il job occupi un tempo indefinito in esecuzione.Ogni programma lanciato da console viene eseguito soltanto sul nodo master. Enecessario sottomettere un lavoro per poter sfruttare le potenzialita del cluster.Il comando per inviare un job in coda e qsub.

qsub [-cwd] [-o path] [-e path] [-l res] [-p priority] script

Le opzioni piu comuni sono:

� [-cwd] esegue il job dalla cartella in cui e presente lo script

� [-o path] redirige lo standard output del programma sul path specificatoE possibile usare /dev/null per non salvare l’output. Se non specificatoinvia l’output in un file nella propria home, denominato nomejob.oJobId

� [-e path] redirige lo standard error del programma sul path specificato Epossibile usare /dev/null per non salvare l’output. Se non specificato invial’outputin in un file nella propria home, denominato nomejob.eJobId

21

Page 22: Daniele Maddaluno Bachelor of Arts thesis

� [-l res] specifica le risorse richieste dal job per essere eseguito. h data=1024Mimposta 1GB di RAM h rt=24:00:00 imposta massimo 1gg di esecuzioneper core (hard runtime)

� [-p priority] imposta la priorita del lavoro. Accetta valori interi tra -1023 a 1024.La priorita predefinita e 0. Come utenti e possibile soltantodiminuire la priorita

Per verificare i jobs in esecuzione si usa il comando qstat:

qstat [-f] [-j job_number]

� l’opzione [-f] mostra un riassunto sulle risorse disponibili al momento

� l’opzione [-j job number] mostra i dettagli di un job. E utile in caso perconoscere lo stato esaustivo del job e i motivi di un eventuale blocco oerrore

Il comando qdel job number elimina un job dalla coda.

Map-Reduce

Per essere eseguito su un cluster, un algoritmo puo essere scritto secondo il pa-radigma di programmazione detto Map-Reduce.Il paradigma di programmazione Map-Reduce esprime un grande calcolo distri-buito come una sequenza di operazioni effettuate su macchine distinte eseguitesu dati in forma sequenziale. Il formato sequenziale dei dati comporta che ognidato sia espresso tramite una coppia chiave-valore, dove e sempre specificato chesignificato hanno i dati chiave e i dati valore: ad esempio il valore puo essere ilcontenuto testuale di un file e la chiave il titolo di tale file.L’ingresso per il calcolo Map-Reduce e dunque una sequenza di elementi nelformato chiave-valore. Come suggerisce il nome, la computazione Map-Reduceha due fasi: la fase di Map e di Reduce.

Durante la fase di Map, i dati vengono divisi in frammenti: ogni frammento vie-ne destinato ad un nodo del cluster sul quale verra verra eseguito un Map task,definito dal programmatore del job Map-Reduce in base al problema specifico.In questo modo i dati vengono divisi ed elaborati separatamente su macchinediverse. Ogni Map task produce sempre dati in formato chiave-valore, ma lachiave e valore di uscita avranno significati diversi da quelle in ingresso.

Successivamente avviene una fase intermedia detta Combiner, nella quale lecoppie chiave-valore vengono ordinate in modo che quelle con chiave ugualecompariranno insieme; dopodiche i dati verranno distribuiti sui nodi addettiall’operazione Reducer. Questa, anch’essa definita dal programmatore, ricevecoppie chiave valore con la stessa chiave e produce un’uscita sempre in formasequenziale. Dopo le operazione di Reduce, i dati finali vengono raccolti nel

22

Page 23: Daniele Maddaluno Bachelor of Arts thesis

Master Node e costituiranno l’output dell’intero job.

Le operazioni di Map e di Reduce sono svolte in modalita fault-tolerance: se inun singolo nodo si ha un fallimento del task assegnato i dati vengono ridistribuitisugli altri nodi e la procedura continua con un nodo in meno, finche questo nonverra sostituito.

Map-Reduce e molto efficiente soltanto per grandi quantita di dati; se questi sonoin piccolo numero e piu veloce l’esecuzione su una singola macchina, in quantoevita numerose operazioni di frammentazione e distribuzione dei dati. Non tuttii problemi, inoltre, sono modellabili secondo il paradigma Map-Reduce.

DFS

Un filesystem distribuito e un particolare filesystem che permette la memorizza-zione di molteplici file e risorse in dispositivi di archiviazione distribuiti in unarete informatica. Viene utilizzato per gestire grandi quantita di dati A differenzadi un comune filesystem, i dati non vengono letti o archiviati su di un dispo-sitivo locale ma, attraverso un meccanismo client-server, su dispositivi remoti;collegati in maniera trasparente alla propria gerarchia di file. Un filesystemdistribuito deve poter gestire i file in maniera trasparente e concorrente e, di so-lito, e dotato di sistemi di autenticazione, di cifratura e di recupero delle perdite.

Il paradigma Map-Reduce prevede che i dati vengano divisi in un filesystemdistribuito, in modo che questi possano essere trasferiti tra i nodi del cluster.

3.1.2 Hadoop

Figura 3.1: Logo di Apache Hadoop

Apache Hadoop e un frameworkopen-source. Il progetto e ini-ziato nel 2002 con il nome diNutch, mentre l’implementazione delNutch distributed Filesystem risale al2004 [10].Supporta l’esecuzione di applicazioni su grandi cluster, consentendo alle appli-cazioni di lavorare con migliaia di computer indipendenti e petabyte di dati.Hadoop implementa il paradigma Map-Reduce, in cui l’applicazione e divisa inpiccoli frammenti di lavoro, ciascuno dei quali puo essere eseguito o rieseguitosu ogni nodo del cluster. Inoltre, Hadoop fornisce un filesystem distribuito chedistribuisce i dati sui nodi di calcolo.

Architettura

Hadoop si basa sull’architettura Master-Slave, dove il server Master e chiamatojobtracker, in quanto gli utenti sottomettono i job su questa macchina, che el’unico punto di comunicazione tra il cluster e l’esterno. Questi job, una voltasottomessi, vengono posti in una coda di attesa dove aspettano di venire eseguitisul cluster. I server Slave vengono chiamati tasktracker e vengono coordinati

23

Page 24: Daniele Maddaluno Bachelor of Arts thesis

dal jobtracker, che distribuisce i compiti di map e reduce e gestisce le fasi deijob eseguiti.

Hadoop DFS

Il filesystem distribuito di Hadoop viene detto HDFS, ovvero Hadoop Distri-buted File System. Ogni file viene organizzato nell’HDFS come una sequenzadi blocchi, ognuno (eccetto l’ultimo) della stessa dimensione e replicato per ilprincipio della fault tolerance. Non e possibile modificare i file gia inseriti all’in-terno del filesystem distribuito. Anche l’architettura dell’HDFS segue il modelloMaster-Slave: il filesystem viene gestito da un nodo master chiamato Namenode,che distribuisce i blocchi nei nodi Slave detti Datanode, che eseguono operazionicome creazione, cancellazione e copia dei blocchi, guidati dalle istruzioni delNamenode.

3.1.3 Mahout

Figura 3.2: Logo di Apache Mahout

Apache Mahout e un progetto Apa-che scritto in Java che comprende al-goritmi di machine learning che pos-sono essere eseguiti su un cluster Ha-doop, rendendo tali algoritmi scalabi-li.

Mahout nasce in risposta al diffondersi degli algoritmi di machine learning, inparticolare nel mondo del Web, dove e presente il bisogno di navigare tra enormiquantita di dati. Lo scopo proposto da Mahout e quello di permettere di uti-lizzare nelle proprie applicazioni questi algoritmi in modo facile e veloce. Molteapplicazioni Web come Facebook, Google, Amazon e Yahoo utilizzano algoritmidi machine learning per apprendere informazioni dall’attivita degli utenti.

Gli algoritmi di machine learning piu utilizzati sono di tre famiglie: Recommen-dation, Clustering e Classification; Mahout offre numerosi algoritmi per ognunodi questi scopi.

Sebbene le librerie principali sono altamente ottimizzate per permettere alte per-formace anche per esecuzioni sequenziali su una singola macchina, Mahout di-spone della libreria di Apache Hadoop, che permette di usufruire di implementa-zioni scalabili, eseguendo gli algoritmi scritti secondo il paradigma Map-Reducesu un cluster Hadoop.Mahout, infatti, e nato nel 2008 come sottoprogetto di Lucene, dedicato ad offri-re implementazioni distribuite che fossero scalabili, poi ha assorbito il progettoApache Taste per il Collaborative Filtering e soltanto successivamente e statoreso un progetto indipendente e si e evoluto in modo da copirire approcci diversiagli algoritmi di machine learning [11].

24

Page 25: Daniele Maddaluno Bachelor of Arts thesis

Figura 3.3: Relazione di Mahout con altri progetti Apache

Gli obiettivi di Mahout sono:

� dare vita ad una vasta comunita di utenti e collaboratori, in modo dapermettere a tutti di contribuire a migliorare il framework, rilasciandodelle patch o fornendo supporto sulla mail list

� offrire soluzioni robuste a problemi ricorrenti, in modo che le applicazioninon debbano utilizzare approcci nuovi e non collaudati

� fornire una ricca documentazione e un grande numero di esempi

3.1.4 WikipediaMiner

WikipediaMiner e un toolkit java sviluppato dall’Universita di Waikato utiliz-zato per usufruire appieno della ricchezza semantica codificata all’interno diWikipedia. WikipediaMiner permette di integrare facilmente le informazionicontenute in Wikipedia all’interno di un applicativo, consentendo di misurarequanto termini e concetti di Wikipedia siano connessi tra loro, individuando edisambiguando i topic di Wikipedia quando menzionati all’interno di documenti.

E possibile usufruire di alcuni servizi offerti dalla Web Service di WikipediaMi-ner: in una richiesta HTTP viene indicato il servizio e i parametri; la rispostapotra essere restituita in diversi formati: HTML, XML, JSON.La Web Service ufficiale di WikipediaMiner pone pero delle limitazioni allerichieste, in quanto non e in grado di sostenere un grande numero di queste: ogniWeb Application che necessita dei servizi richiesti per risolvere questo problemapuo ospitare sul proprio server una propria versione di WikipediaMiner, in mododa poter effettuare tutte le richieste HTTP necessarie senza limitazioni.Ogni installazione di WikipediaMiner e costituita da due componenti:

� Wikipedia XML dumps: Ogni settimana MediaWiki rilascia grandi fileXML, chiamati dumps, contenenti grandissime quantita di dati. Il fileutilizzato da WikipediaMiner e quello contenente i dati relativi agli articoliattuali

� CSV summaries: I file csv svolgono la funzione di sommario per gli articolicontenuti nei dumps XML e permettono una rapida estrazione dei dati daquesti.

25

Page 26: Daniele Maddaluno Bachelor of Arts thesis

Servizi

Tra i servizi usufruibili tramite richieste HTTP alla Web Service compaiono:Explore Article, Explore Category, Compare, Search, Wikify e Suggest.

Explore Article Explore Article permette di richedere informazioni o daticaratteristici di una pagina di Wikipedia, come un estratto testuale, immagini,categorie di appartenenza e link correlati.Alcuni parametri che e possibile specificare:

� id : l’id della pagina della quale si richiedono i dati

� title: il titolo della pagina della quale si richiedono i dati.Puo essere specificato l’id oppure il titolo

� definition: indica se deve essere restituito un breve estratto testuale

� images: se e true vengono restituite le immagini correlate

� parentCategories: specifica se devono essere restituite le categorie di ap-partenenza della pagina richiesta

� outLinks: se true vengono restituite le pagine alle quali si riferiscono i linkdella pagina richiesta.

� linkRelatedness: se selezionata i link restituiti vengono pesati da un valoretra 0 e 1

Compare Questo servizio misura la distanza semantica tra due o piu articoli.Questa misura viene calcolata in base ai link che compaiono nelle pagine con-frontate: piu sono i link in comune, maggiore sara la vicinanza semantica.

Alcuni parametri che e possibile specificare:

� id1 e id2 : gli id delle due pagine da confrontare

� term1 e term2 : i titoli delle pagine da confrontare.

� ids1 e ids2 : gli id dei gruppi di pagine da confrontare

� connections: se true verranno restituite le pagine correlate ad entrambigli articoli specificati

� snippets: se impostato vengono mostrati dei frammenti di testo che siriferiscono a entrambe le pagine

� disambiguationDetails: se le pagine sono state indicate con titoli e noncon id, nel caso di multiple interpretazioni questo parametro indica seconsiderarle tutte invece che una sola

26

Page 27: Daniele Maddaluno Bachelor of Arts thesis

Wikify Il servizio Wikify estrae automaticamente i topic contenuti in un do-cumento testuale e fornisce i riferimenti alle pagine di Wikipedia. I risultatirestituiti vengono ottenuti mediante una classificazione: per ottenere dei buonirisultati i testi devono rispettare il modello con il quale il classificatore e statoaddestrato, non devono essere troppo brevi e devono essere riferiti ad un singolotopic.

Alcuni parametri che e possibile specificare:

� source: il documento testuale da analizzare puo essere anche un indirizzoURL ad una pagina Web

� minProbability : ogni topic estratto ha una probabilita: topic con un valoreminore di minProbability non saranno restituiti

� references: se true vengono mostrati dettagli su dove i topic sono statiindividuati nel testo

� disambiguationPolicy : indica che politica adottare nel caso di disambigua-zioni: se utilizzare un approccio loose oppure strict

Correct Correct e un servizio di correzione: analizza una frase e cerca diindividuare parole che potrebbero riferirsi a una qualche pagina di Wikipedia,ma che sono scritte erroneamente. Per ogni termine errato che individua vienerestituita una lista di suggerimenti.

Alcuni parametri che e possibile specificare:

� term: il termine o la frase che deve essere corretta

� max : il massimo numero di suggerimenti che devono essere restituiti

WikipediaMiner in Intime

Intime ospita un’installazione locale di WikipediaMiner, ottenuta scaricandol’ultimo file XML dei dumps di Wikipedia fornito dal toolkit.Intime utilizza i servizi forniti da WikipediaMiner per diverse importanti fasinell’individuazione e la collocazione semantica delle annotazioni presenti in unvideo.In particolare i servizi descritti vengono utilizzati da Intime per:

� calcolare la distanza semantica tra due o piu risorse. Per categorizzarele risorse viene utilizzata spesso la funzione Compare come metrica didistanza tra pagine Wikipedia

� estrarre in automatico le risorse da un commento testuale. Ogni commentoinserito viene analizzato manualmente dalla funzione Wikify che estrae inautomatico risorse dal testo

� ottenere dati di ogni risorsa (titolo, immagine, descrizione). Gran partedei dati relativi alle risorse, ad eccezione dell’estratto testuale della pa-gina della risorsa, viene richiesto a WikipediaMiner attraverso il servizioExplore Article

27

Page 28: Daniele Maddaluno Bachelor of Arts thesis

� migliorare la ricerca nel network, correggendo parole errate. La funzioneCorrect viene utilizzata per correggere termini inseriti erroneamente nelform di ricerca

3.1.5 Codeigniter

CodeIgniter e un potente Application Framework open source per lo sviluppodi applicazioni web in PHP, cioe una piattaforma grazie alla quale e possibi-le realizzare applicazioni in linguaggio PHP in modo semplice e veloce graziea classi e metodi gia disponibili. CodeIgniter e basato sul paradigma MVC(Model-View-Controller) che consente un ampio livello di separazione tra la lo-gica dell’applicazione e la presentazione della stessa. Infatti MVC consta di tretipologie di oggetti: Model, View e Control.Il Model e l’oggetto dell’applicazione, il View e la sua rappresentazione a video, eil Controller definisce le reazioni dell’interfaccia grafica all’input dell’utente. Peraumentarne la flessibilita e il riuso, MVC disaccoppia View e Model instaurandoun protocollo di sottoscrizione/notifica fra loro [12].L’utilizzo dell’MVC si riflettera positivamente soprattutto nei progetti in cuisara necessario che il lavoro dei webdesigner non condizioni quello degli svilup-patori e viceversa. Il principale vantaggio di utilizzare Codeigniter piuttostoche altri prodotti piu noti (CakePHP, Zend Framework..) risiede nella estre-ma facilita di utilizzo e nella ampia documentazione completa e semplice daconsultare. Non costringe lo sviluppatore a lavorare con librerie monolitiche edeccessive quantita di file; garantisce prestazioni molto elevate; e compatibile connumerose versioni di PHP e, a differenza di altri framework, puo essere utiliz-zato anche in ambienti di hosting che non supportano ancora la versione 5 diPHP.

3.2 Architettura

Figura 3.4: Intime: architettura web

28

Page 29: Daniele Maddaluno Bachelor of Arts thesis

Come si puo vedere dalla Fig. 3.4 il sistema e composto da diversi componenti:

� la macchina fiona che ospita al suo interno un server Apache PHP e unserver Tomcat Java

� un database MySql contenente i dati del sistema

� un cluster Hadoop

Il server PHP si occupa di rispondere alle richieste HTTP degli utenti, resti-tuendo le pagine costituenti l’interfaccia del sistema. Per restituire agli utentialcuni dati, a volte questi devono essere prima richiesti al server Tomcat dal ser-ver PHP. Ad esempio quando viene interrogato WikipediaMiner il server PHPtramite una richiesta curl ottiene una risposta dal server Tomcat circa le infor-mazioni richieste.

Il server Tomcat ospita WikipediaMiner e le servlet di Recommendation. Questeultime, sono accessibili tramite HTTP. In tal modo il recommender e implemen-tato come un servizio accessibile tramite web. Questo in un certo senso aggiungecomplessita al progetto, ma permette ad altre applicazioni, anche scritte in altrilinguaggi, di accedere al servizio di recommendation; ad esempio per ottenerequali video suggerire agli utenti il server PHP le richiede tramite curl a una diqueste servlet.

Il cluster Hadoop periodicamente copia alcuni dati dal server PHP, carica iservizi di Hadoop sulle macchine, formatta il filesystem distribuito e copia i nuovidati di input. Successivamente sottomette un job che provvedera a eseguire glialgoritmi distribuiti di recommendation e clustering. Al termine dell’esecuzionei file di output vengono copiati dal filesystem di hadoop nel filesystem locale,vengono elaborati e vengono prodotti alcuni file sql. Questi file vengono copiatitramite scp sulla macchina fiona dove vengono eseguiti, aggiornando il databaseMySql con i nuovi dati di recommendation e clustering.

3.3 Mock-up

3.3.1 Home Page

La Home Page (vedi Fig. A.1) e strutturata nel seguente modo: in primo luo-go l’utente vedra una tabella interattiva coordinata d’infografica attraverso laquale vengono illustrate subito quelle che sono le attivita che si possono svol-gere all’interno del network. Questa prima pagina mostra inoltre anche i videocon piu frame commentati dell’intera piattaforma (most shared videos). Nellabarra dell’applicazione in alto a destra e presente il bottone di login di Facebook.

Nella zona in cui vengono mostrati i video l’utente puo interagire con un’areainterattiva costituita dalla preview del video: l’immagine mostrata corrispondea quella del frame selezionato. Posizionandosi con il mouse su tale area appariral’ultimo commento effettuato all’interno del relativo frame. Tramite le freccieverticali presenti nel riquadro e possibile scorrere tra i molteplici commenti pre-senti in quello specifico frame.

29

Page 30: Daniele Maddaluno Bachelor of Arts thesis

Il secondo livello di interazione e costituito dalle frecce poste ai margini dellatimeline (la spirale): cliccando su una di esse e possibile scorrere i frame concommenti e annotazioni all’interno del video.

Per facilitare il caricamento dei frame all’interno del video e stato stabilito unintervallo di un secondo tra un frame e l’altro (in quanto e possibile commen-tare un frame ogni millisecondo); cliccando sulla freccia a destra selezioniamodirettamente il frame successivo. Il frame selezionato viene sempre mostrato inposizione centrale ed in rilievo rispetto a quelli vicini.Cliccando su una qualunque di queste immagini si giunge alla pagina in cuiviene mostrato il video in questione al millisecondo esatto in cui e stata inseritoil commento.

3.3.2 Header

Nell’header troviamo in ordine il logo di Intime che funge da Home button, laricerca ed il login/logout button.

Figura 3.5: Ricerca

Data la complessita della piattafor-ma sia a livello semantico che in-terattivo, e stato necessario crea-re un sistema di ricerca che in-dirizzi l’utente verso le tre en-tita fondamentali che compongo-no la piattaforma: video, cate-gorie e risorse. Tale processo emostrato in Figura 3.5 prendendocome input di ricerca la stringa“Mo”.

In particolare si ricercano video,categorie e risorse che contengo-no nel proprio testo le parole di-gitate o parole con edit distan-ce piccola; in tal modo la ri-cerca e efficace anche in caso dipiccoli errori (vedi Fig. 3.6), chepossono essere ricavati tramite ilservizio correct di WikipediaMi-ner.

Nell’header delle pagine e presente unFacebook login/logout button. L’ap-plicazione infatti utilizza come siste-ma di login quello messo a disposizio-ne da Facebook tramite i social plu-gins, cosı che l’utente non debba com-pilare una noiosa e complicata procedura di registrazione, in quanto sara suf-ficiente effettuare l’accesso tramite il proprio account di Facebook. Una vol-

30

Page 31: Daniele Maddaluno Bachelor of Arts thesis

ta entrato nel sistema l’utente si trovera in una nuova pagina, la pagina deisuggerimenti video.

Figura 3.6: Correzione

3.3.3 Pagina dei suggerimenti video

La pagina dei suggerimenti video (vedi Fig. A.2) e caratterizzata dai seguentielementi:

� i video personali caricati dall’utente stesso insieme ai video aggiunti allapropria galleria ed il pulsante per pubblicarne uno nuovo

� le notifiche relative all’attivita nel network dell’utente. Esse si distinguonoin tre tipologie:

1. qualcuno ha commentato un tuo video

2. qualcuno ti ha taggato in un video

3. qualcuno ha aggiunto il tuo video ai suoi preferiti

� attraverso un sistema di recommendation, oltre ai video preferiti dall’u-tente, verranno proposti anche video che potrebbero suscitare il suo in-teresse nella prima tab, ed i video con piu frame commentati dell’interapiattaforma (come nella vista iniziale) nella seconda tab

Cliccando sul pulsante di upload video, viene data all’utente la possibilita dicaricare un nuovo video, scegliendone il titolo.

Una volta avviato l’upload e possibile verificarne il progresso in quanto e pre-sente una progress bar che ci indica la percentuale di dati gia caricati, la teoricaterminazione in termini di ore, minuti, secondi e la velocita istantanea di upload.

3.3.4 Pagina video

Come specificato precedentemente, cliccando nelle preview dei video o su unqualsiasi frame al suo interno, l’utente ha la possibilita di vedere il video com-pleto.

31

Page 32: Daniele Maddaluno Bachelor of Arts thesis

Questa pagina (vedi Fig. A.3) e caratterizzata da una molteplice natura inte-rattiva; e infatti possibile guardare il video ed i suoi frame con commenti edannotazioni, e generare un commento su un nuovo frame. Infine vengono mo-strate in questa pagina le categorie con le relative risorse che appartengono alvideo: esse rappresentano tutte le annotazioni effettuate dagli utenti.

Player video

Il primo aspetto che andremo ad analizzare sara appunto la parte relativa allavisualizzazione del video con tutti gli elementi che lo caratterizzano:

� Il video ed il relativo layout : e possibile interagire con il video cliccandosull’apposito pulsante di play ed inoltre e possibile, una volta che il focussul player e attivo, gestire l’interazione play/stop tramite la barra spazia-trice.

Nella parte inferiore del video scorrendo la progress bar e possibile setta-re il secondo da cui far partire il player individuandolo tramite una dellepreview disponibili sopra la progress bar al momento del set.

L’utente ha la possibilita di settare il volume del video dal browser at-traverso un’apposita barra. E possibile ottenere una visualizzazione aschermo intero del video cliccando sul tasto di full-screen.

Una volta che il video non e in esecuzione e possibile, solo se l’utente econnesso al sistema, aggiungere un commento sul frame del video sul qualequesto e stato interrotto.

� Lo scorrere dei frame ed i commenti del frame: durante l’esecuzione delvideo, allo scorrere dei frame vengono mostrati di lato al player le anno-tazioni presenti nei vari commenti

� L’inserimento di commento: fermando l’esecuzione del video e possibile,se si e eseguito l’accesso, inserire un commento sul frame specifico su cui sie interrotta l’esecuzione. In particolare e possibile scrivere testo e taggarei propri amici di Facebook o risorse presenti su Wikipedia. L’aggiunta dicommenti e annotazioni viene effettuata selezionando direttamente l’in-put di testo situato sotto gli ultimi commenti effettuati. In questo spaziointerattivo e possibile selezionare, attraverso gli appositi bottoni, il net-work dal quale effettuare annotazioni semantiche: Facebook o Wikipedia.Qualora il focus sia gia posto sulla textbox del commento, e possibile ef-fettuare annotazioni semantiche anche tramite i tasti di shortcut # (hash)e @ (chiocciola), rispettivamente per i tag a risorse di Wikipedia e per itag ad amici di Facebook

� Le annotazioni : una volta che si e aperta la textbox per l’inserimento del-l’annotazione, e possibile digitare le lettere iniziali della risorsa o dell’amicoFacebook richiesto, in modo tale che vengano mostrate all’utente, in unatabella, i suggerimenti e la foto della persona o della risorsa desiderata

32

Page 33: Daniele Maddaluno Bachelor of Arts thesis

� Risorse associate al video: Nella parte inferiore della pagina compaionole risorse presenti nei commenti del video. In questo spazio sono presentidue categorie, ognuna di queste dispone di un elenco composto dalle ri-sorse annotate nei commenti soprastanti. Le categorie del video vengonoderivate dalle risorse annotate. Questa sezione della pagina permette diderivare a colpo d’occhio i contenuti presenti nel video.

Ogni volta che una risorsa relativa a una pagina di Wikipedia viene anno-tata oppure quando viene rilevata in automatico da un commento, questaviene subito categorizzata: se la categoria assegnata appartiene alle duecategorie associate al video, comparira subito in una delle due liste inbasso.

Le risorse elencate in questo spazio hanno un apposito tooltip, nel qua-le compaiono i frame del video contenenti l’annotazione: cliccando sarapossibile muovere il video alla posizione contenente il commento

3.3.5 Pagina del Profilo

La pagina del profilo (vedi Fig. A.4) degli utenti di Intime permette a questi dicurare il loro profilo nel network.In gran parte tale pagina viene automaticamente modificata dal sistema; l’u-tente che accede alla propria pagina del profilo avra la possibilita di effettuarealcune modifiche manuali, che avranno peso maggiore delle scelte automatichedel sistema.

La parte superiore della pagina e composta da una immagine del profilo sullaparte sinistra, come tipico dei social network; sulla destra invece compare unasezione che documenta l’attivita dell’utente sui video di Intime. Tale sezionecomprende:

� Last Comments: vengono riportati i commenti effettuati sui video, perognuno dei quali compare un’immagine corrispondente al frame al qualee stato posto il commento e una preview del testo di quest’ultimo.

� Annotations: compaiono le annotazioni inserite dall’utente, ovvero tag arisorse e a persone. Per ogni annotazione e visibile il frame del commentoche la contiene, il secondo al quale e stato posto e un’immagine rappresen-tativa: l’immagine del profilo nel caso di un utente Facebook; l’immaginedella risorsa nel caso di una pagina di Wikipedia. In quest’ultimo casocompare anche l’inizio della descrizione, in modo che l’utente interessatopossa accedere con un click alla pagina della risorsa.

Segue una seconda sezione comprendente quelli che sono definiti gli interessidell’utente, che corrispondono a categorie del sistema. Per ognuna di queste ca-tegorie di interesse e presente una lista di risorse di interesse appartenenti allacategoria. Ognuna di queste risorse e rappresentata da un titolo e da un’imma-gine; un tooltip mostra informazioni aggiuntive, quali descrizione e informazionirelative alle annotazioni della risorsa nei video del network.

La pagina del profilo appare diversamente nel caso di un utente che acceda allapropria pagina; in tal caso saranno presenti funzionalita per personalizzare i

33

Page 34: Daniele Maddaluno Bachelor of Arts thesis

contenuti. Piu precisamente comparira per ogni categoria di interesse, oltre allalista di risorse, un’ulteriore lista di suggestions, posizionata al di sotto di questeultime e contenente alcune risorse suggerite per quella specifica categoria.L’utente puo effettuare le seguenti azioni sulle risorse di interesse, attraverso unmeccanismo di drag-and-drop:

� aggiungere una risorsa dalle suggestions a quelle di interesse, semplice-mente trascinandola nella lista superiore

� rimuovere una risorsa di interesse, trascinandola nell’elenco delle sugge-stions sottostante

� ordinare le risorse di interesse, in modo da visualizzare per prime quellepreferite

� rimuovere una risorsa tra quelle suggerite, in modo che non compaia piuil suggerimento

In una sidebar laterale a destra compaiono alcuni box riservati a mostrare in-formazioni aggiuntive dell’utente, come gli amici e i video inseriti. Nella boxdegli amici compaiono le immagini profilo degli utenti amici su Facebook; inparticolare quelli che tra questi sono anche utenti di Intime sono contrassegnatida un logo in basso a destra.

3.3.6 Pagina della Risorsa

Intime dispone di una pagina della risorsa (vedi Fig. A.5), che oltre ad offriredati come descrizione e immagine presenta anche informazioni sul ruolo chequesta gioca nel network.Una sezione superiore comprende un’immagine rappresentativa della risorsasulla sinistra e una descrizione testuale a scorrimento.Segue una parte che mostra come gli utenti sono legati con la risorsa:

� People Interested In: sono mostrate le immagini profilo degli utenti diIntime che hanno aggiunto la risorsa da quelle suggerite nei propri interessi

� Last Comments: i commenti dove e stata annotata la risorsa, con testo eimmagine del frame del video corrispondente al commento

Nella parte inferiore della pagina compare un’ultima sezione: Related Catego-ries, riservata a mostrare le categorie alle quali appartiene la risorsa, per ognicategoria compare immagine e titolo.

3.3.7 Pagina della Categoria

Le categorie di Intime dispongono di una propria pagina (vedi Fig. A.6), nellaquale l’utente ha modo di accedere rapidamente alle risorse categorizzate.In alto a sinistra compare un’immagine rappresentativa della categoria; il re-sto della pagina e costituito da una griglia di immagini che corrispondono allerisorse. Ogni risorsa dispone dell’apposito tooltip che da modo di ottenere ve-locemente informazioni aggiuntive sulla risorsa oltre all’immagine, come titolo,descrizione e annotazioni nei vari video.

34

Page 35: Daniele Maddaluno Bachelor of Arts thesis

3.4 Database

Il database relazionale e stato realizzato con MySql.

3.4.1 MySql

MySQL, definito Oracle MySQL, e un Relational database management system(RDBMS), composto da un client con interfaccia a riga di comando e un server,entrambi disponibili sia per sistemi Unix o Unix-like come GNU/Linux che perWindows, anche se prevale un suo utilizzo in ambito Unix. Dal 1996 suppor-ta la maggior parte della sintassi SQL e si prevede in futuro il pieno rispettodello standard ANSI. Possiede delle interfacce per diversi linguaggi, compresoun driver ODBC, due driver Java, un driver per Mono e .NET ed una libreriaper Python. Il codice di MySQL venne sviluppato fin dal 1979 dalla ditta TcXataconsult, poi rinominata MySQL AB, ma e solo dal 1996 che viene distri-buita una versione che supporta SQL, prendendo spunto da un altro prodotto:mSQL. MySQL AB e stata rilevata da Sun Microsystems nel 2008, mentre nel2010 quest’ultima e stata acquisita da Oracle Corporation.

3.4.2 Database di Intime

Il database relazionale, che serve da appoggio all’applicazione, si compone di 22tabelle collegate fra loro. Di seguito lo schema E-R:Analizziamo le tabelle ed i campi inerenti:

1. users: contiene le informazioni degli utenti che si connettono all’applica-zione

� id : identificativo univoco, serve a riconoscere univocamente gli uten-ti, e chiave primaria della tabella

� facebook id : identificatore univoco che Facebook assegna ad ogniutente

� name: il nome dell’utente

� surname: il cognome dell’utente

� email : email dell’utente

Tutte le informazioni della tabella users vengono recuperate dalle informa-zioni di Facebook attraverso la Facebook SDK alla connessione dell’utenteal network, ad eccezione dell’id che viene assegnato dal database in modoincrementale.

2. videos: contiene le informazioni dei video caricati dagli utenti

� id : identificativo univoco, assegnato in modo incrementale dal data-base, e chiave primaria della tabella

� user id : id dell’utente che ha caricato il video, e chiave esterna chefa riferimento alla tabella users

� filename: nome del file video, assegnato al momento della conversione

35

Page 36: Daniele Maddaluno Bachelor of Arts thesis

� titolo: titolo del video, che sara visualizzato nell’applicazione, sceltodall’utente al momento dell’upload

� data inserimento: data registrata al momento del caricamento delvideo

� count visto: indica quante volte e stato visto un video, campo incre-mentato automaticamente ogni volta che viene visitato il video

� len: lunghezza in secondi del video, viene assegnata al momentodell’upload estraendo l’informazione dal file caricato tramite FFmpeg

3. comments: contiene le informazioni inerenti ai commenti di un video

� id : identificativo univoco, assegnato in modo incrementale dal data-base, e chiave primaria della tabella

� video id : id video al quale il commento appartiene, e chiave esternache fa riferimento alla tabella videos

� user id : id dell’utente che e autore del commento, e chiave esternache fa riferimento alla tabella users

� text : il testo del commento inserito dall’utente

� links: un json contenente le informazioni inerenti alle annotazionicontenute nel commento

� time: istante in cui e stato inserito il commento all’interno del video

� date: data di inserimento del commento

4. fb tags: contiene le annotazioni Facebook del network

� id : id che identifica univocamente il tag Facebook all’interno delnetwork

� comment id : id del commento in cui e presente l’annotazione, e chiaveesterna che fa riferimento alla tabella comments

� facebook id : rappresenta l’id facebook della persona taggata

� name: nome e cognome della persona taggata, e necessario in quantoqualora si tagghi un amico di facebook non iscritto al network nonsarebbe possibile risalire al suo nome facilmente

5. wiki tags: contiene tutte le annotazioni Wikipedia del network

� id : id che identifica univocamente il tag a Wikipedia all’interno delnetwork

� comment id : id del commento in cui e presente il tag, e chiave esternache fa riferimento alla tabella comments

� resource id : id di media wiki che identifica univocamente una risorsaall’interno di Wikipedia

6. preferences: contiene le informazioni inerenti al voto assegnato da unutente ad un video

� user id : id che identifica l’utente interno al network che ha espressouna preferenza, e chiave esterna che fa riferimento alla tabella users

36

Page 37: Daniele Maddaluno Bachelor of Arts thesis

� video id : id video del video votato, e chiave esterna che fa riferimentoalla tabella videos

� rate: voto espresso su una scala da 1 a 5

7. preferences last : questa tabella ha la stessa struttura di preferences macontiene solo le ultime 100.000 righe inserite in preferences, serve perottimizzare i tempi di recommendation sulla servlet java

� user id : id che identifica l’utente interno al network che ha espressouna preferenza, e chiave esterna che fa riferimento alla tabella users

� video id : id video del video votato, e chiave esterna che fa riferimentoalla tabella videos

� rate: voto espresso su una scala da 1 a 5

8. gallery : contiene le informazioni inerenti ai video aggiunti alla gallery diun utente

� user id : id che identifica l’utente interno al network che ha inseritoil video nella gallery, e chiave esterna che fa riferimento alla tabellausers

� video id : id video del video inserito nella gallery, e chiave esterna chefa riferimento alla tabella videos

� time: data di inserimento del video nella gallery

9. gallery union: vista contenente tutte le informazioni inerenti ai proprivideo uploadati e ai video aggiunti alla propria gallery

� video id : id video del video inserito nella gallery o caricato, e chiaveesterna che fa riferimento alla tabella videos

� user id : id che identifica l’utente interno al network che ha inseritoil video nella gallery oppure ha caricato il video sul network, e chiaveesterna che fa riferimento alla tabella users

� data inserimento: data registrata al momento dell’upload del videoo dell’inserimento nella gallery

� filename: nome del file video, assegnato al momento della conversione

� titolo: titolo del video, che sara visualizzato nell’applicazione, sceltodall’utente al momento del caricamento del video

� type: identifica se l’utente user id ha caricato il video in questioneoppure lo ha inserito nella propria gallery,

(a) 0 = uploaded

(b) 1 = added to my gallery

10. notifies: contiene le notifiche di utenti del network verso altri utenti (inter-ni ma anche esterni al network, ad esempio amici di facebook non iscrittiad Intime)

� id : identificativo univoco, assegnato in modo incrementale dal data-base, e chiave primaria della tabella

37

Page 38: Daniele Maddaluno Bachelor of Arts thesis

� autore: id che identifica l’utente interno al network che ha generatola notifica, e chiave esterna che fa riferimento alla tabella users

� notificato: identifica univocamente l’utente notificato che puo essereo meno un utente del network

� comment id : id che identifica il commento in cui e stata generata lanotifica, e chiave esterna che fa riferimento alla tabella comments

� video id : id che identifica il video in cui e stata generata la notifica,e chiave esterna che fa riferimento alla tabella videos

� cosa: valore che identifica il tipo di notifica

(a) 1 = hanno commentato un tuo video

(b) 2 = ti hanno taggato in un video

(c) 3 = added one of your videos to his/her favourite

� vista: indica se la notifica e gia stata letta o meno

(a) 0 = non e ancora stata letta

(b) 1 = e gia stata letta

� data inserimento: data in cui e stata generata la notifica

11. categories fb: contiene un elenco delle categorie di Facebook, con il suorispettivo id alla risorsa di Wikipedia

� category fb wiki id : identificativo di una risorsa di Wikipedia checorrisponde alla categoria Facebook presa in considerazione

� name: nome della categoria Facebook

� flag : poiche alcune categorie di Facebook non sono abbastanza se-mantiche, alcune di queste vengono escluse dalle computazioni delnetwork

(a) 0 = escludi categoria Facebook

(b) 1 = categoria presa in considerazione

12. likes: contiene le prime sei categorie di preferenza Facebook di un utente(sono computate considerando tutti i suoi likes). Per ogni categoria sitiene inoltre traccia di quanto abbia peso negli interessi di un utente.

� user id : id che identifica l’utente interno al network, e chiave esternache fa riferimento alla tabella users

� category fb wiki id : la categoria Facebook viene memorizzata comeun identificativo alle risorse di Wikipedia, in modo da semplificarel’interazione con WikipediaMiner, e chiave esterna che fa riferimentoalla tabella categories fb

� quantity : computo del numero di likes per la categoria in questione

� percentage: peso percentuale totale della categoria in questione nelleprime sei categorie di facebook prese in considerazione

13. recommendations: contiene i risultati dell’elaborazione della recommen-dation eseguita sul cluster, viene aggiornata a scadenze regolari

38

Page 39: Daniele Maddaluno Bachelor of Arts thesis

� user id : id che identifica l’utente interno al network per cui si hauna recommendation, e chiave esterna che fa riferimento alla tabellausers

� video id : id video del video per cui si ha una recommendation, echiave esterna che fa riferimento alla tabella videos

� estimated rate: voto previsto espresso su una scala da 1 a 5

14. recommendations swap: questa tabella ha la stessa struttura di recom-mendations, serve ad evitare inconsistenze durante l’aggiornamento del-la tabella recommendations. Alla fine dell’esecuzione dell’algoritmo sulcluster i dati vengono riposti in questa tabella; una volta conclusi gli in-sert si provvede a scambiare i nomi delle due tabelle recommendations erecommendations swap

� user id : id che identifica l’utente interno al network per cui si hauna recommendation, e chiave esterna che fa riferimento alla tabellausers

� video id : id video del video per cui si ha una recommendation, echiave esterna che fa riferimento alla tabella videos

� estimated rate: voto previsto espresso su una scala da 1 a 5

15. categories: in questa tabella sono memorizzate le categorie del sistema

� id : incrementale, identifica in modo univoco la categoria, e chiaveprimaria

� category : titolo della categoria

� image url : immagine rappresentativa

� level : discrimina le categorie in base al livello gerarchico: level 1 staper le categorie piu generiche, level 2 per quelle piu specifiche

16. category specification:in questa tabella e memorizzato a quali macrocate-gorie corrispondono le categorie di livello 2

� parent category : id della macrocategoria padre

� child category : id della sottocategoria

17. resources: tutte le risorse di Intime presenti in un dato istante sonopresenti in questa tabella

� wiki id : identifica in modo univoco la risorsa, e chiave primaria.Il nome suggerisce che tale campo corrisponde all’id dell’articolo diWikipedia

� title: titolo della risorsa, deriva da Wikipedia, che effettua prima unredirect

� image url : immagine rappresentativa

� description: una brevissima descrizione da WikipediaMiner

18. interests: sono salvate le risorse di interesse di ogni utente, corrispondentia diverse categorie e ordinate per grado di interesse.

39

Page 40: Daniele Maddaluno Bachelor of Arts thesis

� user id : identifica un utente, e chiave esterna che fa riferimento allatabella users

� resource id : identificativo della risorsa di interesse, e chiave esternache fa riferimento alla tabella resources

� category id : identificativo della categoria di interesse, e chiave esternache fa riferimento alla tabella categories

� grade: permette l’ordinamento, deriva dalla relatedness di Wikipe-diaMiner e viene modificata quando l’utente riordina le proprie risorsedi interesse

19. suggestions: sono salvati i suggerimenti per le categorie di interesse di ogniutente, ordinati per grado

� user id : identifica un utente, e chiave esterna che fa riferimento allatabella users

� resource id : identificativo della risorsa suggerita, e chiave esterna chefa riferimento alla tabella resources

� category id : identificativo della categoria di interesse, e chiave esternache fa riferimento alla tabella categories

� grade: permette l’ordinamento, deriva dalla relatedness di Wikipe-diaMiner e viene modificata in base all’attivita dell’utente nel net-work

20. categorization: tiene traccia dei cluster di risorse; ovvero indica, per ognirisorsa, a quali categorie appartiene.

� resource id : identificativo della risorsa di interesse, e chiave esternache fa riferimento alla tabella resources

� category id : identifica una categoria, e chiave esterna che fa riferi-mento alla tabella categories

� grade: e indicativo di quanto la risorsa appartenga a un certo cluster

� level : indica se la risorsa appartiene a un cluster o a un sottocluster

21. user categories: memorizza le categorie di interesse di ogni utente, e im-portante mantenere questa informazione poiche si possono avere categoriedi interesse nella pagina del profilo senza che a questa siano associatealcune risorse

� user id : identificativo dell’utente, e chiave esterna che fa riferimentoalla tabella users

� category id : identifica una categoria, e chiave esterna che fa riferi-mento alla tabella categories

22. friends: tiene traccia degli amici di Facebook di ogni utente di Intime.

� user id : identificativo dell’utente, e chiave esterna che fa riferimentoalla tabella users

� friends: contiene un json dove sono indicati gli identificativi di Face-book degli amici

� name: il nome dell’utente di Intime

40

Page 41: Daniele Maddaluno Bachelor of Arts thesis

3.5 Strumenti per l’implementazione

3.5.1 Jquery/AJAX

Drag-and-Drop (Jquery UI)

L’implementazione del drag-and-drop e stata realizzata con l’utility sortable diJQuery User Interface.

JQuery User Interface JQuery UI e una libreria Javascript contentente unvasto set di effetti, temi, widget e interazioni user interface.

JQuery UI offre la possibilita di dichiarare che alcuni elementi di una paginaWeb siano di tipo draggable o droppable; i primi possono essere afferrati e trasci-nati con il mouse, i secondi invece sono contenitori dove possono essere gettatigli oggetti trascinati. Inoltre e possibile aggiungere funzionalita a un grandenumero di eventi, in modo che sia possibile, per esempio, effettuare modifichesul database quando un oggetto viene depositato in un contenitore droppable.

$( "#draggable" ).draggable ();$( "#droppable" ).droppable ({accept: "#draggable"});

Listing 3.1: Drag-and-Drop: Dichiarazione elementi Draggable eDroppable

Un’altra possibilita offerta dal plug-in e quella di dichiarare un contenitore comesortable. Gli elementi di un contenitore sortable possono essere afferrati, trasci-nati e depositati in una qualsiasi posizione del contenitore, in modo da potereffettuare un ordinamento. Una lista sortable, inoltre, puo essere connessa conun’altra, in modo da poter trascinare gli elementi anche in altre liste.

$( "#sortable1 , #sortable2" ).sortable ({connectWith: ".connectedSortable"

});

Listing 3.2: Drag-and-Drop: Dichiarazione liste sortable connesse

Quando un elemento di una lista sortable viene trascinato nella lista stessa onella lista connessa, gli altri elementi si spostano dinamicamente, facendo postoal nuovo elemento, in modo che sia chiaro dove andra a finire l’oggetto trascinatouna volta che questo verra rilasciato.

41

Page 42: Daniele Maddaluno Bachelor of Arts thesis

Figura 3.7: drag-and-drop di una risorsa

Liste di Risorse Ogni elenco di risorse e una lista sortable ed e connessa conla lista delle suggestions se si tratta di una lista di risorse di interesse e vice-versa. Per evidenziare la posizione dove verra rilasciato un elemento comparira,mentre la risorsa viene trascinata, un placeholder, in modo che l’utente saracerto di inserire la risorsa al posto giusto. Una volta che questa viene rilasciatanella lista connessa viene effettuata una chiamata ajax ad un’apposita funzionedel controller profile, che si occupera di rendere lo spostamento persistente conil datatabase.

$(".interest_content").each(function (){$(this).find(".drop_thumbs").sortable ({

connectWith: ".drop_thumbs ,. suggestions_drop_thumbs",sort: function () {

$(’.resource_of_interest a img’).btOff();$(’.suggestion_thumb ’).btOff();

},containment:$(this).find(".drop_thumbs").parent ().

parent ().parent (),placeholder: "sortable_placeholder",start: function(e, ui){

ui.placeholder.height(ui.item.height ());},beforeStop: function(e,ui){/* richiesta ajax che salva i dati nel database */

},

revert :400,

}).disableSelection ();

})

Listing 3.3: Drag-and-Drop: Dichiarazione lista interest content comeSortable

Le opzioni specificate sono:

� connectWith: specifica le liste connesse con interest content

� sort : disattiva i tooltip sulle risorse quando avviene il sorting

42

Page 43: Daniele Maddaluno Bachelor of Arts thesis

� containment : specifica in che limiti e possibile trascinare gli oggetti dellalista sortable

� placeholder : specifica il placeholder che comparira prima di rilasciare unoggetto in una qualsiasi posizione in una delle liste connesse

� start : setta le dimensioni del placeholder quando inizia il sorting

� beforeStop: effettua diverse procedure quando il sorting termina, ovveroquando un oggetto viene rilasciato, come ad esempio gli aggiornamenti deldatabase

� revert : la velocita con cui un oggetto trascinato ritorna alla posizioneiniziale se rilasciato in un punto che non appartiene a una lista sortable

Le liste delle risorse di interesse e quelle delle suggestions contengono elemen-ti diversi, con classi css diverse e thumbnail di dimensioni diverse; inoltre perle risorse di interesse compare anche il titolo oltre all’immagine. Si e dovutoquindi fare in modo che al rilascio di un elemento nell’altra lista questa vengaconvertita nel nuovo formato: vengono modificate le dimensioni delle immagini,la classe e aggiunto o tolto il titolo.

Ordinamento liste “suggestions” Quando una risorsa di una lista “sugge-stions” viene rilasciata nella lista superiore, e quindi aggiunta ai propri interes-si avviene un’ulteriore operazione: l’ordinamento della lista “suggestions” dalquale questa e stata rimossa.

Autocomplete (Jquery UI)

Lo widget Autocomplete fornisce suggerimenti mentre vengono inseriti dei ca-ratteri in un campo di inserimento.I suggerimenti possono appartenere a una lista gia definita oppure possono es-sere scaricati da un datasource esterno.

Il seguente esempio fornisce la funzione di autocomplete al campo di input conid tags. La lista di suggerimenti e specificata esplicitamente, tramite l’opzionesource, dove viene indicato di utilizzare gli elementi dell’array availableTags.

$(function () {var availableTags = [

"ActionScript","AppleScript","Asp","C","C++","Clojure","COBOL","Fortran","Java","JavaScript","Lisp","Perl","PHP",

43

Page 44: Daniele Maddaluno Bachelor of Arts thesis

"Python",];$( "#tags" ).autocomplete ({

source: availableTags});

});

Listing 3.4: Autocomplete: Dichiarazione form autocomplete

In Intime l’autocompletamente viene utilizzato nella pagina del profilo, relativa-mente al campo di inserimento di una nuova categoria di interesse: non appenal’utente clicca sul pulsante Add new compare un campo di inserimento doveverranno suggerite, via via che l’utente inizia a scrivere nel campo, le categorieche possono essere selezionate.Autocomplete e stato utilizzato nel seguente modo:

$.post(system.fiona_host_path+’/intime/index.php/profiles/get_categories_ajax ’, function(data) {

var a=$.parseJSON(data);var categories= new Array();for(var i=0;i<a.length;i++)

categories[i]=a[i]. category;$( "#add_category" ).autocomplete ({

source: categories ,select: function(e,ui){

$.post(system.fiona_host_path+’/intime/index.php/profiles/add_new_interest_ajax ’,

{ ’category ’:ui.item.label ,’user_id ’:$(’#second_section ’).attr(’user’)},function (){

$(’#add_category ’).replaceWith(’<span id=" add_new" >Add new </span>’);

var last_page=$(’#title_bar ’).attr(’num_pages ’);

$(’.pages’).children(’.’+last_page).trigger(’click’)

});}

});});

Listing 3.5: Autocomplete: Campo di inserimento nuova categoria

Una prima chiamata ajax chiede al database le categorie, queste vengono salvatein categories, una seconda chiamata asincrona che aggiorna il database vieneazionata dall’evento select, ovvero quando l’utente seleziona una delle opzionisuggerite.

Slider delle Liste di Risorse

Le liste di risorse nella pagina del profilo sono differenti da tutte le altre diIntime, poiche e prevista la possibilita di ordinare e di trascinare in un’altra

44

Page 45: Daniele Maddaluno Bachelor of Arts thesis

lista gli elementi.Poiche gli oggetti di queste liste sono oggetti di maggiore interattivita, gli sliderlaterali scorrono un elemento alla volta.Per realizzare questa caratteristica si e pensato di includere nelle liste due ele-menti addizionali alle due estremita e di tenerle nascoste nella pagina con unaproprieta css. In questo modo uno scorrimento laterale avviene istantaneamente:si tratta semplicemente di oscurare una risorsa e di rendere visibile un’altra, suc-cessivamente una chiamata ajax provvedera a scaricare la successiva che verraposta non visibile nella pagina.

Upload (Blueimp/Fancybox)

Blueimp e un plugin per l’upload con capacita di selezione multipla di file, unsupporto drag-and-drop ed una progressbar per jQuery. Funziona con qualunquepiattaforma server (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) chesupporti i form HTML per l’uploading di file. Blueimp puo essere trovato suGitHub, dove e possibile trovare anche una demo del plugin. Il plugin permetteanche un controllo sia server che client sulla dimensione minima e massima deifile, sul tipo di files, sul numero di upload concorrenti, sul numero di uploadtotali e molte altre opzioni utili.

Utilizzo di Blueimp sul lato Client: Nel momento in cui l’utente, unavolta loggato, clicca sul pulsante di upload, il file uploader viene inizializzatotramite la funzione:

$(’#fileupload ’).fileupload ({submit: function (e, data) {

/* Some way getting variable fb_id */data.formData = {"upload_title":title , "fb_id":fb_id};},

maxNumberOfFiles: 1,maxFileSize: 50000000 , // 50MbacceptFileTypes: ’/ˆ.*\.( mp4|flv|mpg|avi|wmv|webm|mov)$/i’

});

Listing 3.6: Blueimp: inizializzazione dell’uploader

Tale funzione, oltre ad inizializzare l’uploader, prende in ingresso dei parametrifondamentali per migliorare l’interazione dell’utente con l’uploader:

� acceptFileTypes: se l’utente seleziona un file che non e tra i formati cherispettano l’espressione regolare indicata, questo viene subito notificato.E fondamentale in quanto, qualora l’utente carichi per sbaglio un file diun qualunque formato che non rispetta tale espressione regolare, affinchequesto venga notificato sara costretto ad attendere che l’upload sia conclu-so. Il plugin mette a disposizione quest’opzione in modo tale che l’utentevenga avvertito non appena questo seleziona il file di un formato errato;cosicche l’utente possa subito rendersi conto dell’errore e caricare un nuovofile

45

Page 46: Daniele Maddaluno Bachelor of Arts thesis

� maxFileSize: permette di controllare, dal lato client, la grandezza massimadei video e di avvisare l’utente qualora i file selezionati non rispettino talerequisito di dimensione sul disco In Intime e stata posta come dimensionemassima dei files 50Mb.

� maxNumberOfFiles: setta il numero massimo di file uploadabili per volta.Qualora si voglia effettuare un altro caricamento sara necessario riapri-re la finestra di upload; automaticamente si provvedera a inizializzarenuovamente l’uploader

� submit : permette di passare un parametro all’uploader sul lato server; inparticolare gli verra passato il Facebook ID dell’utente che ha caricato ilfile in modo da poter individuare univocamente l’utente del network e cosıcreare un’istanza nel database che associa il file in questione con l’utentespecifico

Utilizzo di Blueimp sul lato Server: La configurazione di Blueimp latoserver e molto semplice; in generale saranno richieste alcune delle opzioni chesono state gia descritte nel javascript plugin, quali la specifica circa i tipi di filesupportati e la dimensione massima di upload.

Inoltre si dovranno specificare i parametri che determinano la destinazione delfile caricato e il link assegnato a questo (upload dir e upload url).

In particolare, per quanto riguarda queste due opzioni, e stato sovrascritto ilcostruttore della classe UploadHandler in modo tale che potesse prendere comeparametri due stringhe che serviranno per specificare queste due opzioni. In talmodo e possibile disaccoppiare la zona dei files di sistema, dalla zona dei filescaricati, che potranno essere gestiti a parte.

Listing 3.7: Blueimp: costruttore uploader php

function __construct($upload_dir ,$upload_url ,$options=null) {

$this ->options = array(’script_url ’ => $this ->get_full_url ().’/’,’upload_dir ’ => $upload_dir ,’upload_url ’ => $upload_url ,’param_name ’ => ’files’,’max_file_size ’ => 50000000 , //50Mb’min_file_size ’ => 1,’accept_file_types ’ =>’/ˆ.*\.( mp4|flv|mpg|avi|wmv|webm|mov)$/i’,/* Other Options */);

}

46

Page 47: Daniele Maddaluno Bachelor of Arts thesis

Nel momento in cui l’utente clicca su upload, dopo aver selezionato dei fileche rispettano le condizioni elencate precedentemente sul lato Client, partiral’esecuzione del codice PHP che si occupa dell’uploading del file.

Listing 3.8: Blueimp: uploader php

switch ($_SERVER[’REQUEST_METHOD ’]) {case ’OPTIONS ’:

break;case ’HEAD’:case ’GET’:

$upload_handler ->get();break;

case ’POST’:if (isset($_REQUEST[’_method ’]) &&

$_REQUEST[’_method ’] === ’DELETE ’) {$upload_handler ->delete ();

} else {$upload_handler ->post();if(file_exists($full_path) &&

isset($_REQUEST[’fb_id’]) &&isset($_REQUEST[’upload_title ’])){

/* Some operations on the database *//* Some variables init */$upload_thread = new Thread ();$upload_thread ->setFunc("upload_thread",

array($file_ext , $file_path , $full_path ,$file_name , $file_tot , $visibilita ,$titolo , $fb_id , $id , $video_id));

$upload_thread ->start();}}

break;case ’DELETE ’:

$upload_handler ->delete ();break;

default:header(’HTTP /1.1 405 Method Not Allowed ’);

}

In particolare nello switch nel caso di upload si andra ad eseguire la POST. Do-podiche partira l’upload chiamando la funzione $upload handler→post(). Talefunzione si occupa di mantenere la connessione tra client e server per tutta ladurata dell’upload e di mandare periodicamente informazione al client circa lostato dell’upload, in modo tale che sia possibile mostrare a video l’andamentodell’upload tramite una progressbar e una serie di parametri, quali velocita diupload, tempo residuo al temine dell’upload e percentuale totale di upload. Unavolta terminato l’upload, il file si trova completamente sul server e sara possibileutilizzarlo.

La condizione successiva a $upload handler→post(), ovvero: file exists($full path)

47

Page 48: Daniele Maddaluno Bachelor of Arts thesis

&& isset($ REQUEST[’fb id’]) && isset($ REQUEST[’upload title’]) e necessa-ria qualora l’upload venga interrotto o non vada a buon fine, in modo da bloccarel’esecuzione successiva delle operazioni che non avrebbero successo in quanto ilfile non e presente sul server.

Chiamata asincrona ad una funzione php Qualora tale guardia sia su-perata, ovvero se l’upload e andato a buon fine, allora e possibile eseguire leoperazioni per rendere il video visibile su tutte le piattaforme.

Si procede quindi in primo luogo a creare un’istanza sul database che connettail file con l’utente che lo ha caricato, utilizzando il parametro ’fb id’ passato dallato client.

In secondo luogo si fa partire una richiesta asincrona a una pagina web. In talmodo e possibile ottenere una sorta di thread php, nel senso che l’uploadingrisultera concluso; dopodiche verra fatta partire questa chiamata asincrona aduno script php e l’utente sara subito notificato della conclusione dell’upload,anche se nel mentre l’esecuzione dello script e ancora in atto. Questo evita al-l’utente di dover attendere on-line per tutta la durata del transcoding video.

Questa libreria per effettuare una chiamata asincrona e stata scritta originaria-mente da Alex Lau anche se il codice utilizzato e stato modificato per essereriadattato alle esigenze di Intime che opera all’interno del framework CodeIgni-ter.

Il seguente codice inizializza la libreria, passa dei parametri che saranno poipassati alla pagina web ed infine fa partire la chiamata asincrona.

Listing 3.9: Chiamata asincrona

$upload_thread = new Thread ();$upload_thread ->setFunc("upload_thread",

array($file_ext , $file_path , $full_path ,$file_name , $file_tot , $visibilita ,$titolo , $fb_id , $id , $video_id));

$upload_thread ->start();

In particolare il costruttore di Thread() setta le variabili $host, $port e $thisFi-leName della libreria, secondo il codice:

Listing 3.10: Chiamata asincrona: inizializzazione

function Thread($host="localhost",$port="",$thisFileName=""){$this ->host = $host;if ($port != ""){

48

Page 49: Daniele Maddaluno Bachelor of Arts thesis

$this ->port = $port;}else{

$this ->port = 80;}if ($thisFileName != ""){

$this ->thisFileName = $thisFileName;}else{

$this ->thisFileName = "/intime/upload_thread.php";}

}

In secondo luogo i parametri da passare alla pagina web vengono fissati chia-mando la funzione setFunc() che setta la stringa $arg:

Listing 3.11: Chiamata asincrona: passaggio parametri

function setFunc($func ,$arg=false){$i=0;$this ->arg = "";if ($arg){

foreach ($arg as $argument){$this ->arg .= "&a[]=".urlencode(serialize($argument))

;}

}$this ->func = $func;

}

Infine la chiamata asincrona viene fatta partire chiamando la funzione start().Tale funzione non fa altro che effettuare una GET con Connection Close auna pagina php passandogli gli argomenti specificati precedentemete tramite lafunzione setFunc() nella variabile $arg.

Listing 3.12: Chiamata asincrona: esecuzione

function start(){$this ->fp = fsockopen($this ->host ,$this ->port);$header = "GET ".$this ->thisFileName."?threadrun =1&f=".

urlencode($this ->func).$this ->arg."HTTP /1.1\r\n";

$header .= "Host: ".$this ->host."\r\n";$header .= "Connection: Close\r\n\r\n";fputs($this ->fp,$header);

}

49

Page 50: Daniele Maddaluno Bachelor of Arts thesis

Transcoding video della chiamata asincrona Di seguito si mostra lopseudocodice utilizzato all’interno della pagina “/intime/upload thread.php”:

Listing 3.13: Upload transcoding

function upload_thread($file_ext , $file_path ,$full_path , $file_name ,$file_tot , $visibilita ,$titolo , $fb_id ,$id , $video_id){

set_time_limit (1200);/* Control video title*//* Generating single video screen capture *//* Conventing video to .mp4 , .webm , .ogg video *//* Mesure video lenght *//* Generating video screenshots , one per second *//* Delete initial uploaded file */

}

Tooltip delle risorse (Beauty Tips)

L’implementazione e stata svolta grazie al plug-in JQuery Beauty Tips, che offremolte possibilita di personalizzazione sia grafiche che tecniche.

Beauty Tips BeautyTips e un plugin jQuery che utilizza l’elemento di dise-gno canvas come da specifiche HTML5 per disegnare dinamicamente tooltipsassociati a un elemento HTML della pagina. Per default ogni tooltip sara po-sizionato sul lato dell’elemento bersaglio che ha piu spazio libero. Questo pa-rametro e influenzato dalla posizione e dalla dimensione della finestra corrente,in modo che ogni Tip e ridisegnato ogni volta che viene visualizzato. Esso puoapparire sopra un elemento in fondo alla pagina, ma quando la pagina scorreverso il basso apparira sotto. Inoltre, le posizioni possono essere forzate oppurepuo essere definito un ordine preferito.

$(selector).bt(’Content text’);

Listing 3.14: Tooltips: semplice dichiarazione tooltip BeautyTips

Tooltip in Intime I tip vengono azionati dall’hover sopra una thumbnail diuna qualsiasi risorsa. Si e dovuto gestire l’interazione con la procedura di drag-and-drop, ovvero sono stati aggiunti dei controlli che bloccano i tooltip nonappena un oggetto viene draggato.

50

Page 51: Daniele Maddaluno Bachelor of Arts thesis

Figura 3.8: Tooltip della risorsa Nirvana

Si e dovuto, inoltre, sovrascrivere ilplug-in per gestire la possibilita di ac-cedere con il mouse dentro l’area deltooltip senza che questo scompaia. Atal fine e stato aggiunto il metodo.toolTip(), che assegna il tip agli ele-menti restituiti da un dato selettore;tale metodo fa uso del plug-in hove-rIntent, che permette di gestire confacilita gli eventi di hover.

$(’.suggestion_thumb ’).each(function(i, el){$(this).toolTip ({

width: 347,padding: 2,spikeLength: 20,closeWhenOthersOpen:’true’,spikeGirth: 40,fill: ’#e1e1e1 ’,ajaxPath: system.fiona_host_path+’/intime/index.php/

profiles/resource_tip_ajax?resource_id=’+$(this).parent ().attr(’res_id ’),

shadow: true ,shadowOffsetX: 3,shadowOffsetY: 3,shadowBlur: 8,shadowColor: ’rgba (0,0,0,.9)’,shadowOverlap: false ,noShadowOpts: {strokeStyle: ’#999’, strokeWidth: 2},positions: ’top’,

});})

Listing 3.15: Tooltips: Dichiarazione tooltip immagini delle suggestions

La funzione JavaScript riportata inizializza il tooltip sulle thumbnail delle sug-gestions nella pagina del profilo.

� width: la larghezza del tooltip

� spikeLength: la lunghezza della punta

� spikeGirth: la larghezza della punta

� fill : il colore sullo sfondo

� ajaxPath: il percorso della chiamata ajax che restituisce il contenuto dainserire nel tooltip. Nel caso di sopra la chiamata ritorna una vista diCodeIgniter

� shadow : l’ombreggiatura ai bordi del tip

� positions: in quale posizione compare il tooltip

51

Page 52: Daniele Maddaluno Bachelor of Arts thesis

Scrollbar (Tiny Scrollbar)

L’implementazione della scrollbar e stata realizzata con il plug-in Tiny Scrollbar.

Figura 3.9:Scrollbar

Tiny Scrollbar Tiny Scrollbar, scritto con la libreria JQuery, euno strumento leggero e dinamico per migliorare l’interfaccia deisiti Web.Dispone di numerosi vantaggi:

� permette sia scroll verticale che orizzontale

� dispone di una funzione di aggiornamento, in mododa aggiornarsi dinamicamente con l’aggiunta di nuovocontenuto

� la dimensione della scrollbar puo essere settata automatica-mente o manualmente

� supporta scrolling normale e scrolling mobile

Scrollbar di Intime Tiny Scrollbar e stata utilizzata in treoccasioni:

� scorrimento del testo delle risorse nella relativa pagina

� scorrimento dei commenti relativi ad una risorsa

� scorrimento dei commenti relativi a un video

$(’#comments_content ’).find(’div#scrollbar_div ’).tinyscrollbar ({

sizethumb : 17,});

Listing 3.16: Scrollbar: Inizializzazione

Con tale script viene assegnata una Tiny Scrollbar al contenitore scrollbar div.

Video player (MediaElements.js)

MediaElement.js e un player audio e video HTML5 con un fallforward a Flashper browsers non HTML5 senza JavaScript.

MediaElements.js invece di offrire una fallback a flash nel caso in cui ci si trovidavanti ad un browser HTML senza Javascript si opta per una fallforward.

In pratica, invece di offrire un player HTML5 a browser moderni e un playercompletamente diverso basato su Flash per browser vecchi, MediaElements.jsli aggiorna con un plugin personalizzato Flash e Silverlight che imitano la APIHTML5 di MediaElement.

52

Page 53: Daniele Maddaluno Bachelor of Arts thesis

Una volta che i browsers sono stati aggiornati in modo che supportino tuttil’HTML5, MediaElement costruisce un player completamente personalizzabilecon caratteristiche come il supporto per l’elemento < track > e per il fullscreen.

Nella pagina HTML sara quindi in primo luogo necessario importare nella headlo script: <script src=’js/mediaelement-and-player.min.js’></script>.

In secondo luogo, all’interno della pagina e necessario specificare, tramite untag video, che viene racchiuso all’interno di una struttura di div dal plugin me-diaelement al momento della sua creazione.

Tale plugin e quindi cosı in grado di gestire la visualizzazione del video sia inpresenza del supporto HTML5, sia, qualora non fosse possibile mantenendo lastessa interfaccia grafica, con i player Silverlight e Flash, e viene referenziato invideo.php.

Listing 3.17: MediaElements.js: HTML5<video id="vp" width="460" height="340">

<!-- MP4 for Safari , IE9 , iPhone , iPad , Android , and Windows Phone 7 --><source src=" <?= $videoUrl ?>.mp4" type="video/mp4" /><!-- WebM/VP8 for Firefox4 , Opera , and Chrome --><source src=" <?= $videoUrl ?>.webm" type="video/webm" /><!-- Ogg/Vorbis for older Firefox and Opera versions --><source src=" <?= $videoUrl ?>.ogg" type="video/ogg" /><!-- Flash fallback for non -HTML5 browsers without JavaScript --><object width="460" height="340" type="application/x-shockwave -flash"

data=" <?= $system_path?>js/video -player/flashmediaelement.swf"><param name="movie"value=" <?= $system_path?>js/video -player/flashmediaelement.swf" /><param name="flashvars" value="controls=true&file=<?= $videoUrl ?>.mp4

"/></object ></video>

Per l’inizializzazione del player e stato utilizzato il seguente codice:

player = MediaElementPlayer(’#vp’,{alwaysShowControls: true ,videoVolume: ’horizontal ’,features: [’progress ’,’volume ’,’fullscreen ’],pluginWidth: 460,pluginHeight: 340,success: function (mediaElement , domObject) {

mediaElement.addEventListener(’seeked ’, player_seeked ,false);

mediaElement.addEventListener(’timeupdate ’,player_timeupdate , false);

mediaElement.addEventListener(’loadeddata ’, function (){mediaElement.setCurrentTime(parseFloat(info.time));

}, false);},});

Listing 3.18: MediaElements.js: inizializzazione del player

53

Page 54: Daniele Maddaluno Bachelor of Arts thesis

In particolare sono state specificate le features: [“progress”,“volume”,“fullscreen”],necessarie per la visualizzazione, rispettivamente della progress bar, della barradel volume e del fullscreen gia implementati all’interno di MediaElements.js.

La versione presente all’interno del progetto e stata personalizzata nella graficae nel punto che riguarda la gestione della nuvoletta d’anteprima che appare almomento in cui il mouse si muove sulla progressbar del video. E stata inseritauna chiamata ad una funzione specifica esterna ai sorgenti di mediaelement chepermette di modificare le immagini contenute all’interno della “nuvoletta”.

3.5.2 FFmpeg

FFmpeg e una suite software completa per registrare, convertire e riprodurreaudio e video. Si basa su libavcodec, libreria per la codifica audio/video. FFm-peg e sviluppato su Linux, ma puo essere compilato ed eseguito su qualunquedei principali sistemi operativi, incluso Microsoft Windows.

FFmpeg e uno strumento da riga di comando per convertire un file video inun altro formato. Inoltre supporta la cattura e la codifica in tempo reale dallascheda TV.

Per installare l’ultima versione di ffmpeg e stato necessario eseguire i seguenticomandi da terminale:

Listing 3.19: FFmpeg: installazione su Ubuntu

# Note: Double quotes are represented as ‘‘

# Remove any existing packages:sudo apt -get remove ffmpeg x264 libav -tools libvpx -dev libx264 -dev

# Get the dependencies ,# (Ubuntu Server or headless users):sudo apt -get updatesudo apt -get -y install autoconf build -essential checkinstall git

libfaac -dev libgpac -dev libmp3lame -dev libopencore -amrnb -devlibopencore -amrwb -dev librtmp -dev libtheora -dev libtoollibvorbis -dev pkg -config texi2html yasm zlib1g -dev

# x264: H.264 video encoder.# The following commands will get the current.source files , compile , and install x264.cdgit clone --depth 1 git://git.videolan.org/x264cd x264./ configure --enable -staticmakesudo checkinstall --pkgname=x264 --pkgversion= ‘‘3:$(./ version.sh |

awk -F’[‘‘ ]’ ’/POINT/{print $4‘‘+git ‘‘$5}’)‘‘ --backup=no --deldoc=yes --fstrans=no --default

# fdk -aac:

54

Page 55: Daniele Maddaluno Bachelor of Arts thesis

# AAC audio encoder.cdgit clone --depth 1 git:// github.com/mstorsjo/fdk -aac.gitcd fdk -aacautoreconf -fiv./ configure --disable -sharedmakesudo checkinstall --pkgname=fdk -aac --pkgversion=‘‘$(date +%Y%m%d%H

%M)-git ‘‘ --backup=no --deldoc=yes --fstrans=no --default

# libvpx:# VP8 video encoder and decoder.cdgit clone --depth 1 http ://git.chromium.org/webm/libvpx.gitcd libvpx./ configuremakesudo checkinstall --pkgname=libvpx --pkgversion= ‘‘1:$(date +%Y%m%d%

H%M)-git ‘‘ --backup=no --deldoc=yes --fstrans=no --default

# FFmpeg: note , Ubuntu Server users# should omit --enable -x11grab. so:cdgit clone --depth 1 git:// source.ffmpeg.org/ffmpegcd ffmpeg./ configure --enable -gpl --enable -libfaac --enable -libfdk -aac --

enable -libmp3lame --enable -libopencore -amrnb --enable -libopencore -amrwb --enable -librtmp --enable -libtheora --enable -libvorbis --enable -libvpx --enable -x11grab --enable -libx264 --enable -nonfree --enable -version3

makesudo checkinstall --pkgname=ffmpeg --pkgversion= ‘‘5:$(date +%Y%m%d%

H%M)-git ‘‘ --backup=no --deldoc=yes --fstrans=no --default hashx264 ffmpeg ffplay ffprobe

All’interno di Intime vengono utilizzati i seguenti comandi:

1. Nel momento in cui viene aggiunta un’annotazione su un frame di un videoche ancora non e stato mai annotato e necessario generare una screenshotdel video in quel dato frame.Di seguito il significato delle opzioni:

� -itsoffset -[time]: specifica il millisecondo ([time]) a cui e posizionatoil frame di cui si vuole generare uno screenshot all’interno del video

� -i [video path]: specifica il percorso in cui e memorizzato il video diinput

� -vcodec mjpeg: forza il video ad utilizzare il codec mjpeg

� -vframes: specifica il numero di video frames da salvare

� -s: specifica la dimensione in pixels del video di output

� [thumbnail path]: specifica il percorso e il nome del video di output

55

Page 56: Daniele Maddaluno Bachelor of Arts thesis

Generazione di una sreenshot

ffmpeg -itsoffset -[time] -i [video path] -vcodec mjpeg -vframes 1 -an-f rawvideo -s vga [thumbnail path]

2. Nel momento in cui viene caricato un nuovo video e necessario, per garan-tire nella pagina video lo show delle mini-preview sulla barra del progresso,generare una piccola sreenshot del video per ogni secondo. Di seguito ilsignificato delle opzioni:

� -i [video path]: specifica il percorso in cui e memorizzato il video diinput

� -r 1: setta il frame rate del video ad un frame al secondo (se civolessero 2 thumbnail per secondo andrebbe settato a 2)

� -t [how much time]: specifica il numero di secondi per cui vogliamocreare una snapshot per secondo.

Creazione di una thumbnail image per ogni secondo

ffmpeg -i [video path] -r 1 -vf scale=50:50 -t [how much time] [desti-nation path]/[file name] %d.jpg

3. Nel momento in cui viene caricato un nuovo video e necessario convertirloin piu formati poiche e stato utilizzato un player HTML5. I formati inquestione sono .mp4, .webm, .ogg.

� -i [video path]: specifica il percorso in cui e memorizzato il video diinput

� [destination video path]: specifica il percorso e il nome del video dioutput.

(a) Per Safari, IE9, iPhone, iPad, Android e Windows Phone 7 e neces-sario il formato .mp4 (MP4).

Conversione di un qualsiasi file video ad un .mp4

ffmpeg -y -i [video path] -vcodec libx264 -pix fmt yuv420p -vprofile high -preset fast -b:v 500k -maxrate 500k -bufsize 1000k-s vga [destination video path].mp4

(b) Per Firefox4, Opera e Chrome e necessario il formato .webm (Web-M/VP8).

56

Page 57: Daniele Maddaluno Bachelor of Arts thesis

Conversione di un qualsiasi file video ad un .webm

ffmpeg -y -i [video path] -vcodec libvpx -b:v 500k -maxrate 500k-bufsize 1000k -s vga [destination video path].webm

(c) Per le vecchie versioni di Firefox e Opera e necessario il formato .ogg(Ogg/Vorbis).

Conversione di un qualsiasi file video ad un .ogg

ffmpeg -i [video path] -acodec libvorbis -ac 2 -ab 96k -ar 44100-b 345k -s vga [destination video path].ogg

3.5.3 Facebook integration

L’applicazione utilizza come sistema di login quello messo a disposizione da Face-book, tramite i social plugins, cosı che l’utente non debba compilare una noiosae complicata procedura di registrazione, in quanto gli e sufficiente effettuarel’accesso tramite il suo account di Facebook.Per fare cio e stato necessario creare un’applicazione Facebook, nella paginadella Facebook Developers. Facebook Developers fornisce la possibilita di creareapplicazioni, tramite le quali si possono gestire i social plugin sul proprio sitoweb. Per poter creare applicazioni, bisogna essere utenti verificati. Una voltaverificata la propria identita, e possibile creare applicazioni al seguente indirizzo:https://developers.facebook.com/apps.Una volta completata la procedura di creazione dell’applicazione Facebook sa-ranno forniti un’id e una chiave segreta dell’applicazione, che verranno associateal plugin del login.

Facebook connect

La API della Facebook PHP SDK mette a disposizione diversi metodi per laconnessione a Facebook.

In generale l’utente effettua il login tramite Facebook; viene salvato il cookiegenerato, che contiene l’id dell’utente e l’access token. Quest’ultimo e un si-stema di permessi per preservare la privacy degli utenti; infatti solo tramite unaccess token, generato appositamente per un utente, e possibile recuperare leinformazioni di tale utente.

E possibile effettuare una Facebook connect tramite PHP o tramite Javascript.

Facebook PHP SDK Compaiono in seguito le funzionalita della FacebookPHP SDK utilizzate all’interno di Intime. In primo luogo e necessario inizializ-zare la libreria Facebook PHP nel seguente modo:

57

Page 58: Daniele Maddaluno Bachelor of Arts thesis

Listing 3.20: Facebook PHP SDK: inizializzazione della libreria Facebook

<?php$this ->config = array(’appId’ => $appId ,

’secret ’ => $secretId)$this ->load ->library(’facebook/Facebook ’, $this ->config);?>

Dopodiche la Facebook PHP SDK mette a disposizione diverse funzioni. All’in-terno di Intime vengono utilizzate le seguenti:

1. $this→facebook→getUser(); Questa funzione serve per venire a conoscen-za dello stato di connessione dell’utente tramite server. Viene utilizzatafondamentalmente all’inizio di ogni pagina web, in modo da capire il tipodi contenuto da proporre all’utente, che e differente a seconda che l’utentesia connesso o meno.

Listing 3.21: Facebook PHP SDK: ottenere informazioni sullaconnessione

<?php$user = $this ->facebook ->getUser ();$profile = null;if($user){

try { /* connected */ }catch (FacebookApiException $e) {

/* Connection failed */error_log($e); $user = null;

}}?>

2. $this→facebook→api(’/me?fields=id,name,link,email’); Questa funzione eutilizzata per venire a conoscenza dell’identita dell’utente che ha effettua-to una connessione al sito. E fondamentale nella procedura del login adIntime in quanto permette di identificare univocamente un utente all’in-terno del network e di estrarre le informazioni base su di esso quali nome,cognome, indirizzo e-mail, indirizzo web.

Listing 3.22: Facebook PHP SDK: ottenere le informazioni basesull’utente

<?phpif($user){

58

Page 59: Daniele Maddaluno Bachelor of Arts thesis

try {$profile =$this ->facebook ->api(’/me?fields=id,name ,link ,email’

);}catch (FacebookApiException $e) {

error_log($e); $user = null;}

}?>

3. $this→facebook→getLoginUrl(array(’scope’ ⇒’read stream,publish stream,user birthday,user location,user work history,user hometown,user photos,user groups,user likes’));

Con questa funzione e possibile generare un link per la connessione Fa-cebook. In particolare quando l’utente accedera da tale link all’area dirichiesta connessione, gli sara chiesto di dare il suo consenso al trattamen-to dei suoi dati e a operazioni che l’applicazione Intime puo fare nella suabacheca di Facebook. I dati e le operazioni in questione sono in ordinesecondo come sono specificati nella funzione php in questione:

� la possibilita di leggere la sua bacheca Facebook

� la possibilita di scrivere sulla sua bacheca Facebook

� la possibilita di accedere alla sua data di nascita

� la possibilita di accedere alla sua posizione geografica

� la possibilita di conoscere la sua attivita lavorativa indicata su Face-book

� la possibilita di conoscere la sua citta indicata su Facebook

� la possibilita di accedere alle sue foto di Facebook

� la possibilita di accedere ai suoi gruppi di Facebook

� la possibilita di accedere ai suoi amici di Facebook

Listing 3.23: Facebook PHP SDK: ottenere il link per la connessionea Facebook

<?php$loginUrl = $this ->facebook ->getLoginUrl(array(

59

Page 60: Daniele Maddaluno Bachelor of Arts thesis

’scope’ => ’read_stream ,publish_stream ,user_birthday ,user_location ,user_work_history ,user_hometown ,user_photos ,user_groups ,user_likes ’));?>

4. $this→facebook→getLogoutUrl(); Con questa funzione e possibile genera-re un link per la disconnessione da Facebook. Al momento della creazionedell’applicazione viene richiesto di specificare una redirect url. Nel mo-mento in cui l’utente clicca sul link su cui e specificata la url di disconnes-sione, questo viene disconnesso e reindirizzato verso la pagina specificata almomento della creazione dell’applicazione. Nel caso di Intime questa url e:’http://fiona.micc.unifi.it/intime/’, in modo che se l’utente si disconnetteviene reindirizzato nella pagina home del sito.

Listing 3.24: Facebook PHP SDK: ottenere il link per ladisconnessione da Facebook

<?php$fb_data = array(

’me’ => $profile ,’uid’ => $user ,’loginUrl ’ => $loginUrl ,’logoutUrl ’ => $this ->facebook ->getLogoutUrl

(),);

?>

5. $this→facebook→api(’/me/likes’); Questa funzione e fondamentale perottenere informazioni circa gli interessi di un utente. In particolare i likesvengono utilizzati da Intime per individuare le categorie di interesse di unutente al primo accesso, in modo da risolvere il problema del cold start.Vengono utilizzati in un senso per individuare utenti simili nel networke da questi riuscire a proporre video di interesse all’utente finale; in unaltro per riuscire a dare un profilo iniziale degli utenti anche se questi nonhanno operato nel sistema.

Listing 3.25: Facebook PHP SDK: ottenere i likes di Facebookdell’utente

<?php$likes = null;

if($user){try {

60

Page 61: Daniele Maddaluno Bachelor of Arts thesis

$likes = $this ->facebook ->api(’/me/likes’);/* Do something with likes */

}catch (FacebookApiException $e) {

error_log($e); $user = null;/* Connection error */

}}

}?>

Facebook JavaScript SDK Per quanto riguarda invece la connessione tra-mite Javascript SDK sono state utilizzate le seguenti funzioni, utili in particolarmodo nella pagina del video:

1. FB.init({}); Questa funzione serve per inizializzare la libreria Facebook:

FB.init({appId : ’app_id ’, // The app IDstatus : true ,cookie : true ,xfbml : true

});

Listing 3.26: Facebook JavaScript SDK: inizializzare la libreria

2. FB.getLoginStatus(); Questa funzione serve per ottenere informazioni cir-ca lo stato di connessione:

FB.getLoginStatus(function(response) {if (response.authResponse) {

/* User logged in */} else {

/* User cancelled login or did not fully authorize */}

});

Listing 3.27: Facebook JavaScript SDK: ottenere lo stato diconnessione

3. FB.api(’/me’, function(user) {}); Questa funzione, gemella della funzioneapi(’/me’) presente anche nella PHP SDK ottiene le informazioni circal’utente, quali user name, user id, e altre, a seconda del tipo di permessiottenuti al momento del login.

61

Page 62: Daniele Maddaluno Bachelor of Arts thesis

FB.getLoginStatus(function(response) {if (response.authResponse) {

FB.api(’/me’, function(user) {myFBuserName = user.name;myFBuserID = user.id;

/* User connected *//* Do something */

});} else {

/* User cancelled login or did not fully authorize */}

});

Listing 3.28: Facebook JavaScript SDK: ottenere informazioni circal’utente

4. FB.api(’/’ + userid + ’/likes’, function(response) {}); Questa funzionericava i likes di Facebook di un utente. se al posto di “userid” poniamola stringa “me” otteniamo i likes dell’ utente che si e loggato, altrimenti ilikes dello user con id “userid”. Tali dati sono disponibili solo se l’utenteha il permesso di vederli (o sono pubblici o e un amico con profilo pubblicoverso tale utente).

FB.api(’/’ + userid + ’/likes’, function(response) {if(response.data) {

/* Do something with likes */} else {

/* problems recovering data of the user from Facebook*/

}});

Listing 3.29: Facebook JavaScript SDK: ottenere i likes Facebook diun utente

5. FB.api(’/’+ uniqueNames[j]+’/feed’, ’post’,{}, function(){});} Tale fun-zione serve per mettere un post in bacheca di un amico, in particolare epossibile specificare l’utente a cui inviare il post (uniqueNames[j]), l’utenteche invia il post (userID), il messaggio da scrivere nel post con inerentedescrizione, nome, estratto, immagine e link.

FB.api(’/’+ uniqueNames[j]+’/feed’, ’post’,{from: userID ,message: ’You have been tagged in a video post on

intime: ’,link: url ,name: a_name ,

62

Page 63: Daniele Maddaluno Bachelor of Arts thesis

description: a_description ,caption: a_text ,picture: img_url}, function (){});

Listing 3.30: Facebook JavaScript SDK: mettere un post in bachecadi un amico

6. FB.api(’/me/friends’, {}, function(response) {}); Questa funzione permet-te di trovare tutti gli amici il cui nome o cognome inizia con ’name initials’.Come al solito per poter effettuare questa operazione e necessario che l’u-tente abbia concesso il permesso all’applicazione Intime di accedere allasua lista di amici.

FB.api(’/me/friends ’, {name : name_initials + "*"}, function(response) {

if(response.data) {/* Do something with this list of friends */

} else {/* Error */

}});

Listing 3.31: Facebook JavaScript SDK: ottenere gli amici di unutente

3.5.4 Media Wiki

Figura 3.10: Logo MediaWiki

MediaWiki e un software oper-sourcesotto licenza GNU General Public Li-cense (GPL). Pensato per lavorare suuna vasta rete di server, riceve milionidi richieste al giorno. Punti di forza diMediaWiki sono la potenza, la scala-bilita e una gestione delle pagine Wikiricca di servizi.Il contenuto viene restituito in formato wikitext, in modo da essere accessibileanche ad utenti che non conoscono HTML o CSS. Ogni volta che un utentemodifica una pagina, MediaWiki amplifica il proprio database senza eliminarela versione precedente. Con MediaWiki e possibile gestire immagini e altrocontenuto multimediale.

Media Wiki API

Le API di MediaWiki possono essere utilizzate per interagire con un’installazio-ne gia esistente di MediaWiki. Esse forniscono accesso diretto e veloce ai datinei database, che possono essere scaricati tramite richieste HTTP.

63

Page 64: Daniele Maddaluno Bachelor of Arts thesis

Le richieste HTTP a MediaWiki sono contraddistinte da un endpoint, cherappresenta l’Home Page del Web Service:

http://en.wikipedia.org/w/api.php

Diversi endpoint corrispondono a diverse installazioni di MediaWiki; per esem-pio l’installazione italiana ha un endpoint diverso da quella inglese.Riportiamo un semplice esempio:

http://en.wikipedia.org/w/api.php? format=xml&action=query&titles =Main%20Page&prop=revisions&rvprop=content

Tale richiesta presenta alcuni parametri:

� format=xml : specifica che il formato che deve essere restituito sara XML.Altri formati che e possibile specificare sono JSON, WDDX, XML, YAMLe il formato nativo di serializzazione di PHP

� action=query : e l’azione. Il Web Service di MediaWiki supporta piu dicinquanta azioni. L’azione query specifica il bisogno di ottenere dei dati.Ogni azione ha dei parametri specifici per essi; l’azione query ad esempioha i parametri prop, list e meta

� titles=Main Page: indica che i dati che devono essere restituiti riguardanola pagina Wiki chiamata Main Page. E possibile richiedere piu pagine allavolta

� prop=revisions: tale parametro indica che interessa una particolare revi-sione della pagina. Se non e specificato viene restituita l’ultima revisioneeffettuata, ovvero la pagina principale di Wikipedia come compare adesso

� rvprop=content : indica che deve essere scaricato il contenuto della pagina.Se viene invece specificato rvprop=user vengono scaricate le informazionidell’utente che ha effettuato le ultime modifiche

Richiesta estratto per pagina risorsa

Le pagine della risorsa dispongono di una lunga sezione testuale, che e la stes-sa che viene usata per l’algoritmo di clustering. Tale estratto viene ottenutotramite una richiesta HTTP al Web Service di MediaWiki. Tale richiesta ha laseguente struttura:

http://en.wikipedia.org/w/api.php?action=query&format=json& pageids= Bob%20Dylan&prop=extracts &indexpageids=true&redirectstrue

64

Page 65: Daniele Maddaluno Bachelor of Arts thesis

Tale query restituisce un json e il parametro properties e settato a extract,per indicare che il contentuto restituito puo essere plain-text oppure HTML.Redirectstrue comunica la necessita di gestire in maniera automatica i redirect,in modo che invece della pagina richiesta puo venire restituita una piu completa.Il formato del testo di default viene scaricato in HTML, in modo da mantenereintatto il formato dei titoli e paragrafi.

Richestra suggerimenti delle risorse nei commenti

Quando un utente che sta scrivendo un commento vuole aggiungere un tag aduna risorsa compare una lista di suggerimenti che possono essere selezionati.Tale lista viene ottenuta con una query a MediaWiki:

http://en.wikipedia.org/w/api.php?action=query&generator=allpages &ga-plimit=10&gapFrom=searchKey&format=json

� generator=allpages: il parametro generator comporta che come input deglioggetti prop, list, meta verranno usati gli oggetti di una lista. In questocaso la lista sara costituita da tutte le pagine Wiki

� gaplimit=10 : indica quante pagine devono essere restituite nella lista. Unvalore pari a 10 fara comparire 10 suggerimenti alla volta

� gapFrom=searchKey : il titolo dell’articolo dal quale deve iniziare la lista.SearchKey e una variabile contenente la stringa inserita manualmente nelform di input

Tootlip dei tag di Wikipedia nei commenti

Nella pagina del video compaiono i commenti effettuati. Quando questi con-tengono qualche tag a una pagina di Wikipedia, questo compare colorato inarancione. Avvicinandoci con il mouse, compare un tooltip con uno snippetdella descrizione e questa viene scaricata con la seguente richiesta a MediaWiki:

http://en.wikipedia.org/w/ api.php ? action = opensearch & search= BobDylan’&format=xml&limit=1

L’azione opensearch ricerca tra le pagine Wiki utilizzando il protocollo Open-Search, ovvero vengono restituite le pagine i cui titoli corrisondono alle stringhespecificate con il parametro search. Quando e stato raggiunto il limite di pagine,queste vengono restituite ordinate in base al numero di collegamenti in arrivo.In questo caso il limite e stato settato a 1.

65

Page 66: Daniele Maddaluno Bachelor of Arts thesis

3.6 Recommendation

3.6.1 Cold Start

Il social network Intime soffre del cosı detto problema del Cold Start (in ita-liano, della partenza a freddo). In generale il Cold Start e un problema che sipresenta in sistemi informativi basati su un qualche grado di automazione nellamodellazione dei dati. In particolare coinvolge il problema che il sistema nonsia in grado di indurre alcuna inferenza per utenti o item per i quali non si sianostate raccolte ancora sufficienti informazioni.

Per risolvere tale mancanza in Intime sono stati sfruttati i dati provenienti dallogin tramite la Facebook SDK. La Facebook SDK ha permesso di raccogliereinformazioni anche per utenti appena iscritti al network, in modo tale che, datoche l’utente medio di Facebook ha aggiunto almeno una decina di likes al suoprofilo, si riesca ad avere informazioni sufficienti per poter suggerire risorse evideo del network, nonostante questo non abbia ancora fatto alcuna azione den-tro Intime.

Al primo accesso di un utente, dopo il suo consenso, si provvede ad estrarretutti i suoi likes di Facebook. Ogni like di Facebook ha associata una categoriaFacebook che puo essere o meno semantica; in Intime sono state prese in con-siderazione solo le categorie che risultano sufficientemente semantiche in modotale che fosse possibile individuare con maggior precisione quali siano i campidi interesse dell’utente appena iscritto.

In tal modo se un utente ha molti piu likes per una specifica categoria Facebookpresa in considerazione dal sistema, possiamo in qualche modo dedurre che l’u-tente e interessato a tale categoria. Inoltre, a seconda del numero di likes chequella categoria ha, possiamo individuare le preferenze dell’utente e, in un certosenso, il numero di likes riscalato in valore percentuale puo essere inteso comeil voto che l’utente implicitamente assegna a quella specifica categoria Facebook.

Tali informazioni sono salvate nella tabella likes del sistema che ha una strut-tura: user id, category id, percentage. Tale struttura e fondamentale per lasoluzione del problema della Cold Start.

Ogni utente quindi e descritto inizialmente all’interno del network tramite uninsieme di triple: user id, category id, percentage. Utilizzando Mahout e reim-plementando una User Similarity all’interno di questo e possibile stabilire etrovare utenti simili tra loro all’interno del Network. Tramite una User Simila-rity tra i vettori generati a partire dalle triple che possiamo trovare salvate nellatabella likes e possibile stabilire quanto un utente nel network sia simile ad unaltro sulla base delle categorie dei Facebook likes del suo profilo.

Attraverso una Neighborhood e possibile quindi individuare gli utenti del net-work che, sulla base della Similarity, risultino piu simili all’utente interessato.

Una volta individuati tali utenti, risultera semplice ed intuitivo riuscire a rac-comandare video. Infatti sara sufficiente selezionare i video votati dagli utenti

66

Page 67: Daniele Maddaluno Bachelor of Arts thesis

piu vicini all’utente interessato ma non ancora da lui visionati. Tali video sa-ranno, per cosı dire, possibili recommendation per l’utente interessato. Come sipuo notare, lo schema seguito e esattamente quello dell’algoritmo di un recom-mender User-Based dove pero si e effettuata una suddivisione tra la parte cheindividua gli utenti piu simili all’utente interessato con una Neighborhood e laparte che individua i video di interesse a partire da questo insieme.

Pesando i voti assegnati ai video in questione tramite la similitudine tra gliutenti e possibile inferire il voto che l’utente interessato darebbe al video e quindiordinare le recommendation secondo una specifica di possibile gradevolezza delvideo da parte dell’utente interessato.

3.6.2 Mantenimento

Una volta che l’utente ha aggiunto delle preferenze a dei video non si ha piu ilproblema della cold start e si passa ad una fase di mantenimento.

Quando un utente si posiziona nella pagina di un video caricato da un altroutente ha la possibilita di assegnare a tale video un voto compreso tra 1 e 5,indicandolo tramite delle stelline di gradimento, presenti sopra il player video.

Nel momento in cui l’utente assegna un voto a tale video, questo viene salvatosottoforma di una tripletta (user id, video id, rate). Una copia di questa tri-pletta viene salvata nella tabella preferences che conterra una copia di tutte lepreferenze del network. Un’altra copia di tale tripletta e ricopiata in una tabellaridotta, preferences last, tramite i due trigger:

CREATE TRIGGER recommender_last_insert

AFTER INSERT ON preferences

FOR EACH ROW

BEGIN INSERT INTO preferences_last(user_id ,video_id , rate)values(NEW.user_id ,NEW.video_id , NEW.rate);

END;$$

Listing 3.32: Trigger: ricopia un’istanza dalla tabella preferences allapreferences last

CREATE TRIGGER recommender_delete_last

BEFORE INSERT ON preferences

FOR EACH ROW

67

Page 68: Daniele Maddaluno Bachelor of Arts thesis

BEGINDECLARE min_update_time TIMESTAMP;select min(preferences_last.date) INTO min_update_time

FROM preferences_last;IF (SELECT COUNT (*) FROM preferences_last) > 100000

THENDELETE FROM preferences_last WHERE preferences_last.date=min_update_time;

END IF;END;$$

Listing 3.33: Trigger: elimina l’istanza piu vecchia se la dimensione dellatabella supera le 100000 istanze

In sostanza la tabella preferences last risulta essere una copia delle ultime 100000istanze della tabella preferences. Mantenere una tabella ridotta delle preferenzeall’interno del sistema e necessario per ottimizzare i tempi di risposta in realtime dell’algoritmo in memory utilizzato da Mahout.

In tal modo e possibile operare sulle raccomandazioni di video in due fasi:

� La prima fase lavora su un database ridotto di preferenze contenute inpreferences last ; e meno efficace come raccomandazioni prodotte, ma per-mette di garantire in real time raccomandazioni agli utenti, qualora questiabbiano gia usufruito delle raccomandazioni della seconda fase garantitesolo periodicamente dal sistema.

� La seconda fase opera sul cluster Hadoop e lavora sull’insieme completodelle preferenze, che possiamo trovare all’interno della tabella preferences.Questa fase permette al sistema di generare periodicamente raccoman-dazioni che, essendo basate su tutte le preferenze del sistema, sono piuefficaci di quelle della fase precedente. Tali raccomandazioni possono esse-re generate solo periodicamete in quanto, computazionalmente parlando,fare raccomandazioni su tutte le preferenze del sistema e un’operazioneonerosa, sia in termini di tempo che di memoria.

Di seguito si spieghera meglio il funzionamento delle raccomandazioni nellesuddette due fasi.

3.6.3 Raccomandazioni in Real Time

Per garantire continuamente raccomandazioni di nuovi video agli utenti in realtime e stato necessario creare una servlet Java su un server Tomcat. Tale ser-vlet e accessibile semplicemente tramite HTTP. In tal modo il recommender eimplementato come un servizio accessibile tramite web.

Questo in un certo senso aggiunge complessita al progetto, ma permette ad altreapplicazioni, anche scritte in altri linguaggi, di accedere al servizio di recommen-dation.

All’interno di Intime si e utilizzata una servlet sia per la cold start che per laprima fase del mantenimento. Tali servlet sono utilizzate accedendovi da php

68

Page 69: Daniele Maddaluno Bachelor of Arts thesis

attraverso delle chiamate HTTP tramite curl.

Dato che i dati di Intime si trovano nel database MySql e invece la servlet lavorasu un Server Tomcat e stato necessario configurare una connessione JDBC adogni tabella necessaria del database come segue.

Listing 3.34: Connessione JDBC: Mahout API

MysqlDataSource data_source = new MysqlDataSource ();data_source.setServerName("localhost");data_source.setUser("user");data_source.setPassword("password");data_source.setDatabaseName("db_name");this.model = new MySQLJDBCDataModel(data_source , "table_name", "user_id_column","video_id_column", "rate_column", null);

Una volta inizializzata tale connessione e possibile utilizzare il model generatoper eseguire gli algoritmi di Mahout. Ad esempio nel caso del cold start avremo:

Listing 3.35: Recommender: Cold Start

UserSimilarity mahout_similarity = new EuclideanDistanceSimilarity(like_model);

UserNeighborhood neighborhood = new NearestNUserNeighborhood (10,mahout_similarity , like_model);

Recommender recommender = new IntimeGenericUserBasedRecommender(preferences_model , neighborhood , mahout_similarity);

recommendations = recommender.recommend(user_id ,36);

In cui viene inizializzata una EuclideanDistanceSimilarity passandole come in-put l’insieme delle triple ricavate dai likes di Facebook (user, categoria, vo-to implicito). Tramite questa Similarity e possibile istanziare una NearestNU-serNeighborhood che e una forma di Fixed-Size Neighbourhood in cui la size, inquesto caso, e stata fissata a 10. E possibile ottenere i vicini di un dato utentefacilmente tramite la funzione getUserNeighborhood(user id).

Tramite la Similarity e la Neighbourhood e possibile poi creare un recommen-der. In particolare e stato creato un IntimeGenericUserBasedRecommender cheestende GenericUserBasedRecommender. Questo e dovuto al fatto che essen-doci una discrepanza tra gli utenti presenti in like model e gli utenti che hannoespresso una preferenza bisogna far attenzione che, qualora quale vicino ven-ga individuato un utente che non ha mai espresso una preferenza, non vengalanciato un errore, ma venga gestita l’eccezione. Come mostrato qui sotto:

69

Page 70: Daniele Maddaluno Bachelor of Arts thesis

Listing 3.36: Recommender: la classe IntimeGenericUserBasedRecommen-der

public class IntimeGenericUserBasedRecommender extendsGenericUserBasedRecommender{

public IntimeGenericUserBasedRecommender(DataModel dataModel ,UserNeighborhood neighborhood , UserSimilarity similarity) {

super(dataModel , neighborhood , similarity);}

@Overrideprotected FastIDSet getAllOtherItems(long[] theNeighborhood , long

theUserID) throws TasteException {DataModel dataModel = getDataModel ();FastIDSet possibleItemIDs = new FastIDSet ();for (long userID : theNeighborhood) {

try{possibleItemIDs.addAll(dataModel.getItemIDsFromUser(userID));

} catch (NoSuchUserException u){// don’t block the execution

}}try{possibleItemIDs.removeAll(dataModel.getItemIDsFromUser(

theUserID));} catch (NoSuchUserException u){

// don’t block the execution}return possibleItemIDs;

}}

Infine, essendo tutto cio in una Servlet Java, il risultato della raccomandazioneviene restituita sotto forma di un json, un formato adatto per lo scambio deidati in applicazioni client-server:

Listing 3.37: Recommender: un piccolo esempio di output json

{"my_user": 50,"recommendation": [

{"item": 410,"value": 4.545653

},{

"item": 428,"value": 4

}],"similar_users": [

"52","75"

]}

70

Page 71: Daniele Maddaluno Bachelor of Arts thesis

Difatto il recommender per le raccomandazioni successive alla cold start utilizzala stessa struttura di quello appena descritto, fatta eccezione per il fatto che laSimilarity e la Neighbourhood utilizzano non il modello dei likes, ma il modellodelle preferenze. Una volta superata la fase del cold start, infatti, e possibilericavare la neighbourhood dalle nuove preferenze immesse dall’utente.

Listing 3.38: Recommender: fase successiva alla cold start

UserSimilarity mahout_similarity = new EuclideanDistanceSimilarity(preferences_model);

UserNeighborhood neighborhood = new ThresholdUserNeighborhood (0.7,mahout_similarity , preferences_model); neighbors = neighborhood.

getUserNeighborhood(user_id);Recommender recommender = new GenericUserBasedRecommender(

preferences_model , neighborhood , mahout_similarity);

3.6.4 Raccomandazioni sul Cluster

La fase successiva di raccomandazioni viene generata su un cluster di macchi-ne(vedi par. 3.1.1 ).In particolare sono stati utilizzati gli algoritmi distribuiti basati sul paradigmaMapReduce per Hadoop forniti da Mahout.

Implementazione algoritmo con matrice di co-occorrenza in Mahout

Come gia spiegato precedentemente a Pag. 18 , l’algoritmo di raccomandazioneche utilizza la matrice di co-occorrenza si presta molto bene alla distribuzionedella sua computazione.

In tal senso all’interno di Intime e stato utilizzato l’algoritmo distribuito fornitodal framework Mahout che si avvale del paradigma MapReduce e di Hadoop.

Il paradigma MapReduce e stato gia precedentemente discusso a Pag. 22 , mapuo essere brevemente riassunto in pochi punti:

� una serie di coppie chiave-valore fanno da input (V1, K2)

� una funzione detta di map prende queste coppie in ingresso e restituisce 0o piu coppie del formato (K2,V2)

� tutte le coppie con uguali K2 vengono raggruppate insieme

� una funzione detta di reduce riceve in ingresso queste coppie e restituiscedelle coppie (K3,V3)

Una forma semplificata di quello che succede all’interno del MapReduce diMahout puo essere sintetizzata in una sequenza di cinque MapReduce:

1. Primo Mapper (costruzione user vector)

� il primo mapper prende in ingresso:

71

Page 72: Daniele Maddaluno Bachelor of Arts thesis

– K1: la posizione all’interno del file(ignorata dalla funzione)

– V1: una riga di testo (contenente user id,item id,rate)

� e restituisce, per ogni riga, l’output:

– K2: come user id

– V2: come (item id,rate)

2. Primo Reducer (costruzione user vector)

� il primo reducer, dopo aver raccolto le coppie con ugual user id,prende in ingresso:

– K2: un unico utente

– V2,. . . : tutte le coppie V2 del passo precedente che hanno ugualeuser

� e restituisce come output:

– K3: come user id

– V3: come vettore colonna rappresentante un utente (vettoresparso)

Qui si sono costituiti tutti i vettori utente; adesso costruire la matrice dico-occorrenza e un banale problema di conteggio.

3. Secondo Mapper (costruzione matrice di co-occorrenza)

� il secondo mapper prende in ingresso:

– K1: uno user id

– V1: un vettore utente

� e restituisce, per ogni coppia di item:

– K2: item id

– V2: un altro item id

4. Secondo Reducer (costruzione matrice di co-occorrenza)

� il secondo reducer, dopo aver raccolto le coppie con ugual item id,prende in ingresso:

– K2: item id

– V2,. . . : altri item id

� a questo punto, dopo aver conteggiato gli altri item id e costruito unvettore:

– K3: come item id

– V3: una colonna della matrice di co-occorrenza sotto forma divettore

A questo punto la matrice di co-occorrenza e completamente costituita; intal modo e possibile procedere ad effettuare in modo distribuito il prodot-to matriciale tra la matrice di co-occorrenza ed i vettori utente di interesse.

Per farlo e necessario avvalersi del modo per fare moltiplicazioni matri-ciali descritto a Pag. 18 . In tale tecnica di moltiplicazione matriciale

72

Page 73: Daniele Maddaluno Bachelor of Arts thesis

pero e necessario mappare le preferenze in modo che siano nella formaitem id/(user id,rate), poiche le colonne (e anche le righe) di una matricedi co-occorrenza sono ordinate secondo gli item id.

In tal modo sara sufficiente distribuire soltanto il vettore colonna corri-spondente della matrice di co-occorrenza e tutte le coppie chiave valoreitem id/(user id,rate) corrispondenti ad uno specifico item id.

La difficolta qui e che, come detto, ci sono due differenti tipi di dati in-sieme in un’unica computazione. Questa operazione normalmente non esupportata da Hadoop, perche i valori in un reducer possono essere solodi un tipo.

5. Terzo Mapper a) (moltiplicazione parziale)

� il terzo mapper a) prende in ingresso:

– K1: uno user id

– V1: uno user vector

� e restituisce, per ogni item:

– K2: item id

– V2: (user id,rate)

6. Terzo Mapper b) (moltiplicazione parziale)

� il terzo mapper prende in ingresso:

– K1: uno item id

– V1: una colonna della matrice di co-occorrenza

� e restituisce una sorta di echo dell’input:

– K2: l’item id

– V2: la colonna della matrice di co-occorrenza

7. Terzo Reducer (moltiplicazione parziale)

� il terzo reducer prende in ingresso due diversi formati di input:

– K2: item id

– V2,. . . : (user id,rate),. . . e una colonna della matrice di co-occorrenza

� e restituisce come output, per ogni item id:

– K3: item id

– V3: un vettore colonna e le varie coppie (user id,rate)

8. Quarto Mapper (aggregazione)

� il quarto mapper prende in ingresso:

– K1: item id

– V1: un vettore colonna e le varie coppie (user id,rate)

� e restituisce, per ogni user id:

– K2: user id

– V2: il prodotto tra il vettore colonna e la rate

73

Page 74: Daniele Maddaluno Bachelor of Arts thesis

9. Quarto Reducer (aggregazione)

� il quarto reducer, dopo aver raccolto le coppie con ugual user id,prende in ingresso:

– K2: user id

– V2,. . . : vettori di raccomandazione parziale

� e restituisce come output:

– K3: user id

– V3: (item id,rate)

Da cui e possibile fornire una raccomandazione.

Figura 3.11: Algoritmo con matrice di co-occorrenza in Mahout

Cio che accade all’interno dell’algoritmo implementato nel framework Mahout(vedi Fig. 3.11) e molto piu complesso della sequenza di MapReduce appenadescritta, che ha preso in considerazione solo gli aspetti cruciali dell’algoritmo

Script eseguito sul cluster

Per eseguire l’algoritmo e stato necessario in primo luogo configurare il clusterdi macchine in modo tale che potesse accogliere l’ambiente Hadoop.Dopodiche si e dovuto scrivere uno script che potesse essere invocato tramite ilcomando qsub.

74

Page 75: Daniele Maddaluno Bachelor of Arts thesis

Lo script e lanciato periodicamente in automatico da un cron. Lo script cheesegue sul cluster e il seguente:

#!/bin/bash#$ -j y#$ -o debug_output/output.$JOB_ID#$ -pe hadoop 17#$ -cwd#$ -l h_rt=0:20:00#$ -q hadoop.q

# scarico da fiona i dati di inputwget -O input.csv http :// fiona.micc.unifi.it/intime/index.php/api/

recommendation/preferences/format/csvwget -O users.csv http :// fiona.micc.unifi.it/intime/index.php/api/

recommendation/users/format/csv

# importiamo lo script di sistema per hadoop. $HADOOP_HOME/conf/hadoop -sge.sh

# carichiamo i servizi hadoop sulle macchinehadoop_start

# passo i dati di input all ’HDFShadoop fs -mkdir inputhadoop fs -put input.csv input/input.txthadoop fs -put users.csv input/users.txt

# eseguo l’algoritmo di recommendationhadoop jar mahout -core -0.7-job.jar org.apache.mahout.cf.taste.

hadoop.item.RecommenderJob -Dmapred.input.dir=input/input.txt -Dmapred.output.dir=output --usersFile input/users.txt --booleanData -s SIMILARITY_COOCCURRENCE

# copio l’output dall ’HDFS al filesystem della macchinahadoop fs -get output/part -r -00000 /home/dmaddaluno/

# Chiudo i servizi hadoophadoop_end

# creo un file sql con i dati di output dell ’algoritmophp sql.php > sql_rec.sql

#copio il file sql su fionascp sql_rec.sql [email protected]:/home/intime/scp/sql_rec

.sql

# eseguo i comandi sql sul database mysqlssh [email protected] "mysql -uuser_name -ppassword

database_name <scp/sql_rec.sql"

#rimuovo i file alla fine della raccomandazionerm -rf *$JOB_ID*rm input.csvrm users.csvrm sql_rec.sqlrm part -r -00000

75

Page 76: Daniele Maddaluno Bachelor of Arts thesis

Questo script esegue tutte le operazioni necessarie per produrre una raccoman-dazione sul cluster ed esportarla su un database.

I dati di input vengono scaricati dal server fiona tramite una wget. Una voltaottenuti gli input, si caricano i servizi hadoop sulle macchine e si procede apassare i dati di input nell’Hadoop File System, il filesystem condiviso fornitoda Hadoop.

Quando i dati di input sono stati caricati nel filesystem condiviso e possibile farpartire l’algoritmo distribuito item based, basato sulla matrice di co-occorrenzadi Mahout.

Una volta generati gli output nell’HDFS, e necessario, per poterli leggere, rico-piarli nel filesystem della macchina da cui e possibile generare un file .sql chepermette di inviare gli output al database, per rendere quindi tali dati disponibiliall’applicazione web Intime. Di seguito i file sql.php che genera il file.sql:

Listing 3.39: File sql.php per generare l’sql a partire da un singolo file dioutput

<?phpopen_recommendation_file("part -r -00000");

// INSERT INTO ‘intime_db_1 ‘.‘recommendation ‘ (‘user_id ‘, ‘video_id ‘, ‘estimated_rate ‘) VALUES (’58’, ’378’, ’3’);

\rfunction open_recommendation_file($file){

$first = true;$ptr=fopen($file , "r");echo "SET foreign_key_checks = 0;";echo "INSERT INTO ‘recommendations_swap ‘ ( ‘user_id

‘ , ‘video_id ‘ , ‘estimated_rate ‘) VALUES ";while (!feof($ptr)) {

$buffer = fgets($ptr , 4096);$recommendation = read_recommendation(

$buffer);if($recommendation !=false){

$user_id = $recommendation[’user_id’];

for($i=0;$i<sizeof($recommendation[’recommendation ’][’video_id ’]);$i++){

$video_id = $recommendation[’recommendation ’][’video_id ’][$i];

$rate = $recommendation[’recommendation ’][’rate’][$i];

if($first == true){echo "(’".$user_id.

"’,’".$video_id.

76

Page 77: Daniele Maddaluno Bachelor of Arts thesis

"’,’".$rate."’)";

$first = false;} else {

echo ", (’".$user_id."’,’".$video_id."’,’".$rate."’)";

}

}}

}echo "; SET foreign_key_checks = 1;";echo "DELETE FROM ‘recommendations_swap ‘ WHERE video_id

NOT IN ( SELECT videos.id FROM videos);";echo "TRUNCATE TABLE ‘recommendations ‘; RENAME

TABLE ‘recommendations ‘ TO ‘recommendations2 ‘; RENAME TABLE ‘recommendations_swap ‘ TO ‘recommendations ‘; RENAME TABLE ‘recommendations2‘ TO ‘recommendations_swap ‘;";

fclose($ptr);}function read_recommendation($line){

if($line==false){return false;

}$user_recommendation = explode("\t", $line);$recommendation[’user_id ’] = $user_recommendation

[0];$couple = explode(",",substr($user_recommendation

[1], 1, -2));for ($i=0; $i<sizeof($couple);$i++){

$single = explode(":",$couple[$i]);$recommendation[’recommendation ’][’video_id

’][] = $single [0];$recommendation[’recommendation ’][’rate’][]

= $single [1];}return $recommendation;

}?>

3.7 Categorizzazione

Intime dispone di diverse procedure di categorizzazione delle risorse. La catego-rizzazione gioca un ruolo importante sia per l’espansione della conoscenza cheper la profilazione degli utenti.

Per come sono strutturate le pagine di Intime, le risorse compaiono soltantosotto una qualche categoria; e fondamentale quindi che ogni risorsa presente

77

Page 78: Daniele Maddaluno Bachelor of Arts thesis

sia sempre categorizzata, altrimenti questa sara presente nel network, ma nonvisibile.

3.7.1 Tassonomia delle Categorie

Per Intime e stata realizzata una tassonomia specifica per quanto riguarda le ca-tegorie, in modo da riflettere il piu possibile gli interessi degli utenti del network.

Si e dovuto scegliere tra disporre di una tassonomia propria oppure promuovereun’estrazione automatica delle categorie in una moltitudine come quelle utiliz-zate da Wikipedia. Quest’ultimo approccio e risultato svantaggioso in quanto lecategorie di Wikipedia sono state pensate per un’enciclopiedia: il loro scopo equello di indicare, per ogni articolo, quelle caratteristiche che oggettivamente lorendono classificabile con la categoria, mentre in Intime queste devono rifletteregli interessi degli utenti di un social network. Ad esempio: Wikipedia categoriz-za la risorsa Ludwig van Beethoven come Compositori tedeschi del XIX secolooppure come Musicisti legati a Vienna o Pianisti classici, ma queste categoriemal rispecchiano gli interessi di una persona: e piu opportuno utilizzare cate-gorie piu generiche come Musica e Musica Classica.

Le categorie di Intime, quindi, cercano di coprire il piu possibile gli interessi so-ciali e sono distribuite su due livelli: un primo livello di categorie molto generali,macrocategorie, che raccolgono le categorie di secondo livello.Il motivo di questa gerarchia e proporre inizialmente agli utenti interessi genericie soltanto dopo specificare.

Le categorie di livello 2 corrispondono a pagine di Wikipedia: come MusicaRock, Musica Classica, Politica e Serie TV; in questo modo e possibile calcola-re le distanze semantiche tra queste e le risorse di Intime. Le macrocategorie,invece, non corrispondono a pagine di Wikipedia e semplicemente contengonoalcune sottocategorie, raggruppando interessi relativamente specifici sotto nomimolto generici, come ad esempio Everyday Life che raccoglie categorie comeGossip e Food, o Politics & Actuality che contiene Politics e Journalism.

L’approccio di categorie a due livelli e utilizzato anche in altri network comeVimeo per la categorizzazione di video.

Esempi di categorie di Intime

Tourism & Places� Cities

� Monuments

� Travel

� CountriesTechnology & Science

� Computers

78

Page 79: Daniele Maddaluno Bachelor of Arts thesis

� Internet

� Science

� Chemistry

Visual Arts

� Painting

� Sculpture

� Architecture

� Photography

3.7.2 Clustering

Il motore di clustering di Intime ha lo scopo di categorizzare le risorse del si-stema. Date le risorse che sono presenti nel network ad un certo istante, un’e-secuzione dell’algoritmo le raggruppera in cluster di risorse simili. Ogni clusterconterra risorse che hanno gia una categoria su Intime, altre che non ce l’hannoancora perche inserite nel network dopo l’esecuzione precedente. Le categoriedi queste ultime verranno selezionate in base alle categorie delle risorse nellostesso cluster.

Periodicamente un cron sul server comanda al cluster hadoop di eseguire unparticolare job. Questo viene inserito nella coda dei job in attesa di eseguire;quando e il suo turno inizia la procedura di categorizzazione delle risorse.La strategia usata prevede tre fasi:

1. vettorizzazione delle risorse

2. esecuzione algoritmo di clustering

3. assegnazione categoria alle nuove risorse

Vettorizzazione delle risorse

La risorse di Intime vengono vettorizzate mediante l’algoritmo TF-IDF. Ognivolta che una risorsa entra a far parte del network, viene salvato un estrattotestuale da Wikipedia e memorizzato in un file. La prima parte del job cate-gorization effettua una copia dei file di testo delle risorse che sono entrate nelnetwork dall’ultima esecuzione effettuata, che avvengono con i comandi:

scp [email protected]: /home/intime/public html/media/ cluste-ring/input/* input/

79

Page 80: Daniele Maddaluno Bachelor of Arts thesis

ssh [email protected] mv public html/media/clustering/input/* pu-blic html/media/clustering/stored input/

Il primo effettua, tramite il protocollo scp, una copia dei file testuali dal serversul cluster; il secondo sposta alcuni file nel filesystem del server, in modo damarcare che sono gia stati copiati.

Seguono gli script relativi all’iniziazione di hadoop per l’esecuzione dell’algorit-mo Map Reduce.

. $HADOOP HOME/conf/hadoop-sge.sh

hadoop start

hadoop fs -put /home/fgelli/input/* input/

Il primo comando sopra importa lo script di sistema per hadoop, il secondo ca-rica i servizi di hadoop sulle macchine e il terzo copia i file input nel file systemdistribuito.

Poiche la procedura di vettorizzazione e scritta come algoritmo map-reduce,e necessario convertire i file testuali in oggetti di classe Sequence File, ovverorappresentazioni per hadoop di file sequenziali.La chiave di tale file sequenziale e il titolo dei documenti, il valore e il conte-nuto testuale. Mahout offre l’utility Sequence Files From Directory, che, datauna directory in ingresso, produce il file sequenziale. Viene eseguito un dumpdell’output di tale procedura, che produce un output leggibile; questo avvienecon la classe di Mahout Sequence File Dumper.

bin/mahout seqdirectory -i input/ -o seqfiles/ -ow

� -i : specifica la directory di input

� -o specifica la directory di output

� -ow permette di sovrascrivere l’output nel caso esista gia

80

Page 81: Daniele Maddaluno Bachelor of Arts thesis

bin/mahout seqdumper -i seqfiles/ -o seqfiles analyzer

� -i : specifica la directory di input

� -o specifica la directory di output

Dopo aver ottenuto i file sequenziali, viene eseguita la procedura di conversionein vettori TF-IDF. Viene utilizzata la classe Sequence Files to Sparse Vectorfornita da Mahout. La rappresentazione sparsa e senza dubbio piu efficiente,dato il numero gigantesco di dimensioni dello spazio vettoriale e data la scarsitadelle componenti diverse da zero.

La procedura, scritta per essere eseguita parallelamente su un cluster hadoop,prevede piu fasi:

1. parsing del contenuto testuale, utilizzando le funzionalita di Apache Lu-cene

2. creazione del dizionario, ovvero un file sequenziale le cui chiavi sono numeriinteri e i cui valori sono le parole

3. vengono creati i vettori Term Frequency

4. vengono creati i vettori TF-IDF

Anche in questo caso viene eseguita un utility che produce un output leggibile:Vector Dumper.

I comandi utilizzati sono i seguenti:

bin/mahout seq2sparse -i seqfiles/ -o vectors/ -nv -ow -seq -n 2

� -i : specifica la directory di input

� -o: specifica la directory di output

� -nv : specifica che i vettori prodotti appartengono alla classe NamedVector,ovvero che ad ogni vettore corrisponde un nome, che nel nostro caso e lachiave dei file sequenziali in ingresso ovvero il titolo dei documenti

� -ow permette di sovrascrivere l’output nel caso esista gia

� -seq se true, vengono creati dei vettori di classe Sequential Access Vector

� -n indica di effettuare una normalizzazione con la norma 2

81

Page 82: Daniele Maddaluno Bachelor of Arts thesis

bin/mahout vectordump -i vectors/tfidf-vectors/ -o tfidf-vectors-analyzer

� -i : specifica la directory di input

� -o specifica la directory di output

Algorimo Fuzzy-KMeans

Si e scelto di usare Fuzzy KMeans, in quanto l’assegnazione delle risorse allecategorie non e un’operazione rigida ed e previsto che una risorsa possa ap-partenere a piu categorie. Infatti, se un cluster prodotto dall’algoritmo noncorrisponde a nessuna tra le categorie di Intime, le nuove risorse in questo nonvengono categorizzate per questo cluster, ma potranno comparire anche in altrigruppi piu conformi alle categorie di Intime.

L’algoritmo accetta in input un file contentente dei vettori. Un utente puofornire i centri dei cluster come input, oppure puo selezionarli randomicamente.I file di input non vengono modificati dal programma. All’N-esima iterazione diFuzzy-KMeans i file di output vengono salvati nella directory cluster-N.Il programma usa un egual numero di mapper e reducer, ed e composto da:

� FuzzyKMeansDriver : Itera sui vettori e sui cluster di input per un numerodi iterazioni oppure fino alla convergenza dell’algoritmo. Durante l’itera-zione i-esima viene creata una directory chiamata cluster-i, contenente inuovi centri dei clusters. Tale directory costituira l’input dell’iterazio-ne successiva. Dopo il termine dell’ultima iterazione, viene eseguita unaprocedura map che produce come output, in una cartella chiamata cluste-redPoints, un file sequenziale che associa ad ogni vettore il cluster a cuiappartiene

� FuzzyKMeansMapper : Legge i cluster di input durante il metodo configu-re(); dopodiche per ogni punto calcola un indice di appartenenza ai diversicluster: ovvero una probabilita di appartenere a questi. Tale indice e in-versamente proporzionale alla distanza dei punti dai centroidi, calcolatain case alla metrica selezionata. L’output e un file sequenziale le cui chia-vi sono gli identificativi dei clusters e i cui valori sono oggetti del tipoClusterObservations, contententi dati statistici

� FuzzyKMeansCombiner : riceve le coppie chiave-valore dal mapper e pro-duce le somme parziali per ogni cluster. L’output che produce e sempreun file sequenziale dello stesso tipo di quello in ingresso.

� FuzzyKMeansReducer : piu reducer ricevono alcune chiavi e tutti i valoriassociati ad esse, dopodiche sommano tutti i valori e producono un nuovocentro per il cluster in uscita.

Alla fine dell’algoritmo la directory di output conterra N cartelle nominatecluster-N contententi il risultato di ogni iterazione, ovvero un file sequenzia-le del tipo (Text,SoftCluster), dove la chiave e una stringa identificativa di uncluster e una cartella chiamata clusteredPoints, contentente un file sequenziale

82

Page 83: Daniele Maddaluno Bachelor of Arts thesis

di tipo(IntWritable, WeightedVectorWritable), dove la chiave e l’identificativodi un cluster e il valore e una coppia (double,VectorWritable), dove il valoredouble indica la probabilia del vettore VectorWritable di appartenere al clusterindicato.Il comando che invoca l’algoritmo Fuzzy-KMeans e il seguente:

bin/mahout fkmeans -i vectors/tfidf-vectors/ -o fkmeans-clusters/ -ow -cfkmeans-initial-clusters/ -k 30 -cl -cd 0.001 -dm org.apache.mahout.common.distance.CosineDistanceMeasure -x 20 -m 4 -e

� -i : specifica la directory di input

� -o: specifica la directory di output

� -c: specifica la directory di input dei centroidi iniziali

� -ow : permette di sovrascrivere l’output nel caso esista gia

� -k : indica il numero di cluster che devono essere restituiti dall’algoritmo.Se settato viene eseguita l’utility Random Seed Generator, che genera icentroidi nella directory indicata in -c selezionando randomicamente tra ivettori di input

� -cl : se selezionato, dopo che sono stati restituiti i cluster vengono assegnatia questi i vettori iniziali

� -cd : double che indica quando l’algoritmo puo smettere di iterare

� -dm: la metrica di distanza utilizzata di default e org.apache.mahout.common.distance.EuclideanDistanceMeasure

� -x : il massimo numero di iterazioni da eseguire, indipendentemente dallasoglia di convergenza

� -m: parametro di fuzzyness: e un valore double maggiore di 1. Piu evicino ad 1, piu l’algoritmo e simile a K-Means

� -e: se settato a true indica che il clustering deve emettere soltanto il clustermigliore per ogni vettore

� -t : se -e e settato a false; tale double rappresenta la soglia probabilisticausata per emettere cluster multipli per ogni vettore. Un valore pari a 0produce per ogni cluster la probabilita che ogni vettore appartenga ad esso

� -xm: modalita di esecuzione: sequenziale o map-reduce. Di default emap-reduce

Dopo che i cluster sono stati determinati e le risorse sono state assegnate aquesti, deve essere estratta, per ogni nuova risorsa, la categoria corrispondente.Il file ottenuto ispezionando l’output di Mahout ha il seguente formato:

83

Page 84: Daniele Maddaluno Bachelor of Arts thesis

Key: 290: Value: 1.0: 113746 Sean Penn.txt = (27:0.031, 45:0.011,. . . )Key: 314: Value: 1.0: 11388236 Seattle.txt = (0:0.028, 6:0.035,. . . )Key: 314: Value: 1.0: 11525 Florence.txt = (21:0.019, 45:0.006,. . . )Key: 295: Value: 1.0: 11625 Fyodor Dostoyevsky.txt = (0:0.034,. . . )

Per ogni riga il campo Key costituisce l’identificativo di un cluster, Value euna coppia (Peso,Vettore), dove il peso e sempre pari a 1 per l’alto numerodi dimensioni e il vettore, appartenente alla classe di Hadoop NamedVector, ecostituito da un nome e dalle sue componenti.Il nome di un vettore e il nome del file di testo in ingresso: la prima parte el’identificativo di Wikipedia di una risorsa, segue il titolo.

Per elaborare questo risultato viene utilizzato lo script php categorization clustering.php.

In primo luogo il file viene letto e viene generata una struttura del tipo:

Array(

[ 3 1 9 ] => Array(

[ 0 ] => 10002116[ 1 ] => 102346[ 2 ] => 1055577[ 3 ] => 1099092[ 4 ] => 1229122[ 5 ] => 13736167[ 6 ] => 15135713[ 7 ] => 151854[ 8 ] => 154247)

.

.

.

Ovvero il cluster con id 303 contiene le risorse elencate. Tra di queste si di-stingue tra risorse gia categorizzate in esecuzioni precedenti e risorse inseriterecentemente. Lo scopo e assegnare a queste ultime una nuova categoria.Si traduce quindi il risultato nella forma:

Array(

[ 3 1 9 ] => Array

84

Page 85: Daniele Maddaluno Bachelor of Arts thesis

([ c a t e g o r i z e d ] => Array (

[ 0 ] => 10002116[ 1 ] => 102346[ 2 ] => 1055577[ 3 ] => 1099092[ 4 ] => 1229122[ 5 ] => 13736167[ 6 ] => 15135713)

[ uncategor i z ed ] => Array ([ 7 ] => 151854[ 8 ] => 154247)

)...

Se per ogni cluster le risorse elencate in categorized fossero sempre assegnatealla stessa categoria si tratterebbe semplicemente di assegnare questa categoriaalle risorse in uncategorized, ma siccome non e detto che i cluster riflettanoperfettamente le categorie di Intime, spesso non si ha questa situazione: scopodel clustering, infatti, e di raggruppare oggetti simili tra di loro, non e detto chei criteri con cui questo avvenga riflettano le categorie di Intime.Qualora le risorse gia categorizzate di un singolo cluster appartengono a unamolteplicita di categorie di secondo livello di Intime e nessuna di queste risultipredominante, nessuna di queste e adatta a contenere le nuove risorse: il clu-ster non riflette nessuna categoria di livello 2, ma potrebbe capitare che in uncaso del genere le risorse gia categorizzate appartengano comunque alla stessamacrocategoria, ad esempio tra le risorse in categorized alcune appartengono aRock Music, altre a Disco Music e altre ancora a Jazz, nessuna di queste trecategorie potra quindi essere assegnata a quelle in uncategorized, ma a questepotra essere assegnata in questo caso la macrocategoria Music.

Se neppure la maggior parte delle marcrocategorie e predominante, la risorsenuove non vengono categorizzate, in quanto il cluster preso in questione nonriflette l’ontologia di Intime; poiche e stato adoperato un algoritmo di clusteringche permette sovrapposizioni, puo darsi che quelle risorse che in un cluster nonsono state categorizzate appartengono anche ad un altro gruppo, per il qualeverra applicata la stessa procedura.Puo darsi, comunque, che alla fine dell’algoritmo intero alcune risorse non ver-ranno categorizzate: la categoria sotto la quale compariranno in Intime saraquella associata da Intime nel momento in cui sono state inserite nel networkattraverso la categorizzazione provvisoria.

Affinche venga aggiornato il database, viene generato un file sql con la querydi inserimento; per ogni risorsa categorizzata con successo vengono inserite due

85

Page 86: Daniele Maddaluno Bachelor of Arts thesis

tuple del tipo:

< resource, category, grade, level >

Una assegna la risorsa alla categoria di livello 2, l’altra invece alla macrocate-goria padre.

Es.

CSI,TV series,0.3423111,2CSI,TV & Films,0.3423111,1

Poiche l’iperspazio dei vettori clusterizzati ha un numero enorme di dimensioni,per ottendere i gradi di relatedness viene utilizzata la distanza semantica diWikipediaMiner.

3.7.3 Categorizzazione provvisoria

L’algoritmo di clustering categorizza tutte le risorse presenti nel network nell’i-stante in cui questo viene eseguito. poiche le risorse nel network sono in continuaespansione e l’algoritmo di clustering viene eseguito a scadenze periodiche, molterisorse resterebbero senza categoria per molto tempo e quindi non comparireb-bero nel network fino al momento dell’esecuzione successiva dell’algoritmo.

Per attenuare il problema e stata realizzata una nuova procedura di categoriz-zazione indipendente dal clustering, che viene eseguita non appena una risorsaentra nel network.In questo modo ogni nuova risorsa avra associata una categoria provvisoria chela rendera visibile da subito nel network.

L’idea alla base di questa categorizzazione provvisoria e quella di confrontare lanuova risorsa con alcune risorse presenti nel network, trovare quelle piu similie associarle la categoria di queste. Il criterio di vicinanza usato e la distanzasemantica di WikipediaMiner.

Piu precisamente le fasi della procedura sono le seguenti:

1. viene aggiunta al network una risorsa

2. per ogni categoria di livello 2 si calcola la distanza semantica con la risorsaaggiunta, dal risultato vengono scartate le categorie che hanno prodottouna distanza pari a zero.

3. per ogni categoria rimasta si scelgono randomicamente 5 risorse rappre-sentati, dopodiche si calcola la distanza semantica tra la nuova risorsae queste ultime, la media delle 5 distanze restituite verra salvata in unvettore

86

Page 87: Daniele Maddaluno Bachelor of Arts thesis

4. una volta che sono state calcolate tutte le distanze semantiche viene sele-zionata la categoria corrispondente al valore piu alto nel vettore calcolatoe la nuova risorsa viene assegnata alla macrocategoria padre di questa

Un vantaggio di questa procedura e che casi isolati di risorse finite per errorein un cluster non alterano il risultato, in quanto questo deriva da una me-dia tra 5 elementi. Piu le risorse nei cluster sono coese, piu i risultati dellacategorizzazione provvisoria sono migliori.

3.7.4 Cold Start

Il motore di Clustering di Intime e in grado di categorizzare le risorse del sistemae di creare una pagina del profilo per gli utenti del network. Questo avviene inbase all’attivita dell’utente sulla propria pagina. In una prima fase, pero, in cuiun utente e registrato da poco su Intime, il sistema non ha ancora abbastanzadati per personalizzare la pagina del profilo; e stato quindi pensato un mecca-nismo che preveda una profilazione iniziale per gli utenti appena registrati suIntime.

La profilazione iniziale avviene in base ai dati di Facebook al momento del-l’iscrizione: dai likes posti sulle pagine di Facebook vengono estratte alcunecategorie, che vengono memorizzate nel database, escludendo quelle non adatteal network (vedi 3.6.1). Dopodiche queste categorie vengono confrontate una aduna con le macrocategorie di Intime, trovando per ognuna la categoria di Intimecorrispondente (per esempio la categoria di facebookMusician corrispondera alla categoria di Intime Music). Per trovare la categoriacorrispondente viene prima cercato se ne esiste una con lo stesso titolo; se nonesiste vengono calcolate le distanze semantiche con tutte le categorie generali diIntime e scelto quella piu vicina.

Gia dal primo accesso, ogni utente avra alcune categorie di interesse che com-pariranno gia nella pagina del profilo, con relative suggestions. Sara subitopossibile selezionare da queste quelle che diventeranno le risorse di interesse.

3.7.5 Profilazione degli utenti

La categorizzazione delle risorse e legata strettamente al profilo di un uten-te. La funzione principale della pagina del profilo (3.3.5) e quella di metterein evidenza gli interessi degli utenti. Nella pagina compaiono sia le categoriedi interesse che le risorse di interesse, ma queste ultime compaiono soltanto sel’utente e interessato nella loro categoria. E evidente quindi come le categoriesono in primo piano rispetto alle risorse nella profilazione degli utenti di Intime:prima vengono determinate le categorie di interesse, in secondo luogo vengonoselezionate le risorse tra quelle suggerite.

Estrazione automatica categorie specifiche da macrocategorie

Dopo la registrazione di un utente, la pagina del profilo contiene soltanto ma-crocategorie, ricavate dai dati di facebook. Oltre alla possibilita di aggiungere

87

Page 88: Daniele Maddaluno Bachelor of Arts thesis

manualmente nuove categorie nella propria pagina, Intime suggerisce in auto-matico quando da una macrocategoria di interesse sara possibile derivarne unapiu specifica.La procedura che verifica la necessita di effettuare questa operazione avvieneogni volta che viene trascinata una risorsa da una lista di suggerimenti alla li-sta delle risorse di interesse: se per quella categorie e per quell’utente compareun numero di risorse di interesse abbastanza elevato e se la maggior parte diqueste appartiene a una sottocategoria compare un tooltip (3.12) che suggeriscela possibilita di aggiungere al proprio profilo la categoria indicata. Se l’utenteconferma l’operazione, la nuova categoria viene aggiunta alla pagina e le risorseche comparivano negli interessi della macrocategoria vengono divise tra questae il nuovo interesse.

Figura 3.12: Suggerimento di una nuova categoria di interesse

L’utente che non conferma puo oscurare il pulsante indicato dal tooltip, in modoche sara possibile, riattivandolo, aggiungere la categoria in seguito.

Annotazione risorse su video e Wikification

Le categorie di interesse possono essere ampliate in automatico dal sistema ognivolta che un utente effettua un commento su qualche video.Ogni volta che viene effettuato un commento vengono salvate le annotazionipresenti in esso, sia che queste siano tag di Wikipedia, sia che siano state estrat-te automaticamente dal testo.

Quest’ultima operazione avviene con la funzione di wikification offerta da Wi-kipediaMiner: dopo l’inserimento di ogni commento il testo viene passato allaWeb Service di WikipediaMiner che, dopo averlo analizzato, estrae alcuni to-pics e indica per ognuno di questi un grado, scartando in modo automatico lesoluzioni con grado minore di una certa soglia.Le risorse trovate vengono salvate nel database come annotazioni relative alcommento; quindi saranno visibili sotto al video nella parte della pagina dedi-cata alle risorse contenuto nel video.

Dopo aver memorizzato il commento vengono controllate le ultime cinque an-notazioni dell’utente e per ognuna di queste viene selezionata la categoria prin-cipale di appartenenza. Una volta ottenuto un vettore le cui componenti sonole categorie delle annotazioni viene selezionata quella che occorre piu volte, se

88

Page 89: Daniele Maddaluno Bachelor of Arts thesis

il 40% delle annotazioni appartiene a questa categoria quest’ultima diventa, senon lo e gia, di interesse per l’utente.

Questa soluzione e utile in una fase iniziale, quando la pagina del profilo con-tiene soltanto le categorie estratte dai likes di Facebook.

Oltre all’aggiunta di nuove categorie di interesse, le annotazioni fatte sui com-menti modificano, per l’utente che ha posto l’annotazione, l’ordinamento delleliste di risorse suggerite dove compare la risorsa taggata. Se un utente poneun’annotazione relativa a una risorsa, con buona probabilita sara interessato aquesta, che comparira al primo posto nei suggerimenti nella pagina del profi-lo, in modo che potra essere facilmente selezionata e spostata nelle risorse diinteresse.

Ordinamento suggerimenti risorse

Ogni categoria di interesse che compare nella pagina del profilo ha associatauna lista di risorse suggerite, che mostra le risorse appartenenti alla categoriaindicata. Per rendere personalizzate queste liste e stata prevista una proceduraautomatica di ordinamento, in modo che le risorse che compariranno sulla pa-gina saranno quelle che con maggior probabilita saranno di interesse per l’utente.

La procedura automatica viene eseguita ogni volta che un utente seleziona unarisorsa da una lista di suggerimenti e la trascina nella lista delle risorse di inte-resse: vengono calcolate tra le risorse suggerite le due piu simili semanticamente,secondo le metriche di WikipediaMiner, alla risorsa selezionata e vengono postein testa alla lista.

Questa soluzione incentiva gli utenti a selezionare sempre piu risorse al proprioprofilo, rendendo la pagina del profilo piu completa.

89

Page 90: Daniele Maddaluno Bachelor of Arts thesis

Capitolo 4

Esperimenti

Nel capitolo dedicato alla realizzazione sono stati descritti i recommender uti-lizzati all’interno di Intime. La scelta di questi recommender e stata fatta solodopo un’accurata fase di evaluation dei vari recommender.

4.1 Evaluate di un Recommender

Per valutare un recommender e stato necessario separare il dataset a disposizio-ne in un training-set ed un testing-set.

Una volta separato il dataset, si procede ad addestrare il recommender con iltraining-set e si prova a stimare una preferenza per quelli che sono i dati deltesting-set.

A questo punto una stima di quanto il recommender sia efficace puo essere fat-ta calcolando o la differenza media assoluta o lo scarto quadratico medio tra ivalori effettivi ed i valori suggeriti dal recommender.

Nel caso di Intime si e scelto di utilizzare come misura della efficienza di unrecommender la deviazione standard, in modo che fossero maggiormente pe-nalizzati errori di valutazione piu grande rispetto ad errori di valutazione piupiccoli.

In Tab. 4.1 e possibile vedere un semplice esempio del calcolo effettuato pervalutare un recommender.

Item 1 Item 2 Item 3Effettivo 3.0 5.0 4.0Stimato 3.5 2.0 5.0Differenza 0.5 3.0 1.0Differenza media assoluta 0.5+3.0+1.0

3 = 1.5

Scarto quadratico medio 2

√(0.5)2+(3.0)2+(1.0)2

3 = 1.8484

Tabella 4.1: Evaluate di un recommender

90

Page 91: Daniele Maddaluno Bachelor of Arts thesis

4.2 Evaluate di un Recommender di Mahout

Mahout fornisce dei metodi per effettuare una evaluation del recommender chesi occupano di separare in modo randomico il dataset e di calcolare lo score delrecommender.

Nel seguente listing e possibile vedere come creare un recommender-evaluatorper un generico recommender di Mahout. In particolare nel codice viene specifi-cato che questa evaluate viene fatta prendendo in considerazione tutto il dataset(vedi 1.0), e di questo il 90% (vedi 0.9) viene utilizzato come training-set ed ilrimanente 10% come testing-set. Come indice di dispersione delle misure speri-mentali in questo codice si e scelto di utilizzare la deviazione standard, per lasua capacita di penalizzare di piu errori grossolani sui dati rispetto ad errori dipiccola natura.

Listing 4.1: Mahout: evaluate di un recommender

RecommenderEvaluator evaluator = new RMSRecommenderEvaluator ();

RecommenderBuilder recommenderBuilder = new RecommenderBuilder () {@Overridepublic Recommender buildRecommender(DataModel model) throws

TasteException {/* Some User or Item Similarity (if needed: see slope_one )*//* Some UserNeighbourhood (only if UserBased Recommender) */return new SomeRecommender(/* data to pass */); }

};

double score = evaluator.evaluate(recommenderBuilder , null ,preferences_model ,

0.9, 1.0);

Tramite questo codice e stato possibile verificare l’efficacia della raccomanda-zione all’interno del network.

4.3 Risultati sperimentali

Una prima cernita di recommender da utilizzare nel network e stata fatta imme-diatamente. Infatti poiche Intime e un social-network, principalmente basatosul browsing di video, avra, molto probabilmente, un numero di video moltomaggiore del numero di utenti che si iscrivono, in quanto in media ogni utentecarica almeno un video e inoltre alcuni utenti ne caricheranno molti di piu.E noto che nel caso in cui il numero di utenti sia minore del numero di item, chein questo caso sono video, i recommender di tipo UserBased hanno performa-ce migliori; quindi la scelta e ricaduta in un primo momento su recommenderUserBased o su di uno SlopeOne.

Per decidere quale tra questi due recommender fosse quello piu adatto al siste-ma ci si e avvalsi dei dati sperimentali ottenuti tramite una media tra diecimila

91

Page 92: Daniele Maddaluno Bachelor of Arts thesis

evaluate per ogni recommender.

Il recommender slope-one e stato escluso quasi immediatamente in quanto harestituito subito risultati di valutazione che si sono aggirati intorno ai 1.67, unvalore piuttosto negativo, considerando il fatto che l’indice di gradevolezza ecompreso tra 1 e 5.

Quindi come si puo presto capire l’attenzione si e rivolta verso i recommenderdi tipo UserBased.

Tuning dei parametri per un recommender UserBased

Come e stato detto precedentemente, in Intime sono stati utilizzati due recom-mender in real-time, uno per la fase di cold start ed uno per la fase successiva.Essendo la scelta ricaduta su dei recommender UserBased, i recommender diquesto tipo hanno bisogno sia di una Similarity che di una Neighbourhood.

poiche non e possibile a priori stabilire quale Similarity sia migliore delle altree quale dimensione o threshold della Neighbourhood sia da prendere in consi-derazione, per avere un recommender piu efficace, sono state necessarie diversemisure sperimentali descritte in breve nelle seguenti tabelle.

Similarity n=2 n=5 n=10 n=15Pearson 2.0 1.58 1.60 1.61Euclidean 1.04 1.66 1.54 1.57Log-Likelihood 1.37 1.27 1.57 1.59Tanimoto 0.94 1.16 1.47 1.53

Tabella 4.2: Scarto quadratico medio per recommender che utilizza solo lepreferenze con una Fixed-Neighbourhood

Similarity n=2 n=5 n=10 n=15Pearson 1.97 1.56 1.46 1.52Euclidean 0.51 0.96 1.50 1.42Log-Likelihood 0.59 1.10 1.43 1.34Tanimoto 1.14 1.05 1.23 1.21

Tabella 4.3: Scarto quadratico medio per recommender che utilizza le categoriedi interesse con una Fixed-Neighbourhood

Similarity t=0.95 t=0.9 t=0.85 t=0.8 t=0.75 t=0.7Pearson 1.35 1.35 1.47 1.46 1.46 1.47Euclidean 0.60 0.61 0.61 0.61 0.61 0.61Log-Likelihood NaN NaN NaN 1.22 1.23 1.23Tanimoto NaN NaN NaN NaN NaN NaN

Tabella 4.4: Scarto quadratico medio per recommender che utilizza solo lepreferenze con una Threshold-Neighbourhood

92

Page 93: Daniele Maddaluno Bachelor of Arts thesis

Similarity t=0.95 t=0.9 t=0.85 t=0.8 t=0.75 t=0.7Pearson 1.36 1.36 1.28 1.26 1.26 1.25Euclidean 0.71 1.41 1.38 1.32 1.30 1.37Log-Likelihood NaN NaN NaN 0.67 0.64 0.69Tanimoto NaN NaN NaN NaN NaN NaN

Tabella 4.5: Scarto quadratico medio per recommender che utilizza le categoriedi interesse con una Threshold-Neighbourhood

E da mettere in evidenza il fatto che, osservando le prime due tabelle (Tab. 4.2e Tab. 4.3 ), il metodo che tiene conto delle categorie di interesse di un utenteper trovare l’insieme di Neighbourhood e sempre migliore di quello che utilizzasemplicemente i dati delle preferenze fornito da Mahout e lo e ancora di piu sesi prendono solo gli utenti piu simili.

Nelle tabelle successive(Tab. 4.4 e Tab. 4.5 ) invece non abbiamo una divisionecosı netta dei risultati sperimentali.

E possibile mettere meglio in luce questa differenza osservando la Fig. 4.1 cherappresenta i risultati ottenuti con degli istogrammi.

2 4 6 8 10 12 14 16

1

1.2

1.4

1.6

1.8

2

Nighbourhood Size

Score

Preferences Fixed-Neighbourhood

2 4 6 8 10 12 14 16

0.5

1

1.5

2

Nighbourhood Size

Score

Categories Fixed-Neighbourhood

0.7 0.75 0.8 0.85 0.9 0.95

0.6

0.8

1

1.2

1.4

Threshold

Score

Preferences Threshold-Neighbourhood

0.7 0.75 0.8 0.85 0.9 0.950.6

0.8

1

1.2

1.4

Threshold

Score

Categories Threshold-Neighbourhood

Pearson; Euclidean; Log-Likelihood; Tanimoto

Figura 4.1: Grafici che rappresentano l’andamento degli score nei differentirecommender

93

Page 94: Daniele Maddaluno Bachelor of Arts thesis

4.4 Selezione del Recommender

Una volta effettuate tali prove empiriche, per ottimizzare le prestazioni dei re-commender e sufficiente configurarli secondo quelli che sono i parametri chehanno ricevuto uno score piu basso nella fase sperimentale.

Ovvero, per il recommender che prende in considerazione le preferenze degliutenti e stabilisce una Neigbourhood sulla base di questi, la scelta ricade su unaEuclideanSimilarity con una Threshold Neigbourhood.

Per il recommender che stabilisce l’insieme di neighbourhood, misurando lasimilitudine degli utenti sulla base delle categorie, la scelta ricadra su di unaFixedNeighbourhood con EuclideanSimilarity.

94

Page 95: Daniele Maddaluno Bachelor of Arts thesis

Capitolo 5

Conclusioni

Intime e un social network per il browsing video che risponde alle esigenze de-gli ultimi anni: ovvero di rendere le applicazioni Web capaci di gestire grandiquantita di dati e di permettere agli utenti di navigare agevolmente tra questi.

Intime risponde alle due principali sfide proprie dei social network intelligenti:il filtraggio dei contenuti informativi di Internet realizzato attraverso Recom-mendation di contenuto per ogni utente e la profilazione automatica che rendeogni utente diverso dagli altri, associandogli dati che lo contraddistinguano.

Sono stati raggiunti tutti gli obiettivi prefissati per il progetto, in quanto lestime sulle raccomandazioni di video sono positive ed e possibile categoriz-zare efficacemente video e risorse, all’oscuro degli utenti, utilizzando le loroannotazioni.Tali risultati sono stati ottenuti mediante l’uso di strategie consolidate e imple-mentate solidamente in framework largamente utilizzati nel campo del Web, ingrado di rendere l’applicazione scalabile e pronta a sostenere un traffico di datiin costante aumento come succede per la maggior parte delle applicazioni Web.Intime, inoltre, dispone di WikipediaMiner: un efficace strumento in grado diutilizzare il contenuto informativo di Wikipedia per vari scopi, come ad esempio,per determinare la vicinanza semantica tra piu concetti.

Il sistema funziona completamente in modo automatico e migliorera sia le sueraccomandazioni che la categorizzazione delle risorse con il crescere delle iscri-zioni al network e l’aumentare del dataset delle preferenze.

Per le Recommendation e stato sviluppato un sistema in grado di agire diversa-mente in base a diverse esigenze; nel caso in cui l’utente si sia appena connessosono state prese in considerazione le categorie di interesse di Facebook per riu-scire a restituire delle Raccomandazioni coerenti con i suoi interessi, mentre nelcaso in cui l’utente operi attivamente nel network, per esempio guardando vi-deo e votandoli, gli verranno fornite delle nuove raccomandazioni coerenti conla sua attivita. Infine, per quel che riguarda i suggerimenti di nuovi contenuti,il network e pronto a sostenere grandi quantita di dati in quanto un algoritmodistribuito di Recommendation si occupa di fornire periodicamente nuove valideraccomandazioni agli utenti.

95

Page 96: Daniele Maddaluno Bachelor of Arts thesis

Per la profilazione si e deciso di caratterizzare ogni utente in base a delle ca-tegorie di interesse: gia dal primo accesso si avra nella propria pagina alcunecategorie e per ognuna di queste una lista di risorse suggerite corrispondentia pagine di Wikipedia, e possibile selezionare alcune di queste e trascinarle inun’apposita lista di risorse di interesse. In questo modo sara possibile per gliutenti curare il proprio profilo sulla base di quelle categorie e risorse di interesseselezionate in modo automatico dal sistema: ogni azione compiuta come appor-re un commento su un video o selezionare risorse di interesse comportera dellemodifiche sulla propria pagina del profilo.Il sistema acquisisce dati mediante l’attivita degli utenti sui video e sulla paginadel proprio profilo: su ogni video e possibile commentare ogni singolo frame eporre annotazioni relative a pagine di Wikipedia o ad utenti di Facebook; sullapagina del profilo e possibile curare i propri interessi, selezionandoli tra le alter-native proposte dal sistema in base alla propria attivita.

E stato raggiunto pienamente il presupposto di social network, poiche il sistemadi notifiche interno, e quello tramite Facebook, tiene aggiornati gli utenti sulleazioni che li riguardano, cosı da poter tenere sempre sotto controllo le propriepreferenze.

L’interfaccia del sistema e stata sviluppata rispettando i principi di usabilita.Molto soddisfacente e anche la compatibilita cross-browser, in quanto la WebApplication e pienamente funzionante sugli ultimi browser piu conosciuti. Inparticolare sono stati eseguiti test su: Mozilla Firefox, Google Chrome, Safari,Opera e Internet Explorer.

5.1 Sviluppi futuri:

Volendo concludere vengono presentati quelli che, secondo il candidato, sonopossibili miglioramenti o futuri sviluppi del sistema:

� essendo in continuo aumento la tendenza di accedere accedere ai social net-work da dispositivi mobili, deve essere progettata un’interfaccia appositache permetta una navigazione agevole per questo tipo di dispositivi

� potrebbe essere implementato un meccanismo automatico per individuarei punti salienti di un video in modo da semplificare la navigazione del suocontenuto

� data la natura semantica di Intime, e necessario esprimere la semanticacontenuta nelle pagine nel formato RDFa, ovvero tramite triple del tipo(soggetto, predicato, complemento). Per raggiungere tale scopo puo essereutilizzato il formato di markup GRDDL, capace di estrarre i dati RDFdalle pagine XHTML

� per estrarre informazioni dai video, oltre alle annotazioni sui commenti,potrebbero essere utilizzati algoritmi di analisi dei video che utilizzinoprocedure tipiche della Computer Vision

96

Page 97: Daniele Maddaluno Bachelor of Arts thesis

� le scelte fatte per i recommender in real-time tengono conto del datasetdelle preferenze attuale; e probabile che gli sviluppi successivi del networkportino a considerazioni di tipo differente. Non e possibile stabilire a prioriquali saranno le configurazioni ottimali dei recommender in futuro con ilcrescere del dataset; solo un test empirico sui nuovi dati potra fissare qualisiano le configurazioni piu adatte da adottare

� l’installazione di WikipediaMiner utilizza dei dump di Wikipedia risalential 22 Luglio 2011, poiche Wikipedia e continuamente in evoluzione saranecessario utilizzare dei dump piu recenti per avere dati piu aggiornati.

� l’interfaccia e l’usabilita del sistema dovrebbe essere ulteriormente miglio-rata. Per un nuovo utente connesso al network puo risultare non moltointuitiva

97

Page 98: Daniele Maddaluno Bachelor of Arts thesis

Appendice A

Screenshot delle PagineWeb

L’appendice contiene le sreenshot delle seguenti pagine web:

1. Home Page

2. Video Suggestion Page

3. Video Page

4. Profile Page

5. Resource Page

6. Category Page

98

Page 99: Daniele Maddaluno Bachelor of Arts thesis

Figura A.1: Home Page

99

Page 100: Daniele Maddaluno Bachelor of Arts thesis

Figura A.2: Video Suggestion Page

100

Page 101: Daniele Maddaluno Bachelor of Arts thesis

Figura A.3: Video Page

101

Page 102: Daniele Maddaluno Bachelor of Arts thesis

Figura A.4: Profile Page

102

Page 103: Daniele Maddaluno Bachelor of Arts thesis

Figura A.5: Resource Page

103

Page 104: Daniele Maddaluno Bachelor of Arts thesis

Figura A.6: Category Page

104

Page 105: Daniele Maddaluno Bachelor of Arts thesis

Elenco delle figure

2.1 Fenomeno del “Long Tail” . . . . . . . . . . . . . . . . . . . . . . 72.2 Fenomeno del “Long Tail” in termini di un recommender video . 82.3 Cosine similarity and Pearson correlation for centered data . . . 112.4 Tanimoto similarity . . . . . . . . . . . . . . . . . . . . . . . . . 122.5 Fixed-size neighbourhood . . . . . . . . . . . . . . . . . . . . . . 142.6 Threshold-based neighbourhood . . . . . . . . . . . . . . . . . . . 152.7 Raccomandazione tramite matrice di co-occorrenza . . . . . . . . 18

3.1 Logo di Apache Hadoop . . . . . . . . . . . . . . . . . . . . . . . 233.2 Logo di Apache Mahout . . . . . . . . . . . . . . . . . . . . . . . 243.3 Relazione di Mahout con altri progetti Apache . . . . . . . . . . 253.4 Intime: architettura web . . . . . . . . . . . . . . . . . . . . . . . 283.5 Ricerca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.6 Correzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.7 drag-and-drop di una risorsa . . . . . . . . . . . . . . . . . . . . . 423.8 Tooltip della risorsa Nirvana . . . . . . . . . . . . . . . . . . . . . 513.9 Scrollbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.10 Logo MediaWiki . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.11 Algoritmo con matrice di co-occorrenza in Mahout . . . . . . . . 743.12 Suggerimento di una nuova categoria di interesse . . . . . . . . . 88

4.1 Grafici che rappresentano l’andamento degli score nei differentirecommender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

A.1 Home Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99A.2 Video Suggestion Page . . . . . . . . . . . . . . . . . . . . . . . . 100A.3 Video Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101A.4 Profile Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102A.5 Resource Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103A.6 Category Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

105

Page 106: Daniele Maddaluno Bachelor of Arts thesis

Listings

3.1 Drag-and-Drop: Dichiarazione elementi Draggable e Droppable . 413.2 Drag-and-Drop: Dichiarazione liste sortable connesse . . . . . . . 413.3 Drag-and-Drop: Dichiarazione lista interest content come Sortable 423.4 Autocomplete: Dichiarazione form autocomplete . . . . . . . . . 433.5 Autocomplete: Campo di inserimento nuova categoria . . . . . . 443.6 Blueimp: inizializzazione dell’uploader . . . . . . . . . . . . . . . 453.7 Blueimp: costruttore uploader php . . . . . . . . . . . . . . . . . 463.8 Blueimp: uploader php . . . . . . . . . . . . . . . . . . . . . . . . 473.9 Chiamata asincrona . . . . . . . . . . . . . . . . . . . . . . . . . 483.10 Chiamata asincrona: inizializzazione . . . . . . . . . . . . . . . . 483.11 Chiamata asincrona: passaggio parametri . . . . . . . . . . . . . 493.12 Chiamata asincrona: esecuzione . . . . . . . . . . . . . . . . . . . 493.13 Upload transcoding . . . . . . . . . . . . . . . . . . . . . . . . . . 503.14 Tooltips: semplice dichiarazione tooltip BeautyTips . . . . . . . . 503.15 Tooltips: Dichiarazione tooltip immagini delle suggestions . . . . 513.16 Scrollbar: Inizializzazione . . . . . . . . . . . . . . . . . . . . . . 523.17 MediaElements.js: HTML5 . . . . . . . . . . . . . . . . . . . . . 533.18 MediaElements.js: inizializzazione del player . . . . . . . . . . . . 533.19 FFmpeg: installazione su Ubuntu . . . . . . . . . . . . . . . . . . 543.20 Facebook PHP SDK: inizializzazione della libreria Facebook . . . 583.21 Facebook PHP SDK: ottenere informazioni sulla connessione . . 583.22 Facebook PHP SDK: ottenere le informazioni base sull’utente . . 583.23 Facebook PHP SDK: ottenere il link per la connessione a Facebook 593.24 Facebook PHP SDK: ottenere il link per la disconnessione da

Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.25 Facebook PHP SDK: ottenere i likes di Facebook dell’utente . . . 603.26 Facebook JavaScript SDK: inizializzare la libreria . . . . . . . . . 613.27 Facebook JavaScript SDK: ottenere lo stato di connessione . . . 613.28 Facebook JavaScript SDK: ottenere informazioni circa l’utente . 623.29 Facebook JavaScript SDK: ottenere i likes Facebook di un utente 623.30 Facebook JavaScript SDK: mettere un post in bacheca di un amico 623.31 Facebook JavaScript SDK: ottenere gli amici di un utente . . . . 633.32 Trigger: ricopia un’istanza dalla tabella preferences alla preferen-

ces last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.33 Trigger: elimina l’istanza piu vecchia se la dimensione della ta-

bella supera le 100000 istanze . . . . . . . . . . . . . . . . . . . . 673.34 Connessione JDBC: Mahout API . . . . . . . . . . . . . . . . . . 693.35 Recommender: Cold Start . . . . . . . . . . . . . . . . . . . . . . 693.36 Recommender: la classe IntimeGenericUserBasedRecommender . 70

106

Page 107: Daniele Maddaluno Bachelor of Arts thesis

3.37 Recommender: un piccolo esempio di output json . . . . . . . . . 703.38 Recommender: fase successiva alla cold start . . . . . . . . . . . 713.39 File sql.php per generare l’sql a partire da un singolo file di output 764.1 Mahout: evaluate di un recommender . . . . . . . . . . . . . . . 91

107

Page 108: Daniele Maddaluno Bachelor of Arts thesis

List of Algorithms

1 User based recommender . . . . . . . . . . . . . . . . . . . . . . . 152 Item based recommender . . . . . . . . . . . . . . . . . . . . . . . 153 Slope-One: precomputation . . . . . . . . . . . . . . . . . . . . . . 164 Slope-One: recommender algorithm . . . . . . . . . . . . . . . . . 16

108

Page 109: Daniele Maddaluno Bachelor of Arts thesis

Elenco delle tabelle

2.1 Tabella delle preferenze: un esempio . . . . . . . . . . . . . . . . 92.2 Tanimoto e Log-Likelihood Similarity: un esempio . . . . . . . . 13

4.1 Evaluate di un recommender . . . . . . . . . . . . . . . . . . . . 904.2 Scarto quadratico medio per recommender che utilizza solo le

preferenze con una Fixed-Neighbourhood . . . . . . . . . . . . . 924.3 Scarto quadratico medio per recommender che utilizza le catego-

rie di interesse con una Fixed-Neighbourhood . . . . . . . . . . . 924.4 Scarto quadratico medio per recommender che utilizza solo le

preferenze con una Threshold-Neighbourhood . . . . . . . . . . . 924.5 Scarto quadratico medio per recommender che utilizza le catego-

rie di interesse con una Threshold-Neighbourhood . . . . . . . . . 93

109

Page 110: Daniele Maddaluno Bachelor of Arts thesis

Bibliografia

[1] M. Bertini, A. Del Bimbo, A. Ferracani, and D. Pezzatini, “Asocial network for video annotation and discovery based on semanticprofiling,” in Proc. of International World Wide Web Conference(WWW) - DEMO Session, Lyon, France, 2012. [Online]. Available:http://www.micc.unifi.it/publications/2012/BDFP12

[2] A. Toscher and M. Jahrer, “The BigChaos Solution to the Netflix GrandPrize,” 2009.

[3] Y. Koren, “The BellKor Solution to the Netflix Grand Prize,” 2009.

[4] M. Piotte and M. Chabbert, “The Pragmatic Theory solution to the Netflixgrand prize,” Aug. 2009.

[5] C. Anderson, “The Long Tail,” 2009.

[6] A. Rajaraman and J. D. Ullman, Mining of Massive Datasets. CambridgeUniversity Press, July 2012.

[7] D. Goldberg, D. Nichols, B. M. Oki, and D. Terry, “Using collaborativefiltering to weave an information tapestry,” Commun. ACM, pp. 61–70,Dec. 1992.

[8] T. Segaran, Programming Collective Intelligence: Building Smart Web 2.0Applications. O’Reilly, 2007.

[9] A. M. Daniel Lemire, “Slope One Predictors for Online Rating-BasedCollaborative Filtering,” Apr. 2005.

[10] T. White, Hadoop: The Definitive Guide. O’Reilly, june 2009.

[11] G. Ingersoll, “Introducing Apache Mahout,” Sep. 2009. [Online].Available: http://www.ibm.com/developerworks/java/library/j-mahout/index.html?S TACT=105AGX01&#38;S CMP=HP

[12] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns.Addison-Wesley, January 1995.

110

Page 111: Daniele Maddaluno Bachelor of Arts thesis

Ringraziamenti

Per il percorso appena concluso ringrazio il Professor Alberto Del Bimbo, rela-tore del progetto e interlocutore paziente e disponibile.

Esprimo, inoltre, gratitudine al Dott. Andrea Ferracani e al Dott. DanielePezzatini per l’incoraggiamento intellettuale e pratico ricevuto e per la loro di-sponibilita che e stata cruciale nella realizzazione di questo progetto. Un aiutoprezioso e costante mi e stato dato dal Dott. Tiberio Uricchio che mi ha facili-tato la risoluzione di alcuni problemi pratici sorti in itinere.

La collaborazione di queste persone mi ha fatto maturare e capire che il lavorodi squadra puo sempre essere approfondito e migliorato ed e attivita in progress,fruttuosa nelle esperienze future.

Un ringraziamento speciale al mio collega Francesco Gelli con il quale ho lavo-rato in modo collaborativo e costante traendo sostegno in tutto il periodo disvolgimento dell’elaborato.

Le persone a me piu vicine, che hanno contribuito in maniera piu indiretta allarealizzazione di questa tesi e mi hanno offerto opportunita di dialogo, come purenumerosi incoraggiamenti nei momenti piu difficili, sono state elemento fondanteper la conclusione del lavoro.

111