Neste episódio, estamos falando sobre aprendizado de máquina. Em que tipo de tarefas podemos colocá-lo em um contexto de desenvolvimento web? Falei com o especialista Charlie Gerard para descobrir.
Mostrar notas
- Aprendizado de máquina prático em JavaScript: TensorFlow.js para desenvolvedores da web
- Charlie no Twitter
- site pessoal de Charlie
Atualização semanal
- Uma introdução prática à injeção de dependência
escrita por Jamie Corkhill - Rumo a uma web sem anúncios: diversificando a economia online
escrito por Frederick O’Brien - A web deve expor os recursos de hardware?
escrito por Noam Rosenthal - Como ganhar mais dinheiro vendendo aplicativos Shopify em 2021
escrito por Suzanne Scacca - Primeiros passos com o pacote GetX em aplicativos Flutter
escrito por Kelvin Omereshone
Transcrição
Drew McLellan: Ela é um desenvolvedor front-end sênior da Netlify, um Google Developer especialista em tecnologias da web e um Mozilla alto-falante técnico. Em seu tempo livre, ela explora o campo da interação humano-computador e constrói protótipos interativos usando hardware, aprendizado de máquina e codificação criativa. Ela regularmente fala em conferências e escreve em blogs para compartilhar o que aprende. E, mais recentemente, é o autor do livro Practical Machine Learning in JavaScript for Apress.
Drew: Então, sabemos que ela é uma especialista em front-end, mas ela escapou uma vez da prisão usando uma lixa de metal que ela fez de crochê nos sonhos. Meus fantásticos amigos, por favor, sejam bem-vindos, Charlie Gerard. Oi Charlie. Como você está?
Charlie Gerard: Estou arrasando.
Drew: Eu queria falar com você hoje sobre aprendizado de máquina, que pode parecer um tópico um pouco estranho para um podcast que se concentra principalmente no tipo de navegador final do desenvolvimento da web. Costumo pensar no aprendizado de máquina como algo que acontece em data centers ou laboratórios gigantes com pessoas de jaleco branco. É definitivamente um tipo de palavra da moda nos dias de hoje. O que diabos realmente queremos dizer quando falamos em aprendizado de máquina?
Charlie: Então, em geral, a definição padrão seria dar aos computadores a capacidade de gerar previsões sem que lhes digam o que fazer. Esperançosamente, isso fará sentido quando continuarmos falando sobre isso, mas esse é o tipo de definição de conversa genérica. Você realmente não diz a algoritmos ou modelos para ir e procurar por certas coisas. Eles aprendem por meio dos dados que você fornece e podem gerar previsões.
Drew: Então, em vez de ter que codificar especificamente para certas circunstâncias, você meio que cria um caso genérico em que o software pode aprender como fazer essas coisas sozinho?
Charlie: Sim, exatamente.
Drew: Isso soa quase um pouco assustador. É meio que beirando o lado da inteligência artificial das coisas. Você precisa ser um nerd hardcore em matemática ou um cientista de dados para fazer isso? Ou existem coisas por aí, como algoritmos estabelecidos e coisas que você pode usar para começar?
Charlie: Sim. Felizmente, você não precisa ser um nerd hardcore em matemática ou um cientista de dados. Caso contrário, eu definitivamente não estaria falando sobre isso. Mas existem algoritmos que já foram descobertos e ferramentas já disponíveis que permitem que você use esses algoritmos sem ter que escrever tudo do zero. Portanto, se usarmos o ecossistema de front-end como comparação, você poderá usar APIs da web, como o navegador, para obter a mídia do usuário quando quiser ter acesso à webcam ou ao microfone.
Charlie: E você não precisa saber como essa API foi realmente implementada nos bastidores. O que importa é que você saiba para que serve esta API e como usá-la, se desejar. Então, mais tarde, você pode ir e olhar para o código-fonte do seu navegador favorito para saber como ele realmente funciona, mas não é realmente útil em primeiro lugar. E pode ser útil se você quiser escrever seu próprio algoritmo posteriormente. Mas, para ser realmente honesto, é altamente improvável que você queira fazer isso.
Drew: Ok. É um pouco como a maneira como você pode escrever CSS para posicionar um elemento em uma página. Você não se importa como o navegador está realmente fazendo isso. Você apenas escreve CSS e o navegador cuida disso.
Charlie: Sim. Quando você começa, é mais ou menos assim.
Drew: Isso é bom. Esse é mais o meu nível de ciência de dados.
Charlie: Eu também.
Drew: Então, quais são os tipos de problemas que você pode resolver com o aprendizado de máquina? Para que tipo de coisas é bom?
Charlie: Depende do que você quer fazer em primeiro lugar, porque quando você quer construir uma certa coisa, eu aconselharia primeiro a pensar sobre o tipo de problema que você quer aprender e que o ajudará a escolher um algoritmo que você pode usar para corrigir ou encontrar uma solução para o seu problema. Então, em geral, eu começaria pensando sobre o tipo de problema que estou tentando resolver, e há três problemas principais. Acho que provavelmente há um pouco mais, mas, em geral, pelo que fui treinado para fazer e pelo que li, três principais são mencionados.
Charlie: Se você quiser que eu vá para isso, há aprendizado supervisionado, aprendizado não supervisionado e aprendizado por reforço. Você também tem muitos supervisionados, mas para ser honesto, eu realmente não sei muito sobre isso porque fui capaz de construir meus projetos com os três primeiros.
Drew: Supervisionado, não supervisionado e reforço, você disse?
Charlie: Sim, aprendizado por reforço.
Drew: Ok. Então, o que é aprendizagem supervisionada? Você pode nos dar um exemplo do que isso significa?
Charlie: Aprendizagem supervisionada, é quando seu conjunto de dados é feito de recursos e rótulos e você os alimenta para um algoritmo. Então, se pegarmos um exemplo com o qual esperamos que a maioria das pessoas consiga se identificar, é, se você tem uma casa e quer vendê-la, e quer descobrir a que preço vai vender sua casa ou o seu carro, aliás, aliás, seria a mesma coisa. E você usaria um conjunto de dados de casas no mesmo ambiente ou no mesmo tipo de casas e sabendo seu preço no mercado, você poderia usar as características de sua própria casa; então, quantos quartos e tem um jardim e em que bairro está? E coisas assim.
Charlie: Esses são os recursos e o rótulo seria o preço e, usando todos esses conjuntos de dados de casas que já existem ao seu redor, você pode usar um algoritmo de aprendizado de máquina que vai aprender a correlação entre os recursos da sua casa e os preços do mercado, para então obter as características da sua casa e poder gerar um preço com ela. Então, o mais importante é no aprendizado supervisionado, você tem um monte de recursos e também um rótulo, então você pode realmente fazer uma correlação entre os dois.
Drew: Você, você alimentaria o modelo com um vasto conjunto de dados sobre casas neste exemplo, onde você sabe seus preços e então conhece todos esses recursos sobre elas. Diga quartos e o que você quiser, como metragem quadrada, e acho que a localização seria outro tipo de coisa que poderia ser considerada?
Charlie: Sim. Então, esse é um dos problemas do aprendizado de máquina é que você pode ter muitos recursos e alguns deles não serão realmente tão eficientes quanto outros. Então você pode ter, por exemplo, a cor da sua casa, pode realmente não ter correlação com o preço, mas você pode dar um monte de recursos e o próprio modelo encontrará a correlação entre os dois. Você pode ajustar seu conjunto de dados, se quiser, e remover a cor ou perceber que o tamanho do jardim não importa ou coisas assim.
Charlie: Então, em geral, mesmo se você alimentar seu conjunto de dados para um modelo, não terá uma previsão perfeita na primeira vez. Normalmente você ajusta algumas coisas diferentes e vê. Você meio que ajusta até chegar a uma previsão que você acha muito precisa.
Drew: E então, uma vez que o modelo é criado, ou digamos que você o criou usando dados de uma cidade, você poderia pegar isso e alimentá-lo… você precisaria alimentá-lo com dados de outra cidade? Você poderia pegá-lo e usá-lo em outro lugar depois que o treinamento for concluído ou ele é específico para esse conjunto de dados ou como isso funcionaria?
Charlie: Acho que seria específico para o conjunto de dados. Isso significa que você pode criar outro conjunto de dados com o mesmo, digamos, formato. Se você tiver uma planilha do Excel com colunas diferentes, poderá manter o mesmo rótulo e recursos, mas terá que substituí-los pelos valores daquela cidade. Mas, em geral, significa que a coleta do conjunto de dados também pode levar muito tempo, mas se você já souber o que fez pela cidade de Paris, por exemplo, e que a estrutura do seu conjunto de dados é a mesma, mas você substitui os valores, é um pouco mais rápido e você pode regenerar o modelo.
Charlie: Você não deve reutilizar o mesmo modelo, se seus dados forem diferentes porque os preços das casas em Paris são diferentes de uma pequena cidade na Austrália, por exemplo. Portanto, você não gostaria de ter dados errados porque o núcleo do seu conjunto de dados no início não era exatamente o mesmo.
Drew: falamos muito sobre tipos de modelos com aprendizado de máquina. Portanto, o modelo é como o resultado final de todas as análises do conjunto de dados. E é então usado para fazer previsões subsequentes. Esse é o modelo, certo?
Charlie: Sim, é exatamente isso. É um modelo, então é um pouco como uma função para a qual você vai alimentar novas entradas que nunca viu antes, mas com base no que foi aprendido na etapa de treinamento. seria capaz de gerar uma previsão.
Drew: Então, o aprendizado supervisionado torna este modelo preditivo a partir de rótulos em recursos. O que é aprendizagem não supervisionada?
Charlie: Portanto, não supervisionado é um pouco do mesmo conceito, mas você remove os rótulos. Então, neste caso, você pode pensar que nosso problema de vender uma casa, não seria realmente um problema de aprendizado sem supervisão, porque se você só conhece as características das casas ao seu redor, mas não tem um preço como etiqueta, você não posso realmente prever um preço. Ele nem vai saber o que é um preço.
Charlie: Então, não supervisionado é mais quando você tem um conjunto de dados e só tem recursos sobre eles. Você pode gerar mais tendências ou grupos de coisas juntos. Você não usaria o aprendizado não supervisionado se quiser um resultado específico, se tiver uma certa pergunta, como,”Qual é o preço disso?”Esse não é um uso muito bom de não supervisionado, mas é mais, se você quiser agrupar entidades juntas, podem ser pessoas ou coisas assim.
Charlie: Então, normalmente, um caso de uso para isso são recomendações como recomendações da Amazon ou recomendações do Spotify, como,”Pessoas como você também ouvem isso”, e é mais em torno de onde os recursos estão neste caso..bem, eles têm dados sobre você, então eles sabem o que você ouve, em que país você normalmente está, ou quantas vezes por dia você ouve alguma coisa? Então, usando esses recursos sobre pessoas, eles podem colocá-lo no mesmo grupo ou no mesmo tipo de ouvintes ou no mesmo tipo de pessoa que compra certas coisas na Amazon. E usando esse tipo de aprendizado não supervisionado, eles podem saber o que anunciar para você ou o que recomendar que você deve ouvir com base em pessoas como você. Portanto, são mais esse tipo de problemas.
Drew: Ok, tudo isso está fazendo muito mais sentido para mim agora como desenvolvedor da web, porque esses tipos de usos de que falamos, preços internos e recomendações e veiculação de anúncios e coisas assim, no final de o dia, esses são todos os tipos de coisas com as quais temos que lidar e recursos que podemos querer colocar em um site ou produto, ou o que quer que seja. Portanto, temos os diferentes tipos de aprendizagem com base no assunto que estamos procurando prever. Existem outros tipos de aplicativos que podemos usar com isso? Existem bons exemplos que as pessoas criaram que podem usar isso?
Charlie: Sim. Existem tantos exemplos. É por isso que, quando falo sobre prever o preço de uma casa, talvez não seja algo que se relacione com você. Talvez não seja tão emocionante, mas na verdade há muito mais que você pode fazer. Existem exemplos realmente bons por aí. Acho que o primeiro que vi foi em torno de textos de arte gerados dinamicamente para imagens. É claro que é algo que você mesmo pode fazer ao adicionar uma imagem a um site.
Charlie: Mas e se você tivesse um site que realmente tem toneladas de imagens e, em vez de fazer manualmente, pudesse alimentar cada imagem para um algoritmo de aprendizado de máquina, e isso geraria um texto artístico de qual é a imagem sobre, e talvez a única etapa humana seja verificar se isso está correto, mas realmente permitiria que você concentrasse seu tempo na criação do aplicativo.
Charlie: E você ainda tornaria seu site acessível tendo texto artístico para imagens, mas seria meio que gerado por uma máquina. Esse é um dos exemplos que vi quando comecei a fazer isso, mas você também tem um protótipo de filtragem não seguro para conteúdo de trabalho. E eu estava pensando que seria muito bom em uma extensão do Chrome, você poderia ter uma extensão do Chrome que toda vez que você abrir uma página da web, você apenas verificará se o que está na página é um tipo de conteúdo seguro.
Charlie: Por exemplo, se você tem filhos usando seu laptop ou coisas assim, pode simplesmente ocultar as imagens ou substituir essas imagens por pandas, se quiser ou algo assim. Mas é aquele tipo de aplicativo em que você pode usar o aprendizado de máquina para fazer coisas automaticamente para você, para que você não precise se preocupar com certas tarefas, ou você pode apenas usar o poder do seu cérebro para fazer outras coisas.
Charlie: Mas há ainda mais avançado com um exemplo de reconhecimento de gestos, usando a webcam que estava se comunicando com o Amazon Alexa e reconhecimento de voz e tudo mais. Assim, você pode realmente mesclar muitas tecnologias diferentes com voz e webcam e aprendizado de máquina para apenas reconhecimento e ser capaz de interagir com tecnologias diferentes, mas de uma maneira nova. Portanto, pode ser muito divertido.
Drew: Isso é muito fascinante, porque vimos uma espécie de análise de modelos de dados como tal, e agora estamos pensando em olhar para o conteúdo da imagem e analisar o conteúdo das imagens usando aprendizado de máquina, o que é bastante interessante. Eu acho que é o tipo de recurso que o Facebook tem, se alguém postar uma imagem que eles acham que pode ser sangrenta ou mostrar uma lesão ou algo assim, e isso embaça, então você tem que apenas clicar para revelá-la. Esse tipo de coisa, obviamente, o Facebook não pode ter equipes de moderadores olhando para cada imagem que é enviada.
Charlie: Espero que não.
Drew: Essa seria uma tarefa infinita.
Charlie: Também não é um bom trabalho.
Drew: eu trabalhava em um site de anúncios gratuitos onde as pessoas podiam postar anúncios. E houve muita moderação nisso, que até eu, como desenvolvedor web, tive que me envolver, apenas passando, olhando todas essas imagens dizendo:”Sim, não, sim, não.”
Charlie: Eu também fiz isso. Eu gostaria que naquela época houvesse aprendizado de máquina, apenas uma pequena ferramenta utilitária para fazer isso por mim, e agora está lá. Isso é muito legal.
Drew: Sim, isso é realmente ótimo. E é bastante empolgante então pensar sobre a entrada ao vivo de uma webcam e ser capaz de analisar isso em tempo real, para que você possa fazer interações baseadas em gestos. Isso é…
Charlie: Sim, no fundo ele usa mais classificação de imagem, porque sua webcam, uma imagem é um conjunto de pixels, mas conforme você faz certos gestos, pode treinar um modelo para reconhecer que sua mão direita está para cima e talvez você controlasse o mouse assim, ou ele olharia para a coordenada de sua mão e a tela, e você seguiria o mouse. Você realmente pode fazer o que quiser. Talvez você possa ter reconhecimento de cores.
Charlie: Você pode fazer coisas realmente divertidas. Um protótipo que eu construí, que meio que desisti em algum momento, mas eu construí um pouco… Eu queria que fosse uma extensão do Chrome, mas não funcionou. Construí um pequeno aplicativo de desktop com Electron. Também em JavaScript, onde eu poderia navegar em uma página da web apenas inclinando minha cabeça. Portanto, ele reconheceria que, quando inclino minha cabeça para baixo, ela rola para baixo e, quando eu subo, ela sobe. Eram exatamente esses pequenos experimentos em que eu pensava:”Bem, se eu puder transformá-lo em uma extensão do Chrome, pode ser útil para algumas pessoas”.
Charlie: Mesmo que você esteja apenas comendo na frente do computador e lendo as notícias e eu não queira que meu teclado fique sujo, posso apenas inclinar a cabeça, mas também espero, para acessibilidade, pode realmente ajudar as pessoas a navegar em certas páginas da web ou coisas assim. Existem muitas ferramentas disponíveis e é sobre a ideia de que você pode ter observando a situação ao seu redor, e como você poderia resolver alguns desses problemas com o uso de aprendizado de máquina?
Drew: Para aprendizado de máquina, geralmente pensamos em linguagens, Python. Acho que é onde muito do tipo de desenvolvimento parece acontecer primeiro. Mas, como desenvolvedores da web, estamos obviamente mais confortáveis com JavaScript em geral. O aprendizado de máquina é algo que podemos esperar de forma realista. Quero dizer, pequenos exemplos divertidos são uma coisa, mas eles são realmente úteis para trabalho real em JavaScript?
Charlie: Bem, quero dizer, acho que sim, mas sei que a maioria das coisas que faço são protótipos, mas acho que depende da situação em que você está no trabalho. Existem maneiras de implementar o aprendizado de máquina como desenvolvedor em seu trabalho diário. Mas o que eu realmente gosto em JavaScript é o fato de que, se você já é um desenvolvedor front-end, não precisa aprender um novo ecossistema ou um novo conjunto de ferramentas ou uma nova sintaxe, uma nova linguagem. Você já está no ambiente em que trabalha todos os dias.
Charlie: Normalmente, quando você aprende esse tipo de coisa, você meio que tem que começar no seu próprio tempo, se não for seu trabalho do dia-a-dia e o tempo de todos for precioso e você não tiver muito tempo. Então, se você puder remover algumas barreiras e permanecer no mesmo ecossistema que conhece, acho que isso é muito bom, mas também pode começar… o poder do JavaScript para mim é que você pode começar construindo um pequeno protótipo para convencer pessoas que talvez haja uma ideia que precisa ser investigada e, sendo capaz de criar algo rapidamente em JavaScript, você pode validar que sua ideia está certa.
Charlie: Então, ou você pode obter o apoio da liderança para gastar mais tempo ou mais dinheiro, ou pode então dar isso aos desenvolvedores Python, se quiser construí-lo em Python. Mas para mim, essa capacidade de validar rapidamente uma ideia é super importante. Especialmente, talvez se você trabalhar para uma startup e tudo correr rápido e você for capaz de mostrar que algo vale a pena ser examinado, acho isso muito importante.
Charlie: E também o fato de que há realmente um grande ecossistema de ferramentas e há cada vez mais estruturas e aplicativos de aprendizado de máquina. Em JavaScript, não é apenas em uma página da Web que podemos adicionar aprendizado de máquina. Como eu estava dizendo antes, você pode construir extensões do Chrome e aplicativos de desktop com Electron, e aplicativos móveis com React Native, e hardware e IoT com frameworks como Johnny-Five.
Charlie: Então, com a linguagem que você já conhece, você tem acesso a um enorme ecossistema de plataformas diferentes nas quais pode executar o mesmo experimento. E eu acho que, para mim, isso é incrível. E é aí que vejo o verdadeiro poder do aprendizado de máquina em JavaScript. E conforme fica melhor, talvez você possa realmente integrá-lo aos aplicativos que construímos todos os dias.
Drew: JavaScript está em todo lugar, não está?
Charlie: Sim.
Drew: para melhor ou para pior, está em toda parte. Quem teria pensado nisso? Isso parece ótimo, mas também parece meio que um monte de trabalho. E penso sobre os conjuntos de dados e outras coisas, como diabos você começa a fazer esse tipo de tarefa?
Charlie: No momento, pelo menos com o TensorFlow.JS, há três coisas que você pode fazer com a estrutura. E digamos que o mais simples seja importar um modelo pré-treinado existente. Portanto, há alguns deles, há diferentes modelos que foram treinados com diferentes conjuntos de dados, e eu recomendaria começar com isso porque você pode aprender o básico de como usar o próprio framework e o que pode fazer com esses modelos.
Charlie: Então você tem certos modelos de reconhecimento de imagem que foram treinados com imagens diferentes. Alguns deles são melhores para reconhecimento de objetos. Alguns deles são melhores para o reconhecimento de pessoas e, ao entender quais modelos usar, podemos ficar livres para construir o que você quiser na restrição desse modelo.
Charlie: Mas acho que é uma boa maneira de começar. Eu ainda uso modelos pré-treinados para muitos dos meus experimentos porque também, por que você reinventaria a roda se ela já está lá? Vamos apenas usar as ferramentas que foram fornecidas. Então, quando você quiser ir, talvez um passo adiante, você pode fazer o que é chamado de aprendizagem por transferência, quando você retreinar um modelo importante. Você ainda usa um dos modelos pré-treinados, mas tem a oportunidade de retreiná-lo ao vivo com suas próprias amostras.
Charlie: Por exemplo, se você quiser usar uma classificação de imagem com pessoas diferentes, talvez queira fazer uma classificação de gestos. Se o seu modelo, por exemplo, é treinado com pessoas que sempre têm, eu não sei, a mão direita levantada ou algo assim, mas para sua aplicação, você quer a mão esquerda, você poderia retreinar esse modelo com suas amostras da esquerda mão, e então você teria um modelo que já está bastante treinado para reconhecer a mão direita, mas então você adicionaria sua própria amostra e você pode retreinar isso rapidamente no navegador, dependendo da quantidade de novos dados de entrada que você fornecer , leva um pouco de tempo, mas em alguns segundos você tem um modelo retreinado que é muito bom em reconhecer esses dois gestos que você pode usar no seu aplicativo.
Charlie: Normalmente, essa é a segunda etapa. E então uma terceira etapa que é um pouco mais complexa é quando você faz tudo no navegador. Então você escreve seu próprio modelo do zero e o treina no navegador e você realmente treina, executa e gera o modelo, tudo no navegador. Mas, em geral, o único aplicativo que vi para isso é a construção de visualizações. Quando você deseja visualizar o processo de um modelo sendo treinado e o número de etapas que está levando, quanto tempo está demorando, e você pode ver a precisão aumentando ou diminuindo, dependendo dos recursos que você escolhe e dos parâmetros que você ajusta.
Charlie: Então, eu realmente não brinquei com esse porque não encontrei um aplicativo para mim que quisesse construir, mas as duas primeiras etapas de usar apenas o modelo pré-treinado ou retreiná-lo com meu próprias amostras é onde eu vi pessoalmente. Eu me diverti com isso.
Drew: Normalmente, será o caso de criar o modelo de antemão, meio off-line, por assim dizer, e então o navegador usa esse modelo treinado, ou talvez adiciona um pouco, faz um pouco de retreinamento, mas geralmente esse modelo será estabelecido antes de ser colocado em uso no navegador do usuário?
Charlie: Em geral, sim. Então você pode definitivamente criar seu próprio modelo. Se você fizer isso, eu não recomendaria treiná-lo no navegador, mas você também pode fazer no NodeJS. Se você sabe, um pouco de NodeJS. Definitivamente, criei meus próprios modelos, mas geralmente o executo no NodeJS porque é um pouco mais eficiente. E então eu uso o modelo gerado que criei no navegador.
Drew: Quais ferramentas estão disponíveis para fazer isso com JavaScript? Você mencionou o TensorFlow JS, mas o que é isso, onde fica isso? Isso é do Google?
Charlie: Sim. No início, o Google tinha a ferramenta TensorFlow em Python e agora, no passado, talvez alguns anos, talvez um pouco mais, eles fizeram a versão JavaScript, então ela tende a fluir com JS. Mas também há ML5 JS que é um pouco uma abstração no topo. Então, se você estiver um pouco confuso ou se o TensorFlow JS parecer um pouco assustador com parte do vocabulário que eles usam em sua documentação, você pode usar ML5 JS que tem a maioria dos mesmos recursos, mas digamos que a API ou a sintaxe é um pouco mais amigável para iniciantes.
Charlie: Você pode começar com ML5, ver se gosta de aprendizado de máquina ou se pensa em um aplicativo legal e, então, se você tem alguns bloqueadores no ML5 ou o framework não tem certas coisas que você deseja fazer, você pode então passar para o TensorFlow JS, se quiser. E se você realmente não está interessado em escrever seu próprio código, mas deseja apenas usar ferramentas que já existem, existem algumas APIs da Amazon, Google e Microsoft para fazer reconhecimento de imagem ou reconhecimento de voz também. Portanto, se você está mais interessado em ver o que ele pode fazer, mas não quer perder muito tempo escrevendo o código, pode executar ping em algumas APIs e experimentar algumas de suas ferramentas também.
Drew: Isso é bastante interessante. Então você poderia usar o navegador para capturar a entrada de uma webcam ou microfone ou o que você quiser, e então enviar para a Amazon, Microsoft ou qualquer outra pessoa e então apenas deixá-los fazer o trabalho pesado?
Charlie: Sim.
Drew: E você simplesmente se beneficia com os resultados.
Charlie: Exatamente.
Drew: Essa parece uma maneira agradável e tentadora de apenas começar com as ideias. Parece ótimo, mas a que problemas podemos aplicar isso no front end? Já conversamos sobre algumas coisinhas, mas há outras maneiras de usar isso?
Charlie: Existem várias maneiras. Se eu começar com a classificação de imagens, sim, você poderia. Você pode usar imagens da web ou da webcam em seu telefone. Se você apenas usar seu site no telefone e puder tirar fotos e reconhecer objetos, e também fazer… Uma pequena coisa que eu construí foi em torno da reciclagem, onde se eu realmente não sei onde colocar certos objetos em qual lixeira, nós tem a lixeira amarela, a verde, depende dos países. Eles têm cores diferentes, mas às vezes não sou muito bom em saber onde jogar as coisas, então você pode construir pequenas ferramentas como esta, ao vivo pode reconhecer dois objetos na sua frente e então classificá-los e você pode construir certas coisas como isso.
Charlie: Caso contrário, você tem uma classificação de texto em que, no início deste ano, usei um dos modelos TensorFlow GS para ver os comentários escritos, problemas do GitHub e PRs do GitHub para então classificar e dizer: “Ei, se é um tóxico comentário, então você tem um pequeno bot que diz: “Ei, talvez você não devesse ter escrito isso,” ou, “Cuidado, é um pouco tóxico. Queremos que este seja um espaço seguro. ”” Portanto, você pode usar uma classificação de texto assim.
Charlie: Há uma classificação de som se você quiser, quando a Apple lançou seu novo relógio, o sistema operacional, eles tinham algo para reconhecer o som de água corrente, para dizer às pessoas para lavar as mãos por 20 segundos com a pandemia de COVID, mas você também pode fazer isso em JavaScript. E isso foi realmente interessante, eu estava assistindo alguns dos vídeos e pensei, “Oh, eu sei como fazer isso em JavaScript.”
Charlie: E eu construí um pequeno protótipo. Não sei se funciona no relógio da Apple. Talvez. Não tenho um, mas sei que funciona no meu telefone e no meu laptop. E então isso pode dar início a algumas ideias para outras pessoas também, onde um amigo meu, Ramón Huidobro, @hola_soy_milk no Twitter. Ele participou de muitas conferências online este ano. E um de seus problemas é que quando ele bate palmas para aplaudir alguém, então ele não tem tempo para adicionar o emoji de palmas no chat também. E o que ele queria fazer é ouvir o som de suas palmas e isso enviaria emojis de palmas automaticamente no chat.
Charlie: E são pequenas coisas assim que, se você quiser talvez um aplicativo realmente mais útil no seu trabalho diário, seja em torno da pré-busca preditiva. Isso também usa o aprendizado de máquina no front-end, ao observar as análises do seu site. Então, quais páginas geralmente são examinadas depois de quais, e coisas assim. Você pode pré-buscar recursos com antecedência com base na página que provavelmente será visitada depois. Isso é algo que eu queria analisar este ano todo, mas não tive tempo, mas isso permite que você realmente melhore o desempenho e a UX da sua página. E você não solicita recursos de que não vai precisar, então isso pode realmente melhorar, e isso também é uma aplicação de aprendizado de máquina.
Charlie: Então você pode fazer coisas divertidas ou pode fazer coisas mais úteis, mas não há aplicativo errado, pode haver aplicativos errados. Retiro o que disse, mas só estou dizendo que, se você está realmente começando, não há nada de errado em começar com algo divertido, e então posso apresentar algumas ideias de algo que você pode fazer no trabalho como bem.
Drew: Acho que a coisa realmente útil aqui é saber que essas coisas são possíveis. E, na verdade, apenas formas criativas de resolver problemas que podemos resolver por conta própria. Tradicionalmente, construímos coisas com a moderação do conteúdo enviado pelo usuário, e isso tem sido bastante primitivo e basicamente precisamos que os seres humanos examinem as coisas e tomem decisões sobre elas. Mas com o acesso ao aprendizado de máquina, nesse exemplo, poderíamos entregar mais disso e, em seguida, apenas deixar os humanos analisarem os casos extremos, por exemplo, coisas que não tinham uma correspondência convincente.
Drew: Of course that’s going to then be, it’s a bit of time up front to develop that thing and get it in place, but then you think of the savings of not having human beings manually checking stuff. What things can you see this being put to use for in the future as the technology improves?
Charlie: To me, maybe in the future, I think as models get smaller to load and they get more performant and we probably improve the datasets that they’re trained with. I’m hoping to be able to see tools that are more helpful. I mean, personally, I’m interested in that tiny machine learning models that can run on microcontrollers to build stuff. But if we stay in more of the front-end world, I’m hoping about maybe better voice recognition because I feel like we’re used to navigating the web with a track pad or a keyboard, but at the moment, there is still a voice recognition, but it’s not always super accurate, or it’s not accurate with accents, for example. And I’m hoping that as we develop better models that smaller people won’t be so scared to add it to their website because it won’t impact the performance that badly.
Charlie: I’m interested in using machine learning in stuff like predictive prefetching so that we can build smarter websites that improve the experience on a spectrum, because for the users, it’s better because the page is going to load faster, therefore performance in general of your site, it’s better. But also let’s say if we think about sustainability, not requesting useless resources is helping as well, the carbon footprint of your website. But then there’s also the carbon footprint of machine learning models. That’s not very good. So maybe let’s not talk about this. I would think for the future, I’m just hoping to have models that are maybe more performant or smaller so that people will be more likely to give it a try, because let’s say there’ll be less blockers for people to go into this, but let’s see.
Drew: Are there known limitations and constraints that we should be aware of before embarking on a machine learning project?
Charlie: Yeah. There are. I think, no matter if you’re doing it in JavaScript or Python, there are limits. I think if you do want to build something, that’s very customed, that there is no pre-trained model for, one of the limits is that you might need quite a lot of data and not everybody has that. 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: Yes. 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: Remember to have some fun. We talked a lot today about fun stuff, and then practical stuff, but if you’re willing to look into this, remember to have some fun, no matter what you decide to build.