Análise: AlphaGo (2017) – vamos falar sobre I.A.?

Acho extremamente importante tentar fundamentar um debate honesto, sem ilusões nem romantizações sobre a questão do desenvolvimento da Inteligência Artificial.

Apesar da ideia de máquinas inteligentes não ser algo inventado no nosso século. A noção de inteligência artificial como um campo de estudo é algo que podemos localizar no tempo e se trata de um campo com pouco mais de 60 anos.

Ainda vou falar bastante sobre a história do desenvolvimento da I.A. pois é um tópico por si só fascinante e ao mesmo tempo explicita muitas das noções e debates que se fazem presentes no estado atual da ciência.

Mas o blog não é sobre linguística computacional? Qual a relação entre as duas áreas?

A dupla linguística computacional/ processamento de linguagem natural é uma área do campo da inteligência artificial. Colocando em termos muito simples e ligeiros nessa nossa primeira aproximação: uma máquina só é considerada inteligente (o objetivo da Inteligência Artificial) se for capaz de entender e produzir linguagem natural humana (o objetivo do processamento de linguagem natural).

Voltando para a questão em mãos: está disponível na Netflix o documentário AlphaGo, lançado em setembro de 2017, que trata de uma das histórias mais impressionantes envolvendo tecnologia que aconteceram nos últimos tempos: a partida do jogo de tabuleiro Go entre um computador e o melhor jogador humano, o coreano Lee Sedol.

Antes de tudo, recomendo o documentário, pois cobre a história dando algum tratamento sobre os aspectos técnicos envolvidos ao mesmo tempo que traz os dramas humanos presentes. É interessante mesmo que você não saiba nada sobre Go ou sobre inteligência artificial.

Nota: caso por um acaso você não saiba o resultado das partidas e queira ver o filme com alguma expectativa, deixa para ler o resto do texto depois!

Eis alguns pontos que o documentário trata que merecem alguma atenção:

Jogos como uma ferramenta para compreender inteligência.

Existe uma tradição forte no campo da inteligência artificial em escolher jogos como uma área de aplicação e teste de algoritmos inteligentes, desde antes do surgimento da computação a ideia de máquinas que fossem capazes de competir contra humanos já estavam presentes.

Em específico, o jogo de xadrez, talvez pelo simbolismo de ser um jogo de demonstração de habilidade de raciocínio, foi explorado em diversas ocasiões. Dentre as pessoas que tentaram propor por nomes importantes do início do desenvolvimento da computação moderna, como Allan Turing e Claude Shannon, mas talvez um dos grandes ápices dessa história seja o do computador Deep Blue, que em 1997 venceu uma série de melhor de seis partidas contra o então melhor enxadrista humano, Garry Kasparov.

deep blue
Kasparov contra Deep Blue

Mas por que o fascínio em criar máquinas que joguem?

Claro que existe uma certa carga simbólica em uma inteligência artificial vencer um humano em um jogo justo, no qual ambos estão sujeitos as mesmas regras. Mas existe também uma razão bastante prática para escolhermos jogos.

A própria definição de jogo é o que o torna tão útil para esse fim. Um jogo tem que ser bem definido por um conjunto de regras não ambíguas que determinam os turnos, aquilo que é permitido fazer e por fim, as regras determinam também as condições necessárias para a vitória.

Com isso temos dois aspectos excelentes para trabalhar com o desenvolvimento de novos programas: em primeiro lugar, um programa só funciona direito se estiver obedecendo as regras do jogo. Além disso, podemos dizer que se o programa é bom ou ruim no jogo dependendo do seu desempenho em termos de vitórias/derrotas!

Como um bônus, podemos comparar a habilidade do programa com a de humanos naquele domínio específico.

Por fim, ainda existe um outro excelente motivo para usarmos jogos: o tipo de raciocínio utilizado em um jogo de xadrez é útil para diversas outras situações práticas, nas mais variadas áreas, portanto um programa que se comporte de forma sobre-humana no jogo pode se comportar de forma igualmente impressionante em uma outra aplicação.

Domínio específico vs. Domínio geral

Toquei involuntariamente nesse tópico, mas acho que é um ponto muito importante para discutir IA.

O Deep Blue joga xadrez melhor do que qualquer humano. O AlphaGo joga Go melhor do que qualquer humano. No entanto, um humano joga xadrez melhor do que o AlphaGo e joga Go melhor do que o Deep Blue.

Para além do divertido jogo de palavras, meu ponto é que a inteligência humana não está atrelada a um domínio específico, ao passo que a inteligência artificial tal como ela ainda existe é.

Na verdade o Deep Blue e o AlphaGo tem uma diferença fundamental neste aspecto. O Deep Blue não consegue aprender Go, o AlphaGo precisou de algumas modificações, mas em questão de horas aprendeu a jogar xadrez melhor que o Deep Blue.

Um dos grandes pontos de empolgação com o desenvolvimento da inteligência artificial nos últimos anos é que o tipo de algoritmo por trás do AlphaGo, que usa redes neurais profundas, parece ser plástico o suficiente para aprender diferentes tipos de conjuntos de regras e como vencer usando essas regras, de modo análogo aos seres com inteligência de domínio geral como os humanos.

