TensorFlow.js: Reimpostare un modello di rilevamento dei commenti spam per gestire i casi limite

1. Prima di iniziare

Questo codelab è stato progettato per basarsi sul risultato finale del codelab precedente in questa serie per il rilevamento di commenti spam utilizzando TensorFlow.js.

Nell'ultimo codelab hai creato una pagina web completamente funzionante per un video di blog fittizio. Hai potuto filtrare i commenti per lo spam prima che fossero inviati al server per l'archiviazione o ad altri client connessi, utilizzando un modello di rilevamento di spam preaddestrato basato su TensorFlow.js nel browser.

Di seguito è mostrato il risultato finale del codelab:

ee0f13398ea4e91e.gif

Sebbene questo abbia funzionato molto bene, ci sono casi limite da esplorare che non è stato possibile rilevare. Puoi reimpostare il modello per tenere conto delle situazioni che non è stato in grado di gestire.

Questo codelab è incentrato sull'utilizzo dell'elaborazione del linguaggio naturale (arte della comprensione del linguaggio umano con un computer) e mostra come modificare un'app web esistente che hai creato (ti consigliamo vivamente di eseguire i codelab in ordine) per affrontare il problema molto reale dello spam di commenti, che molti sviluppatori web incontreranno sicuramente mentre lavorano su una delle sempre più numerose app web esistenti esistenti.

In questo codelab, approfondirai la procedura riqualificando il tuo modello di machine learning per tenere conto dei cambiamenti nei contenuti dei messaggi di spam che possono evolversi nel tempo, sulla base delle tendenze attuali o di argomenti di discussione comuni, in modo da tenere aggiornato il modello e tenere conto di tali modifiche.

Prerequisiti

  • È stato completato il primo codelab di questa serie.
  • Conoscenza di base delle tecnologie web, tra cui HTML, CSS e JavaScript.

Cosa imparerai a realizzare

Riutilizzerai il sito web creato in precedenza per un blog video fittizio con una sezione di commenti in tempo reale ed eseguirai l'upgrade per caricare una versione personalizzata del modello di rilevamento dello spam con TensorFlow.js, in modo che abbia un rendimento migliore nei casi periferici su cui in precedenza non avrebbe avuto esito positivo. Naturalmente, in qualità di sviluppatore e ingegneri web, potresti modificare questa ipotetica UX per riutilizzarla su qualsiasi sito web su cui stai lavorando ogni giorno e adattare la soluzione a qualsiasi caso d'uso del cliente, ad esempio un blog, un forum o qualche tipo di CMS, ad esempio Drupal.

Iniziamo a comporre...

Cosa imparerai a fare:

Imparerai a:

  • Identifica i casi limite in cui si è verificato un errore nel modello preaddestrato
  • Reimpostare il modello di classificazione spam creato con Model Maker.
  • Esporta questo modello basato su Python nel formato TensorFlow.js per utilizzarlo nei browser.
  • Aggiorna il modello ospitato e il relativo dizionario con il nuovo modello addestrato e verifica i risultati

Per questo lab si presume una certa familiarità con HTML5, CSS e JavaScript. Eseguirai inoltre del codice Python tramite un blocco note "co lab" per addestrare di nuovo il modello creato con Model Maker, ma non è necessaria alcuna conoscenza di Python.

2. Configura per codice

Anche in questo caso, utilizzerai Glitch.com per ospitare e modificare l'applicazione web. Se non hai ancora completato il codelab prerequisito, puoi clonare il risultato finale qui come punto di partenza. Se hai domande sul funzionamento del codice, ti consigliamo vivamente di completare il codelab precedente che illustra come eseguire l'app web funzionante prima di continuare.

In Glitch, fai clic sul pulsante remixa questo elemento per crearlo e creare un nuovo set di file che puoi modificare.

3. Scopri i casi limite nella soluzione precedente

Se apri il sito web che hai appena clonato e provi a digitare alcuni commenti, noterai che la maggior parte delle volte funziona come previsto, bloccando i commenti che sembrano spam come previsto e accettando risposte legittime.

Tuttavia, se non hai la giusta intelligenza e provi a creare frasi che ti interrompono il modello, probabilmente riuscirai a un certo punto. Con un po' di prova e di errore, puoi creare manualmente esempi come quelli mostrati di seguito. Prova a incollarli nell'app web esistente, controlla la console e controlla le probabilità che si verificano di nuovo se il commento è spam:

Commenti legittimi pubblicati senza problemi (autentici negativi):

  1. "Wow, adoro quel video." Probabilità di spam: 47,91854%
  2. "Adoro le demo! Abbiamo altre informazioni, Probabilità spam: 47,15898%
  3. "Quale sito web posso trovare per saperne di più?" Probabilità spam: 15,32495%

Molto bene, le probabilità di cui sopra sono piuttosto basse e superano la SPAM_THRESHOLD predefinita del 75% di probabilità prima che venga intrapresa un'azione (definita nel codice script.js del codelab precedente).

Ora proviamo a scrivere alcuni commenti più audaci che vengono contrassegnati come spam anche se non sono...

Commenti legittimi contrassegnati come spam (false positivi):

  1. "Posso collegare il sito web della mascherina che indossa? Probabilità di spam: 98,46466%
  2. "Posso acquistare questo brano su Spotify? Qualcuno mi faccia sapere! Probabilità spam: 94,40953%
  3. "Qualcuno può contattarmi con i dettagli su come scaricare TensorFlow.js?" Probabilità spam: 83,20084%

Spiacenti. Sembra che questi commenti legittimi siano contrassegnati come spam quando dovrebbero essere consentiti. Come puoi risolvere il problema?

Una semplice opzione consiste nell'aumentare il SPAM_THRESHOLD in modo che sia superiore al 98,5%. In tal caso, questi commenti verranno classificati in modo scorretto. Tenendo conto di ciò, proseguiamo con gli altri possibili risultati riportati di seguito...

Commenti spam contrassegnati come spam (Positivi):

  1. "È fantastico, ma controlla i link di download sul mio sito web che sono migliori." Probabilità di spam: 99,77873%
  2. So che alcune persone che possono darti qualche medicina visualizzano il mio file pr0file per dettagli Probabilità spam: 98.46955%
  3. "Guarda il mio profilo per scaricare ancora più video fantastici, ancora meglio! http://example.com" Probabilità spam: 96.26383%

Va bene, quindi l'operazione sta funzionando come previsto nella nostra soglia originale del 75%, ma dato che nel passaggio precedente hai modificato SPAM_THRESHOLD e aver superato il 98,5%, ciò significa che sarebbero stati superati due esempi, quindi forse la soglia è troppo alta. Forse il 96% è meglio? In tal caso, invece, uno dei commenti nella sezione precedente (false positivi) verrebbe contrassegnato come spam quando era legittimo, poiché era valutato al 98,46466%.

In questo caso, è preferibile acquisire tutti questi veri commenti di spam e semplicemente addestrare gli errori sopra riportati. Se imposti la soglia sul 96%, tutti i veri positivi vengono comunque acquisiti e elimini 2 dei falsi positivi sopra. Non male per cambiare un solo numero.

Continuiamo...

Commenti di spam che sono stati autorizzati alla pubblicazione (false negativi):

  1. "Vedi il mio profilo per scaricare ancora più video fantastici, ancora meglio! Probabilità spam: 7,54926%
  2. "Ricevi uno sconto sui corsi di fitness che hai visto, vedi pr0file!" Probabilità spam: 17,49849%
  3. $" Wow, il titolo è stato appena visto! Troppo presto! Probabilità spam: 20,42894%

Per questi commenti non è possibile fare nulla cambiando semplicemente il valore di SPAM_THRESHOLD. Se riduci la soglia di spam dal 96% al 9%, i commenti autentici vengono contrassegnati come spam: uno di questi ha una valutazione del 58%, anche se è legittimo. L'unico modo per gestire commenti di questo tipo è addestrare nuovamente il modello mediante l'inclusione di tali casi limite inclusi nei dati di addestramento, in modo che impari a modificare la propria visualizzazione del mondo in base a ciò che è spam o meno.

L'unica opzione disponibile al momento è di reintegrare il modello, ma abbiamo visto anche come perfezionare la soglia per decidere come chiamare qualcosa di spam per migliorare il rendimento. Essendo umano, il 75% sembra piuttosto sicuro, ma per questo modello dovevi aumentare fino all'81,5% per essere più efficace con gli input di esempio.

