Smashing Podcast Episodio 33 con Charlie Gerard: cos'è l'apprendimento automatico?

Pubblicato: 2022-03-10
Riassunto veloce ↬ In questo episodio parliamo di Machine Learning. A che tipo di attività possiamo assegnarlo all'interno di un contesto di sviluppo web? Drew McLellan parla con l'esperto Charlie Gerard per scoprirlo.

In questo episodio parliamo di Machine Learning. A che tipo di attività possiamo assegnarlo all'interno di un contesto di sviluppo web? Ho parlato con l'esperto Charlie Gerard per scoprirlo.

Mostra note

  • Apprendimento automatico pratico in JavaScript: TensorFlow.js per sviluppatori Web
  • Charlie su Twitter
  • Il sito personale di Charlie

Aggiornamento settimanale

  • Un'introduzione pratica all'iniezione di dipendenza
    scritto da Jamie Corkhill
  • Verso un Web senza pubblicità: diversificare l'economia online
    scritto da Frederick O'Brien
  • Il Web dovrebbe esporre le capacità hardware?
    scritto da Noam Rosenthal
  • Come guadagnare di più vendendo le app Shopify nel 2021
    scritto da Suzanne Scacca
  • Introduzione al pacchetto GetX nelle applicazioni Flutter
    scritto da Kelvin Omereshone

Trascrizione

Foto di Charlie Gerard Drew McLellan: È uno sviluppatore front-end senior presso Netlify, uno sviluppatore Google esperta in tecnologie web e uno speaker tecnologico di Mozilla. Nel tempo libero, esplora il campo dell'interazione uomo-computer e costruisce prototipi interattivi utilizzando hardware, apprendimento automatico e codifica creativa. Parla regolarmente a conferenze e scrive post sul blog per condividere le cose che impara. E, più recentemente, è l'autore del libro, Practical Machine Learning in JavaScript for Apress.

Drew: Quindi sappiamo che è un'esperta di front-end, ma una volta è scappata di prigione usando una lima di metallo che aveva creato all'uncinetto dai sogni. Miei strepitosi amici, vi prego di dare il benvenuto, Charlie Gerard. Ciao Charlie. Come stai?

Charlie Gerard: Sto distruggendo.

Drew: Volevo parlarti oggi dell'apprendimento automatico, che potrebbe sembrare un argomento un po' strano per un podcast che si concentra principalmente sul tipo di browser per lo sviluppo web. Tendo a pensare all'apprendimento automatico come a qualcosa che accade in giganteschi data center o laboratori con persone con il camice bianco. È decisamente una specie di parola d'ordine di questi tempi. Cosa diavolo intendiamo effettivamente quando diciamo apprendimento automatico?

Charlie: Quindi, in generale, la definizione standard sarebbe quella di dare la possibilità ai computer di generare previsioni senza che gli venga detto cosa fare. Si spera che questo abbia senso quando continuiamo a parlarne, ma questo è il tipo di definizione generica di conversazione. In realtà non dici ad algoritmi o modelli di andare a cercare determinate cose. Imparano attraverso i dati che gli fornisci e possono quindi generare previsioni.

Drew: Quindi, invece di dover programmare in modo specifico per determinate circostanze, crei un caso generico in cui il software può imparare a fare quelle cose da solo?

Charlie: Sì, esatto.

Drew: Sembra quasi un po' inquietante. È un po' al limite di quel tipo di intelligenza artificiale delle cose. Devi essere un nerd matematico o uno scienziato di dati per farlo? O ci sono cose là fuori come algoritmi consolidati e cose a cui puoi fare affidamento per iniziare?

Charlie: Sì. Quindi fortunatamente non è necessario essere un nerd matematico o uno scienziato di dati. Altrimenti, non parlerei sicuramente di questo. Ma ci sono algoritmi che sono già stati capiti e strumenti già disponibili che ti consentono di utilizzare questi algoritmi senza dover scrivere tutto da zero da solo. Quindi, se utilizziamo l'ecosistema front-end come confronto, puoi utilizzare le API web, come il navigatore, per ottenere i media degli utenti quando vuoi avere accesso alla webcam o al microfono.

Charlie: E non devi sapere come l'API sia stata effettivamente implementata sotto il cofano. Ciò che conta è che tu sappia a cosa serve questa API e come usarla, se lo desideri. Quindi in seguito puoi andare a guardare il codice sorgente del tuo browser preferito per sapere come funziona davvero, ma in primo luogo non è davvero utile. E può essere utile se vuoi scrivere il tuo algoritmo in un secondo momento. Ma ad essere davvero onesti, è altamente improbabile che tu voglia farlo.

Drew: Va bene. Quindi è un po' come il modo in cui puoi scrivere CSS per posizionare un elemento su una pagina. Non ti interessa come il browser lo stia effettivamente facendo. Basta scrivere un po' di CSS e il browser se ne occupa.

Charlie: Sì. Quando inizi, è principalmente qualcosa del genere.

Drew: Va bene. Questo è più il mio livello di scienza dei dati.

Charlie: Anche io.

Drew: Allora, quali sono i tipi di problemi a cui puoi porre l'apprendimento automatico? A che genere di cose va bene?

