Smashing Podcast Episódio 33 Com Charlie Gerard: O que é aprendizado de máquina?

Publicados: 2022-03-10
Resumo rápido ↬ Neste episódio, estamos falando sobre Machine Learning. Que tipo de tarefas podemos colocar dentro de um contexto de desenvolvimento web? Drew McLellan fala com o especialista Charlie Gerard para descobrir.

Neste episódio, estamos falando sobre Machine Learning. Que tipo de tarefas podemos colocar dentro de 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
    escrito 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 da Shopify em 2021
    escrito por Suzanne Scacca
  • Introdução ao pacote GetX em aplicativos Flutter
    escrito por Kelvin Omereshone

Transcrição

Foto de Charlie Gerard Drew McLellan: Ela é desenvolvedora de front-end sênior na Netlify, desenvolvedora do Google especialista em tecnologias da Web e palestrante de tecnologia da Mozilla. 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 fala regularmente em conferências e escreve postagens em blogs para compartilhar as coisas 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 uma vez ela escapou da prisão usando uma lima de metal que ela havia feito de crochê em sonhos. Meus incríveis amigos, por favor, sejam bem-vindos, Charlie Gerard. Olá 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 web. Costumo pensar em aprendizado de máquina como algo que acontece em data centers gigantes ou laboratórios com pessoas de jaleco branco. É definitivamente uma espécie de palavra da moda nos dias de hoje. O que diabos realmente queremos dizer quando dizemos 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 dissessem o que fazer. Espero que isso faça sentido quando continuarmos falando sobre isso, mas esse é o tipo de definição genérica de conversa. Você realmente não diz aos algoritmos ou modelos para procurarem por certas coisas. Eles aprendem através dos dados que você fornece e podem gerar previsões.

Drew: Então, ao invés de ter que codificar especificamente para certas circunstâncias, você meio que cria um caso genérico onde o software pode aprender a 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 de matemática hardcore ou um cientista de dados para fazer isso? Ou há coisas por aí como algoritmos estabelecidos e coisas que você pode chamar para começar?

Charlie: Sim. Então, felizmente, você não precisa ser um nerd hardcore de 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 precisar escrever tudo do zero. Então, se usarmos o ecossistema de front-end como comparação, você pode 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 essa API e como usá-la, se quiser. 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 mais tarde. Mas, para ser realmente honesto, é altamente improvável que você queira fazer isso.

Drew: Ok. Portanto, é 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 um pouco de CSS e o navegador cuida disso.

Charlie: Sim. Quando você começa, é principalmente algo 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 colocar em 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 determinada coisa, eu aconselharia primeiro pensar sobre o tipo de problema que você quer aprender que irá ajudá-lo 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 no tipo de problema que estou tentando resolver, e há três principais. Acho que provavelmente há um pouco mais, mas em geral, pelo que fui treinado para fazer e pelo que li, há três principais que são mencionados.

Charlie: Se você quer que eu entre nisso, há aprendizado supervisionado, aprendizado não supervisionado e aprendizado por reforço. Você também tem tantos supervisionados, mas para ser sincero, não sei muito sobre isso porque consegui 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: Aprendizado supervisionado, é quando seu conjunto de dados é feito de recursos e rótulos e você alimenta um algoritmo. Então, se pegarmos um exemplo com o qual esperamos que a maioria das pessoas se identifique, é, se você tem uma casa e quer vendê-la, e quer descobrir a que preço vai vender sua casa ou seu carro, 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 conhecendo seu preço no mercado, você poderia usar os recursos de sua própria casa; então quantos quartos e tem jardim e em que bairro fica? 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 ao seu redor, você pode usar um algoritmo de aprendizado de máquina que aprenderá a correlação entre os recursos de sua casa e os preços no mercado, para então obter as características da sua casa e poder gerar um preço a partir disso. Portanto, a coisa mais importante é no aprendizado supervisionado, você tem vários recursos e um rótulo também, para que você possa realmente traçar uma correlação entre os dois.

