Conheça como funciona a SE4ML, a Engenharia de Software para o Aprendizado de Máquina

Neste artigo você vai ver:

A área de pesquisa chamada de “Engenharia de software para Aprendizado de Máquina”, ou SE4ML, surgiu para apoiar cientistas de dados na construção, avaliação e manutenção de seus modelos de software. 

Este artigo é para você conhecer mais sobre a SE4ML, componentes inteligentes e os desafios encontrados na sua implementação.

Contexto da SE4ML

Múltiplas áreas do conhecimento como biologia, finanças e física, bem como empresas e organizações governamentais, acreditam que soluções que utilizem abordagens inteligentes são necessárias para atacar os problemas atuais. 

No contexto do desenvolvimento de software, aplicações inteligentes foram popularizadas por empresas como Google, quando tentamos fazer uma busca de imagens; Netflix, quando nos recomenda uma série; ou Microsoft, quando autocompleta nossos textos de e-mail. 

Todos esses sistemas são notoriamente constituídos por componentes inteligentes. 

Por sua vez, esses componentes são desenvolvidos utilizando um conjunto de práticas, algoritmos e ferramentas especializadas, que raramente são utilizados para a construção de sistemas de software, digamos, tradicionais. Alguns exemplos incluem:

  • Python ou Julia para limpeza, análise de dados e seleção de features;
  • Algoritmos de aprendizado de máquina ou deep learning para classificação ou predição dos dados;
  • Notebooks, como Jupyter ou Google Collab, para sua execução e visualização dos resultados da computação em um único documento.

No entanto, esses componentes não existem de maneira isolada, eles estão conectados aos demais componentes de um sistema de software. 

E é aí que mora o perigo!

Desafios para construção de modelos em sistemas de software

No momento em que profissionais de software começaram a fazer deploy de sistemas de software inteligentes, percebeu-se que a engenharia de modelos inteligentes não é algo tão simples assim

Segundo pesquisa da Gartner, dos cerca de 3000 CIOs que responderam a pesquisa, somente 4% já adotaram abordagem inteligentes em seus negócios, enquanto outros 46% têm interesses em adotar. 

O que é mais interessante é que a pesquisa também mostrou que um grande número de projetos que utilizam componentes inteligentes nunca chegaram a um ambiente de produção. 

Nem se trata pelo tamanho de linhas dos modelos criados, uma vez que estes modelos de aprendizagem de máquina, geralmente, representam uma parcela pequena do total de linhas de código do produto de software. Neste caso, é preciso lidar com questões de autenticação, segurança, regras de negócio, acesso e manipulação de dados, etc. 

Razões que podem levar modelos de aprendizado de máquina a se tornarem complexos

Os modelos de aprendizado de máquina podem rapidamente se tornar complexos e existem algumas razões que sustentam esse fato:

  1. A resposta do modelo não é binária. Um modelo de aprendizado de máquina não oferece uma resposta binária, e sim um valor de proximidade de aderência ao mundo real. Logo, não é possível ter 100% de confiança em um modelo inteligente, por mais alta que seja sua acurácia. 
  2. Os modelos são frequentemente avaliados em termos de acurácia e não corretude. Um modelo pode ter alta acurácia, mas baixa corretude, por exemplo, se os dados fornecidos para o modelo estiverem incompletos ou incorretos. 
  3. Modelos não são estáticos. Os modelos, e consequentemente suas acurácias, mudam à medida que novos dados são fornecidos ao sistema. Logo, cientistas de dados precisam constantemente estudar e adaptar o modelo existente.

Embora não seja garantido, essas adaptações podem levar a modelos com maiores acurácias e com maior capacidade de generalização. 

O aprimoramento dos modelos tendem a deixá-los mais complexos, dificultando não somente o seu entendimento por não especialistas, mas também sua manutenção por cientistas de dados.

Desafios organizacionais

Além das dificuldades técnicas, há também alguns desafios organizacionais, como apontado pelo estudo de Arpteg e colegas. Por exemplo:

Estimativa de esforço