Claro, esse aprendizado exige uma grande quantidade de exemplos, muitos mais do que qualquer ser humano tem acesso, mas que o feito é impressionante, isso é.

landscape-1457623728-alphago2
“Vamos ver se o AlphaGo é tudo isso”

Visão sistêmica não-humana

Por fim, um ponto impressionante que o documentário mostra é o movimento 37 da segunda partida entre humano e computador.

Todos os especialistas assistindo, assim como a própria equipe responsável pelo AlphaGo acharam a jogada uma coisa completamente sem sentido, um erro amador.

No entanto, o programa ganhou essa partida.

Não só isso como aquela jogada esdrúxula acabou servindo mais adiante no jogo e, apesar de não fazer sentido exatamente naquele momento, ao levar em conta um contexto mais amplo do que nós rotineiramente levamos, a jogada foi na verdade uma excelente sacada.

Nesse ponto é interessante refletir sobre o que aconteceu ali. A jogada foi bizarra ou foi genial? Por que na hora ninguém soube julgar isso?

Acho que essa linha de questionamento mostra bem como não temos nenhum tipo de preparo para lidar com inteligências não-humanas. O programa, ao invés de ser genial ou não, foi profundamente não humano. A visão que esse algoritmo tem do jogo é claramente diferente da visão que mesmo o mais hábil dos humanos tem.

Um dos aspectos mais fascinantes de mexer com a área de inteligencia artificial está justamente nesses pequenos momentos em que se vislumbra uma capacidade não-humana de fazer algo que nós consideramos inteligente, só que de uma forma de inteligência que não é nossa.

O jogador pode ter uma estratégia definida e a previsão das próximas rodadas, mas o algoritmo tem uma visão extremamente mais ampla e mais sistêmica do jogo.

O escritor Isaac Asimov escreveu um conto no livro “eu, robô” que mostra robôs que tem um pensamento sistêmico tão fino e tão abstrato que apenas gerando um pequeno erro num relatório econômico de uma determinada região, conseguem desmantelar toda uma conspiração antirrobôs.

 

Sem surpresas em Asimov prever algo praticamente inimaginável na sua época, mas continua sendo fascinante de um jeito profundamente atual. O tipo de inteligência que começa e emergir com as novas tecnologias é ao mesmo tempo fascinante e inédito, é fundamental refletirmos sobre o significado deste tipo de desenvolvimento.

 

Anúncios

Quando a divulgação não informa

Saiu agora um dossiê sobre inteligência artificial no portal da Super Interessante.

Era uma grande oportunidade de divulgar um tema de grande apelo sob um viés sério e científico. Infelizmente, não foi isso que essa primeira parte do dossiê mostrou.

É revoltante ler em um portal que pretende divulgar assuntos ligados à ciência uma mistura tão intensa entre o que é fato científico e ficção pura, sem que haja nenhuma preocupação com o tipo de impacto que esse tipo de coisa possa ter.

É inegável que exista um apelo muito grande da inteligência artificial na cultura popular:  vemos diversos filmes, livros e séries sobre o tema, e isso não é problema! Inclusive, considero diversas dessas histórias excelentes e, é claro, pensar nessas questões dentro da perspectiva fantástica que as ficções apresentam é uma atividade muito divertida.

Agora, é importante pensar também no papel da divulgação científica e lembrar que a inteligência artificial não é só ficção. Existem muitas pessoas que estudam esse tópico dos mais diversos pontos de vista e das mais diversas origens acadêmicas: filósofos, engenheiros, cientistas da computação, biólogos, linguistas…Esses estudos são sérios e revelam um panorama incrível que é tão atraente quanto o revelado pela ficção – com o bônus de ser real!

A grande questão é que a linguagem científica, ao se refinar ao longo do progresso de determinada área, vai se tornando cada vez menos acessível para o público geral.Daí a missão da divulgação científica: trazer a mensagem expressa no desenvolvimento científico de modo que o público geral a compreenda, mas se mantendo fiel às ideias trazidas pela comunidade científica.

154062807_science-communication_-istockphoto_thinkstock
Divulgação científica não é simples!

Essa é uma missão ingrata! Com frequência você corre o risco de perder público sendo mais rigoroso. Além disso, não tenha dúvidas de que algum técnico virá apontar qualquer detalhe perdido na sua divulgação.

Mas, o ponto importante aqui é: para se fazer divulgação científica, é fundamental ter rigor. Quando se fala de uma área tão presente no imaginário popular, é necessário ter o dobro de rigor.

Uma matéria curta sobre inteligência artificial tem que, no mínimo, tomar muito cuidado ao falar de determinados tópicos. A primeira parte dessa reportagem da Super traz uma perspectiva que:

1- Apresenta o futuro da IA como necessariamente alcançar a Singularidade (que é, no mínimo, forçar a barra)

2 – Não tem nenhum cuidado ao tratar a inteligência artificial como se fosse igual à inteligência humana, só que em robôs.

O primeiro ponto, pelo menos, é atribuído a um pesquisador (Ray Kurzweil).