Drew: Você alimentaria o modelo com um vasto conjunto de dados sobre casas neste exemplo, onde você conhece o preço e conhece todos esses recursos sobre elas. Diga quartos e o que você tem, como metragem quadrada, e acho que a localização seria outro tipo de coisa que pode ser levada em consideração?

Charlie: Sim. Então, esse é um dos problemas com o aprendizado de máquina é que você pode ter muitos recursos e alguns deles não serão tão eficientes quanto outros. Então você pode ter, por exemplo, a cor da sua casa, pode na verdade não ter correlação com o preço, mas você pode dar um monte de recursos e o próprio modelo encontrará 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 que você alimente seu conjunto de dados para um modelo, você não terá uma previsão perfeita na primeira vez. Normalmente você ajusta algumas coisas diferentes e você vê. Você meio que ajusta até chegar a uma previsão que você acha que é bastante 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ê seria capaz de pegá-lo e usá-lo em outro lugar depois que o treinamento fosse concluído ou seria específico para esse conjunto de dados ou como isso funcionaria?

Charlie: Acho que seria específico para o conjunto de dados. Então isso significa que você pode criar outro conjunto de dados com o mesmo formato, digamos. Se você tiver uma planilha do Excel com colunas diferentes, poderá manter o mesmo rótulo e recursos, mas terá que substituí-lo pelos valores dessa cidade. Mas, em geral, isso significa que a coleta do conjunto de dados também pode levar muito tempo, mas se você já sabe o que fez para a 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 toda a análise do conjunto de dados. E é então usado para fazer previsões subsequentes. Esse é o modelo, sim?

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 aprendeu na etapa de treinamento. seria capaz de produzir uma previsão.

Drew: Então, aprendizado supervisionado, então ele faz esse modelo preditivo a partir de rótulos em recursos. O que é aprendizagem não supervisionada?

Charlie: Então sem supervisão é 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 não supervisionado, porque se você só conhece as características das casas ao seu redor, mas não tem um preço como rótulo, você não pode 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 isso. Você pode gerar mais tendências ou agrupamentos de coisas juntos. Você não usaria o aprendizado não supervisionado se quiser uma saída específica, se tiver uma certa pergunta, como: "Qual é o preço disso?" Esse não é um bom uso de não supervisionado, mas é mais, se você quiser agrupar entidades, podem ser pessoas ou coisas assim.

Charlie: 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 nesse caso… bem, eles têm dados sobre você, para que eles saibam o que você ouve, em que país você costuma estar ou quantas vezes por dia você ouve alguma coisa? Então, usando esses recursos sobre as pessoas, eles podem colocar você no mesmo cluster ou no mesmo tipo de ouvinte, 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ê. Então é mais esse tipo de problema.

Drew: Ok, tudo isso está fazendo muito mais sentido para mim agora como desenvolvedor web, porque esses tipos de usos sobre os quais falamos, preços de imóveis e recomendações e veiculação de anúncios e outras coisas, no final do 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 você quiser. Então, temos os diferentes tipos de aprendizado com base no assunto que estamos procurando prever. Existem outros tipos de aplicativos com os quais podemos colocar isso também? Existem bons exemplos que essas pessoas criaram que podem usar isso?

Charlie: Sim. São tantos exemplos. É por isso que, quando falo em 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. Há exemplos muito bons por aí. Acho que o primeiro que vi foi em torno de textos de arte gerados dinamicamente para imagens. Então, é claro, é algo que você mesmo pode fazer quando adiciona uma imagem a um site.

Charlie: Mas e se você tiver um site que realmente tenha toneladas de imagens e, em vez de fazer manualmente, você pudesse alimentar cada imagem em um algoritmo de aprendizado de máquina, e isso geraria um texto artístico sobre o que é essa imagem, e talvez o único passo humano seria verificar se isso está correto, mas realmente permitiria que você concentrasse seu tempo na construção do aplicativo.

