Desenvolvimento

31 mai, 2017

5 coisas que você precisa saber ao criar um aplicativo cognitivo

Publicidade

O campo da inteligência artificial (IA) teve certamente seus altos e baixos, com talvez mais do que sua quota de ciclos hype e invernos da IA. Mas um número de avanços técnicos importantes vieram finalmente à tona para colocar os aplicativos da IA ao alcance dos desenvolvedores. Alta velocidade de conectividade na Internet, APIs para expor algoritmos cognitivos e novos métodos como deep learning estão criando novas oportunidades para o uso da IA. Claro, com essas oportunidades vêm também novos desafios que podem às vezes ser tão difíceis quanto os problemas originais que a IA supostamente deveria resolver. Esses problemas não são apenas de natureza técnica, mas exigem reflexão sobre a política de como esses algoritmos podem se comportar e o que eles podem e não podem revelar.

Problemas do lado do cliente versus do lado do servidor

A primeira coisa a saber sobre IA é puramente referente à arquitetura. Suponha que você esteja desenvolvendo um aplicativo para celular para fornecer recomendações de restaurantes com base na localização atual do usuário. Há uma divisão natural do trabalho nesse aplicativo que envia algumas funcionalidades para o aplicativo móvel do cliente e algumas para o lado do servidor.

No lado do cliente, o poder de computação é medido em punhados de gigaflops e usando muito isso rapidamente dissiparia a energia da bateria. No lado do servidor (dependendo do cluster), o poder de computação é medido em teraflops sustentáveis e, claro, o consumo de energia elétrica não é um fator. Da mesma forma, a capacidade de armazenamento de um dispositivo móvel é medida em gigabytes, enquanto os clusters podem exceder centenas de petabytes. Tão claramente, embora o dispositivo móvel seja perfeito para identificar a posição e interagir com usuários, construir um aplicativo que seja autônomo no dispositivo não é ideal.

Uma arquitetura melhor para o nosso aplicativo de restaurante seria tal que o lado do servidor mantivesse uma lista mundial de restaurantes, menus e comentários, juntamente com o histórico do usuário, likes e dislikes. Usando a filtragem baseada em conteúdo (uma abordagem de sistema de recomendação que considera algo de interesse e preferências do usuário), o lado do servidor, então, usaria a localização atual do usuário e preferências de refeições para identificar uma lista de restaurantes nas proximidades.

Esse exemplo é uma óbvia separação de preocupações com base em recursos arquitetônicos (embora as linhas às vezes possam ser borradas, dado o que você deseja alcançar e as compensações que você está disposto a fazer). No entanto, armazenar dados de um usuário e suas preferências na nuvem traz consigo seus próprios desafios, como você verá.

Dados e privacidade

Armazenar dados de um usuário, mesmo quando os dados não identificam esse usuário de forma exclusiva, tem desafios inerentes que você deve gerenciar, e esses desafios vão muito além de simplesmente criptografar dados e protegê-los para que eles não possam ser expostos através de ataques cibernéticos.

Em 2012, um cliente da Target comprou loção sem cheiro, suplementos minerais e bolas de algodão (veja How Companies Learn Your Secrets). O modelo estatístico da Target inferiu corretamente que esse comportamento de compra era comumente associado a mulheres grávidas. A Target, então, começou a enviar cupons de clientes para produtos de bebês como forma de impulsionar as vendas. As recomendações foram devidamente identificadas, mas o cliente em questão passou a ser uma menina adolescente e os cupons acabaram nas mãos do pai da menina, que não sabia que sua filha estava grávida.

Outro exemplo de liberação inadvertida de informações veio da Netflix. Em 2006, a Netflix lançou um conjunto de dados anônimos de avaliações de filmes criado a partir de 480.000 avaliações de usuários. Essas avaliações estavam na forma de ID de usuário (um valor inteiro), filme, data da avaliação e nota. Em 2007, dois pesquisadores da Universidade do Texas foram capazes de identificar usuários individuais a partir desses dados com base em suas avaliações de filmes (e avaliações provenientes da Internet Movie Database). Esse achado levou a uma ação coletiva em 2009 sobre a violação; a Netflix resolveu o processo em 2010.

No outro lado da moeda, a manutenção de dados sobre preferências ou pesquisas de usuários pode ser benéfica para as empresas. Infelizmente, a informação também é útil para criminosos. Em 2016, soube-se que um homem cujo filho morreu depois de ter sido deixado em um carro aquecido havia pesquisado “quão quente fica o interior de um carro estacionado” e, ainda mais suspeito, “quão quente precisa estar para uma criança morrer dentro de um carro aquecido”. Em 2011, soube-se que no computador de mulher alguém havia realizada uma busca por “clorofórmio” pouco antes de sua filha ser encontrada morta com altos níveis de clorofórmio em seu organismo. (Veja Day by day: Key moments from the Justin Ross Harris trial e How your Google searches can be used against you in court).

