🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Come funzionano i sistemi di raccomandazione?

Come funzionano i sistemi di raccomandazione?

  • Scenarios
December 01, 2020
Shiyu Chen

I sistemi di raccomandazione sono alimentati da algoritmi che hanno avuto inizi umili per aiutare gli esseri umani a setacciare le e-mail indesiderate. Nel 1990, l'inventore Doug Terry utilizzò un algoritmo di filtraggio collaborativo per separare le e-mail desiderabili da quelle indesiderate. Semplicemente "apprezzando" o "odiando" un'e-mail, in collaborazione con altri che facevano la stessa cosa con contenuti simili, gli utenti potevano addestrare rapidamente i computer a determinare cosa far passare nella casella di posta dell'utente e cosa sequestrare nella cartella della posta indesiderata.

In senso generale, i sistemi di raccomandazione sono algoritmi che forniscono suggerimenti pertinenti agli utenti. I suggerimenti possono essere film da guardare, libri da leggere, prodotti da acquistare o qualsiasi altra cosa, a seconda dello scenario o del settore. Questi algoritmi sono ovunque intorno a noi e influenzano i contenuti che consumiamo e i prodotti che acquistiamo da grandi aziende tecnologiche come Youtube, Amazon, Netflix e molte altre.

I sistemi di raccomandazione ben progettati possono essere essenziali generatori di reddito, riduttori di costi e differenziatori della concorrenza. Grazie alla tecnologia open-source e alla diminuzione dei costi di calcolo, i sistemi di raccomandazione personalizzati non sono mai stati così accessibili. Questo articolo spiega come utilizzare Milvus, un database vettoriale open-source; PinSage, una rete neurale convoluzionale a grafo (GCN); Deep Graph Library (DGL), un pacchetto python scalabile per l'apprendimento profondo sui grafi; e i dataset di MovieLens per costruire un sistema di raccomandazione a grafo.

Vai a:

Come funzionano i sistemi di raccomandazione?

Esistono due approcci comuni alla costruzione di sistemi di raccomandazione: il filtraggio collaborativo e il filtraggio basato sui contenuti. La maggior parte degli sviluppatori utilizza uno o entrambi i metodi e, anche se i sistemi di raccomandazione possono variare in termini di complessità e costruzione, in genere includono tre elementi fondamentali:

  1. Modello dell'utente: I sistemi di raccomandazione richiedono la modellazione delle caratteristiche, delle preferenze e delle esigenze dell'utente. Molti sistemi di raccomandazione basano i loro suggerimenti su input impliciti o espliciti a livello di articolo da parte degli utenti.
  2. Modello degli oggetti: I sistemi di raccomandazione modellano anche gli oggetti per poterli raccomandare in base alle caratteristiche dell'utente.
  3. Algoritmo di raccomandazione: Il componente centrale di ogni sistema di raccomandazione è l'algoritmo che ne alimenta le raccomandazioni. Gli algoritmi comunemente utilizzati includono il filtraggio collaborativo, la modellazione semantica implicita, la modellazione basata su grafi, la raccomandazione combinata e altri ancora.

Ad alto livello, i sistemi di raccomandazione che si basano sul filtraggio collaborativo costruiscono un modello a partire dal comportamento passato dell'utente (compresi gli input del comportamento di utenti simili) per prevedere ciò a cui un utente potrebbe essere interessato. I sistemi che si basano sul filtraggio dei contenuti utilizzano tag discreti e predefiniti basati sulle caratteristiche degli articoli per raccomandare articoli simili.

Un esempio di filtraggio collaborativo è una stazione radio personalizzata su Spotify, basata sulla cronologia degli ascolti dell'utente, sui suoi interessi, sulla sua libreria musicale e altro ancora. La stazione riproduce musica che l'utente non ha salvato o per la quale non ha espresso interesse, ma che altri utenti con gusti simili hanno spesso ascoltato. Un esempio di filtraggio basato sui contenuti potrebbe essere una stazione radio basata su una canzone o un artista specifico che utilizza gli attributi dell'input per raccomandare musica simile.

Strumenti per costruire un sistema di raccomandazione

In questo esempio, la costruzione di un sistema di raccomandazione a grafo da zero dipende dai seguenti strumenti:

Pinsage: Una rete convoluzionale a grafo

PinSage è una rete convoluzionale a grafo random-walk in grado di apprendere embeddings per i nodi di grafi su scala web contenenti miliardi di oggetti. La rete è stata sviluppata da Pinterest, un'azienda di bacheche online, per offrire raccomandazioni visive tematiche ai suoi utenti.

Gli utenti di Pinterest possono "appuntare" i contenuti di loro interesse nelle "bacheche", che sono raccolte di contenuti appuntati. Con oltre 478 milioni di utenti attivi mensili (MAU) e più di 240 miliardi di oggetti salvati, l'azienda dispone di un'immensa quantità di dati degli utenti, che deve gestire con una nuova tecnologia.

1.png 1.png

PinSage utilizza grafi bipartiti pins-boards per generare embeddings di alta qualità dai pins, utilizzati per raccomandare agli utenti contenuti visivamente simili. A differenza degli algoritmi GCN tradizionali, che eseguono convoluzioni sulle matrici di caratteristiche e sull'intero grafo, PinSage campiona i nodi/pin vicini ed esegue convoluzioni locali più efficienti attraverso la costruzione dinamica di grafi computazionali.