Sobre o segundo ponto: como você fala de IA em geral sem falar de uma das grandes questões filosóficas da IA? Ainda mais quando a posição científica sobre a IA tende para o lado oposto ao que você defende?

É possível comparar a chamada inteligência artificial, criada por agente inteligentes em computadores com a inteligência humana, fruto da evolução biológica da espécie?

Veja o que o texto fala:

“Você está em outro nível de desenvolvimento cognitivo, lógico e filosófico. Você é um robô. Criado por robôs. Mas é como se fosse gente.”

“É como se uma pessoa tivesse, ao mesmo tempo, a genialidade de Einstein, Mozart, Marie Curie, Steve Jobs e Da Vinci. Só que ela é um computador.”

“Um robô francês chamado NAO passou na prova. Diante de perguntas simples, NAO foi capaz de raciocinar a respeito da sua própria existência – algo que, até outro dia, era exclusividade dos seres humanos.”

Apenas não! Não se faz o paralelo entre inteligência artificial e o que quer que ela alcance que se dê o nome de consciência com a consciência humana, forjada por milhões de anos de processo evolutivo biológico!!

Pelo menos não se faz isso sem apresentar as críticas (3 links apontando como essa comparação é complicada, TODOS encontrados na primeira página do google).

Além disso, a conclusão de uma matéria de divulgação científica não poderia ser mais descabida:

“Muito em breve, computadores vão tirar suas próprias conclusões, desenvolver uma ética peculiar, demonstrar uma inteligência superior inigualável e criar autossuficiência. Por que um mundo assim precisaria de humanos?”

Vender essa área como se fosse a grande responsável por criar um possível apocalipse é tremendamente irresponsável. Beira ao ludismo.

471027a-i1-0
Contra as máquinas e não contra os exploradores!

Vamos falar de realidade? O que é real sobre a inteligência artificial é que é uma área que tem criado produtos e mecanismos que afetam muito positivamente diversos aspectos da vida humana. Temos carros autônomos, algoritmos que indicam filmes e livros, assistentes pessoais no celular.

É claro que existem problemas novos trazidos pelas novas tecnologias, mas vender ficção como se fosse o resultado lógico do avanço de uma área científica é extremamente problemático. Deve ser a vontade de ganhar mais cliques.

 

Sobre Expressões Regulares

Vamos falar um pouco sobre a prática da linguística computacional?

O tema de hoje é algo fundamental para o processamento de linguagem natural: as expressões regulares!

Mas o que diabos é isso? De novo, vamos partir de uma definição da Wikipedia:

Nas ciências da computação e na teoria das linguagens formais, uma expressão regular é uma sequência de caracteres que definem um padrão de busca, usado principalmente para buscas textuais. O conceito surgiu nos anos 50, quando o matemático americano Stephen Kleene formalizou a descrição de uma linguagem regular que se popularizou  ao ser incorporada no processador de texto do sistema Unix.

Ainda hoje, pequenas variações da linguagem regular descrita por Kleene estão no coração dos principais editores de texto, mecanismos de busca e linguagens de programação.

Sem entrar nos pormenores envolvendo teoria da computação, autômatos ou linguagens formais, quero focar na extrema utilidade e elegância das expressões regulares — No fim do post deixarei alguns  links com explicações mais técnicas, para quem se interessar por esse caminho.

deterministic-finite-state-machine
Hoje não vamos falar de autômatos de estados finitos 😦

Podemos pensar nessa ferramenta (também chamada de “regex”) como uma forma simples e elegante de definir padrões de texto. A partir de uma regex, é possível procurar por esse padrão definido em qualquer documento ou conjunto de documentos.

É bem fácil ver a utilidade de uma ferramenta como essa, certo? A imensa quantidade de texto disponível num mundo pós-internet criou uma necessidade também imensa de métodos para explorar e investigar esses documentos.

Por isso, as regex são fundamentais nas áreas de extração de informação (data mining, em português contemporâneo), big data, processamento de linguagem natural, etiquetagem morfossintática, reconhecimento de entidades nomeadas, entre outras. O princípio é o seguinte: uma regex é uma sequência de caracteres. Alguns desses caracteres têm funções específicas e, a partir do padrão desenhado pela combinação desses caracteres, é possível fazer operações, como copiar as partes importantes de um texto e organizá-las em uma tabela.

Por exemplo, se você tivesse um conjunto grande de e-mails formais e quisesse descobrir o nome do destinatário de todos eles… O que você faria?Para resolver essa questão é necessário usar não só as expressões regulares, mas também algum conhecimento linguístico.

Vamos pensar: o nome do destinatário, por convenção, é sempre posto na primeira linha de um e-mail/carta formal, num formato como ‘Caro senhor X’, ‘Cara senhora X’ ou ainda ‘Prezado senhor X’ ou ‘Prezada senhora X’. Além disso, temos outra convenção importante: os nomes próprios são representados com a primeira letra maiúscula.

