Mark Zuckerberg relata a experiência de construir sozinho o seu JARVIS. |
Traduzimos os dizeres de Mark Zuckerberg em sua aventura na construção de um sistema tipo "JARVIS" do filme Homem de Ferro. Se quiser ver o artigo em inglês, clique aqui.
Mark Zuckerberg - Meu desafio pessoal para 2016 foi construir um AI (Inteligência Artificial) simples para executar em minha casa - como o Jarvis em Homem de Ferro.
Meu objetivo era aprender sobre o estado da inteligência artificial - onde estamos mais longe do que as pessoas percebem e onde ainda estamos longe. Esses desafios sempre me levam a aprender mais do que eu esperava, e este também me deu uma ideia melhor de toda a tecnologia interna que os engenheiros do Facebook usam, assim como uma visão geral completa da automação residencial.
Até agora este ano, eu construí um AI simples que eu posso falar no meu telefone e computador, que pode controlar a minha casa, incluindo luzes, temperatura, aparelhos, música e segurança, que aprende os meus gostos e padrões, que pode aprender novas palavras e conceitos, e que pode até mesmo entreter Max. Ele usa várias técnicas de inteligência artificial, incluindo processamento de linguagem natural, reconhecimento de fala, reconhecimento facial e aprendizado de reforço, escrito em Python, PHP e Objective C. Nesta nota, vou explicar o que eu construí e o que aprendi ao longo do caminho.
Introdução: Conectando a casa
De certa forma, esse desafio era mais fácil do que eu esperava. Na verdade, meu desafio de corrida (eu também estabelecido para executar 365 milhas em 2016) levou mais tempo total. Mas um aspecto que era muito mais complicado do que eu esperava era simplesmente conectar e comunicar com todos os diferentes sistemas em minha casa.
Antes que eu pudesse construir qualquer AI, eu primeiro precisava escrever código para conectar esses sistemas, que todos falam idiomas e protocolos diferentes. Nós usamos um sistema Crestron com nossas luzes, termostato e portas, um sistema Sonos com Spotify para música, uma TV Samsung, uma câmera Nest para Max e, claro, meu trabalho está conectado aos sistemas do Facebook. Eu tive que fazer engenharia reversa APIs para alguns destes até chegar ao ponto onde eu poderia emitir um comando do meu computador para ligar as luzes ou obter uma música para ouvir.
Além disso, a maioria dos aparelhos nem sequer estão conectados à internet ainda. É possível controlar alguns deles usando switches de energia conectados à internet que permitem ligar e desligar remotamente a alimentação. Mas muitas vezes isso não é suficiente. Por exemplo, uma coisa que eu aprendi é que é difícil encontrar uma torradeira que permitirá que você empurre o pão para baixo, enquanto ele está desligado para que você possa começar a brindar automaticamente quando o poder continua. Acabei por encontrar uma torradeira velha dos anos 1950 e arrumar-lo com um interruptor ligado. Da mesma forma, eu achei que a conexão de um distribuidor de alimentos para a beast ou um canhão cinza t-shirt iria exigir modificações de hardware para o trabalho.
Para que assistentes como Jarvis possam controlar tudo em casas para mais pessoas, precisamos de mais dispositivos para serem conectados e a indústria precisa desenvolver APIs e padrões comuns para que os dispositivos conversem entre si.
Linguagem Natural
Uma vez que eu escrevi o código para que meu computador pudesse controlar minha casa, o próximo passo era fazê-lo para que eu pudesse conversar com meu computador e casa da maneira que eu falaria com qualquer outra pessoa. Este foi um processo de dois passos: primeiro eu fiz isso para que eu pudesse se comunicar usando mensagens de texto, e mais tarde eu adicionei a capacidade de falar e tê-lo traduzir o meu discurso em texto para que ele possa ler.
Começou simples procurando por palavras-chave, como "quarto", "luzes", e "on" para determinar eu estava dizendo para ligar as luzes no quarto. Tornou-se rapidamente claro que precisava aprender sinônimos, como que "sala de família" e "sala de estar" significam a mesma coisa em nossa casa. Isso significava construir uma maneira de ensinar novas palavras e conceitos.
Compreender o contexto é importante para qualquer AI. Por exemplo, quando eu digo para transformar o AC em "meu escritório", isso significa algo completamente diferente de quando Priscilla (Sua mulher) diz a mesma coisa. Que um causou alguns problemas! Ou, por exemplo, quando você pede para tornar as luzes mais fracas ou para tocar uma música sem especificar um quarto, precisa saber onde você está ou pode acabar explodindo música no quarto de Max quando realmente precisamos dela para tirar uma soneca. Oops.
A música é um domínio mais interessante e complexo para a linguagem natural, porque há muitos artistas, músicas e álbuns para um sistema de palavras-chave para lidar. A gama de coisas que você pode perguntar é também muito maior. As luzes só podem ser giradas para cima ou para baixo, mas quando você diz "jogar X", mesmo sutis variações podem significar muitas coisas diferentes.
Considere estas solicitações relacionadas a Adele: "jogar alguém como você", "jogar alguém como adele", e "jogar algum adele". Esses som semelhante, mas cada um é uma categoria completamente diferente de pedido. O primeiro toca uma música específica, o segundo recomenda um artista e o terceiro cria uma lista de reprodução das melhores músicas de Adele. Através de um sistema de feedback positivo e negativo, um AI pode aprender essas diferenças.
Quanto mais contexto tiver um AI, melhor ele poderá lidar com pedidos abertos. Neste ponto, eu principalmente pergunto a Jarvis para "tocar-me alguma música" e ao olhar para os meus padrões de escuta passados, ele prega algo que eu gostaria de ouvir. Se ele fica com o humor errado, eu posso apenas dizer, por exemplo, "que não é leve, jogar algo leve", e pode tanto aprender a classificação para essa música e ajustar imediatamente. Ele também sabe se eu estou falando com ele ou Priscilla é, para que ele possa fazer recomendações com base no que cada um de nós ouvir. Em geral, descobri que usamos esses pedidos mais abertos com mais freqüência do que solicitações mais específicas. Nenhum produto comercial que eu conheço faz isso hoje, e isso parece uma grande oportunidade.
Visão e Reconhecimento de Rosto
Cerca de um terço do cérebro humano é dedicado à visão, e há muitos problemas de IA importantes relacionados com a compreensão do que está acontecendo em imagens e vídeos. Esses problemas incluem o rastreamento (por exemplo, Max está acordado e se movendo em seu berço?), reconhecimento de objetos (por exemplo, é um cachorro ou um tapete naquela sala?) E reconhecimento facial (por exemplo, quem está na porta?).
Reconhecimento facial é uma versão particularmente difícil de reconhecimento de objetos, porque a maioria das pessoas olha relativamente semelhante em comparação com dizer distante dois objetos aleatórios - por exemplo, um sanduíche e uma casa. Mas o Facebook tem obtido muito bom no reconhecimento facial para identificar quando seus amigos estão em suas fotos. Essa perícia também é útil quando seus amigos estão à sua porta e sua IA precisa determinar se deve deixá-los entrar.
Para fazer isso, eu instalei algumas câmeras na minha porta que podem capturar imagens de todos os ângulos. Os sistemas AI hoje não podem identificar as pessoas por de trás de suas cabeças, então ter alguns ângulos garante que vemos o rosto da pessoa. Eu construí um servidor simples que continuamente assiste as câmeras e executa um processo de duas etapas: primeiro, ele executa a detecção de rosto para ver se qualquer pessoa entrou em exibição, e segundo, se ele encontra um rosto, então ele executa o reconhecimento facial para identificar quem A pessoa é. Uma vez que identifica a pessoa, verifica uma lista para confirmar que eu estou esperando essa pessoa, e se eu sou então deixá-los-á dentro e dizer-me que estão aqui.
Este tipo de sistema de AI visual é útil para uma série de coisas, incluindo saber quando Max está acordado para que ele possa começar a tocar música ou uma aula de mandarim, ou resolver o problema de contexto de saber que quarto na casa em que estamos, pode responder corretamente a solicitações sem contexto como "acender as luzes" sem fornecer um local. Como a maioria dos aspectos desta IA, a visão é mais útil quando ela informa um modelo mais amplo do mundo, conectado com outras habilidades como saber quem são seus amigos e como abrir a porta quando eles estão aqui. Quanto mais contexto o sistema tem, mais inteligente é obtém global.
Messenger Bot
Eu programei Jarvis no meu computador, mas para ser útil eu queria ser capaz de comunicar com ele de qualquer lugar que eu estava. Isso significava que a comunicação tinha de acontecer através do meu telefone, e não um dispositivo colocado em minha casa.
Eu comecei a construir um bot Messenger para se comunicar com Jarvis porque era muito mais fácil do que construir um aplicativo separado. O Messenger possui uma estrutura simples para a construção de bots, e ele gerencia automaticamente muitas coisas para você - trabalhando em iOS e Android, suportando texto, imagem e conteúdo de áudio, entregando confiantemente notificações push, gerenciando identidades e permissões para diferentes pessoas e muito mais. Você pode aprender sobre a estrutura de bots no messenger.com/platform.
Eu posso qualquer coisa de texto para o meu bot Jarvis, e ele será imediatamente retransmitido para o meu servidor Jarvis e processado. Eu também posso enviar clipes de áudio e o servidor pode traduzi-los em texto e, em seguida, executar esses comandos. No meio do dia, se alguém chegar em minha casa, Jarvis pode me mandar uma mensagem de texto e me dizer quem está lá, ou pode me enviar um texto quando preciso fazer algo.
Uma coisa que me surpreendeu sobre a minha comunicação com Jarvis é que quando eu tenho a opção de falar ou mensagens de texto, eu texto muito mais do que eu teria esperado. Isto é por uma série de razões, mas na maioria das vezes parece menos perturbador para as pessoas ao meu redor. Se eu estou fazendo algo que se relaciona com eles, como tocar música para todos nós, então falar se sente bem, mas na maioria das vezes o texto se sente mais apropriado. Da mesma forma, quando Jarvis se comunica comigo, eu prefiro receber isso por mensagem de texto do que por voz. Isso é porque a voz pode ser disruptiva e texto lhe dá mais controle de quando você quer olhar para ele. Mesmo quando eu falo a Jarvis, se eu estou usando meu telefone, eu prefiro frequentemente a texto ou indicar sua resposta.
Essa preferência para comunicação de texto por comunicação de voz se encaixa em um padrão que estamos vendo com o Messenger e o WhatsApp em geral, onde o volume de mensagens de texto em todo o mundo está crescendo muito mais rápido do que o volume de comunicação de voz. Isso sugere que os futuros produtos da AI não podem ser focados unicamente na voz e precisarão também de uma interface de mensagens privadas. Uma vez que você está permitindo mensagens privadas, é muito melhor usar uma plataforma como o Messenger do que construir um novo aplicativo a partir do zero. Sempre fui otimista em relação aos bots AI, mas a minha experiência com Jarvis me fez ainda mais otimista de que todos nós nos comunicaremos com robôs como Jarvis no futuro.
Reconhecimento de Voz e Voz
Mesmo que eu acho que o texto será mais importante para se comunicar com AIs do que as pessoas percebem, eu ainda acho que a voz vai desempenhar um papel muito importante também. O aspecto mais útil da voz é que é muito rápido. Você não precisa tirar o telefone, abrir um aplicativo e começar a digitar - você só fala.
Para habilitar voz para Jarvis, eu precisava construir um aplicativo dedicado Jarvis que poderia ouvir continuamente o que eu digo. O bot Messenger é ótimo para muitas coisas, mas a fricção por usar o discurso é demais. Meu aplicativo dedicado Jarvis permite que eu coloque o meu telefone em uma mesa e só tenho que ouvir. Eu também poderia colocar um número de telefones com o aplicativo Jarvis em torno de minha casa para que eu pudesse falar com Jarvis em qualquer sala. Isso parece ser semelhante à visão da Amazon com o Echo, mas na minha experiência, é surpreendente como freqüentemente eu quero me comunicar com Jarvis quando não estou em casa, então ter o telefone ser a interface primária ao invés de um dispositivo doméstico parece crítico.
Eu construí a primeira versão do aplicativo Jarvis para iOS e eu planejo construir uma versão do Android em breve também. Eu não tinha construído um aplicativo iOS desde 2012 e uma das minhas principais observações é que a ferramenta que nós construímos no Facebook desde então para o desenvolvimento desses aplicativos e para fazer o reconhecimento de fala é muito impressionante.
Os sistemas de reconhecimento de fala melhoraram recentemente, mas nenhum sistema AI é bom o suficiente para entender o discurso conversacional ainda. Reconhecimento de fala depende tanto de ouvir o que você diz e prever o que você vai dizer a seguir, assim que o discurso estruturado ainda é muito mais fácil de entender do que a conversa não estruturada.
Outra limitação interessante dos sistemas de reconhecimento de fala - e os sistemas de aprendizado de máquinas em geral - é que eles são mais otimizados para problemas específicos do que a maioria das pessoas percebe. Por exemplo, entender uma pessoa conversando com um computador é um problema sutilmente diferente da compreensão de uma pessoa conversando com outra pessoa. Se você treinar um sistema de aprendizado de máquina em dados do Google de pessoas falando para um mecanismo de busca, ele irá executar relativamente pior no Facebook para entender as pessoas falando com pessoas reais. No caso de Jarvis, treinar um AI que você vai falar de perto também é diferente de treinar um sistema que você vai falar de todo o caminho através da sala, como Eco. Estes sistemas são mais especializados do que parece, e isso implica que estamos mais longe de ter sistemas gerais do que poderia parecer.
Em um nível psicológico, uma vez que você pode falar com um sistema, você atribui mais profundidade emocional a ele do que um computador que você pode interagir com o uso de texto ou uma interface gráfica. Uma observação interessante é que sempre que eu construí a voz em Jarvis, eu também quis construir em mais humor. Parte disso é que agora ele pode interagir com Max e eu quero que essas interações para ser divertido para ela, mas parte dela é que agora parece que está presente conosco. Eu ensinei-lhe pequenos jogos divertidos como Priscilla ou eu posso perguntar quem devemos fazer cócegas e aleatoriamente dizer a nossa família para todos ir cócegas um de nós, Max ou Beast. Eu também me diverti juntando linhas clássicas como "Desculpe, Priscilla, mas eu não posso fazer isso."
Há muito mais para explorar com voz. A tecnologia da AI está apenas ficando boa o suficiente para que esta seja a base de um ótimo produto, e ele vai ficar muito melhor nos próximos anos. Ao mesmo tempo, acho que os melhores produtos como este serão aqueles que você pode trazer com você em qualquer lugar e se comunicar com privadamente também.
Ambiente de engenharia Facebook
Como CEO do Facebook, eu não tenho muito tempo para escrever código em nosso ambiente interno. Eu nunca parei de codificar, mas ultimamente eu construo projetos pessoais como Jarvis. Eu esperava que eu aprendesse muito sobre o estado de AI este ano, mas eu não percebi que eu também aprenderia muito sobre o que é ser um engenheiro no Facebook. E é impressionante.
Minha experiência de ramping up no codebase Facebook é provavelmente muito semelhante ao que a maioria dos engenheiros aqui passar. Eu estava consistentemente impressionado com o quão bem organizado é o nosso código, e como foi fácil encontrar o que você está procurando - se ele está relacionado ao reconhecimento facial, reconhecimento de voz, o Messenger Bot Framework [messenger.com/platform] ou iOS desenvolvimento. Os pacotes open source Nuclide [github.com/facebook/nuclide] que criamos para trabalhar com o Atom do GitHub facilitam o desenvolvimento. O Buck [buckbuild.com] sistema de construção que desenvolvemos para construir grandes projetos rapidamente também me salvou muito tempo. Nossa ferramenta de classificação de texto Open Text FastText [github.com/facebookresearch/fastTex ...] AI também é uma boa para verificar, e se você está interessado no desenvolvimento de AI, toda a Pesquisa do Facebook [github.com/facebookresearch] GitHub repo vale a pena dar uma olhada.
Um dos nossos valores é "mover rápido". Isso significa que você deve ser capaz de vir aqui e construir um aplicativo mais rápido do que você pode em qualquer outro lugar, incluindo por conta própria. Você deve ser capaz de vir aqui e usar nossas infra e ferramentas AI para construir coisas que levaria muito tempo para construir em seu próprio país. Construção de ferramentas internas que tornam a engenharia mais eficiente é importante para qualquer empresa de tecnologia, mas isso é algo que tomamos especialmente a sério. Então eu quero dar um grito para fora para todos em nossas equipes infra e ferramentas que fazem isso tão bom.
Próximos passos
Embora este desafio esteja terminando, tenho certeza que continuarei melhorando Jarvis, já que uso todos os dias e sempre encontro novas coisas que quero acrescentar.
A curto prazo, os passos mais claros a seguir são a construção de um aplicativo para Android, a criação de terminais de voz Jarvis em mais salas ao redor de minha casa e a conexão de mais aparelhos. Eu adoraria que Jarvis controlasse meu Big Green Egg e me ajudasse a cozinhar, mas isso exigirá um hacking ainda mais sério do que montar o canhão do t-shirt.
A longo prazo, eu gostaria de explorar o ensino de Jarvis como aprender novas habilidades em si, em vez de eu ter que ensiná-lo a executar tarefas específicas. Se eu passei mais um ano nesse desafio, eu me concentraria mais em aprender como o aprendizado funciona.
Finalmente, ao longo do tempo seria interessante encontrar maneiras de torná-lo disponível para o mundo. Eu considerei open source meu código, mas é atualmente muito fortemente vinculado à minha própria casa, aparelhos e configuração de rede. Se eu construir uma camada que abstrai mais funcionalidade de automação residencial, posso liberar isso. Ou, claro, que poderia ser uma grande base para construir um novo produto.
Conclusões
Construir Jarvis foi um interessante desafio intelectual, e me deu experiência direta na construção de ferramentas de AI em áreas que são importantes para o nosso futuro.
Eu previ previamente que dentro de 5-10 anos teremos sistemas de AI que são mais precisos do que as pessoas para cada um dos nossos sentidos - visão, audição, toque, etc, bem como coisas como a linguagem. É impressionante o quão poderoso o estado da arte para essas ferramentas está se tornando, e este ano me faz mais confiante na minha previsão.
Ao mesmo tempo, ainda estamos longe de entender como funciona o aprendizado.
Tudo o que fiz este ano - linguagem natural, reconhecimento facial, reconhecimento de fala e assim por diante - são todas as variantes das mesmas técnicas fundamentais de reconhecimento de padrões. Sabemos como mostrar a um computador muitos exemplos de algo para que ele possa reconhecê-lo com precisão, mas ainda não sabemos como tirar uma idéia de um domínio e aplicá-lo a algo completamente diferente.
Para colocar isso em perspectiva, eu passei cerca de 100 horas construindo Jarvis este ano, e agora eu tenho um sistema muito bom que me entende e pode fazer muitas coisas. Mas mesmo se eu gastasse mais 1.000 horas, eu provavelmente não seria capaz de construir um sistema que poderia aprender habilidades completamente novas por si só - a menos que eu fiz algum avanço fundamental no estado de AI ao longo do caminho.
De certa forma, a IA está tanto mais próxima quanto mais distante do que imaginamos. A IA está mais perto de ser capaz de fazer coisas mais poderosas do que a maioria das pessoas espera - dirigir carros, curar doenças, descobrir planetas, entender a mídia. Todos terão um grande impacto no mundo, mas ainda estamos descobrindo o que é a inteligência real.
No geral, este foi um grande desafio. Esses desafios têm uma maneira de me ensinar mais do que eu esperava no início. Este ano eu pensei que eu iria aprender sobre AI, e eu também aprendi sobre automação residencial e tecnologia interna do Facebook também. Isso é o que é tão interessante sobre esses desafios. Obrigado por acompanhar este desafio e estou ansioso para compartilhar o desafio do próximo ano em algumas semanas.