Charlie: Dipende da cosa vuoi fare in primo luogo, perché quando vuoi costruire una certa cosa, ti consiglio di pensare prima al tipo di problema che vuoi imparare che poi ti aiuterà a scegliere un algoritmo che tu può utilizzare per risolvere o per trovare una soluzione al tuo problema. Quindi, in generale, inizierei pensando al tipo di problema che sto cercando di risolvere, e ce ne sono tre principali. Penso che probabilmente ci sia un po' di più, ma in generale, per quello che sono stato addestrato a fare e per quello che ho letto, ci sono tre principali che vengono menzionati.

Charlie: Se vuoi che mi occupi di questo, c'è l'apprendimento supervisionato, l'apprendimento non supervisionato e l'apprendimento per rinforzo. Ne hai anche supervisionati tanti, ma ad essere onesto, non ne so molto perché sono stato in grado di costruire i miei progetti con i primi tre.

Drew: Supervisionato, non supervisionato e rinforzo, hai detto?

Charlie: Sì, apprendimento per rinforzo.

Drew: Va bene. Allora, cos'è l'apprendimento supervisionato? Puoi farci un esempio di cosa significa?

Charlie: L'apprendimento supervisionato avviene quando il tuo set di dati è composto da funzionalità ed etichette e lo fornisci a un algoritmo. Quindi, se prendiamo un esempio con cui si spera che la maggior parte delle persone sarà in grado di relazionarsi, è se hai una casa e vuoi venderla e vuoi capire a quale prezzo venderai la tua casa o la tua macchina, in effetti, tra l'altro, sarebbe la stessa cosa. E useresti un data set di case nello stesso ambiente o nello stesso tipo di case e conoscendo il loro prezzo sul mercato, saresti in grado di utilizzare le caratteristiche della tua stessa casa; Allora, quante stanze e ha un giardino e in quale quartiere si trova? E cose così.

Charlie: Queste sono le caratteristiche e l'etichetta sarebbe il prezzo, e usando tutti questi set di dati di case già intorno a te, puoi usare un algoritmo di apprendimento automatico che in qualche modo imparerà la correlazione tra le caratteristiche della tua casa e i prezzi sul mercato, per poi ottenere le caratteristiche della tua casa e poterne ricavare un prezzo. Quindi la cosa più importante è nell'apprendimento supervisionato, hai anche un sacco di funzionalità e un'etichetta, quindi puoi effettivamente tracciare una correlazione tra i due.

Drew: Dovresti alimentare il modello con una vasta serie di dati sulle case in questo esempio, dove conosci il loro prezzo e quindi conosci tutte queste caratteristiche su di esse. Dì camere da letto e cosa hai, come la metratura, e immagino che la posizione sarebbe un altro genere di cose che potrebbero essere prese in considerazione?

Charlie: Sì. Quindi questo è uno dei problemi con l'apprendimento automatico è che puoi avere molte funzionalità e alcune non saranno effettivamente efficienti come altre. Quindi potresti avere, ad esempio, il colore della tua casa, potrebbe in realtà non avere alcuna correlazione con il prezzo, ma puoi fornire un sacco di funzionalità e il modello stesso troverà una correlazione tra i due. Puoi quindi modificare il tuo set di dati, se lo desideri, e rimuovere il colore, oppure ti rendi conto che le dimensioni del giardino non contano o cose del genere.

Charlie: Quindi, in generale, anche se inserisci il tuo set di dati in un modello, la prima volta non avrai una previsione perfetta. Di solito modifichi alcune cose diverse e vedi. In un certo senso lo modifichi finché non arriva a una previsione che ritieni abbastanza accurata.

Drew: E poi una volta che il modello è stato creato, o dici di averlo creato usando i dati di una città, potresti prenderlo e dargli da mangiare... dovresti fornirgli i dati di un'altra città? Saresti in grado di raccoglierlo e usarlo altrove una volta terminato l'addestramento o è quindi specifico per quel set di dati o come funzionerebbe?

Charlie: Penso che sarebbe specifico per il set di dati. Quindi significa che puoi creare un altro set di dati con lo stesso formato, diciamo. Se hai un foglio di calcolo Excel con colonne diverse, potresti mantenere la stessa etichetta e le stesse caratteristiche, ma dovresti sostituirlo con i valori di quella città. Ma in generale, significa che anche la raccolta del set di dati può richiedere molto tempo, ma se sai già cosa hai fatto per la città di Parigi, ad esempio, e che la struttura del tuo set di dati è la stessa, ma sostituisci i valori, è un po' più veloce e puoi rigenerare il modello.

Charlie: Non dovresti riutilizzare lo stesso modello, se i tuoi dati sono diversi perché i prezzi delle case a Parigi sono diversi da quelli di una piccola città in Australia, per esempio. Quindi non vorresti avere dati sbagliati perché il nucleo del tuo set di dati all'inizio non era esattamente lo stesso.

Drew: Parliamo molto di una sorta di modelli con l'apprendimento automatico. Quindi il modello è un po' come il risultato finale di tutte le analisi del set di dati. E viene quindi utilizzato per fare previsioni successive. Questo è il modello, sì?

Charlie: Sì, è esattamente quello. È un modello, quindi è un po' come una funzione a cui alimenterai nuovi input che non hai mai visto prima, ma in base a ciò che hai appreso durante la fase di allenamento. sarebbe in grado di produrre una previsione.

Drew: Quindi l'apprendimento supervisionato, quindi crea questo modello predittivo dalle etichette alle funzionalità. Che cos'è l'apprendimento non supervisionato?