Em seguida, as questões dessa abordagem: temos que percorrer os dados uma vez para cada uma dessas variações de Caro/Cara/Prezado/Prezada? Isso é bastante ineficiente! Além disso, os nomes próprios são bem traiçoeiros, nenhuma lista contém todas as variações de todos os nomes possíveis do português brasileiro! Como a gente identifica um nome? Uma palavra também pode começar com letra maiúscula se ela for a primeira depois de um símbolo como “!”, “.”, “?” e isso não significa que ela é um nome, certo?

Por fim,  a nossa questão central: como fazemos para o computador capturar esse valor variável que é o nome? E o sobrenome?

Usando uma expressão regular simples, conseguimos captar o nome de qualquer e-mail que comece com algum dos cabeçalhos indicados acima, a expressão é a seguinte:

((Car(a|o)|Prezad(a|o)) (S|s)enho(ra|r)) ([A-Z][a-z]+( )*)+

Nota: essa solução não é a mais curta possível. Eu foquei mais em obter uma resposta legível do que uma resposta compacta.

O primeiro trecho, “((Car(a|o)|Prezad(a|o)) (S|s)enho(ra|r))”, identifica qualquer uma das variações de cumprimento que eu levei em conta. As expressões regulares são bem eficientes em lidar com a ideia de alternativa e o símbolo “|” expressa essa noção (como um bom operador Booleano): ou o que está à esquerda ou o que está à direita dele. Com isso, as variações são todas contempladas de uma única vez pela expressão.

O segundo trecho, muito mais condensado, é o que efetivamente captura o nome. “([A-Z][a-z]+( )*)+” identifica o seguinte padrão:

1- Uma letra maiúscula “[A-Z]” seguida por

2- Uma ou mais letras minúsculas “[a-z]+” seguidas por

3- Zero ou mais espaços  “( )*”.

4 – Repita esse processo enquanto for possível  (representado por aquele “+” no fim).

Isso faz com que a expressão identifique nomes e sobrenomes, se houver.

Note o poder expressivo dessa pequena série de caracteres. Esse é o motivo pelo qual as expressões regulares são absolutamente indispensáveis hoje para diversas áreas.

regular_expressions
XKCD já adianta: regex salvam vidas!

Ficou com vontade de estudar mais? Seguem alguns links úteis!

1 –  Regular Expressions —Wikipedia

Mais uma vez, a página da Wikipedia é um ótimo lugar para se ter um panorama sobre o assunto. É um artigo um tanto quanto técnico, ideal para quem quer entender um pouco melhor como a coisa toda funciona.

2 – Capítulo do livro Speech and Language Processing — Jurafsky & Martin

Ótima explicação, pensando no caso da aplicação na linguística computacional mesmo. Bem técnico, mas tem a vantagem de, ao contrário da Wikipedia, pensar num público alvo específico e destacar as aplicações dessa técnica para a linguística computacional. O melhor? Disponível de graça na internet!

3 – Testador de expressões regulares

Uso bastante esse site para ir construindo uma expressão regular aos poucos. A vantagem é que você escolhe os textos em que quer fazer a busca e, conforme escreve a expressão, dá pra ver ao vivo o que está sendo selecionado no texto. Grande recurso!

 

Bônus — Regex Golf

Na verdade, as regex são praticamente a base de um culto. Existe uma modalidade chamada Regex Golf, que eu conheci através do monstro Peter Norvig, em que o desafio é criar uma expressão que identifique todos os membros de um grupo de palavras e nenhum do outro grupo. Recomendo o link para uma discussão leve e extremamente produtiva sobre esse tópico.

Bônus 2 – Abecedário de regex

Nessa página, temos um resumão contendo todos os comandos de regex! Para imprimir e ter sempre à mão!

 

((A|a)braç(o|os)|(B|b)eij(o|os)\!+)

 

Estudando machine learning!

Pois bem, depois de falarmos um pouco sobre o conceito geral de aprendizado de máquina, vamos aos materiais!

1 – Livro: Learning From Data -Yaser S. Abu-Mostafa, Malik Magdon-Ismail, Hsuan-Tien Lin

front

Bom livro  sobre o assunto. Uma das grandes vantagens é que não parte de um ponto muito avançado (matematicamente falando), tem como objetivo explorar os conceitos gerais pra você entender do que está falando e o que está fazendo.

O interessante é que é um livro que aborda tanto os aspectos teóricos quanto os aspectos práticos, e conta com exercícios para ajudarem a tornar tudo ainda mais claro.

2- Vídeos: Machine Learning Recipes

maxresdefault

Uma série de vídeos do Youtube para um público leigo sobre Machine Learning. Isso já deveria bastar para esse ser uma ótima sugestão. Mas vou acrescentar uma coisa: quem fez a série foi a equipe de desenvolvedores da Google. Sério, é muito legal mesmo! E você ainda consegue brincar com o Tensor Flow – a biblioteca de redes neurais que a empresa usa como motor para suas aplicações.

3- Curso: Machine LearningAndrew Ng

large-icon