Charlie: E você ainda tornaria seu site acessível tendo texto de arte para imagens, mas seria meio que gerado por uma máquina. Esse é um dos exemplos que eu vi quando comecei a fazer isso, mas você também tem um protótipo de filtragem não segura para conteúdo de trabalho. E eu estava pensando que seria realmente 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 verificaria se o que está na página é um conteúdo seguro.

Charlie: Por exemplo, se você tem filhos usando seu laptop ou coisas assim, você pode 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 as coisas automaticamente para você, para que você não precise se preocupar com certas tarefas, ou pode simplesmente 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 todas essas coisas. Assim, você pode realmente mesclar muitas tecnologias diferentes com voz e webcam e aprendizado de máquina apenas para reconhecimento e poder interagir com diferentes tecnologias, mas de uma nova maneira. Então, pode realmente ser muito divertido.

Drew: Isso é bastante fascinante, porque analisamos os modelos de dados como tal, e agora estamos pensando em analisar o conteúdo da imagem e analisar o conteúdo das imagens usando aprendizado de máquina, o que é bastante interessante. Acho que esse é o tipo de recurso que o Facebook tem, se alguém postar uma foto que eles acham que pode ser sangrenta ou mostrar uma lesão ou algo assim, e ela desfoca, e então você tem que clicar para revelá-la. Esse tipo de coisa, obviamente, o Facebook não pode ter equipes de moderadores olhando para cada imagem que é carregada.

Charlie: Espero que não.

Drew: Isso seria uma tarefa sem fim.

Charlie: Isso também não é um grande trabalho.

Drew: Eu costumava trabalhar em um site de anúncios gratuitos onde as pessoas podiam postar anúncios. E havia muita moderação envolvida 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 fiz isso um pouco também. Eu gostaria que naquela época houvesse aprendizado de máquina, apenas uma pequena ferramenta de utilidade apenas para fazer isso por mim, e agora está lá. Então isso é muito legal.

Drew: Sim, isso é ótimo. E é muito empolgante pensar na entrada ao vivo de uma webcam e poder analisar isso em tempo real, para que você possa fazer interações baseadas em gestos. É aquele…

Charlie: Sim, então no fundo ele usa mais classificação de imagem, porque sua webcam, uma imagem é um conjunto de pixels, mas quando você faz certos gestos, você pode treinar um modelo para reconhecer que sua mão direita está levantada e talvez você controlaria o mouse assim, ou olharia para a coordenada de sua mão e a tela, e você seguiria o mouse. Você realmente pode fazer o que quiser. Você poderia talvez ter reconhecimento de cores.

Charlie: Você pode fazer coisas realmente divertidas. Um protótipo que eu construí, que eu meio que desisti disso em algum momento, mas eu construí um pouco… Eu queria que fosse uma extensão do Chrome, mas não funcionou. Eu construí um pequeno aplicativo de desktop com o Electron. Também em JavaScript, onde eu poderia navegar em uma página da Web apenas inclinando a cabeça. Então ele reconheceria que quando eu inclino minha cabeça para baixo, então ele rola para baixo, e quando eu subo, ele sobe. Eram apenas 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 seu computador e lendo as notícias e eu não queira que meu teclado fique sujo, então eu posso apenas inclinar minha cabeça, mas também espero que, por acessibilidade, realmente ajudar as pessoas a navegar em determinadas páginas da web ou coisas assim. Há muitas ferramentas disponíveis e é sobre a ideia de que você pode observar a situação ao seu redor e como você pode resolver alguns desses problemas usando o aprendizado de máquina?