Charlie: Quindi non supervisionato è un po' lo stesso concetto, ma rimuovi le etichette. Quindi in questo caso, puoi pensare che il nostro problema di vendere una casa, non sarebbe davvero un problema di apprendimento senza supervisione, perché se conosci solo le caratteristiche delle case intorno a te, ma non hai un prezzo come etichetta, non posso davvero prevedere un prezzo. Non saprà nemmeno qual è il prezzo.

Charlie: Quindi non supervisionato è più quando hai un insieme di dati e hai solo funzionalità su di esso. Puoi generare più tendenze o gruppi di cose insieme. Non useresti l'apprendimento non supervisionato se desideri un output particolare, se hai una certa domanda, come "Qual è il prezzo di questo?" Non è davvero un buon uso del non supervisionato, ma è di più, se vuoi raggruppare entità insieme, potrebbero essere persone o cose del genere.

Charlie: Quindi, di solito, un caso d'uso per questo sono consigli come i consigli di Amazon o i consigli di Spotify, come "Anche le persone come te ascoltano questo", ed è più incentrato sul fatto che le funzionalità in questo caso sarebbero... beh, hanno dati su di te, quindi sanno cosa ascolti, in quale paese di solito ti trovi o quante volte al giorno ascolti qualcosa? Quindi, utilizzando queste funzionalità sulle persone, possono quindi metterti nello stesso cluster o nello stesso tipo di ascoltatori o nello stesso tipo di persone che acquistano determinate cose su Amazon. E usando quel tipo di apprendimento non supervisionato, possono sapere cosa pubblicizzarti o cosa consigliarti di ascoltare in base a persone come te. Quindi è più quel tipo di problemi.

Drew: Ok, quindi tutto questo ha molto più senso per me ora come sviluppatore web, perché questo tipo di usi di cui abbiamo parlato, prezzi delle case e consigli e pubblicazione di annunci e cose, alla fine della giornata, questi sono tutti i tipi di cose con cui abbiamo a che fare e funzionalità che potremmo voler inserire in un sito o in un prodotto, o cosa hai. Quindi abbiamo i diversi tipi di apprendimento basati sull'argomento che stiamo cercando di prevedere. Ci sono altri tipi di applicazioni con cui possiamo inserire anche questo? Ci sono dei buoni esempi che le persone hanno creato e che potrebbero usare questo?

Charlie: Sì. Ci sono tanti esempi. Ecco perché, quando parlo di prevedere il prezzo di una casa, forse non è qualcosa che ti riguarda. Forse non è proprio così eccitante, ma in realtà c'è molto di più che puoi fare. Ci sono davvero buoni esempi in giro. Penso che il primo che ho visto riguardasse testi artistici generati dinamicamente per immagini. Quindi ovviamente è qualcosa che puoi fare da solo quando aggiungi un'immagine a un sito.

Charlie: Ma cosa accadrebbe se avessi un sito che ha davvero tonnellate di immagini e invece di farlo manualmente, potresti inviare ogni immagine a un algoritmo di apprendimento automatico, e questo genererebbe un testo artistico di quello di cui tratta quell'immagine, e forse l'unico passaggio umano sarebbe verificare che ciò sia corretto, ma ti consentirebbe davvero di concentrare il tuo tempo sulla creazione dell'applicazione.

Charlie: E renderesti comunque accessibile il tuo sito web disponendo di un testo artistico per le immagini, ma sarebbe in qualche modo generato da una macchina. Quindi questo è uno degli esempi che ho visto quando ho iniziato a farlo, ma hai anche un prototipo di filtro non sicuro per i contenuti di lavoro. E stavo pensando che in realtà sarebbe abbastanza buono in un'estensione di Chrome, potresti avere un'estensione di Chrome che ogni volta che apri una pagina web, avresti semplicemente controllato che ciò che c'è nella pagina sia un tipo di contenuto sicuro.

Charlie: Ad esempio, se hai bambini che usano il tuo laptop o cose del genere, puoi semplicemente nascondere le immagini o sostituire queste immagini con i panda, se vuoi o qualcosa del genere. Ma è quel tipo di applicazione in cui puoi usare l'apprendimento automatico per fare automaticamente le cose per te in modo da non doverti preoccupare di determinati compiti, oppure puoi semplicemente usare la potenza del tuo cervello per fare altre cose.

Charlie: Ma poi c'è ancora più avanzato con un esempio di riconoscimento dei gesti, usando la webcam che allora comunicava con Amazon Alexa e il riconoscimento vocale e tutto il resto. Quindi puoi davvero unire molte tecnologie diverse con voce e webcam e apprendimento automatico per il solo riconoscimento e poter interagire con tecnologie diverse, ma in un modo nuovo. Quindi può davvero andare molto divertente.

Drew: È piuttosto affascinante, perché abbiamo esaminato una sorta di analisi dei modelli di dati in quanto tali, e ora stiamo pensando di guardare il contenuto delle immagini e analizzare il contenuto delle immagini utilizzando l'apprendimento automatico, il che è piuttosto interessante. Immagino che sia il tipo di funzionalità di Facebook, se qualcuno pubblica una foto che pensa possa essere cruenta o mostrare un infortunio o qualcosa del genere, e la offusca, quindi devi semplicemente fare clic per rivelarla. Questo genere di cose, ovviamente, Facebook non può avere squadre di moderatori che guardano ogni immagine che viene caricata.

Charlie: Spero che non lo facciano.

Drew: Sarebbe un compito infinito.

Charlie: Nemmeno questo è un ottimo lavoro.