Já falamos do Andrew Ng por aqui: professor de Stanford e fundador do Coursera. Ele tem um curso na própria plataforma sobre Machine Learning que é uma abordagem muito consistente sobre o assunto. Já adianto que o curso é muito bom, mas não é tão amigável quanto os dois materiais descritos acima. Vale a pena fazer no próprio ritmo, pegando todos os conceitos de cada aula e indo estudar por conta, por que nesse curso as coisas andam bem depressa.

4- Livro: Programming Collective Intelligence: Building Smart Web 2.0 Applications – Toby Segaran

71r-ilkolol

Esse livro é um personal favorite. Ainda que o foco dele não seja explicar machine learning, e sim construir programas de inteligência coletiva, a relação entre os tópicos e o caráter extremamente didático do texto fazem a coisa toda valer a pena.

No fim do primeiro capítulo, por exemplo, você já sai com um sistema de recomendação de filmes, baseado nos primórdios dos algoritmos usados pela rede Netflix!

5 – Site: Kaggle

kaggle-logo-transparent-300

Esse site é um playground de machine learning. É possível conversar com outras pessoas interessadas no assunto usando o fórum, ler um blog muito bom sobre a área e o principal: encontrar milhares de desafios de machine learning.

Isso funciona da seguinte forma: você lê o desafio, que pode ser algo como “Preveja se esse conjunto de pessoas sobreviveria ao naufrágio do Titanic baseado no peso, altura e origem de todos os passageiros originais”, aí você baixa os dados e então fica ao seu critério criar as soluções mais eficientes para os desafios.

6 -Livro Online: A course in machine learning – Hal Daumé III

machine-learning

Outro livro introdutório. A vantagem desse é que é muito bem organizado em tópicos que abrangem todo o campo de estudo de um jeito bastante pedagógico. Além disso, esse volume possui a grande vantagem de estar disponível de graça no link acima!

7- Curso: Practical Machine Learning Tutorial with Python

maxresdefault1

Os quase 60 vídeos mostram um panorama bem completo sobre o campo. Melhor do que isso, as implementações são todas em Python! É bom pensar que se trata de uma abordagem prática, então não é uma ferramenta para se compreender o que está acontecendo exatamente dentro de cada um dos programas descritos.

Extras:

Lista de scripts: Machine Learning em Python

Um ótimo tutorial sobre  machine learning. O autor transformou a resolução de exercícios em um guia completo nesse site. É ótimo para ver os conceitos aprendidos sendo aplicados em Python.

Reddit: Machine Learning

Tem muita coisa legal nesse subreddit. É um bom lugar para ir para ver novidades da área e encontrar materiais novos para estudar.

Telegram: Machine Learning em Python – Brasil

Use o melhor aplicativo de mensagens para discutir (e ler discussões) sobre machine learning! Mais uma vez, assim como no Python, a comunidade é super receptiva e muito provavelmente qualquer dúvida (pertinente) que você tiver será levada em conta pelos membros.

Espero que o guia ajude, você conhece algum outro material? Por favor, me conte!

 

Quando o computador aprende: o que é machine learning?

Machine learning (normalmente traduzido como aprendizado de máquina) é uma área da Inteligência Artificial que trata das técnicas usadas para moldar as ações do um agente com base em determinados dados observados.

O princípio é  melhorar o desempenho de um modelo ou de um programa em uma determinada tarefa a partir de treinamento. Ou seja, mais ou menos como um ser vivo que aprende com a experiência, um determinado programa aprende e melhora seu desempenho em uma tarefa depois de ser treinado nela.

É uma ideia poderosa, certo? E realmente isso é uma coisa impressionante. Hoje você consegue, através da aplicação de técnicas diversas de aprendizado de máquina, fazer um programa que reconhece o que é um rosto em uma foto (porque o programa aprende o que é um rosto), um mecanismo que recomenda os filmes mais interessantes para uma pessoa com um determinado perfil, ou até mesmo um sistema que sabe que um determinado e-mail é um spam, sem que o usuário precise pensar nisso.

Mas, antes de nos aprofundarmos um pouco mais nesse mundo, é necessário fazer uma separação importante: Lembram o exemplo que eu dei no começo desse texto, comparando o aprendizado de máquina com o aprendizado de um ser vivo? Bom, ele funciona para fins ilustrativos, mas, na prática, a coisa é bem mais complicada.

Em primeiro lugar, computadores e seres vivos são coisas muito diferentes, muito diferentes mesmo. É importante lembrar que um ser vivo é fruto de um processo de milhões de anos de evolução e o computador é um objeto criado pelo homem. Todas as comparações entre objetos tão diferentes precisam ser feitas com muito mais cuidado do que normalmente se vê por aí.

Ainda não sabemos exatamente como os seres vivos aprendem: não chegamos na fórmula matemática que descreve o funcionamento dos processos cognitivos envolvidos com exatidão e sem ambiguidades; o problema é que um computador precisa justamente de uma fórmula matemática exata e sem ambiguidades para funcionar, então o que chamamos de aprendizado de máquina é nada mais do que uma metáfora do processo cognitivo.

Chamamos de aprendizado, mas isso não significa que o seu computador vai começar a aprender a pensar, ou que ele vai aprender a dar a patinha.

large-icon
Infelizmente, isso não é  Machine learning.

