Panoramica: estrazione e pubblicazione di incorporamenti di funzionalità per il machine learning

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo articolo fa parte di una serie che esplora il processo di estrazione e pubblicazione di incorporamenti di funzionalità per il machine learning (ML). Questo articolo descrive il concetto di incorporamenti di funzionalità e il motivo per cui sono importanti. Illustra anche i domini e i casi d'uso per cui gli incorporamenti di funzionalità sono pertinenti, concentrandosi sulla somiglianza semantica di testo e immagini. Inoltre, l'articolo tratta architetture e tecnologie come TensorFlow Hub (tf.Hub) che possono consentire l'estrazione e la pubblicazione di incorporamenti di funzionalità su Google Cloud su larga scala.

Un secondo articolo di questa serie (Analisi della somiglianza semantica del testo mediante TensorFlow Hub e Dataflow) descrive come eseguire la somiglianza semantica del documento utilizzando gli incorporamenti di testo.

Introduzione

L'obiettivo del machine learning è estrarre pattern dai dati e utilizzarli per fare previsioni. Questi pattern predittivi rappresentano le relazioni tra le funzionalità dei dati di input e il target di output da prevedere. In genere, ti aspetti che istanze con valori delle caratteristiche simili portino a previsioni di output simili. Pertanto, la rappresentazione di queste caratteristiche di input influisce direttamente sulla natura e sulla qualità dei modelli appresi.

Ad esempio, supponiamo che tu voglia creare uno strumento di stima dei prezzi per gli affitti di case che sia basato sui dati delle schede di case. Devi rappresentare ogni casa con un vettore di caratteristiche reali (numeriche), dove ogni elemento di questo vettore rappresenta il valore di una caratteristica della casa. Le caratteristiche utili in questo caso potrebbero includere, ad esempio, dimensioni della proprietà, età, numero di camere, posizione e orientamento (la direzione in cui si trova la casa). Le case con caratteristiche simili dovrebbero generare prezzi simili.

I valori assegnati alle funzionalità nell'esempio di prezzi autopromozionali sono già numerici o possono essere convertiti in funzionalità numeriche tramite la codifica one-hot. Tuttavia, la rappresentazione delle funzionalità in altri casi è più complicata. Considera i seguenti casi:

  • Identificare l'argomento di un articolo, in base al titolo o ai contenuti.
  • Trovare riviste simili in base alla copertina di una rivista specifica.
  • Comprendere il sentiment di un cliente in merito a un prodotto, in base a una recensione di testo.
  • Generazione di un elenco di nuovi brani per gli utenti in base a quelli ascoltati nell'ultima settimana.
  • Suggerire opere d'arte o articoli di moda simili, dato che l'utente sta visualizzando l'utente in questo momento.
  • Recupero della risposta più pertinente da un elenco di domande frequenti (FAQ) in base a una query in linguaggio naturale.

Come puoi vedere da questi esempi, i dati di input non sono strutturati o includono funzionalità che includono contenuti non strutturati. Questi tipi di funzionalità includono testo come titoli e contenuti di articoli o recensioni di prodotti dei clienti, immagini come copertine di riviste, articoli di moda o opere d'arte e audio, come i brani. Per utilizzare questi tipi di dati per le attività di ML, sono necessarie rappresentazioni vettoriali compatte e con caratteristiche reali di questi tipi di dati. Questi vettori sono chiamati incorporamenti.

Che cos'è un'incorporamento?

Un'incorporamento è una traduzione di un vettore ad alta dimensione in uno spazio di dimensioni ridotte. Idealmente, un'incorporamento acquisisce una parte della semantica dell'input posizionando gli input semanticamente simili vicini nello spazio di incorporamento.

Incorporamenti nel testo

Considera l'esempio di una rappresentazione di testo. Puoi rappresentare le parole in una frase in inglese, ad esempio il titolo di un articolo, in uno dei seguenti modi:

  • In quanto Vettore estremamente grande (alta dimensione) scarsa, in cui ogni cella rappresenta una parola inglese separata, con forse un milione di elementi per rappresentare un milione di parole discrete. Il valore in una cella rappresenta il numero di volte in cui la parola viene visualizzata nella frase. Poiché è improbabile che una singola frase inglese utilizzi più di 50 parole, quasi tutte le celle nel Vettore contengono uno 0.

  • Vettore relativamente piccolo ma denso (forse solo diversi centinaia di elementi). Ciascun elemento rappresenta una caratteristica diversa della parola, ogni elemento contiene un valore compreso tra 0 e 1 che indica l'estensione a cui la parola rappresenta tale caratteristica. In effetti, la parola viene codificata semanticamente utilizzando il numero di attributi possibile nel vettore. Questo vettore è un'incorporamento che tenta di acquisire la semantica del titolo dell'articolo.

