;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL

Racismo calculado

Algoritmos de plataformas e redes sociais ainda precisam de muita discussão para fugir de estereótipos

Bruna Souza Cruz De Tilt, em São Paulo Getty Images/iStockphoto

A inteligência artificial já domina várias atividades da nossa vida. Está no aplicativo do banco, no pedido online do mercado, em nossas redes sociais. Mas também pode ser racista, machista e discriminar pessoas por sua religião ou orientação sexual. Segundo alguns pesquisadores da área, isso acontece porque os algoritmos reproduzem as falhas do comportamento social vigente (confira no vídeo acima).

Sistemas de reconhecimento facial já foram usados para justificar a prisão de homens negros que, mais tarde, comprovou-se que eram inocentes. Programas de celular e filtros de redes sociais estimulam mudanças em fotos que permitem afinar o nariz e clarear a pele, reforçando estereótipos discriminatórios de beleza.

Um usuário do Google Fotos denunciou em 2015 que a plataforma havia rotulado a foto de um casal negro com a legenda "gorilas". A empresa afirmou na época que tomaria as medidas necessárias para evitar a repetição de erros como esse. Com o Flickr aconteceu um problema semelhante. No lugar de gorilas, a plataforma rotulou com a palavra "macacos" fotos de pessoas negras.

No caso mais recente, usuários do Twitter denunciaram a plataforma em 2020 por priorizar rostos brancos na exibição de imagens publicadas pelos internautas que também traziam rostos negros. Fotos do ex-presidente Barack Obama e do senador Mitch McConnell foram usadas para provar. A rede social afirmou publicamente que iria investigar o comportamento de seu algoritmo.

"As tecnologias não são neutras porque foram construídas dentro de um contexto social e expostas a ele", afirma a advogada Ana Carolina Lima, membro do AqualtuneLab, coletivo jurídico que atua dentro das áreas do direito, tecnologia e raça (trecho do vídeo em 0:37).

A discriminação algorítmica é uma violação de direitos humanos porque ataca o direito à privacidade, o direito à liberdade de expressão e à livre circulação (trecho do vídeo em 6:57)
Ana Carolina Lima

A profissional de relações públicas Luana Daltro, 26 anos, descobriu sua foto publicada entre os primeiros resultados de busca do Google para as palavras "cabelo feio" (confira o relato da jovem no vídeo acima). Na mesma página, fotos de outras mulheres negras também ilustravam o termo. A foto de Luana foi associada a uma entrevista que ela deu no começo de 2020 a um portal do Rio Grande do Sul, onde mora, sobre o quanto era ruim ver o seu cabelo sendo associado a algo negativo.

Quando eu vi, não acreditei. Comecei a chorar. Estava revivendo minha infância onde eu negava os meus traços por ver os meus cabelos como feios. E é isso o que a sociedade nos ensina
Luana Daltro

Denise Carvalho e Fernanda Carrera, respectivamente pesquisadoras da UFRN (Universidade Federal do Rio Grande do Norte) e da UFRJ (Universidade Federal do Rio de Janeiro), analisaram mais de 2.000 fotos e ilustrações dos bancos de imagens Getty Images, Shutterstock e Stockphotos.

Em um dos estereótipos percebidos, as imagens traziam mulheres negras sozinhas em 14,01% dos resultados, enquanto o número caiu para 9,25% entre as mulheres brancas nas mesmas buscas.

Tecnologias discriminatórias não são feitas de forma consciente geralmente. A falta de diversidade é um dos motivos: homens brancos, héteros e de classes sociais média ou alta são a maioria de funcionários deste setor, segundo levantamento do coletivo Pretalab com a consultoria ThoughtWorks.

O enviesamento de dados é outro agravante. Mais de 2.400 professores, pesquisadores e estudantes fizeram um abaixo-assinado contra um sistema criado nos EUA para descobrir a probabilidade de pessoas cometerem crimes a partir do cruzamento de informações biométricas do rosto e de fichas criminais. Como a tecnologia se alimentou de dados de criminalidade racialmente carregados, ela pode legitimar a violência contra grupos marginalizados.

Para as entrevistadas, promover debates sobre o viés da tecnologia é uma estratégia necessária de enfrentamento para aceitar que esse problema existe e precisa ser combatido.

Estamos tratando de meios digitais muito recentes, mas que envolvem um problema que é antigo. A sociedade brasileira, em seu contexto histórico, foi consolidada sobre as bases do racismo, do patriarcado e do classismo. Não podemos deixar isso de lado (trecho do vídeo em 7:29)
Denise Carvalho, pesquisadora da UFRN

Topo