Em modelos de aprendizado de máquina, como comumente observado em projetos de pesquisa e inovação, o objetivo da tarefa é definido. No entanto, nem sempre é clara a quantidade de esforço necessário para que o modelo alcance esse objetivo; e, dessa forma, a quantidade de ciclos de iterações que serão necessários para alcançar níveis aceitáveis. 

Entendimento dos modelos

Falando de modelos complexos e de difícil entendimento, não é incomum encontrar modelos em que devs ou cientistas de dados tenham dificuldades em entender o comportamento observado. 

Nesses casos, é ainda mais difícil compreender qual parte do modelo poderia ser modificado para alcançar melhores resultados.

Privacidade dos dados

A falta de entendimento do comportamento interno de modelos sofisticados pode impactar em questões de segurança e privacidade dos dados. Por exemplo, o conhecimento em uma rede neural é armazenado de maneira distribuída entre os pesos da rede. 

Logo, é difícil controlar a forma que os dados são armazenados na rede. Em tempos de legislações como a LGPD, conhecer e ter controle sobre como dados de users são tratados adiciona uma camada extra de complexidade a um projeto que utilize modelos inteligentes.

Modelos inteligentes e cultura

Outro fator importante é que o mundo real é multivariável, e modelos de aprendizado de máquina devem ser avaliados de múltiplas perspectivas.

Por exemplo, modelos inteligentes que são integrados em carros autônomos não podem ser avaliados somente com relação a sua acurácia na detecção de objetos, mas também com relação à segurança de quem vai usá-lo. 

Outros modelos devem ser analisados sob a perspectiva de discriminação ou, até mesmo, da ética.

Esses desafios, quando somados, levam a diversas dificuldades do processo de engenharia de modelos inteligentes, devido:

  • a falta de especificação, é difícil modularizar modelos em termos de suas responsabilidades;
  • a ausência de métodos para garantir a sua corretude, é difícil pensar em garantias de qualidade;
  • às suas especificidades técnicas, a colaboração entre times de cientistas e de engenharia é dificultada.

Para apoiar melhor cientistas de dados na construção, avaliação e manutenção de seus modelos de software, há uma área de pesquisa chamada “Engenharia de software para Aprendizado de Máquina”, do inglês, Software Engineering for Machine Learning, ou somente SE4ML.

Modelos inteligentes e engenharia

Quando criamos software com modelos inteligentes, precisamos utilizar práticas de engenharia de software.

Uma vez que modelos de aprendizado de máquina podem fornecer respostas incorretas, sistemas de software que utilizam esses modelos precisam ser desenhados para tolerar esses erros. 

Embora seja uma frase fácil de ser entendida, ela é difícil de ser implementada. Por isso, proponho algumas questões para você pensar:

  • Qual o comportamento que seu sistema deve exibir em caso de uma predição errônea? 
  • Como seu sistema poderia detectar uma predição errônea?
  • Qual comportamento inseguro é tolerado pelo sistema?

Para responder essas (e outras) perguntas, é preciso ter um entendimento holístico não somente sobre os modelos de aprendizado de máquina, mas também sobre como estes modelos interagem com os demais componentes do sistema de software.

Para isso, a área de pesquisa de SE4ML tem como objetivo entender e adaptar práticas da engenharia de software para construção de sistemas que fazem uso de modelos inteligentes. 

Práticas como engenharia de requisitos, CD/CI, arquitetura de software, monitoramento, versionamento, dentre outras, tem grande possibilidade de aplicação para apoiar o processo de construção e desenvolvimento de modelos inteligentes. Mesmo assim, pesquisas recentes reportaram que poucas são as empresas que adotam essas práticas.

Enquanto que algumas práticas de desenvolvimento de software poderiam ser adotadas com facilidade, como o versionamento de código, observado por Serban e colegas, várias dessas práticas precisam ser adaptadas para que sejam utilizadas num cenário de SE4ML. 

Confira dois exemplos a seguir:

Deploy automático

Embora práticas de entrega contínua sejam comumente empregadas na indústria de software, realizar deploy automático de modelos de aprendizado de máquina requer cuidado especial