Drew: Lavoravo su un sito Web di annunci gratuiti in cui le persone potevano pubblicare annunci. E c'era molta moderazione in questo, che anche io, come sviluppatore web, dovevo essere coinvolto, solo guardando tutte queste immagini dicendo: "Sì, no, sì, no".

Charlie: Anch'io l'ho fatto un po'. Vorrei che in quel momento ci fosse stato l'apprendimento automatico, solo un piccolo strumento di utilità solo per farlo per me, e ora è lì. Quindi è abbastanza bello.

Drew: Sì, è davvero fantastico. Ed è piuttosto eccitante pensare all'input dal vivo da una webcam ed essere in grado di analizzarlo in tempo reale, in modo da poter eseguire interazioni basate sui gesti. È questo…

Charlie: Sì, quindi in pratica usa più classificazione delle immagini, perché la tua webcam, un'immagine è un insieme di pixel, ma poi mentre fai determinati gesti, puoi addestrare un modello a riconoscere che la tua mano destra è in alto e forse tu controllerebbe il mouse in questo modo, o guarderebbe le coordinate della tua mano e dello schermo e tu seguirai il mouse. Potresti davvero fare quello che vuoi. Potresti forse avere il riconoscimento del colore.

Charlie: Puoi fare cose davvero divertenti. Uno, un prototipo che ho costruito, a cui ho rinunciato a un certo punto, ma ho costruito un po'... Volevo che fosse un'estensione di Chrome, ma non ha funzionato. Ho creato una piccola app desktop con Electron. Anche in JavaScript dove potrei navigare in una pagina web semplicemente inclinando la testa. Quindi riconoscerebbe che quando inclino la testa verso il basso, scorre verso il basso e quando salgo, sale. Era solo questo tipo di piccoli esperimenti in cui stavo pensando: "Beh, se poi posso trasformarlo in un'estensione di Chrome, potrebbe essere utile per alcune persone".

Charlie: Anche se stai solo mangiando davanti al tuo computer e stai leggendo il telegiornale e non voglio che la mia tastiera sia sporca, allora posso semplicemente inclinare la testa, ma spero anche che, per l'accessibilità, potrei effettivamente aiutare le persone a navigare in determinate pagine Web o cose del genere. Ci sono molti strumenti disponibili e si tratta dell'idea che puoi venire con l'osservazione della situazione intorno a te e come potresti risolvere alcuni di questi problemi con l'uso dell'apprendimento automatico?

Drew: Per l'apprendimento automatico, pensiamo spesso ai linguaggi, Python. Penso che sia qui che sembra che avvenga prima gran parte del tipo di sviluppo. Ma come sviluppatori web, siamo ovviamente più a nostro agio con JavaScript in generale. L'apprendimento automatico è qualcosa che possiamo realisticamente aspettarci di fare. Voglio dire, piccoli esempi divertenti sono una cosa, ma è effettivamente utile per il lavoro reale in JavaScript?

Charlie: Beh, voglio dire, penso di sì, ma poi so che la maggior parte delle cose che faccio sono prototipi, ma penso che poi dipenda dalla situazione in cui ti trovi al lavoro. Esistono modi per implementare l'apprendimento automatico come sviluppatore nel tuo lavoro quotidiano. Ma quello che mi piace davvero di JavaScript è il fatto che se sei già uno sviluppatore front-end, non devi imparare un nuovo ecosistema o un nuovo set di strumenti o una nuova sintassi, un nuovo linguaggio. Sei già nel tuo ambiente in cui lavori ogni giorno.

Charlie: Di solito quando impari quel tipo di cose, devi iniziare con il tuo tempo, se non è il tuo lavoro quotidiano e il tempo di tutti è prezioso e tu non ne hai molto. Quindi, se puoi rimuovere alcune barriere e rimanere nello stesso ecosistema che conosci, penso che sia abbastanza buono, ma puoi anche iniziare... il potere per me di JavaScript è che puoi iniziare costruendo un piccolo prototipo per convincere le persone che forse c'è un'idea che deve essere studiata e, essendo in grado di creare rapidamente qualcosa in JavaScript, puoi convalidare che la tua idea è giusta.

Charlie: Quindi o puoi ottenere il consenso della leadership per spendere più tempo o più denaro, oppure puoi poi darlo agli sviluppatori Python, se vuoi costruirlo in Python. Ma per me, questa capacità di convalidare rapidamente un'idea è estremamente importante. Soprattutto, forse se lavori per una startup e tutto va veloce e sei in grado di dimostrare che vale la pena esaminare qualcosa, penso che sia piuttosto importante.

Charlie: E anche il fatto che c'è davvero un grande ecosistema di strumenti e ci sono sempre più framework e applicazioni di machine learning. In JavaScript, non è solo su una pagina web che possiamo aggiungere il machine learning. Come dicevo prima, puoi creare estensioni di Chrome e app desktop con Electron e app mobili con React Native e hardware e IoT con framework come Johnny-Five.

Charlie: Quindi, con la lingua che già conosci, hai effettivamente accesso a un enorme ecosistema di piattaforme diverse su cui puoi eseguire lo stesso esperimento. E penso che, per me, sia piuttosto sorprendente. Ed è qui che vedo il vero potere dell'apprendimento automatico in JavaScript. E man mano che migliora, forse puoi davvero integrarlo, nelle applicazioni che costruiamo ogni giorno.

Drew: JavaScript è ovunque, vero?

Charlie: Sì.