Drew: Para aprendizado de máquina, geralmente pensamos em linguagens, Python. Eu acho que é onde muito do tipo de desenvolvimento parece acontecer primeiro. Mas, como desenvolvedores web, obviamente estamos mais confortáveis ​​com JavaScript em geral. O aprendizado de máquina é algo que podemos esperar realisticamente fazer. Quero dizer, pequenos exemplos divertidos são uma coisa, mas é realmente útil para o 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 no JavaScript é o fato de que se você já é um desenvolvedor front-end, você 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 o seu trabalho do dia-a-dia e o tempo de todo mundo é precioso e você não tem muito dele. Então, se você pode 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 as pessoas de que talvez haja uma ideia que precise ser investigada e, sendo capaz de criar algo rapidamente em JavaScript, você pode validar que sua ideia está correta.

Charlie: Então você pode obter a adesão da liderança para gastar mais tempo ou mais dinheiro, ou então você pode dar isso aos desenvolvedores Python, se você quiser construí-lo em Python. Mas para mim, essa capacidade de validar rapidamente uma ideia é super importante. Especialmente, talvez se você trabalha para uma startup e tudo acontece rápido e você é capaz de mostrar que vale a pena investigar, acho que 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 aplicações 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 criar extensões do Chrome e aplicativos de desktop com Electron e aplicativos móveis com React Native e hardware e IoT com estruturas como Johnny-Five.

Charlie: Então, com a linguagem que você já conhece, você realmente tem acesso a um enorme ecossistema de diferentes plataformas nas quais você pode executar o mesmo experimento. E eu acho que, para mim, isso é incrível. E é aí que vejo o verdadeiro poder de fazer aprendizado de máquina em JavaScript. E à medida que melhora, talvez você possa realmente integrá-lo nos aplicativos que construímos todos os dias.

Drew: JavaScript está em toda parte, não é?

Charlie: Sim.

Drew: Para melhor ou para pior, está em toda parte. Quem teria pensado isso? Isso soa ótimo, mas também soa como um monte de trabalho. E penso nos conjuntos de dados e 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 o framework. E digamos que o mais simples seja importar um modelo pré-treinado existente. Então, 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 você pode fazer com esses modelos.

Charlie: Então você tem alguns 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 das 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 essa é 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á existe? Vamos apenas usar as ferramentas que foram dadas. Então, quando você quiser ir, talvez um passo adiante, você pode fazer o que é chamado de aprendizado de transferência, quando você treina novamente um modelo importante. Assim, 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 onde você tem pessoas diferentes, então você pode querer fazer uma classificação de gestos, talvez. Se o seu modelo, por exemplo, é treinado com pessoas que sempre têm, não sei, a mão direita levantada ou algo assim, mas para sua aplicação, você quer a mão esquerda, você pode treinar novamente 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ê poderia retreiná-la rapidamente no navegador, dependendo da quantidade de novos dados de entrada que você fornecer , leva um pouco de tempo, mas em poucos segundos você tem um modelo retreinado que é muito bom em reconhecer esses dois gestos que você pode usar em seu aplicativo.

Charlie: Então esse é normalmente o segundo passo. E então um terceiro passo que é um pouco mais complexo é quando você faz tudo no navegador. Então você escreve seu próprio modelo do zero e o treina no navegador e realmente treina, executa e gera o modelo, tudo no navegador. Mas, em geral, a única aplicação 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 pode ver a precisão subindo ou descendo, dependendo dos recursos que você escolher e dos parâmetros que você ajustar .

Charlie: Então, eu realmente não brinquei com esse porque não encontrei um aplicativo para mim com o qual eu quisesse construir, mas os dois primeiros passos de usar apenas o modelo pré-treinado ou retreiná-lo com minhas próprias amostras são onde pessoalmente eu vi. Eu me diverti com isso.

Drew: Então, normalmente será um caso de criar o modelo de antemão, meio offline, por assim dizer, e então o navegador usará esse modelo treinado, ou talvez adicionar um pouco, ele 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 fazê-lo no NodeJS. Se você conhece, um pouco de NodeJS. Definitivamente, criei meus próprios modelos, mas costumo executá-lo no NodeJS porque é um pouco mais eficiente. E então eu uso o modelo gerado que eu criei então no navegador.