L'esecuzione di convoluzioni sull'intero vicinato di un nodo comporta un grafo computazionale enorme. Per ridurre i requisiti di risorse, gli algoritmi GCN tradizionali aggiornano la rappresentazione di un nodo aggregando le informazioni dei suoi k-hop vicini. PinSage simula il random-walk per impostare i contenuti visitati di frequente come quartiere chiave e poi costruisce una convoluzione basata su di essi.

Poiché spesso si verificano sovrapposizioni nei quartieri k-hop, la convoluzione locale sui nodi comporta calcoli ripetuti. Per evitare questo problema, in ogni fase aggregata PinSage mappa tutti i nodi senza ripetere i calcoli, quindi li collega ai corrispondenti nodi di livello superiore e infine recupera gli embeddings dei nodi di livello superiore.

Libreria per grafi profondi: Un pacchetto scalabile in python per il deep learning sui grafi

dgl-framework-building-graph-based-recommender-milvus.png dgl-framework-building-graph-based-recommender-milvus.png

Deep Graph Library (DGL) è un pacchetto Python progettato per la costruzione di modelli di reti neurali basati su grafi in aggiunta ai framework di deep learning esistenti (ad esempio, PyTorch, MXNet, Gluon e altri). DGL include un'interfaccia di backend facile da usare, che facilita l'impianto in framework basati su tensori e che supportano la generazione automatica. L'algoritmo PinSage citato in precedenza è ottimizzato per l'uso con DGL e PyTorch.

how-does-milvus-work.png come funziona-milvus.png

Milvus è un database vettoriale open-source costruito per alimentare la ricerca di similarità vettoriale e le applicazioni di intelligenza artificiale (AI). Ad alto livello, l'uso di Milvus per la ricerca di somiglianze funziona come segue:

  1. I modelli di apprendimento profondo vengono utilizzati per convertire i dati non strutturati in vettori di caratteristiche, che vengono importati in Milvus.
  2. Milvus memorizza e indicizza i vettori di caratteristiche.
  3. Su richiesta, Milvus cerca e restituisce i vettori più simili a un vettore di input.

Costruire un sistema di raccomandazione a grafo con Milvus

beike-intelligent-house-platform-diagram.jpg beike-intelligent-house-platform-diagram.jpg

3-building-graph-based-recommender-system.png 3-costruzione di un sistema di raccomandazione a grafo.png

La costruzione di un sistema di raccomandazione a grafo con Milvus prevede le seguenti fasi:

Passo 1: Preelaborazione dei dati

La preelaborazione dei dati consiste nel trasformare i dati grezzi in un formato più facilmente comprensibile. Questo esempio utilizza i set di dati aperti MovieLens[5] (m1-1m), che contengono 1.000.000 di valutazioni di 4.000 film fornite da 6.000 utenti. Questi dati sono stati raccolti da GroupLens e comprendono le descrizioni dei film, le valutazioni dei film e le caratteristiche degli utenti.

Si noti che i set di dati MovieLens utilizzati in questo esempio richiedono una pulizia o un'organizzazione minima dei dati. Tuttavia, se si utilizzano set di dati diversi, il chilometraggio può variare.

Per iniziare a costruire un sistema di raccomandazione, costruire un grafo bipartito utente-film per scopi di classificazione utilizzando i dati storici degli utenti-film dal set di dati MovieLens.

graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()

Fase 2: addestramento del modello con PinSage

I vettori di incorporamento dei pin generati con il modello PinSage sono vettori di caratteristiche delle informazioni sui film acquisite. Creare un modello PinSage basato sul grafo bipartito g e sulle dimensioni personalizzate dei vettori delle caratteristiche dei film (256-d per impostazione predefinita). Quindi, addestrare il modello con PyTorch per ottenere le incorporazioni h_item di 4.000 film.

# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
   for i in range(len(blocks)):
   blocks[i] = blocks[i].to(device)
   h_item_batches.append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)

Fase 3: caricamento dei dati

Caricare le incorporazioni h_item dei film generate dal modello PinSage in Milvus, che restituirà gli ID corrispondenti. Importare gli ID e le informazioni sui film corrispondenti in MySQL.

# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)

Ottenere gli embeddings corrispondenti in Milvus in base agli ID dei film, quindi utilizzare Milvus per eseguire una ricerca di similarità con questi embeddings. Quindi, identificare le informazioni sui film corrispondenti in un database MySQL.

# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)
# Get the information with similar movies
_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})
sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()

Passo 5: ottenere raccomandazioni

Il sistema raccomanderà ora i film più simili alle query di ricerca dell'utente. Questo è il flusso di lavoro generale per costruire un sistema di raccomandazione. Per testare e implementare rapidamente sistemi di raccomandazione e altre applicazioni di intelligenza artificiale, provate il bootcamp di Milvus.

Milvus può aiutare molto di più dei sistemi di raccomandazione

Milvus è un potente strumento in grado di alimentare una vasta gamma di applicazioni di intelligenza artificiale e di ricerca per similarità vettoriale. Per saperne di più sul progetto, consultate le seguenti risorse:

  • Leggete il nostro blog.
  • Interagire con la nostra comunità open-source su Slack.
  • Utilizzate o contribuite al database vettoriale più diffuso al mondo su GitHub.

Like the article? Spread the word

Continua a Leggere