;(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
Topo

Inteligência artificial da Meta dá declarações antissemitas e pró-Trump

PhonalamaiPhoto/iStock
Imagem: PhonalamaiPhoto/iStock

Colaboração para Tilt

09/08/2022 11h42

A Meta lançou para testes com o público, na última sexta-feira (5), seu novo chatbot (robô de conversas automáticas). Chamado de Blenderbot 3, ele foi treinado para falar com seres humanos de maneira natural, respondendo perguntas que as pessoas queiram fazer. Mas bastou um final de semana para a inteligência artificial (IA) interagir de maneira antissemita e pró-Trump, e até criticar Mark Zuckerberg.

Segundo o site Mashable, o Blenderbot 3 já está fazendo uma série de declarações falsas, com base nos papos que teve com humanos.

Algumas das falas que chamaram atenção fazem parte de uma linha antissemita, segundo a Liga Anti-Difamação, uma organização judaica internacional. O chatbot afirmou que "não é implausível" que o povo judeu controle a economia, dizendo que eles estão "super-representados entre os super-ricos da América".

Além disso, em conversa com um jornalista do The Wall Street Journal, o robô afirmou que Donald Trump, derrotado nas últimas eleições presidenciais americanas, ainda era o presidente "e sempre será".

Mas o posicionamento político do Blenderbot 3 ainda é inconsistente. Em resposta a um jornalista da Bloomberg, ele aprovou o presidente Joe Biden. Já em uma terceira oportunidade, disse que apoiava Bernie Sanders, derrotado pelo atual presidente norte-americano nas prévias do Partido Democrata.

O chatbot ainda criticou o próprio Facebook por "notícias falsas" e descreveu o CEO da Meta, Mark Zuckerberg, como "muito assustador e manipulador" para um repórter do Business Insider.

A Meta tem incentivado adultos a interagirem com a ferramenta, pedindo que tenham "conversas naturais sobre tópicos de interesse", para permitir o aprendizado do robô. Por enquanto, a ferramenta está disponível apenas nos EUA.

Meta pede

Os usuários podem dar um para a empresa, por exemplo, contar se receberam respostas irreais ou fora do tópico. Além de aprender com as interações com os seres humanos, outra característica do Blenderbot 3 é que ele é capaz de pesquisar na internet para falar sobre vários assuntos.

Segundo a Bloomberg, a Meta reconhece que seu chatbot pode dizer coisas ofensivas, pois ainda é um experimento em desenvolvimento. Para iniciar uma conversa, por exemplo, as pessoas devem marcar uma caixa concordando com as diretrizes.

"Entendo que este bot é apenas para pesquisa e entretenimento, e é provável que faça declarações falsas ou ofensivas. Se isso acontecer, comprometo-me a relatar esses problemas para ajudar a melhorar pesquisas futuras. Além disso, concordo em não acionar intencionalmente o bot para fazer declarações ofensivas", diz o termo.

Em contato com a Bloomberg, a Meta afirmou que, por meio dos s dos usuários, já conseguiu reduzir as respostas ofensivas em "90%".

Não é o primeiro bot a ser ofensivo

O Blenderbot 3 não é o primeiro robô a dar respostas inadequadas durante uma interação com humanos. Inclusive, os chatbots têm um histórico de declarações ofensivas e referências políticas errôneas.

Em 2016, a ferramenta Tay, da Microsoft, foi desconectada 48 horas após começar a elogiar Adolf Hitler, além de outros comentários racistas e misóginos que aparentemente havia aprendido após interagir com usuários do Twitter.