Non esiste un valore magico che funzioni bene su modelli diversi e questa soglia deve essere impostata in base al modello dopo aver condotto esperimenti con dati reali per ottenere buoni risultati.

Potrebbero verificarsi situazioni in cui un falso positivo (o negativo) può avere gravi conseguenze (ad es. nel settore medico), quindi puoi modificare la soglia in modo che sia molto alta e richiedere ulteriori revisioni manuali per coloro che non soddisfano la soglia. Questa è la tua scelta come sviluppatore e richiede una sperimentazione.

4. Reimpostare il modello di rilevamento dei commenti spam

Nella sezione precedente hai identificato una serie di casi limite che non erano riusciti per il modello, in cui l'unica opzione era addestrare nuovamente il modello a tenere conto di queste situazioni. In un sistema di produzione, con il tempo potresti scoprire che questo accade quando le persone segnalano che un commento è spam manualmente ricevuto oppure i moderatori che esaminano i commenti segnalati si rendono conto che non si tratta di spam e potrebbero contrassegnare tali commenti per la nuova formazione. Supponendo che tu abbia raccolto una serie di nuovi dati per questi casi limite (per ottenere risultati migliori, se possibile, dovresti avere alcune varianti di queste nuove frasi), provvederemo a mostrarti come addestrare il modello tenendo presenti queste custodie.

Riepilogo del modello predefinito

Il modello predefinito utilizzato era un modello creato da una terza parte tramite Model Maker che utilizza un modello di incorporamento di parole medio per funzionare.

Poiché il modello è stato creato con Model Maker, devi eseguire un breve passaggio a Python per addestrare nuovamente il modello, quindi esportare il modello creato nel formato TensorFlow.js in modo da poterlo utilizzare nel browser. Per fortuna, l'uso dei suoi modelli è molto semplice, quindi sarebbe molto semplice seguirlo e ti guideremo nella procedura, quindi non preoccuparti se non hai mai usato Python prima d'ora:

Colab

Poiché non ti preoccupa troppo in questo codelab perché vuoi configurare un server Linux con tutte le diverse utilità Python installate, puoi semplicemente eseguire il codice tramite il browser web utilizzando un "Colab Notebook". Questi blocchi note possono connettersi a un "backend" - che è semplicemente un server con alcune risorse preinstallate, da cui puoi eseguire codice arbitrario all'interno del browser web e visualizzare i risultati. Questo è molto utile per la prototipazione rapida o per l'utilizzo in tutorial come questo.

Vai all'indirizzo colab.research.google.com e ti verrà mostrata una schermata di benvenuto come mostrato di seguito:

b2df89c1f7b38cc9.png

Ora fai clic sul pulsante Nuovo blocco note in basso a destra nella finestra popup e dovresti vedere un blocco vuoto come questo:

94a875f67d6e34f6.png

Bene. Il passaggio successivo consiste nel connettere il frontend colab a un server di backend per poter eseguire il codice Python che scriverai. Per farlo, fai clic su Connetti in alto a destra e seleziona Connetti a runtime ospitato.

f4fcd56ae53527bd.png

Una volta connesso, le icone RAM e Disco dovrebbero essere visualizzate al suo posto, in questo modo:

d979e93ba595d1de.png

Ottimo lavoro! Ora puoi iniziare a programmare in Python per addestrare di nuovo il modello di Maker di modelli. A tale scopo, procedi nel seguente modo.

Passaggio 1