Drew: Nel bene e nel male, è ovunque. Chi l'avrebbe pensato? Sembra fantastico, ma suona anche come un sacco di lavoro. E penso ai set di dati e alle cose, come diavolo inizi a svolgere questo tipo di attività?

Charlie: Al momento, almeno con TensorFlow.JS, ci sono tre cose che puoi fare con il framework. E supponiamo che il più semplice sia importare un modello pre-addestrato esistente. Quindi ce ne sono alcuni, ci sono diversi modelli che sono stati addestrati con diversi set di dati e consiglierei di iniziare con questo perché tu puoi imparare le basi su come utilizzare effettivamente il framework stesso e cosa puoi fare con questi modelli.

Charlie: Quindi hai alcuni modelli di riconoscimento delle immagini che sono stati addestrati con immagini diverse. Alcuni di loro sono migliori per il riconoscimento degli oggetti. Alcuni di essi sono migliori per il riconoscimento delle persone e, comprendendo quali modelli utilizzare, possiamo quindi essere liberi di costruire ciò che vuoi nel vincolo di quel modello.

Charlie: Ma penso che sia un buon modo per iniziare. Uso ancora modelli pre-addestrati per molti dei miei esperimenti perché è anche, perché dovresti reinventare la ruota se è già lì? Usiamo solo gli strumenti che ci sono stati forniti. Quindi, quando vuoi andare, magari un passo avanti, puoi fare quello che viene chiamato apprendimento di trasferimento, quando riqualifica un modello importante. Quindi usi ancora uno dei modelli pre-addestrati, ma poi ti viene data l'opportunità di riqualificarlo dal vivo con i tuoi campioni.

Charlie: Ad esempio, se desideri utilizzare una classificazione delle immagini in cui hai persone diverse, forse vuoi eseguire la classificazione dei gesti. Se il tuo modello, ad esempio, è addestrato con persone che hanno sempre, non so, la mano destra in alto o qualcosa del genere, ma per la tua applicazione, vuoi la mano sinistra, potresti riqualificare quel modello con i tuoi campioni della sinistra mano, e quindi avresti un modello che è già abbastanza addestrato per riconoscere la mano destra, ma poi aggiungeresti il ​​tuo campione e puoi riqualificarlo abbastanza rapidamente nel browser, a seconda della quantità di nuovi dati di input che gli dai , ci vuole un po' di tempo, ma in pochi secondi hai un modello riqualificato che è molto bravo a riconoscere questi due gesti che puoi poi usare nella tua app.

Charlie: Quindi è come di solito il secondo passo. E poi un terzo passaggio un po' più complesso è quando fai tutto nel browser. Quindi scrivi il tuo modello da zero e lo alleni nel browser e ti alleni, esegui davvero e generi il modello, tutto nel browser. Ma in generale, l'unica applicazione che ho visto per questo è la creazione di visualizzazioni. Quando vuoi visualizzare il processo di addestramento di un modello e il numero di passaggi che sta richiedendo, quanto tempo sta impiegando e puoi vedere la precisione aumentare o diminuire, a seconda delle funzionalità che scegli e dei parametri che modifichi .

Charlie: Quindi non ho giocato davvero con quello perché non ho trovato un'applicazione per me con cui volevo creare, ma i primi due passaggi per utilizzare solo il modello pre-addestrato o riqualificarlo con i miei campioni sono dove personalmente ho visto. Mi sono divertito con quello.

Drew: Quindi in genere si tratta di creare il modello in anticipo, una sorta di offline per così dire, e quindi il browser utilizza quel modello addestrato, o forse aggiunge un po', esegue un po' di riaddestramento, ma in generale, quel modello verrà stabilito prima di essere utilizzato nel browser dell'utente?

Charlie: In generale, sì. Quindi puoi sicuramente creare il tuo modello. Se lo fai, non consiglierei di addestrarlo nel browser, ma puoi farlo anche in NodeJS. Se sai, un po' di NodeJS. Ho sicuramente creato i miei modelli, ma di solito lo eseguo in NodeJS perché è un po' più performante. E poi utilizzo il modello generato che ho creato poi nel browser.

Drew: Quali strumenti sono disponibili per farlo con JavaScript? Hai menzionato TensorFlow JS ma cos'è, dov'è? È di Google?

Charlie: Sì. All'inizio Google aveva lo strumento TensorFlow in Python e ora, in passato, forse un paio d'anni, forse un po' di più hanno realizzato la versione JavaScript, quindi tende a scorrere con JS. Ma c'è anche ML5 JS che è un po' un'astrazione in cima. Quindi, se sei un po' confuso o se TensorFlow JS sembra un po' spaventoso con parte del vocabolario che usano nella loro documentazione, puoi usare ML5 JS che ha la maggior parte delle stesse funzionalità, ma diciamo che l'API o la sintassi è un po' più adatto ai principianti.

Charlie: Puoi iniziare con ML5, vedere se ti piace l'apprendimento automatico o se pensi a un'applicazione interessante, e poi se magari hai dei blocchi in ML5 o se il framework non ha certe cose che vuoi fare, tu puoi quindi passare a TensorFlow JS se lo desideri. E se davvero non sei interessato a scrivere davvero il tuo codice ma vuoi solo utilizzare strumenti che sono già disponibili, ci sono alcune API di Amazon, Google e Microsoft per eseguire anche il riconoscimento delle immagini o il riconoscimento vocale. Quindi, se sei più interessato a vedere cosa può fare, ma non vuoi perdere troppo tempo a scrivere il codice, puoi eseguire il ping di alcune API e provare anche alcuni dei loro strumenti.