Drew: Quais ferramentas estão disponíveis para fazer isso com JavaScript? Você mencionou o TensorFlow JS, mas o que é isso, onde está isso? Isso é do Google?

Charlie: Sim. No começo, o Google tinha a ferramenta TensorFlow em Python e agora, nos últimos, talvez alguns anos, talvez um pouco mais, eles fizeram a versão JavaScript, então tende a fluir com JS. Mas também há o ML5 JS que é um pouco abstrato. Portanto, se você estiver um pouco confuso ou se o TensorFlow JS parecer um pouco assustador com alguns dos vocabulários que eles usam em sua documentação, você pode usar o 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 o ML5, ver se gosta de aprendizado de máquina, ou se pensa em um aplicativo legal, e então, se você tiver alguns bloqueadores no ML5 ou se o framework não tiver certas coisas que você quer fazer, você pode então passar para o TensorFlow JS, se quiser. E se você realmente não está interessado em realmente escrever seu próprio código, mas quer 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. Então, se você está mais interessado em ver o que ele pode fazer, mas não quer gastar muito tempo escrevendo o código, você pode fazer ping em algumas APIs e experimentar algumas de suas ferramentas também.

Drew: Isso é muito interessante. Então você poderia usar o navegador para pegar a entrada de uma webcam ou um microfone ou o que você tem, e depois enviar isso para a Amazon, Microsoft ou quem quer que seja e depois deixá-los fazer o trabalho duro?

Charlie: Sim.

Drew: E então você só se beneficia dos resultados.

Charlie: Exatamente.

Drew: Parece uma maneira agradável e tentadora de começar com as ideias. Parece ótimo, mas em quais problemas podemos aplicar isso no front-end? Conversamos sobre algumas coisinhas, mas existem outras maneiras de usar isso?

Charlie: Há muitas maneiras. Se eu começar com classificação de imagens, sim, você pode. Você pode usar imagens da web ou da webcam em seu telefone. Se você apenas usa seu site no seu telefone e pode tirar fotos e reconhecer objetos, e qualquer um faz… Uma pequena coisa que construí foi sobre 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 eu não sou muito bom em saber onde realmente jogar as coisas para que você possa construir pequenas ferramentas como esta que, ao vivo, pode reconhecer dois objetos na sua frente e classificá-los e você pode construir certas coisas como esta.

Charlie: Caso contrário, você tem classificação de texto onde, no início deste ano, usei um dos modelos do TensorFlow GS para analisar comentários escritos, problemas do GitHub e PRs do GitHub para classificar e dizer: “Ei, se for um comentário tóxico, 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.”” Então você pode usar a classificação de texto assim.

Charlie: Há classificação de som se você quiser, onde quando a Apple lançou seu novo relógio, OS, eles tinham algo para reconhecer o som da água corrente, para dizer às pessoas, para lavar as mãos por 20 segundos com a pandemia de COVID, mas você pode fazer isso em JavaScript também. E o que foi realmente interessante, eu estava assistindo a alguns dos vídeos e fiquei tipo, “Oh, eu sei como fazer isso em JavaScript”.

Charlie: E eu construí um pequeno protótipo. Não sei se roda no Apple Watch. Pode ser. Eu não tenho um, mas sei que funciona no meu telefone e no meu laptop. E então isso pode dar algumas ideias para outras pessoas também, onde um amigo meu, Ramon Huidobro, @hola_soy_milk no Twitter. Ele esteve em muitas conferências online este ano. E um dos problemas dele é que quando ele bate palmas para aplaudir alguém, ele não tem tempo de adicionar o emoji de palmas no bate-papo também. E o que ele queria fazer era ouvir o som de suas palmas e isso enviaria automaticamente emojis de palmas no chat.