Copia il seguente codice nella prima cella attualmente vuota. Installerà automaticamente TensorFlow Lite Model Maker utilizzando il gestore di pacchetti Python "pip" (è simile a npm che la maggior parte dei lettori di questo code lab potrebbe avere più familiarità con l'ecosistema JS):

!pip install -q tflite-model-maker

Non verrà eseguito l'incollamento di codice nella cella. Passa il mouse sopra la cella grigia in cui hai incollato il codice riportato sopra e apparirà una piccola icona "riproduci" a sinistra della cella, come evidenziato di seguito:

be966130d68b5aac.png Fai clic sul pulsante di riproduzione per eseguire il codice appena digitato nella cella.

Ora verrà installato il modello:

376bc0fbde89a60d.png

Una volta completata l'esecuzione di questa cella, come mostrato, vai al passaggio successivo qui sotto.

passaggio 2

Ora aggiungi una nuova cella di codice come mostrato, in modo da poter incollare un altro codice dopo la prima cella ed eseguirla separatamente:

7ec405d0d82b2143.png

La cella successiva eseguita avrà una serie di importazioni che il codice nel resto del blocco note dovrà utilizzare. Copia e incolla il codice seguente nella nuova cella creata:

import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Piuttosto interessanti standard, anche se non hai familiarità con Python. Stai solo importando alcune utilità e le funzioni di Model Maker necessarie per la categoria di spam. Verifica anche se stai utilizzando TensorFlow 2.x, che è un requisito per utilizzare Model Maker.

Infine, proprio come prima, esegui la cella premendo il pulsante "riproduci quando passi il mouse sopra la cella e aggiungi una nuova cella di codice per il passaggio successivo.

Passaggio 3

A questo punto, scarichi i dati da un server remoto sul dispositivo e imposti la variabile training_data in modo che corrisponda al percorso del file locale scaricato:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/jm_blog_comments_extras.csv', extract=False)

Model Maker può addestrare modelli da semplici file CSV come quello scaricato. è sufficiente specificare le colonne che contengono il testo e le colonne. Scoprirai come farlo nel Passaggio 5. Se lo desideri, puoi scaricare direttamente il file CSV per vederlo.

Il riscontro in questo atteggiamento Noterà che il nome di questo file è jm_blog_comments_extras.csv: questo file è costituito solo dai dati di addestramento originali che abbiamo utilizzato per generare il primo modello di spam nei commenti combinato con i nuovi dati sulle richieste di assistenza che hai scoperto, il tutto in un unico file. Sono necessari anche i dati di addestramento originali utilizzati per addestrare il modello, oltre alle nuove frasi da cui vuoi imparare.

(Facoltativo) Se scarichi questo file CSV e controlli le ultime righe vedrai esempi di casi limite che non hanno funzionato correttamente in precedenza. Sono stati appena aggiunti alla fine dei dati di addestramento esistenti utilizzati dal modello predefinito per l'addestramento.

Esegui questa cella, quindi al termine dell'esecuzione, aggiungi una nuova cella e vai al passaggio 4.

Passaggio 4

Quando utilizzi Model Maker, non è possibile creare modelli da zero. In genere utilizzi modelli esistenti che potrai personalizzare in base alle tue esigenze.

Model Maker offre diversi incorporamenti di modelli precedentemente utilizzabili, ma il più semplice e veloce è average_word_vec, che è quello che hai utilizzato nel codelab precedente per creare il tuo sito web. Ecco il codice:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Eseguila e incollala nella nuova cella.

Comprendi

num_words

parametro

Questo è il numero di parole che vuoi che il modello utilizzi. Potresti pensare che meglio è, ma in genere c'è un punto debole in base alla frequenza utilizzata da ogni parola. Se utilizzi ogni parola dell'intero corpus, il modello potrebbe finire per imparare a bilanciare i pesi delle parole che vengono utilizzate una sola volta. Questa funzione non è molto utile. Troverai in qualsiasi corpus di testo che molte parole vengono utilizzate solo una o due volte e in genere non vale la pena utilizzarle nel modello perché hanno un impatto trascurabile sul sentiment complessivo. Puoi quindi adattare il tuo modello al numero di parole che preferisci utilizzando il parametro num_words. Un numero inferiore avrà un modello più piccolo e veloce, ma potrebbe essere meno preciso perché riconosce meno parole. Un numero maggiore qui avrà un modello più grande e potenzialmente più lento. Trovare il punto giusto è fondamentale e sei tu, in qualità di ingegnere del machine learning, a capire qual è il più adatto al tuo caso d'uso.

Comprendi

wordvec_dim

parametro

Il parametro wordvec_dim è il numero di dimensioni che vuoi utilizzare per il vettore di ogni parola. Queste dimensioni sono essenzialmente le diverse caratteristiche (create dall'algoritmo di machine learning durante l'addestramento) che qualsiasi parola specifica può essere misurata con il programma per cercare di associare al meglio le parole simili in modo significativo.

Ad esempio, se avessi una dimensione per la parola "medica", una parola era una parola come "pillole"; in questo modo il punteggio potrebbe aumentare e potrebbe essere associato ad altre parole con punteggio elevato come "xray", ma "quot;cat" il punteggio sarebbe basso in questa dimensione. In questo caso, può essere utile individuare una dimensione medica, utile per determinare la presenza di spam se abbinata ad altre dimensioni potenziali e decidere di utilizzarla in modo significativo.

Nel caso di parole con un punteggio elevato nella dimensione medica, potrebbe essere utile una seconda dimensione che sia correlata al corpo umano. Parole come "legno", "braccia" e "collo" possono ottenere un punteggio più alto qui ed essere anche abbastanza alte nella dimensione medica.

Il modello può utilizzare queste dimensioni per consentire al sistema di rilevare le parole più soggette a spam. Può darsi che le email di spam abbiano maggiori probabilità di contenere parole incluse in parti del corpo mediche e umane.

La regola generale determinata dalla ricerca è che la quarta radice del numero di parole funziona bene per questo parametro. Quindi, se sto utilizzando 2000 parole, un buon punto di partenza è 7 dimensioni. Se modifichi il numero di parole utilizzate, puoi modificare anche questo numero.

Comprendi

seq_len

parametro

In genere i modelli sono molto rigidi per quanto riguarda i valori di input. Ciò significa che tale modello può classificare le frasi di una determinata lunghezza statica. Questo è determinato dal parametro seq_len, dove sta per "length length'. Quando converti le parole in numeri (o token), una frase diventa una sequenza di questi token. Pertanto, il modello verrà addestrato (in questo caso) per classificare e riconoscere le frasi con 20 token. Se la frase è più lunga, verrà troncata. Se è più corto, verrà riempito, proprio come nel primo codelab di questa serie.

Passaggio 5: carica i dati di addestramento

In precedenza hai scaricato il file CSV. Ora è il momento di utilizzare un caricatore di dati per trasformarlo in dati di addestramento che il modello può riconoscere.

data = DataLoader.from_csv(
      filename=data_file,
      text_column='commenttext', 
      label_column='spam', 
      model_spec=spec,
      delimiter=',',
      shuffle=True,
      is_training=True)

train_data, test_data = data.split(0.9)

Se apri il file CSV in un editor, vedrai che ogni riga ha solo due valori e questi vengono descritti con il testo nella prima riga del file. Solitamente ogni voce viene considerata come una "colonna'. Noterai che il descrittore per la prima colonna è commenttext e che la prima voce di ogni riga è il testo del commento.

Allo stesso modo, il descrittore della seconda colonna è spam e vedrai che la seconda voce su ogni riga è TRUE o FALSE per indicare se il testo è considerato commenti spam. Le altre proprietà impostano le specifiche del modello create nel passaggio 4, insieme a un carattere delimitatore, che in questo caso è una virgola perché il file è separato da virgole. Hai anche impostato un parametro shuffle per riordinare casualmente i dati di addestramento in modo che gli elementi che potrebbero essere stati simili o raccolti insieme vengano distribuiti casualmente nel set di dati.

Userai quindi data.split() per suddividere i dati in dati di addestramento e test. 0,9 indica che il 90% del set di dati verrà utilizzato per l'addestramento, il resto per il test.

Passaggio 6: crea il modello

Aggiungi un'altra cella in cui aggiungeremo il codice per creare il modello:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

Viene creato un modello classificatore di testo con Model Maker e specifichi i dati di addestramento che vuoi utilizzare (definiti nel passaggio 4), le specifiche del modello (configurate anche nel passaggio 4) e diversi periodi, in questo caso 50.

Il principio di base del machine learning è che è una forma di corrispondenza del pattern. Inizialmente, caricherà le ponderazioni preaddestrate per le parole e proverà a raggrupparle con una "previsione", mentre quelle, se raggruppate, indicano lo spam e quali no. La prima volta, è probabile che sia vicino alle 50:50, poiché il modello inizia solo come mostrato di seguito:

d6c8116f8e7e781b.png

Misura quindi i risultati e modifica le ponderazioni del modello per modificarne la previsione, quindi riprova. Si tratta di un periodo. Quindi, specificando le periodo=50, il passaggio verrà eseguito 50 volte, come mostrato:

fc7bf6a948b7aa26.png

Pertanto, quando raggiungi il 50° periodo, il modello riporterà un livello di precisione molto più elevato. In questo caso, il 99,1%!

Passaggio 7 - Esporta il modello

Una volta completato l'addestramento, puoi esportare il modello. TensorFlow addestra un modello nel suo formato e questo deve essere convertito nel formato TensorFlow.js per essere utilizzato su una pagina web. Incolla quanto segue in una nuova cella ed eseguilo:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Dopo aver eseguito questo codice, se fai clic sulla piccola icona a forma di cartella a sinistra di Colab, puoi aprire la cartella in cui hai esportato i dati in alto (nella directory principale; potresti dover salire di livello) e trovare il pacchetto zip dei file esportati contenuti in ModelFiles.zip.

Scarica subito questo file ZIP sul computer perché utilizzerai questi file come nel primo codelab:

a9d8595a3e2564dc.png

Bene. La parte Python è terminata, ora puoi tornare alla terra di JavaScript che conosci e ami. Finalmente.

5. Il nuovo modello di machine learning

Ora è quasi tutto pronto per caricare il modello. Prima di poterlo fare, però, devi caricare i nuovi file del modello scaricati in precedenza nel codelab, in modo che siano ospitati e utilizzabili all'interno del codice.

Prima di tutto, se non l'hai già fatto, decomprimi i file del modello appena scaricato dal blocco note Colab Model Maker che hai appena eseguito. Dovresti vedere i seguenti file contenuti nelle sue varie cartelle:

5634d536ef8be9ca.png

Che cosa hai qui?

  • model.json: si tratta di uno dei file che costituiscono il modello TensorFlow.js addestrato. Farai riferimento a questo file specifico nel codice JS.
  • group1-shard1of1.bin: si tratta di un file binario contenente molti dati salvati per il modello TensorFlow.js esportato, che dovrà essere ospitato sul tuo server da qualche parte per il download nella stessa directory del file model.json indicato sopra.
  • vocab: questo file strano senza estensione è un elemento di Model Maker che mostra come codificare le parole nelle frasi in modo che il modello capisca come utilizzarle. Approfondirai questo argomento nella sezione successiva.
  • labels.txt: contiene semplicemente i nomi delle classi risultanti che verranno previsti dal modello. Per questo modello, se apri questo file nell'editor di testo, vengono aggiunti ""false" e "vero" come output della previsione.

Ospita i file del modello TensorFlow.js

Per prima cosa, inserisci i file model.json e *.bin generati su un server web per potervi accedere tramite la tua pagina web.

Eliminare i file del modello esistenti

Poiché stai creando il risultato finale del primo codelab in questa serie, devi prima eliminare i file del modello esistenti caricati. Se utilizzi Glitch.com, controlla semplicemente il riquadro dei file a sinistra per model.json e group1-shard1of1.bin, fai clic sul menu a discesa con tre puntini per ogni file e seleziona elimina come mostrato:

7412b0b795d3b84f.png

Caricare nuovi file su Glitch

Bene. Ora carica quelle nuove:

  1. Apri la cartella assets nel riquadro a sinistra del progetto Glitch ed elimina tutti gli asset precedenti che hanno gli stessi nomi.
  2. Fai clic su carica un asset e seleziona group1-shard1of1.bin da caricare in questa cartella. Ora dovrebbe essere simile a questa dopo il caricamento:

25a2251c7f165184.png

  1. Bene. Esegui le stesse azioni per il file model.json, così nella cartella degli asset dovrebbero essere presenti due file simili ai seguenti:

51a6dbd5d3097ffc.png

  1. Se fai clic sul file group1-shard1of1.bin che hai appena caricato, potrai copiare l'URL nella relativa posizione. Copia questo percorso come mostrato:

92ded8d46442c404.png

  1. Ora, nell'angolo in basso a sinistra dello schermo, fai clic su Strumenti > Terminale. Attendi il caricamento della finestra del terminale.
  2. Al termine del caricamento, digita quanto segue, quindi premi Invio per modificare la directory nella cartella www:

terminale:

cd www
  1. Successivamente, utilizza wget per scaricare i 2 file appena caricati sostituendo gli URL di seguito con gli URL che hai generato per i file nella cartella degli asset su Glitch (controlla la cartella degli asset per ogni URL personalizzato di ogni file).

Tieni presente lo spazio tra i due URL e che gli URL da utilizzare saranno diversi da quelli mostrati, ma saranno simili:

terminale

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Eccellente. Ora hai creato una copia dei file caricati nella cartella www.

Tuttavia, al momento verranno scaricati con nomi inusuali. Se digiti ls nel terminale e premi Invio, noterai quanto segue:

9cc90f1d053f517f.png

  1. Usando il comando mv, rinomina i file. Digita quanto segue nella console e premi Invio dopo ogni riga:

terminale:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Infine, aggiorna il progetto Glitch digitando refresh nel terminale e premi Invio:

terminale:

refresh

Dopo l'aggiornamento, dovresti vedere model.json e group1-shard1of1.bin nella cartella www dell'interfaccia utente:

50dd98c0a8f3e629.png

Bene. L'ultimo passaggio consiste nell'aggiornare il file dictionary.js.

  1. Converti manualmente il nuovo file Lessico scaricato nel formato JS corretto tramite l'editor di testo oppure utilizzando questo strumento e salva l'output risultante come dictionary.js nella cartella www. Se hai già un file dictionary.js, puoi semplicemente copiare e incollare i nuovi contenuti al suo interno e salvare il file.

Bene! Hai aggiornato tutti i file modificati e se ora provi a utilizzare il sito web, noterai che il modello riaddestrato dovrebbe essere in grado di tenere conto dei casi limite rilevati e appresi come mostrato:

3ece5dbd0a673987.gif

Come puoi vedere, i primi sei ora vengono classificati correttamente come non spam e il secondo gruppo di sei viene identificato come spam. Perfetto!

Prova a sperimentare anche alcune varianti per verificare se sono generali. Originariamente era presente una frase con esito negativo, ad esempio:

"Wow, il titolo GOOG è appena scattato! Troppo presto!

Ora vengono correttamente classificati come spam, ma cosa succede se lo modifichi con:

"Quindi le azioni XYZ sono appena aumentate! Acquistane subito uno prima che sia troppo tardi!"

In questo modo ottieni una previsione del 98% di probabilità di essere spam, anche se hai cambiato leggermente il simbolo del titolo e la formulazione.

Ovviamente, se provi a violare questo nuovo modello, sarai in grado di raccogliere ancora più dati di addestramento per avere la migliore possibilità di acquisire varianti più esclusive delle situazioni comuni che potresti riscontrare online. In un codelab futuro, ti mostreremo come migliorare continuamente il tuo modello con dati pubblicati man mano che vengono segnalati.

6. Complimenti!

Complimenti, hai completato l'addestramento di un modello di machine learning esistente che si aggiorna per funzionare con le richieste limite che hai trovato e hai eseguito il deployment di tali modifiche nel browser con TensorFlow.js per un'applicazione reale.

Riepilogo

In questo codelab:

  1. Casi limite scoperti che non funzionavano quando si utilizza il modello di spam per i commenti predefinito
  2. Hai riaddestrato il modello di Maker dei modelli per tenere conto dei casi limite rilevati
  3. Il nuovo modello addestrato è stato esportato nel formato TensorFlow.js
  4. Aggiornamento dell'app web per l'utilizzo dei nuovi file

Qual è il passaggio successivo?

Questo aggiornamento funziona alla grande, ma come per tutte le app web, i cambiamenti avverrà nel corso del tempo. Sarebbe molto meglio se l'app migliorasse costantemente nel tempo invece di doverla fare ogni volta. Riesci a pensare a come potresti aver automatizzato questi passaggi per reimpostare automaticamente un modello dopo aver, ad esempio, 100 nuovi commenti contrassegnati come classificati in modo errato? Indossa un normale cappello di ingegneria web e probabilmente riuscirai a capire come creare una pipeline che esegua questa operazione automaticamente. In caso contrario, non preoccuparti, cerca il prossimo codelab della serie che ti mostrerà come fare.

Condividi con noi le tue creazioni

Puoi anche estendere facilmente le tue entrate correnti per altri casi d'uso creativi e ti invitiamo a pensare fuori dagli schemi e a continuare a compromettere il tuo sito.

Ricordati di taggarci sui social media utilizzando l'hashtag #MadeWithTFJS per avere la possibilità di presentare il tuo progetto sul blog di TensorFlow o perfino eventi futuri. Ci piacerebbe vedere cosa ne fai.

Altri codelab di TensorFlow.js per approfondire

Siti web da visitare