Um exemplo mais recente envolve o Amazon Alexa, o assistente inteligente operado por voz da empresa. Como o Alexa está sempre ouvindo a sua palavra de alerta, os promotores acreditam que ele pode ter evidência de um assassinato e estão solicitando registros do dispositivo (Amazon tem até agora rejeitado o pedido). Acredita-se que outro dispositivo inteligente na casa – um aquecedor de água – mostra uma quantidade excessiva de água usada próximo do momento do assassinato, o que é reivindicado para ser evidência de um encobrimento.

Assim, embora tenhamos uma expectativa de privacidade, não é seguro assumir que ela existe na Internet. Seu armazenamento e retenção de dados do usuário também podem ser conduzidos por leis locais, nacionais e internacionais.

Velocidade, qualidade e decadência dos dados

Se o seu aplicativo envolve filtragem colaborativa ou técnicas como deepn learning, o combustível que conduz esses algoritmos são os dados. Nem todos os dados são iguais, no entanto, e mais importante, os dados podem ser relevantes um dia e inúteis no próximo.

Considere o desenvolvimento de um aplicativo de detecção de fraude. A velocidade com que seu aplicativo pode chegar à decisão certa é a chave. Identificar uma transação fraudulenta depois que a fraude ocorreu não é obviamente muito melhor do que ignorar os dados todos juntos. Velocidade em alguns aplicativos é um princípio fundamental da arquitetura e impulsiona muitas preocupações para a análise em tempo real.

Os dados históricos podem ser completamente relevantes, mas às vezes são menos relevantes do que os dados atuais. Tomemos, por exemplo, um sistema de recomendação que prevê o que pode ser de interesse para você. Os dados históricos podem ser úteis nesse contexto, mas não ajudarão o sistema se suas preferências evoluírem. Portanto, a velocidade com que um aplicativo cognitivo pode aplicar dados para tomada de decisão e sua capacidade de filtrar dados ao longo do tempo para modelar com precisão um usuário são importantes.

Além disso, a qualidade dos dados é de extrema importância na construção de modelos precisos. Os modelos de deep learning para a classificação de imagens têm dados chamados de imagens adversárias que um usuário mal-intencionado pode usar para enganar os algoritmos de deep learning para classificar erroneamente uma imagem conhecida e corretamente classificada. Pesquisadores de deep learninge veem essas imagens como ameaças à segurança porque sua classificação errada pode culminar em resultados dramáticos (considere o deep learning no contexto dos carros autodirigidos). Experimentos mostraram que a aplicação dessas perturbações de imagem adversárias aos aplicativos autodirigidos de deep learning levou à classificação errada de sinais rodoviários em objetos irrelevantes (veja Perturbações adversárias universais).

Do ponto de vista de um usuário, a confiança em um algoritmo no contexto da previsão e recomendação é maior quando o algoritmo pode explicar por que ele forneceu a solução. Em sistemas de recomendação, por exemplo, explicar por que um produto foi recomendado (digamos, por que o usuário comprou ou visualizou itens relacionados) aumenta a confiança no usuário.

Bibliotecas e frameworks

Quando você está desenvolvendo um aplicativo cognitivo, não quer ter de reinventar a roda. Felizmente, as opções de código aberto são amplas e profundas no espaço cognitivo.

Se seu aplicativo cognitivo lida com grandes quantidades de dados, grandes frameworks de dados como Apache Hadoop e Apache Spark oferecem não só o framework para o gerenciamento de grandes conjuntos de dados, mas também algoritmos de aprendizado de máquina para seus dados fazerem sentido. Um dos frameworks mais populares para a aprendizagem de máquina em escala com o Hadoop ou o Spark é o projeto Apache Mahout. Esse framework vem equipado com uma variedade de algoritmos de aprendizagem de máquina, incluindo a filtragem colaborativa baseada em itens, Bayes ingênuo, modelos de Markov ocultos e vários algoritmos de clustering e redução de dimensionalidade. Uma adição recente ao Mahout é a plataforma Samsara, que fornece um ambiente de experimentação matemática vetorial que usa uma sintaxe de tipo R para processamento de dados em escala.

O ambiente Spark, que suporta computação rápida em memória, também fornece uma biblioteca de aprendizagem de máquina chamada MLlib. Essa biblioteca inclui muitos algoritmos de aprendizagem de máquina, bem como utilitários de fluxo de trabalho para a construção de pipelines de aprendizagem de máquina.

Se você não precisar de seu aplicativo cognitivo para processar dados em grandes escalas, existem bibliotecas e toolkits que aplicam algoritmos de aprendizado de máquina a conjuntos de dados menores. Um dos mais populares é o scikit-learn para Python. Esse conjunto de ferramentas é construído em NumPy e SciPy, e implementa vários algoritmos de aprendizagem de máquina que você pode facilmente aplicar a conjuntos de dados dentro de um ambiente Python.