Charlie: E são pequenas coisas como essa 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 está usando o aprendizado de máquina no front-end, ao analisar as análises do seu site. Então, quais páginas geralmente são examinadas e coisas assim. Você pode pré-buscar recursos com antecedência com base na página com maior probabilidade de ser visitada depois. Isso é algo que eu estava querendo analisar o ano todo, mas não tive tempo, mas isso permite que você realmente melhore o desempenho e o UX da sua página. E você não solicita recursos 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 você pode fazer coisas mais úteis, mas não há aplicação errada, pode haver aplicações erradas. Eu retiro, mas estou apenas dizendo que se você está realmente começando, não há nada de errado em começar com algo divertido, e então eu posso criar algumas ideias de algo que você pode fazer no trabalho como Nós vamos.

Drew: Acho que a coisa realmente útil aqui é saber que essas coisas são possíveis. E, na verdade, apenas maneiras criativas de resolver problemas que podemos fazer por conta própria. Tradicionalmente, construímos coisas pela moderação do conteúdo enviado pelo usuário, e tem sido bastante primitivo e basicamente tivemos que fazer com que os seres humanos olhassem as coisas e tomassem decisões sobre isso. Mas com acesso ao aprendizado de máquina, nesse exemplo, poderíamos entregar mais disso e depois apenas fazer com que os humanos olhassem os casos extremos, por exemplo, coisas que não tinham uma correspondência convincente.

Drew: Claro que vai acontecer, é um pouco de tempo para desenvolver essa coisa e colocá-la no lugar, mas então você pensa na economia de não ter seres humanos verificando as coisas manualmente. Para que coisas você pode ver isso sendo usado no futuro, à medida que a tecnologia melhora?

Charlie: Para mim, talvez no futuro, eu acho que à medida que os modelos ficam menores para carregar e eles ficam mais eficientes, provavelmente melhoraremos os conjuntos de dados com os quais eles são treinados. Espero poder ver ferramentas mais úteis. Quer dizer, pessoalmente, estou interessado naqueles minúsculos modelos de aprendizado de máquina que podem ser executados em microcontroladores para construir coisas. Mas se ficarmos mais no mundo do front-end, espero talvez um melhor reconhecimento de voz porque sinto que estamos acostumados a navegar na web com um trackpad ou teclado, mas no momento ainda há um reconhecimento de voz, mas nem sempre é super preciso, ou não é preciso com acentos, por exemplo. E espero que, à medida que desenvolvermos modelos melhores, as pessoas menores não tenham tanto medo de adicioná-lo ao site, porque isso não afetará tanto o desempenho.

Charlie: Estou interessado em usar aprendizado de máquina em coisas como pré-busca preditiva, para que possamos criar sites mais inteligentes que melhorem a experiência em um espectro, porque para os usuários é melhor porque a página será carregada mais rapidamente, portanto, o desempenho em geral do seu site, é melhor. Mas também digamos que se pensarmos em sustentabilidade, não solicitar recursos inúteis está ajudando também a pegada de carbono do seu site. Mas também há a pegada de carbono dos modelos de aprendizado de máquina. Isso não é muito bom. Então talvez não vamos falar sobre isso. Eu pensaria no futuro, só espero ter modelos que sejam talvez mais performáticos ou menores para que as pessoas tenham mais chances de tentar, porque digamos que haverá menos bloqueadores para as pessoas entrarem nisso , mas vamos ver.

Drew: Existem limitações e restrições conhecidas das quais devemos estar cientes antes de embarcar em um projeto de aprendizado de máquina?

Charlie: Sim. Tem. Eu acho que, não importa se você está fazendo isso em JavaScript ou Python, há limites. Acho que se você quer construir algo muito customizado, para o qual não existe um modelo pré-treinado, um dos limites é que você pode precisar de muitos dados e nem todo mundo tem isso. 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: Sim. 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: Lembre-se de se divertir. Falamos muito hoje sobre coisas divertidas e depois coisas práticas, mas se você estiver disposto a investigar isso, lembre-se de se divertir, não importa o que você decida construir.