L'incorporamento di un determinato titolo è simile all'incorporamento di un titolo simile, anche se il testo è diverso. Ad esempio, "La squadra è pronta per vincere la partita di calcio"; Tuttavia, in questa rappresentazione di incorporamento, questi elementi devono essere vicini uno all'altro nello spazio di incorporamento, perché la loro codifica semantica è molto simile.

Diversi modelli, inclusi modelli di linguaggio neurale (NNLM), vettori globali per la rappresentazione di parole (GloVe), rappresentazioni dettagliate delle parole contestualizzate (ELMo), e Word2vec, sono progettati per apprendere incorporamenti di parole, che sono vettori di caratteristiche di valore reale, per ogni parola.

Ad esempio, addestrando un modello Word2vec utilizzando un ampio corpus di testo, come il corpus di Wikipedia inglese, si incorporano incorporamenti che acquisiscono distanza e direzione significative tra le parole con relazioni semantiche, come maschio-femminile, tempi verbi e persino relazioni country-capitali. La Figura 1 illustra lo spazio di incorporamento di alcuni vettori di esempio. (Per ulteriori dettagli, consulta l'articolo Normalità linguistica nelle rappresentazioni spaziali continue)

Relazioni semantiche tra le parole
Figura 1. Relazioni semantiche tra le parole

Il codice universale delle frasi codifica il testo che supera la lunghezza di una parola in un singolo tratto di valore reale, come frasi, frasi o paragrafi brevi. Le frasi con somiglianza semantica sono codificate come vettori di distanza simile nello spazio di incorporamento.

Incorporamenti di immagini

A differenza dei sistemi di testo, i sistemi di elaborazione delle immagini funzionano con set di dati avanzati e di dimensioni elevate che rappresentano un'immagine con singole intensità di pixel non elaborate. Tuttavia, un'immagine nella sua forma densa potrebbe non essere molto utile per alcune attività. Ad esempio, puoi svolgere il compito di trovare riviste simili, data l'immagine di copertina della rivista, o trovare fotografie simili a una foto di riferimento. Il confronto dei pixel non elaborati dell'immagine di input (2048 x 2048) con un'altra immagine per scoprire se sono simili non è né efficiente né efficace. Tuttavia, l'estrazione di vettori di funzionalità di dimensioni inferiori (incorporamenti) per l'immagine fornisce alcune indicazioni su ciò che l'immagine include e può portare a un migliore confronto.

L'idea è quella di addestrare un modello di classificazione delle immagini, come Inception, Deep Resid Learning Learning (ResNet) o Network Architecture Search (NASNet), su un vasto set di dati di immagine (ad esempio ImageNet). Quindi utilizzi il modello senza l'ultima parte del classificatore softmax per estrarre un vettore di caratteristiche dopo un test di input. Questo tipo di vettore di caratteristiche può rappresentare efficacemente l'immagine in una ricerca o in attività con corrispondenza simile. I vettori di funzionalità possono funzionare come una caratteristica di input aggiuntiva (vettore) insieme ad altre funzionalità per un'attività di machine learning. Ad esempio, in un sistema che consiglia articoli di moda a persone che acquistano capi di abbigliamento, potresti avere attributi che descrivono singoli articoli, inclusi colore, taglia, prezzo, tipo e sottotipo. Tutte queste caratteristiche possono essere utilizzate nel modello del motore per suggerimenti, insieme alle caratteristiche estratte dalle immagini degli articoli di moda.

L'esperimento t-SNE Map, illustrato nella figura 2, è uno degli esempi che utilizzano incorporamenti per trovare opere d'arte simili. Queste immagini sono tratte da contenuti di alcune collezioni Google Arts &Culture.

Immagini mappate per somiglianza utilizzando t-SNE, in base al machine learning di Google
Figura 2. Immagini mappate per somiglianza utilizzando t-SNE, sulla base del machine learning di Google

Analogamente, per i dati audio, i vettori di caratteristiche più piccole possono essere estratti da coefficienti di densità spettrale della potenza ad alta dimensione. I vettori di funzionalità possono essere utilizzati in modo efficace in varie attività di ricerca, in app di consigli e in altre applicazioni basate su ML.

Filtri e incorporamenti in collaborazione

L'incorporamento ha trovato la sua motivazione nell'attività di filtraggio collaborativo. CF è una tecnica utilizzata dai sistemi di suggerimenti, il cui compito è fare previsioni sugli interessi di un utente in base agli interessi di molti altri utenti. Ad esempio, immagina il compito di consigliare film. Supponi di avere 1.000.000 di utenti, un catalogo di 500.000 film e record dei film che ogni utente ha guardato. Ai fini di questo esempio, non hai (o non utilizzi) altre informazioni sui film o sugli utenti, ma soltanto l'ID dell'utente, il film e il flag watched. Insieme, queste informazioni creano un set di dati molto limitato.

Vuoi determinare quali film sono simili tra loro in base alla cronologia delle visualizzazioni degli utenti. A tal fine, puoi incorporare i film in uno spazio di dimensioni ridotte in cui i film guardati da un determinato utente si trovano nelle vicinanze della sezione "Preferenza film" (incorporamento). Puoi anche creare incorporamenti per gli utenti nello stesso spazio sulla base dei film che hanno guardato. Nello spazio che ne risulta, gli incorporamenti degli utenti sono vicini agli incorporamenti dei film che hanno guardato. Questo metodo ti consente di consigliare altri film in base a tali film, come la vicinanza all'incorporamento di un utente, in quanto utenti e film nelle vicinanze condividono le preferenze.

Gli incorporamenti come quelli per utenti e film possono essere appresi usando tecniche come la fattorizzazione della matrice, la scomposizione del valore singolo, i filtri neurali di collaborazione e le macchine di fattorizzazione neurale. La Figura 3 mostra un esempio di film incorporato in uno spazio bidimensionale. La prima dimensione indica se il film è per bambini (valori negativi) o adulti (valori positivi), mentre la seconda dimensione rappresenta il grado in cui ogni film è un grande successo (valori positivi) o un film d'essai (valori negativi). Per questa discussione l'assegnazione di valori negativi e positivi è arbitraria e viene utilizzata solo per determinare le coordinate. In questo esempio, film come "Shrek" e "Incredibles" sono vicini tra loro nello spazio di incorporamento, perché sono considerati film per bambini e perché sono entrambi film di successo.

L'algoritmo di machine learning apprende questi valori delle dimensioni per ogni film senza sapere che sono fattori pertinenti per gli adulti rispetto ai bambini, o controcuori rispetto a casa d'arte. Per saperne di più su come viene creato un sistema come questo, consulta Creazione di un sistema di suggerimenti con TensorFlow.

Esempio di incorporamento di film in uno spazio bidimensionale
Figura 3. Un esempio di film incorporato in uno spazio bidimensionale

Altri tipi di incorporamenti

L'apprendimento basato su incorporamenti può essere utilizzato anche per rappresentare strutture di dati complesse, come un nodo in un grafico, o un'intera struttura di grafici, in relazione alla connettività dei grafici. Ciò è utile in domini che richiedono un collegamento intensivo, come la progettazione di farmaci, il consiglio di amicizia nei social network e il rilevamento di interazioni proteine-proteine. Le tecniche per questi tipi di attività includono reti neurali convoluzionali del grafico e completamento della matrice del grafico.

Un'altra applicazione di incorporamento è l'apprendimento multimodale, il cui obiettivo è tradurre le informazioni da una modalità all'altra. Ad esempio, nei sottotitoli automatici delle immagini (illustrati nella Figura 4), è possibile generare automaticamente i sottotitoli per un'immagine. Come mostrato nell'immagine, la traduzione potrebbe non essere perfetta; ad esempio, uno dei sottotitoli viene generato come "insalata di frutta", anziché qualcosa come "chiosco di frutta". Inoltre, gli utenti possono cercare immagini che corrispondono alla descrizione naturale. Oppure possono generare musica per determinati filmati. Per abilitare questo tipo di corrispondenza, puoi codificare queste entità multimodali nello stesso spazio di incorporamento.

Un flusso di processo che mostra i sottotitoli automatici delle immagini.
Figura 4. Sottotitoli automatici: generazione di una didascalia dagli incorporamenti di un modello di visione

L'idea di un apprendimento basato sull'incorporamento per rappresentare le entità di dominio da un determinato contesto (ad esempio, utilizzando Word2vec da parole) può essere applicata in altri domini, in modo che le entità con contesto simile abbiano incorporamenti simili. Possono includere la creazione di incorporamenti da documenti (Doc2vec), da dati dei clienti (Customer2vec), da file video (Movie2vec), da grafici (Graph2vec), da mappature genetiche (Gene2vec), da strutture proteiche (Protein2vec) e altri.

Per riassumere, gli incorporamenti possono essere estratti per rappresentare:

  • Dati non strutturati, come testo (parole, frasi e documenti completi), immagini, audio e così via.
  • Entità che non hanno funzionalità di input, ma solo contesto di interazione, ad esempio uno User-ID e l'elenco di film guardati dall'utente.
  • Dati strutturati complessi, ad esempio grafici e reti. ad esempio social network e composti biochimici.
  • Traslazione multimodale, ad esempio per aggiungere sottotitoli alle immagini e cercare immagini utilizzando una descrizione testuale.
  • Funzionalità sparse (convertindole in elementi densi), ad esempio posizione e occupazione.
  • Entità con elevata dimensione (convertindole in una rappresentazione più compatta), ad esempio record di clienti con 300 o più attributi demografici, sociali, finanziari e comportamentali.

Casi di utilizzo per l'incorporamento

La rappresentazione di entità come articoli di moda, film, proprietà natalizie e articoli di notizie come vettori di funzionalità compatti e reali (incorporazioni) che codificano le caratteristiche principali consente un insieme di scenari di utilizzo interessanti. Questa sezione illustra alcuni casi d'uso per questi incorporamenti di entità.

Analisi della similitudine

Dopo che le tue entità sono state codificate in vettori di caratteristiche di valore reale e a piccole dimensioni, puoi eseguire analisi e visualizzazioni esplorative per scoprire informazioni e pattern interessanti. I contenuti salvati possono includere:

  • È in corso la ricerca degli elementi più vicini a uno specifico. Ad esempio, come accennato in precedenza, se hai un repository di articoli o articoli di ricerca, puoi trovare documenti più simili a un determinato articolo. Questa tecnica ti consente anche di etichettare l'articolo con gli argomenti dei suoi articoli vicini.
  • Identificazione di gruppi di elementi simili nello spazio di incorporamento, ad esempio prodotti di prova, film o schede di proprietà. Successivamente, puoi esaminare le caratteristiche comuni dei clienti di ciascun gruppo per modificare una campagna di marketing.
  • Trovare la densità degli elementi in un determinato quartiere. In questo modo puoi identificare argomenti di tendenza o di tendenza, tipi di capi di moda, generi musicali e così via.
  • Identificazione di elementi perimetrali o incrociati nonché di elementi eccezionali o anomali. Questo può essere utile per il rilevamento di attività fraudolente.

Ricerca e recupero

La ricerca di elementi simili o pertinenti è uno degli scenari più importanti e ampiamente utilizzati per gli incorporamenti. Questa applicazione può essere implementata in due diversi gusti: reattivo e proattivo.

Durante il recupero reattivo, l'utente fornisce un elemento da cercare e recuperi gli elementi simili dai tuoi datastore. Ad esempio, potresti trovare immagini di animali domestici simili all'immagine di un animale domestico oppure potresti cercare ricerche simili a un articolo fornito dall'utente. In questo caso, il sistema estrae l'incorporamento dell'elemento dell'utente online. Quindi, il sistema recupera gli elementi dal tuo datastore i cui incorporamenti sono più simili all'incorporamento dell'input, in base a una metrica di prossimità.

Nel recupero proattivo, il tuo sistema identifica automaticamente il contesto e lo converte in una query di ricerca per recuperare gli elementi più simili. Ad esempio, potresti avere una raccolta di video documentaristici e la tua applicazione consente agli utenti di cercare e caricare video. Quando l'utente esegue l'accesso, il contesto qui è solo l'ID dell'utente (magari con altri attributi facoltativi, ad esempio data/ora e posizione). Queste informazioni vengono utilizzate come query di ricerca per recuperare i video più pertinenti per quell'utente, in base alla somiglianza tra l'incorporamento dell'utente e gli incorporamenti video.

In entrambi i tipi di recupero, il sistema deve essere in grado di convertire la query implicita o esplicita in un incorporamento, confrontarla con l'incorporamento degli elementi archiviati e recuperare quelli più simili.

Altri esempi di utilizzo degli incorporamenti per la ricerca e il recupero includono:

  • Recupero degli articoli di notizie più pertinenti relativi a una determinata query di ricerca.
  • Recupero delle immagini più simili a un'immagine fornita dall'utente.
  • Trovare una traccia musicale più simile a quella fornita dall'utente.
  • Trovare un elenco di giochi o app pertinenti, dato che l'utente ha installato di recente.
  • Recupero della risposta più pertinente da un elenco di domande frequenti in base a una query in linguaggio naturale.
  • Trovare nuovi film o brani interessanti per un determinato utente.

Trasferimento automatico

Molti casi d'uso implicano la codifica di dati sparsi, complessi, ad alto dimensione o non strutturati in incorporamenti per addestrare modelli ML.

L'utilizzo di incorporamenti preaddestrati per codificare testo, immagini o altri tipi di dati di input in vettori di caratteristiche è denominato trasferimento dell'apprendimento. Sostanzialmente, l'apprendimento di trasferimento trasferisce le informazioni da un'attività ML a un'altra. Un caso d'uso tipico è utilizzare un modello addestrato su grandi quantità di dati per un'attività con meno dati. Ad esempio, puoi utilizzare incorporamenti di testo preaddestrati addestrati su un ampio corpus di testo con centinaia di milioni di parole e frasi per addestrare un modello di classificazione del sentiment in cui hai soltanto 10.000 recensioni dei clienti.

Il transfer learning non solo riutilizza le conoscenze (incorporamenti) estratte da grandi quantità di dati, ma fa risparmiare migliaia di ore di calcolo di CPU e GPU, altrimenti necessarie per addestrare questi incorporamenti.

Puoi utilizzare gli incorporamenti delle funzionalità insieme ad altre funzionalità per addestrare i tuoi modelli di ML. Un esempio d'uso annotato in precedenza è una stima del prezzo di affitto di una proprietà per le vacanze, a condizione che:

  • Le caratteristiche di base della proprietà, come dimensioni, numero di camere, orientamento (ad esempio di fronte alla spiaggia), posizione, prezzi medi nella zona, date di noleggio, stagione e così via.
  • Funzionalità incorporate, come descrizioni naturalistiche della proprietà e immagini della proprietà.

Gli incorporamenti possono essere incorporati nel modello in due modi. Il primo modo consiste nell'estrarre gli incorporamenti e utilizzarli come vettori di funzionalità di input. Concatena le funzionalità di input di base per gli incorporamenti preaddestrati (che hai estratto in precedenza in un passaggio di pre-elaborazione offline) per formare un Vettore di funzionalità di input. Il punto principale è che questi incorporamenti non sono addestrabili, non sono sintonizzati come parte dell'addestramento di questo modello e vengono considerati come input. Questo approccio è illustrato nella Figura 5.

Utilizzo di incorporamenti preaddestrati come input
Figura 5. Utilizzare incorporamenti preaddestrati come input

In alternativa, puoi includere gli incorporamenti come livello di addestramento nel modello. In questo approccio, includi livelli di addestramento preaddestrati per le relative modalità nell'architettura del modello. Questo ti consente di perfezionare i pesi di incorporamento durante il processo di addestramento per l'attività del modello. Come mostrato nella Figura 6, le caratteristiche di testo e immagine vengono inserite nel modello nella loro forma non elaborata, senza essere incorporate. Prima che vengano unite alle funzionalità di input di base per creare un vettore di funzionalità di input in base all'architettura interna del modello, gli incorporamenti preaddestrati vengono collegati come livelli addestrabili.

Utilizzo di incorporamenti preaddestrati come livelli addestrabili
Figura 6. Utilizzo di incorporamenti preaddestrati come livelli addestrabili

Il secondo approccio consente di perfezionare gli incorporamenti rispetto all'attività del modello per produrre modelli più efficaci. Tuttavia, la dimensione del modello è in genere molto più grande rispetto al primo approccio, perché contiene le ponderazioni di incorporamento.

Incorporamento dei moduli in TensorFlow Hub

TensorFlow Hub (tf.Hub) è una libreria di moduli riutilizzabili. Questi moduli possono essere modelli preaddestrati o incorporamenti estratti da testo, immagini e così via.

Più precisamente, un modulo è un elemento autonomo di un grafico TensorFlow, insieme alle ponderazioni e agli asset, che può essere riutilizzato in diverse attività. Riutilizzando un modulo, puoi addestrare un modello utilizzando un set di dati più piccolo, migliorare la generalizzazione o semplicemente accelerare l'addestramento. Ogni modulo ha un'interfaccia che ne consente l'utilizzo in modo sostituibile, con conoscenza minima o nulla dei componenti interni. I moduli possono essere applicati come una normale funzione Python per creare parte del grafico TensorFlow o essere utilizzati come colonna di funzionalità nel tuo stimatore TensorFlow.

Il seguente snippet di codice mostra come utilizzare il modulo Universal Sentence Encoder (versione 2) come funzione per ottenere l'incorporamento di un determinato testo di input. Puoi utilizzare questo codice se stai preelaborando il testo agli incorporamenti per l'analisi della similitudine o la ricerca e il recupero o prima di addestrare un modello di ML (come mostrato in precedenza nella Figura 5).

embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
review_embeddings = embed(["The movie was super interesting!])

Il seguente snippet di codice mostra come utilizzare il modulo Universal Sentence Encoder (versione 2) come text_embedding_column per codificare una funzionalità di input (review) e utilizzarla nello strumento di stima DNNClassifier. Puoi utilizzare questo codice per avere l'incorporamento come livello addestrabile nel modello ML (come mostrato nella Figura 6).

review_column = hub.text_embedding_column("review",
                "https://tfhub.dev/google/universal-sentence-encoder/2", trainable=True)
estimator = tf.estimator.DNNClassifier(hidden_units, feature_columns=[review_column])

Come puoi vedere, l'URL del modulo specifica il publisher, il nome del modulo e la versione. Una volta scaricati su disco, i moduli sono indipendenti e possono essere utilizzati dagli sviluppatori che non hanno accesso al codice e ai dati utilizzati per creare e addestrare il modulo. Inoltre, se imposti il parametro addestrabile su True, durante la formazione del modello verrà ponderata anche la ponderazione degli incorporamenti.

La Figura 7 mostra un elenco di moduli vettoriali di incorporamento di immagini e funzionalità di immagini disponibili in tf.Hub. Questi moduli sono sviluppati, addestrati e pubblicati da Google.

Incorporazione di testo e moduli vettoriali in tf.Hub
Figura 7. Incorporamento del testo e immagini di moduli vettoriali in tf.Hub

Architetture di alto livello

Questa sezione illustra architetture per consentire l'estrazione efficiente degli incorporamenti, implementare la corrispondenza delle similitudini e utilizzare il machine learning su larga scala su Google Cloud.

Estrazione di incorporamenti da documenti o immagini

Se disponi di documenti di testo o di un set di dati di immagini e vuoi eseguire un'analisi di similitudine o creare un sistema di ricerca e recupero in tempo reale, devi convertire i tuoi elementi non strutturati (documenti o immagini) in vettori di caratteristiche di valore reale. Puoi farlo utilizzando moduli tf.Hub addestrati. Il modulo tf.Hub non viene utilizzato come parte addestrabile in un modello ML. Al contrario, viene utilizzato in un processo di estrazione, trasformazione e caricamento (ETL) per convertire i dati di input (testo o immagine) in un vettore di caratteristiche di output (incorporamento).

Se hai un ampio set di dati di input (un corpus di milioni di documenti o immagini), devi estrarre questi incorporamenti su larga scala. A tale scopo, puoi utilizzare Dataflow, un servizio serverless completamente gestito e affidabile per la pipeline di elaborazione dati su larga scala su Google Cloud. Puoi implementare la pipeline utilizzando Apache Beam, un modello di programmazione unificato open source che esegue job di elaborazione dati in modalità flusso e batch. Per un esempio dettagliato, consulta la sezione relativa all'analisi della somiglianza semantica del testo utilizzando TensorFlow Hub e Dataflow.

La Figura 8 mostra come viene utilizzato Apache Beam per implementare una pipeline ETL per estrarre gli incorporamenti.

Architettura di alto livello per l'estrazione di incorporamenti su larga scala
Figura 8. Architettura di alto livello per l'estrazione di incorporamenti su larga scala

La figura mostra il seguente flusso:

  1. Lettura di dati non elaborati da Cloud Storage.
  2. Elabora ciascun elemento richiamando un modulo tf.Hub, che restituisce il vettore di caratteristiche che rappresenta l'elemento. Ad esempio, se elabori articoli di notizie, puoi utilizzare il codificatore universale di frasi per convertire il titolo in un vettore di caratteristiche con valore reale.
  3. Scrivi i dati codificati in Cloud Storage.

I dati possono essere scritti come file .tfrecords se prevedi di utilizzare gli incorporamenti per addestrare un modello TensorFlow ML, come descritto in precedenza nel primo approccio in Machine Transfer Learning. Inoltre, puoi utilizzare gli incorporamenti estratti in BigQuery per l'analisi della similitudine esplorativa.

Abbinamento e recupero di incorporamenti simili

Se stai creando un'app di ricerca immagini che accetta un'immagine fornita dall'utente e recupera le immagini più simili nel tuo repository, devi eseguire alcune attività, che vengono eseguite in parti diverse dell'architettura complessiva:

  1. Accetta l'immagine fornita dall'utente utilizzando un'app frontend.
  2. Converti l'immagine di input in un vettore di funzionalità in un'app di backend, utilizzando un modulo immagine tf.Hub, ad esempio inception_v3/feature_vector.
  3. Abbina e recupera il vettore di caratteristiche estratte delle immagini di input con gli incorporamenti delle immagini archiviati nel tuo database. Questa operazione viene eseguita anche nell'app di backend.

La sfida è organizzare e archiviare i vettori delle funzionalità in modo da ridurre al minimo i tempi di corrispondenza e recupero. Non vuoi confrontare il vettore di funzionalità di query di input con ogni vettore del tuo repository per trovare quelli più simili. Per le applicazioni in cui il recupero e il ranking delle corrispondenze migliori devono essere veloci, i vettori delle caratteristiche devono essere organizzati utilizzando una sorta di meccanismo di indicizzazione per ridurre il numero di confronti. Le tecniche approssimative più vicine, come l'hashing sensibile alla località, gli alberi k-d, gli alti dei punti di osservazione e il cluster gerarchico, possono aiutare a migliorare le prestazioni della ricerca.

L'indice dei vettori di caratteristiche viene mantenuto in memoria, mentre i contenuti effettivi (i riferimenti) vengono conservati come archivio chiave/valore, in cui la chiave è un hash del vettore di caratteristiche e il valore è l'URL Cloud Storage di un documento o un'immagine. Ciò consente il recupero a bassa latenza. Il flusso di questo approccio è mostrato nella Figura 9.

Architettura di alto livello per l'archiviazione e la pubblicazione degli incorporamenti
Figura 9. Architettura di alto livello per archiviazione e gestione degli incorporamenti

Addestramento e pubblicazione di modelli di machine learning

Come spiegato nella sezione Scenari di utilizzo di incorporamenti, gli incorporamenti preaddestrati possono essere utili per addestrare i modelli di machine learning e migliorare la loro generalizzabilità, specialmente se si dispone di piccoli set di dati di addestramento o se si desidera accelerare l'addestramento su grandi set di dati. I moduli tf.Hub sono stati addestrati su grandi set di dati che hanno consumato migliaia di ore di GPU. Inoltre, puoi includere il modulo tf.Hub come parte del modello in modo che le sue ponderazioni possano essere addestrabili, se necessario.

Per gestire un modello che include moduli tf.Hub su larga scala, puoi utilizzare AI Platform. AI Platform è una piattaforma serverless che può addestrare, ottimizzare (utilizzando la funzionalità di ottimizzazione degli iperparametri) e gestire modelli TensorFlow su larga scala con la gestione minima richiesta da DevOps. AI Platform supporta il deployment di modelli addestrati come API REST per previsioni online e l'invio di job di previsione batch. Il processo è mostrato nella Figura 10.

Architettura di alto livello per l'addestramento e la gestione dei modelli TensorFlow
Figura 10. Architettura di alto livello per l'addestramento e la gestione dei modelli TensorFlow

Passaggi successivi