Um dos motivos está relacionado às mudanças, seja no código ou na parametrização, que podem acontecer com o modelo, podendo impactar no seu resultado final. 

Dessa forma, especialistas precisam atuar manualmente em diversas etapas da esteira de entrega dos modelos, o que não é somente tedioso, mas também propenso a erros. 

Ownership

Outra adaptação está relacionada ao ownership dos dados. Assim como ocorre com boas práticas de documentação, em que se deve saber quem é o criador e mantenedor dos documentos do software, deve-se saber também quem é o mantenedor das features do conjunto de dados. 

Como podem existir diversas features, não é incomum que existam mais de uma pessoa mantenedora para cada coluna. Logo, conhecer quem é responsável pelas features é importante para que a informação não seja perdida, caso esta pessoa saia da empresa.

Outras práticas, por outro lado, precisariam de um esforço bem mais significativo para incorporação no processo de desenvolvimento de modelos inteligentes. 

As práticas de testes e depuração de modelos de aprendizado de máquina ainda estão na sua infância, uma vez que times de pesquisa ainda têm dificuldades de descrever claramente o que seria um bug no modelo

De toda forma, está clara a necessidade de mover da prática de “modelo com melhor acurácia” para o desenvolvimento de “modelos baseados em boas práticas do processo desenvolvimento de software” 

Devs e cientistas de dados

Para alcançar esse objetivo, devs não têm como trabalhar sem companhia. Da mesma forma, cientistas de dados não podem trabalhar de maneira isolada. 

As comunidades precisam se integrar e colaborar lado a lado na construção de sistemas de software inteligentes. Mas há algumas dificuldades.

Devs e cientistas de dados nem sempre falam a mesma língua, usam diferentes conjuntos de ferramentas e práticas de desenvolvimento. 

Cientistas entendem bem como o modelo está estruturado e alcançam os resultados esperados em um ambiente controlado. Devs entendem bem sobre questões de design, manutenção e evolução do software, certo?

Para que a prática de SE4ML floresça, é preciso que não somente devs e cientistas alinhem seus interesses, mas é preciso também abraçar designers de interface, gerentes de produtos e demais pessoas que tenham interesse em participar da construção de sistemas de software inteligentes. 

Esse é um desafio cultural. Integrar estes dois mundos em um projeto de software, de forma que ambos se entendam e trabalhem juntos, o que requer comprometimento e um reconhecimento de sair da sua zona de experiência para navegar por mares desconhecidos. 

Na Zup Edu, o time de pesquisa que constrói modelos de aprendizado de máquina tem atuado com muita proximidade do time de desenvolvimento, pois estamos com muita motivação para embarcar nas práticas da SE4ML.

Conclusão

Os recentes avanços tecnológicos possibilitaram que modelos inteligentes se tornassem componentes naturais de diversos produtos de software.

Contudo, criar sistemas inteligentes sofisticados é uma tarefa longe de ser trivial, especialmente para organizações que tenham pouco suporte de times com conhecimento teórico e tecnológico.

Neste artigo, descrevemos alguns dos desafios que times multidisciplinares podem encontrar na construção de seus sistemas inteligentes. 

Acreditamos também que, para aumentar as chances de entrega desses sistemas, estes times poderiam tirar proveito de algumas boas práticas tradicionalmente empregadas no processo de desenvolvimento, como versionamento e construção de código. 

Algumas dessas práticas não são facilmente incorporadas e necessitam de adaptações, como práticas de entrega contínua ou code ownership. Outras práticas, como teste e depuração, precisam ser redesenhadas. 

Mas isso é assunto para outra pesquisa…

Até o próximo artigo e continuaremos nos encontrando aqui no blog da Zup!

Capa do artigo sobre SE4ML. Na foto, em primeiro plano está um notebook com códigos, ao fundo, estão dois homens conversando.
Foto de Gustavo Pinto
Pesquisador
Uso metodologia científica pra testar as crenças dos times de desenvolvimento. Será que Kotlin é mesmo melhor que Java? Será que multirepos é melhor que monorepos? Será mesmo?

Artigos relacionados

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.