O aprendizado de máquina que estamos falando na verdade está muito mais para estatística inferencial e modelos  probabilísticos do que qualquer outra coisa.

O aprendizado de máquina do qual estamos falando, como visto por exemplo no sistema de recomendação da Netflix, na verdade está muito mais próximo do que chamamos de estatística inferencial e do conceito de modelos probabilísticos do que disso.

toptal-blog-image-1407513802706
Isso é machine learning no mundo real.

A ideia é que um determinado agente, a partir de um determinado treinamento e de um determinado modelo de aprendizagem, irá executar uma ação. Para isso, precisamos de alguns objetos que vão configurar o cenário de aprendizado de máquina:

1 – Agente: esse é o objeto que executa alguma ação.

2 – Dados para treinamento: Para que o mecanismo funcione, é importante ter uma coleção (de modo geral, quanto maior, melhor) de dados que servirão como um gabarito para o nosso agente. Ele irá se basear nos dados de treinamento para executar a tarefa de forma aprimorada.

3-  Modelo de aprendizagem: Esse objeto é o que transforma os dados usados para o treino em alguma coisa útil para o agente. O que temos aqui é algum modelo probabilístico que, a partir do que foi oferecido no treino, irá atribuir probabilidade para novas observações.

Isso pode ser esquematizado assim:

machine-learning-for-dummies-4-638
Aqui é possível ver todos os envolvidos num processo de aprendizagem de máquina.

Repare: é possível fazer infinitos tipos de modelos de aprendizagem, por isso existem aplicações tão diversas desse tópico no mundo de hoje. O curioso é que o princípio de funcionamento de todas as aplicações mostradas estão contidos neste esquema.

Espero que o panorama apresentado aqui seja o suficiente para uma discussão introdutória sobre o assunto. No próximo post, irei apresentar alguns bons materiais para quem quer começar a estudar esse tópico.

 

Estudando Estatística e métodos quantitativos – um guia amigável para linguistas

Estatística e análise de dados são fundamentais.

Não só para linguistas, não só para acadêmicos: estatística é parte fundamental do conhecimento que precisamos para lidar com o mundo de hoje. É um tipo de alfabetização lógica que todos nós deveríamos ter.

Eu digo isso pois é muito comum nos depararmos com argumentos baseados em estatística para defender a opinião X ou Y . Na verdade, é considerado uma boa prática ter a sua argumentação respaldada por fatos, e esses fatos muitas vezes são codificados de alguma forma por algum tipo de tratamento estatístico.

 

2000px-scientificgraphspeedvstime-svg
Gráfico aleatório estrategicamente colocado para respaldar minhas opiniões.

Ao mesmo tempo em que a retórica estatística está por todo lado, o respeito à metodologia, à apuração de fontes e ao próprio conhecimento mínimo sobre os métodos quantitativos não são tão bem disseminados assim. Já presenciei, por exemplo, apresentações em congressos feitas por professores que usavam estatística de modo completamente absurdo.

Ainda duvida que estatística é fundamental? Eis uma definição elegante da área:

Estatística é o estudo sobre a coleta, análise, interpretação, apresentação e organização de dados.[1] Ao aplicar estatística em um problema científico, industrial ou social, costuma-se começar com a definição da população ou do modelo estatístico que será estudado. Populações podem ser coisas distintas tais como “todas as pessoas que moram em um país” ou “todos os átomos que compõe um cristal”. A estatística lida com todos os aspectos dos dados, incluindo o planejamento da coleta de informações, como o desenvolvimento de pesquisas e experimentos.

Falando sobre a área de Linguística, a análise de dados não é útil apenas para a linguística computacional. Existem áreas dos estudos da língua que dão mais ou menos importância para as análises quantitativas, sendo a sociolinguística talvez o exemplo mais claro de como se pode ganhar juntando a análise quantitativa com as noções da linguística. Mas, de maneira geral, é muito raro fazer a associação de duas matérias que costumam ser colocadas em pontos tão distantes do aprendizado – e não são poucas as pessoas que se arrepiam ao ouvir “mostre o que você está querendo dizer em um gráfico!”.

Foi só quando eu comecei a mexer com linguística computacional que pude perceber o quanto é surreal que se forme um linguista que não tenha nenhum conforto para lidar com esse tipo de raciocínio.

Esses são os cursos e materiais de estatística que me ajudaram e ajudam a lidar com esse mundo de conteúdos:


 

6440155

Livro – Statistics for Linguists with R – Stefan Th. Gries (De Gruyter Mouton, 2013)

É difícil estudar estatística e fugir da linguagem de programação R. Apesar de não ser a minha praia, é uma ferramenta poderosíssima que ajuda a entender estatística de um jeito prático, nem que seja em termos básicos. Para quem não conhece, a linguagem R é voltada para a computação científica, e possui muitas bibliotecas específicas para processamento e análise de dados.

De todo modo, o melhor do livro é a abordagem mão na massa: primeiro explica os conceitos, depois dá exemplos linguísticos e, então, exercícios com dados linguísticos.

data-science-from-scratch