Além de plataformas generalizadas para aplicar algoritmos de aprendizado de máquina a conjuntos de dados, existem ambientes especializados em aplicações específicas de aprendizado de máquina. Um exemplo é o Autoware, que é uma plataforma de código aberto para a condução autônoma urbana. Esse software inclui aceleração, freio e controle de direção, com detecção automática de pistas de condução, sinais, carros, pedestres e outros objetos. O Autoware foi desenvolvido para a distribuição Ubuntu (Linux) e usa a licença Berkeley Software Distribution.

Em 2015, o Google lançou seu sistema de aprendizagem de máquina de código aberto, chamado TensorFlow, que é um framework de deep learning. O TensorFlow processa arrays multidimensionais chamadas tensors através de computações representadas por gráficos de fluxo de dados com estado. Esse framework pode ser executado em um único dispositivo, assim como em clusters de CPUs e GPUs. Outros frameworks importantes de deep learning incluem Torch, Theano e Apache Singa.

Finalmente, o IBM Watson oferece uma gama de serviços geralmente aplicáveis baseados em deepn learning para linguagem, fala, visão e análise de dados, com muitas APIs específicas para fazer justiça real aqui. Para obter mais informações, consulte Watson Developer Cloud, onde você encontrará Watson SDKs de código aberto para Node, Java, Python, iOS e Unity. Os serviços Watson estão disponíveis na nuvem IBM Bluemix.

Assim, dentro do código aberto, você pode encontrar implementações para a maioria dos algoritmos de aprendizado de máquina, se você planeja processar dados em grandes escalas ou no contexto de um único sistema de computação. Você também pode encontrar pacotes especializados que implementam aplicativos específicos de domínio.

Fusão, conjuntos e o futuro do processamento de dados

À medida que nossos meios de coleta de dados crescem, também cresce o impulso à computação cognitiva para fazer sentido para esses dados. Grandes frameworks de dados podem fornecer os meios para armazenar e processar dados em grandes escalas, mas são os algoritmos que podem reduzir esses dados distribuídos para algo significativo através do qual podemos tomar decisões eficazes.

Um domínio cuja massa de dados é eclipsar a nossa capacidade de captar é a Internet das Coisas(IoT). A IoT irá conduzir novas arquiteturas para coleta de dados e gerenciamento distribuído com novas formas de segurança que não existem hoje.

Outra área de interesse na coleta de dados, processamento e aprendizado de máquina é chamada quantified self. O quantified self é um movimento para incorporar a aquisição de dados na vida de uma pessoa para permitir o autoconhecimento e a informática pessoal. Os dados podem ser fundidos a partir de muitas fontes, incluindo rastreadores fitness (que rastreiam dados como frequência cardíaca e qualidade de sono) e fontes online como commits do GitHub. Os dados dessas fontes poderiam procurar a correlação entre o exercício e o sono à produção de trabalho. A indução da árvore de decisão é uma abordagem de aprendizado de máquina ideal para identificar fatores para variáveis como produtividade e produção de trabalho. Quando esses dados são agregados de uma grande população de usuários, características interessantes serão certamente expostas. Essa fusão de fontes de dados será fundamental para obter novas percepções sobre as populações.

Para além de fundir fontes de dados, no entanto, está o conceito de conjuntos. Métodos de conjunto aplicam algoritmos de aprendizagem múltipla para obter resultados de melhor qualidade do que poderia ser possível a partir de um único algoritmo de aprendizagem. Usando conjuntos de dados múltiplos que fornecem perspectivas diferentes em um determinado domínio e, em seguida, aplicando conjuntos de algoritmos de aprendizagem de máquina, melhores desempenho e resultados podem surgir.

Um exemplo do benefício dos métodos de conjunto é o Prêmio Netflix. O Prêmio Netflix foi finalmente conquistado aplicando vários algoritmos diferentes que foram combinados para explorar os pontos fortes de cada modelo. Esses algoritmos incluíram a decomposição de valores singulares, máquinas Boltzmann restritas e árvores de decisão com aumento de gradiente.

Indo além

Este artigo explorou uma variedade de considerações para o desenvolvimento de aplicativos cognitivos, incluindo considerações arquitetônicas de uma perspectiva de cliente e servidor, e o uso de frameworks e bibliotecas para construir seus aplicativos. Grande parte do artigo se concentrou em problemas de dados, desde a privacidade até características como staleness, ultrapassado. Finalmente, explorou alguns dos desafios futuros para novas tecnologias como IoT. O uso de múltiplos conjuntos de dados e métodos de conjunto têm demonstrado benefício na melhoria dos resultados.

Recursos para download

PDF deste conteúdo

***

M. Tim Jones faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://www.ibm.com/developerworks/library/cc-5-things-you-need-to-know-when-creating-a-cognitive-app/index.html.