Drew: È piuttosto interessante. Quindi potresti forse usare il browser per catturare l'input da una webcam o un microfono o quello che hai, quindi inviarlo ad Amazon, Microsoft o chiunque e poi lasciare che facciano il duro lavoro?

Charlie: Sì.

Drew: E poi trai vantaggio dai risultati.

Charlie: Esattamente.

Drew: Sembra un modo carino e allettante solo per iniziare con le idee. Sembra fantastico, ma a quali problemi possiamo applicarlo nell'avantreno? Abbiamo parlato di alcune piccole cose, ma ci sono altri modi in cui potremmo utilizzarlo?

Charlie: Ci sono molti modi. Se inizio con la classificazione delle immagini, sì, potresti. Puoi usare immagini dal web o dalla webcam del tuo telefono. Se usi solo il tuo sito web sul tuo telefono e puoi scattare foto e riconoscere oggetti, e fare entrambi... Una piccola cosa che ho costruito riguardava il riciclaggio, dove se non so davvero dove mettere determinati oggetti in quale cestino, noi avere il bidone giallo, il verde, dipende dai paesi. Hanno colori diversi, ma a volte non sono molto bravo a sapere dove lanciare le cose, quindi potresti costruire piccoli strumenti come questo che, dal vivo può riconoscere due oggetti di fronte a te e poi classificarli e puoi costruire certe cose come questo.

Charlie: Altrimenti, hai una classificazione del testo in cui all'inizio di quest'anno ho usato uno dei modelli TensorFlow GS per guardare i commenti su cui sono stati scritti, i problemi di GitHub e le PR di GitHub per quindi classificare e dire: "Ehi, se è un commento tossico, allora hai un piccolo robot che dice "Ehi, forse non avresti dovuto scriverlo" o "Attento, è un po' tossico. Vogliamo che questo sia uno spazio sicuro.”” Quindi puoi usare la classificazione del testo in questo modo.

Charlie: C'è una classificazione del suono se vuoi, dove quando Apple ha rilasciato il suo nuovo orologio, il sistema operativo, aveva qualcosa per riconoscere il suono dell'acqua corrente, per dire alle persone, per lavarsi le mani per 20 secondi con la pandemia di COVID, ma puoi farlo anche in JavaScript. E che la cosa davvero interessante, stavo guardando alcuni dei video e ho pensato: "Oh, so come farlo in JavaScript".

Charlie: E ho costruito un piccolo prototipo. Non so se funziona con l'Apple Watch. Forse. Non ne ho uno, ma so che funziona sul mio telefono e sul mio laptop. E poi questo può dare origine ad alcune idee anche per altre persone, dove un mio amico, Ramon Huidobro, @hola_soy_milk su Twitter. Ha partecipato a molte conferenze online quest'anno. E uno dei suoi problemi è che quando applaude per applaudire qualcuno, non ha il tempo di aggiungere anche l'emoji del clap sulla chat. E quello che voleva fare era ascoltare il suono dei suoi applausi e questo avrebbe inviato automaticamente emoji di applauso nella chat.

Charlie: E sono piccole cose come questa che se vuoi forse un'applicazione davvero più utile nel tuo lavoro quotidiano è attorno al prelettura predittiva. Questo sta anche usando l'apprendimento automatico nel front-end dove si guarda l'analisi del tuo sito web. Quindi quali pagine vengono solitamente esaminate dopo e quali cose del genere. Puoi precaricare le risorse in anticipo in base alla pagina che è più probabile che venga visitata dopo. È qualcosa che volevo esaminare per tutto l'anno, ma non ho avuto il tempo, ma ciò ti consente di migliorare davvero le prestazioni e l'UX della tua pagina. E non richiedi risorse di cui non avrai bisogno, quindi questo può davvero migliorare, e anche questa è un'applicazione di machine learning.

Charlie: Quindi puoi fare cose divertenti, o puoi fare cose più utili, ma non c'è un'applicazione sbagliata, possono esserci applicazioni sbagliate. Lo riprendo, ma sto solo dicendo che se stai davvero iniziando, non c'è niente di sbagliato nell'iniziare con qualcosa di divertente, e quindi posso inventare alcune idee su qualcosa che puoi fare sul lavoro come bene.

Drew: Immagino che la cosa veramente utile qui sia sapere che queste cose sono possibili. E in realtà solo modi creativi per risolvere i problemi che possiamo fare da soli. Tradizionalmente abbiamo costruito le cose con la moderazione dei contenuti inviati dagli utenti, ed è stato abbastanza primitivo e in pratica abbiamo dovuto fare in modo che gli esseri umani guardassero le cose e prendessero decisioni al riguardo. Ma con l'accesso all'apprendimento automatico, in quell'esempio, potremmo consegnarne di più e quindi fare in modo che gli umani guardino solo ai casi limite, ad esempio, cose che non hanno una corrispondenza convincente.

Drew: Certo che succederà, c'è un po' di tempo in anticipo per sviluppare quella cosa e metterla a posto, ma poi pensi al risparmio di non avere esseri umani che controllano manualmente le cose. Per quali cose puoi vedere che questo verrà utilizzato in futuro man mano che la tecnologia migliora?