Livro – Data Science from Scratch – Joel Grus (O’Reilly, 2015)

Esse excelente livro, de leitura rápida, é um apanhado de diversos campos que compõem a chamada ciência de dados. Ele pressupõe algum conhecimento de Python ou de programação, mas se você já tem esse background, o livro é muito legal. Basicamente, o que o autor faz é ir explicando os conceitos das ciências de dados através da implementação deles em Python.

Ele apresenta um problema, o tipo de conhecimento necessário para lidar com esse problema e a implementação dessa solução em Python, tudo isso com explicações on the run. Recomendo muito!
41pptmtwvfl-_sx398_bo1204203200_

Livro – OpenIntro Statistics – David M. Diaz, Christopher D. Barr, Mine Çetinkaya-Runde (2015)

Excelente e completíssimo material de introdução à estatística, oferece um panorama geral das bases da estatística. E o melhor de tudo: está disponível para baixar de graça nesse site. A ideia é oferecer um panorama geral das bases da estatística.

É uma boa sugestão para quem quer ir além da alfabetização funcional na estatística e descobrir mais a fundo alguns dos conceitos, como regressão linear e regressão logística.

cat

Livro – Python for Data Analysis – Wes McKinney (O’Reilly, 2013)

A aplicação de Python para a análise de dados está acontecendo em diversas áreas, já que é uma linguagem fácil, eficiente e bastante intuitiva. Isso ajuda não só na hora de escrever o seu código, mas também para divulgar os resultados e apresentar o código feito.

Esse livro apresenta a análise de dados de um modo geral usando o Python como base. Também traz principais ferramentas dentro do Python que são usadas por grandes empresas e pesquisadores para atacar as questões da análise de dados. Uma versão mais aprofundada e densa do Data Science from Scratch.

 

minibook

Livro – Learning IPython for Interactive Computing and Data Visualization – Cyrille Rossant (Packt Publishing, 2015)

O IPython é uma interface para programar em Python que merece um post só para ela. De modo geral, o que vale dizer por enquanto é que, para quem é acadêmico, ela é o futuro. A facilidade de fazer um código altamente legível, combinado com texto e interativo é absurda. Mas o que é mais interessante desse livro é que ele conta com uma abordagem bem empírica como usar essa interface para fazer análise e visualização de dados.

Há um outro livro do autor, intitulado IPython Interactive Computing and Visualization Cookbook (Packt Publishing, 2014) que é um livro de receita para análise de dados usando o IPython.

 

khan-logo-vertical-transparent

Site – Khan academy

Esse site é muito bom! Ele foi criado como uma ferramenta para ajudar crianças e adolescentes na escola, mas os conteúdos, videoaulas e exercícios são muito bons para todos os que querem um reforço em algum conteúdo específico. É um jeito fácil e rápido de ir atrás daquela matemática que você teve na escola e por algum motivo acabou não aprendendo ou esquecendo com o tempo (“mas eu nunca vou usar isso na vida, professora!” ¯\_(ツ)_/¯ ).

Livro online – Online Statistics Education: An Interactive Multimedia Course of Study

Esse recurso online, criado por universidades americanas, é uma ótima fonte de conhecimento sobre estatística. Tem a vantagem de estar organizado em links, e um conceito específico está ligado tanto com os tópicos que você precisa dominar para entendê-lo como com os tópicos que estão relacionados a ele de modo geral.

Curso – Computational Statistics with Python – Universidade de Duke

Um curso completo sobre estatística. Além disso, é todo voltado para a implementação dos conceitos usando o Python. Um material incrível, que eu descobri recentemente e vou usar a partir de agora.


Outras recomendações:

Estatística na Wikipedia (Inglês) – A Wikipédia em inglês é quase sempre um ótimo jeito de começar a estudar alguma coisa. No caso da estatística, a descrição é boa e te conduz para outras leituras e fontes bem legais. A versão em português é bem interessante também, e está nesse link aqui.

Sub-reddit de Estatística: O reddit é uma ótima plataforma de fóruns onde dá para encontrar pessoas falando sobre qualquer coisa. O de estatística é um jeito legal de ter algum contato com discussões dessa comunidade.

Quora – No Quora, que eu já mencionei aqui, é possível encontrar perguntas de vários níveis respondidas pelas mais diversas pessoas, desde curiosos até professores universitários famosos. Deem uma olhada nessa pergunta que coloquei como exemplo: tem uma resposta que está no mesmo nível de livros texto. É uma fonte que, se bem trabalhada, pode contribuir muito!

O estatístico – Essa página de divulgação no Facebook é uma iniciativa super importante. Como eu disse, estatística é um mundo, e aqui você vai poder ver diversos links e artigos interessantes sobre as mais variadas áreas e aplicações da estatística.

 

Espero que uma porção significativa (p<0,05) das sugestões e dicas ajudem! Se você tiver alguma outra sugestão, por favor, compartilhe!

 

Como eu aprendi Python – compartilhando ferramentas

Aprender a programar foi uma das experiências acadêmicas mais legais que eu já tive. Comecei a estudar mais sistematicamente há quatro anos e, desde então, encontrei diversos materiais que me ajudaram a sair de um estágio de completo leigo para alguém que programa diariamente.

python-logo
A linguagem dos campeões!

A linguagem de programação que me indicaram para começar a aprender foi Python, que é, ao mesmo tempo, muito amigável com iniciantes, e bastante poderosa e versátil para quem já tem algum domínio. Ainda farei um post só sobre essas vantagens, com foco no que a linguagem tem de melhor para nós linguistas!

A quantidade de material de Python que se consegue encontrar na internet é enlouquecedora. Em parte, isso se deve não só ao sucesso da linguagem, mas também ao fato de que a comunidade de programadores Python é conhecida pela colaboração e pela defesa ferrenha da troca livre de ideias. Justamente pelo excesso de material, a ideia desse post é dar uma ajuda na hora de escolher o caminho que você vai seguir.

Em primeiro lugar, uma lista antes da lista:

A- Essa lista é voltada para pessoas que são novas no mundo da programação.

B- A quantidade de coisas que dá pra aprender sobre Python é muito grande!

C- Essa não é uma daquelas listas de “Aprenda Python em 24 horas” ou ”Ganhe dinheiro aprendendo a programar”. Minha intenção é compartilhar ferramentas que foram extremamente produtivas no meu caminho do aprendizado de programação.

D- Aprender a programar é pura diversão, mas as aplicações são MUITAS e as áreas são muito diferentes. Então, antes de começar, que tal pensar qual é realmente o seu objetivo e qual será a aplicação da programação para você? Assim, fica mais fácil escolher qual livro começar ou para qual curso você deve se dedicar mais.

Agora, ao trabalho! Eu separei os materiais que usei para aprender Python e que me foram indicados por professores, amigos e pela gloriosa internet. Falo um pouco de cada um e quero deixar bem claro: a lista é aberta! Meus estudos em Python não estão nem perto do fim!

As Ferramentas:

81lkwoe38tl

Livro: Think Python – How to think like a computer scientist – Allen B. Downey (O’reilly Media, 2012)

Meu primeiro contato bem-sucedido com programação e Python veio com esse livro. É uma ótima introdução à linguagem, ao mesmo tempo que é gentil (em oposição a ser assustador) pra te mostrar conceitos fundamentais de lógica de programação.

Ah, tem uma versão em português também disponível aqui! Além de uma tradução nova, que coloco aqui assim que estiver disponível.

 

logo_blue_dark

Curso: Python – codecademy

Esse curso do codecademy é muito bacana e amigável com iniciantes, é interativo e faz você trabalhar com muitos conceitos fundamentais através de exercícios. É um recurso complementar leve e extremamente didático ao Think Python.

 

9780262519632

Curso e livro: Introduction to Computer Science and Programming (MIT OpenCourseWare) e Introduction to Computation and Programming using Python – John B. Guttag (MIT Press, 2013)

Estou fazendo esse curso agora. Eu cheguei a fazer uma introdução às ciências da computação na USP, usando C (poucas saudades do C, mas o curso foi muito bom!), mas recomendo esse curso no lugar. Além além de aprender Python aqui, você vai aprender a ciência por trás, os conceitos fundamentais que te transformam não em alguém capaz de seguir receitas, mas em alguém que consegue pensar computacionalmente. Além dos vídeos disponíveis gratuitamente, tem o livro que é base do curso. Estou achando bem interessante!

iipp_icon

Curso: Interactive Programming with Python (Coursera)

Esse curso ensina diversos conceitos fundamentais de Python e programação através das aulas bem descontraídas (mas não é brincadeira, o curso é bem puxado) com projetos semanais que são um baita diferencial: fazer um jogo por semana como exercício. Então você aprende a programar e tem ali um resultado bem palpável, seja um jogo de adivinhar números ou de atirar em cometas.


 

Além dessas ferramentas que me diverti usando, ainda é possível encontrar inúmeras outras. Eu recomendo que o programador iniciante dê uma procurada nos seguintes lugares:

1 – Wiki da comunidade Python Brasil – Aqui tem tudo o que você vai precisar! Além disso, mostra um dos pontos mais fortes dessa linguagem de programação: a comunidade.

2-  O grupo Python Brasil no Facebook – Já que todo mundo passa tanto tempo na rede social, por que não aproveitar para dar uma olhada em artigos, discussões e sugestões reunidas nesse grupo bem ativo?

3- Fórum da comunidade Python Brasil – Para quem prefere o formato de fórum, aqui também se tem acesso aos mais diversos conteúdos sobre Python.

4- A documentação da linguagem Python – Todas as informações específicas que você poderia querer do funcionamento básico da linguagem Python estão aqui.

5 – Stackoverflow – Os acentos do texto que você está tentando abrir no Python saíram todos desconfigurados? Quer saber como ordenar as chaves de um dicionário de acordo com o valor em ordem numérica decrescente? Aqui é o lugar onde você vai achar todas as respostas às suas dúvidas específicas, uma meca digital onde todos os programadores do mundo se ajudam.

Espero que esses materiais ajudem!

print(‘Ni!’)

giphy-facebook_s