Charlie: Per me, forse in futuro, penso che man mano che i modelli diventano più piccoli da caricare e diventano più performanti e probabilmente miglioriamo i set di dati con cui vengono addestrati. Spero di poter vedere strumenti più utili. Voglio dire, personalmente, sono interessato a quei minuscoli modelli di apprendimento automatico che possono essere eseguiti su microcontrollori per creare cose. Ma se rimaniamo più nel mondo del front-end, spero in un riconoscimento vocale forse migliore perché mi sento come se fossimo abituati a navigare sul web con un trackpad o una tastiera, ma al momento c'è ancora un riconoscimento vocale, ma non è sempre super preciso, o non è accurato con gli accenti, per esempio. E spero che mentre sviluppiamo modelli migliori, le persone più piccole non avranno così paura di aggiungerlo al loro sito Web perché non avrà un impatto negativo sulle prestazioni.

Charlie: Mi interessa usare l'apprendimento automatico in cose come il prelettura predittiva in modo da poter creare siti Web più intelligenti che migliorino l'esperienza su uno spettro, perché per gli utenti è meglio perché la pagina si caricherà più velocemente, quindi le prestazioni in generale del tuo sito, è meglio. Ma diciamo anche che se pensiamo alla sostenibilità, il non richiedere risorse inutili aiuta anche l'impronta di carbonio del tuo sito web. Ma poi c'è anche l'impronta di carbonio dei modelli di apprendimento automatico. Non è molto buono. Quindi forse non parliamo di questo. Penso per il futuro, spero solo di avere modelli che siano forse più performanti o più piccoli in modo che le persone siano più propense a provarlo, perché diciamo che ci saranno meno blocchi per le persone che entrano in questo , ma vediamo.

Drew: Ci sono limiti e vincoli noti di cui dovremmo essere a conoscenza prima di intraprendere un progetto di apprendimento automatico?

Charlie: Sì. Ci sono. Penso che, non importa se lo stai facendo in JavaScript o Python, ci sono dei limiti. Penso che se vuoi costruire qualcosa, che è molto personalizzato, per il quale non esiste un modello pre-addestrato, uno dei limiti è che potresti aver bisogno di molti dati e non tutti li hanno. So if you're doing something on your own as a side project, and you can't find the data set, it would actually take you quite a long time to get one that would allow you to generate good predictions. You can build a small data set, but you will not be able to push it to production or something if you don't actually have a data set that's consistent enough. So I think the amount of data that you need, training the models can take a lot of time.

Charlie: That depends on the amount of data that you feed it, but depending on the application that you want to will build it with, you have to be aware that it can take a lot of time. I remember when I got started and I was doing it in Python and I wanted to… I forgot what I wanted to do, but my model was running for, it was training for eight hours. And at the end it told me that it failed because of something. And I was like, “You're telling me that at the end, after eight hours,” so it can be a bit frustrating and it can still be experimental and you have to be comfortable with it not being a pure science, not everything is always accurate.

Charlie: At the moment, as some of the models are still, they can be a few megabytes, if you are building something that you know, is most likely going to be seen on a mobile screen, you might want to take into consideration that, well, you don't want to load all that data over 4G network. You might want to warn people that they should be on Wi-Fi or the battery use, or the type of phones can't really handle all of this as well. And then more seriously in terms of liability, you do have to understand why your model predicted certain things. And that can be difficult because the model is a black box. It's a function that you don't really know what's inside. You know what it predicted and based on what you're building, if it makes certain decisions about, I don't know, who gets a loan or who goes to prison, based on whatever, you want to be able to explain how you got to that decision.

Charlie: If you decided to use machine learning to kind of abstract some of the work, so it wouldn't be done by people. That can be quite dangerous, so you have to know what you're doing, and in the end, just remember that it's not perfect. I think people sometimes assume that because we talk about artificial intelligence is just as smart as people, but no, it's still computers. It's still data that is given to them and they make up some predictions and somehow we just trust it, which is scary. But yeah, that's some of the limitations.

Drew: Sì. I guess it may seem like it's intelligent, but it is still artificial. There've been some quite high profile cases in recent times particularly around some of the machine learning stuff with image recognition that have raised issues of bias in machine learning, for example, a model only detecting humans if they have light skin. Are there ethical considerations that we should be making here?

Charlie: To me, that sounds like a really interesting side of machine learning. And that's also why, before I was saying that, remember that it's not perfect. Sometimes I feel like people think that the machine just happens to be right and know all the things by itself, but it's still something that we program. And when an algorithm products or generates a biased result, the algorithm just generated things based on the data that it was given before. So an algorithm itself or a model is not going to know the difference in society between light-skinned people or dark-skinned people. It doesn't know and it doesn't care. The only thing that it knows is that I got given pictures of certain people and I'm just going to generate based on what I know.

Charlie: And the data set that is given to the algorithm is in general generated by us, by people. Maybe it's not the developer using the model, but at some point somebody put together a data set. And I think it's important to remember that we are responsible for making sure that the predictions generated are as fair as possible and as unbiased as possible. And that creates interesting questions then, because then you can go into, “Well, what is fair for people?” or if we think about my example of the GitHub action that I created to look at toxic comments, well, maybe what I think is toxic is not the same thing as what other people think is toxic.

Charlie: It's interesting. There's a really interesting collection of videos by MIT media lab around the ethics and governance of artificial intelligence, and I find that fascinating because it's not about telling people, “Oh, you're a bad person because you used in algorithm that's biased,” or, “You're a bad person because you produced a model that's biased.” Its more about raising certain questions and helping you realize, “Well, actually, maybe I could be better,” because that surface that, “Yes, I forgot to add diverse people to my data set. Let me fix that.” It's not really about say, “Let's not use that model ever again.” Just retrain it. Realize that, “Oh, I forgot this. I can retrain it and we can make it better.” And that's something that I definitely think is interesting.

Charlie: And you have companies really trying to improve on that. When the issue of Google who was translating certain neutral languages into gendered languages, and all of a sudden engineer was male and cook was female. Now they know they've really reworked on that and it's a lot more unbiased and they use the 'they' pronoun as well. They also really try to make it better, but then you have also weird stuff where I think IBM had created a data set called Diversity in Faces, that was supposed to be one of the very few that I said that actually had a diverse spectrum of people. But when I tried to find it to use it, it's not available anymore. So I'm like, “Oh, you had this good initiative. You try to do better than a lot of other people, and now people are going to actually use it.” I don't know, but I think the question is really fascinating because he can really help us improve. And then we improve the tool as well that we're using.

Drew: I guess it pays just to be really careful to be balanced and be diverse when selecting data for training models. I guess that's what it comes down to, isn't it?

Charlie: Yeah. Well, I mean, you're building a tool for the public, in general, right? If it's a tool that everybody can use, so it should reflect everybody really, or you should be really clear and say, “This tool can only be used by these people because the model was trained that way, but it's not really what we should do.” I understand that sometimes it if you've never thought about it, it can be I don't know, you can see it as a burden. I hate that people would think of it that way, but it's also, if you spent all this time, maybe writing your own algorithm or generating your own model and doing all of this work, you can't tell me that finding a diverse data set is the hardest part. I don't think it would be. So I'm hopeful, and I think as more people raise concerns about this, and I think people are watching this space, which is really good because if companies don't do it, they'll do it if we tell them that it's not right. And if you want the adoption of machine learning models, you have to make sure that everybody can use them.

Drew: Of the various tools that are available for doing machine learning in JavaScript, you've worked a lot with TensorFlow JS and you've written a book about it. Tell us about your book.

Charlie: Yes, I did. I did write a book this year about TensorFlow JS. So to help JavaScript developers learn more about machine learning and understand it better. And I think the main goal of this book was to help people dive into machine learning, but making it less scary, because I know that at first I thought about machine learning as this big thing, completely different from the web development that I would never understand anything about. I didn't think that I would have to write my own algorithms and really understand math. And as I've dived into this over the past two and a half years, I realized that it's not really like that. And I was hoping that writing this book could help people realize as well that they can do it and what can be done.

Charlie: And there's also a few projects that you can really put in practice what you're learning, but it was really aimed at people who haven't really looked into ML yet, or who just are curious to learn more. I'm not really diving into the algorithms like the source code of the algorithms, but it's really more telling people, trying to understand what an algorithm does and which one to use and for what. A bit of what we just talked about, but it's explaining contents in a clear way, so hopefully it's less scary and people want to hopefully dive a bit more into it.

Drew: So it's called Practical Machine Learning In JavaScript and is available from Apress, and we'll link it up in the show notes. So I've been learning all about machine learning today. What have you been learning about lately, Charlie?

Charlie: Let's say a thing that I'm diving into that is related to machine learning or I will use machine learning with it, but it's digital signal processing that I want to use with machine learning. As we've talked about the fact that machine learning needs a lot of data, if you want to build your own models, sometimes you have to filter your data to actually get the right prediction. And if we think about it, let's think about noise canceling headphones. In your day-to-day life, you have a lot of noise around you. Let's say you're trying to watch a video on the train and there's people talking around you, and there's a sound of the train. And what you want to focus on is the sound of the video.

Charlie: With digital signal processing, that would be a little bit like your noise canceling headphones, where there's some noise around that you don't care about. So there's some data that you don't want to listen to, and the noise canceling headphones allow you to focus on the sound coming from the video on your phone, so that you can really truly listen and focus on that. What I'm doing with digital signal processing is that I have a bunch of data from a piece of hardware, like an Arduino, but I know that there's a lot of it that I might not care about. I want to filter out the things that I don't care about, so that then I can feed that to a model and get better predictions about gestures or things like that. So you have your data signal that you can either transform or filter.

Charlie: It's like when you use the web API to get sound from your microphone, you can either see the arrays of numbers on your dev tools, or you can transform it into a spectrogram to see the picture of the sound. And that's a little bit of that. To have a better prediction for gestures based on hardware data, I can transform that signal. I've been wanting to do this for a couple of years, but it's something that I know nothing about. It takes time to learn, but now that I know a bit more about the machine learning side, I can learn the digital processing side and I'm getting there. I like this moment where I'm like, “Oh, I start to get it because I spent all this time on it.” And yeah, that's, that's really interesting. I'm going to have you going a bit.

Drew: Charlie you're such a nerd. If you dear listener would like to hear more from Charlie, you can find her on Twitter, where she's @devdevcharlie and her personal website includes links to lots of our experiments and projects, and it's really worth checking out at charliegerard.dev. Her book Practical Machine Learning In JavaScript is available now, and we'll link to that in the show notes. Thanks for joining us today. Charlie, did you have any parting words?

Charlie: Ricordati di divertirti. Oggi abbiamo parlato molto di cose divertenti, e poi di cose pratiche, ma se sei disposto a dare un'occhiata a questo, ricordati di divertirti, qualunque cosa tu decida di costruire.