Machine Learning

Como foi que eu acabei criando uma assistente virtual?

20 de agosto de 2017

Recentemente comecei minha “aventura” pelo mundo do Data Science. Iniciei pelo estudo dos conceitos de Big Data, mineração de dados e inteligência artificial, aplicando todo o meu aprendizado. O resultado foi a criação de uma assistente virtual. Acompanhe este post até o final para ver como eu cheguei até esta ideia [tem um vídeo no final que mostra a assistente funcionado]

A essência do Machine Learning (Aprendizado de máquina) é o reconhecimento de padrões presentes em dados. Ao aplicar métodos estocásticos e software a uma camada de dados, é possível criar verdadeiros sistemas inteligentes, capazes de reconhecer padrões e “aprender” com eles. Diante disto, é evidente que, para se chegar a resultados satisfatórios, o volume de dados usado como base para os modelos probabilísticos não deve ser desprezado.

O Big Data é um elemento-chave

Em estatística, nós sabemos que quanto maior for o volume da amostra, menor a margem de erro e, consequentemente, maior o nível de confiança de uma análise. Acontece que nós estamos na era do Big Data, na qual temos à nossa disposição um volume de dados cada vez maior. Aumentando a escala, aumenta também o nível de confiança dos modelos.

Vou citar um exemplo: Há alguns anos a Google foi capaz de identificar um surto de gripe, ao combinar centenas de bilhões de termos de pesquisa, provando ser um indicador mais útil do que as estatísticas do governo, no momento em que ocorreu o “boom” do vírus H1N1. Isso foi em 2009. Hoje, com muito mais dados à disposição do que tinham naquela época, certamente a confiabilidade da previsão seria maior.

Outro exemplo: O Gmail consegue determinar quando uma mensagem que chega na sua caixa de entrada é um SPAM ou uma atualização de newsletter e organiza todas as mensagens em suas devidas abas, com uma grande precisão; o corretor ortográfico dos nossos smartphones consegue prever qual palavra nós utilizaremos na sequência ao formar uma sentença; carros estão circulando pelas ruas sem que haja um condutor ao volante; a Netflix consegue fazer recomendações de filmes e séries que combinam com os nossos gostos, e são apenas alguns exemplos.

Quando o assunto é Big Data e inteligência artificial é muito difícil não mencionar a Google, visto que é uma empresa que trafega mais de 20 petabytes de dados todos os dias. Foi o uso exaustivo desta gigantesca massa de dados que permitiu à Google alcançar uma margem de erro ínfima, de apenas 4.9% , em sua tecnologia de reconhecimento de voz.

Tudo isso é feito por inteligências artificiais, com base na aplicação de modelos matemáticos a enormes quantidades de dados, a fim de extrair significados e prever probabilidades. Com enormes quantidades de dados formando a base das previsões, nós não precisamos dizer a estes sistemas o que eles precisam fazer, eles literalmente “se viram”. É fácil concluir que as IAs adicionam uma verdadeira camada de inteligência ao Big Data. Quando estas duas áreas se unem, o céu é o limite. É por este motivo que são duas áreas em acentuada convergência, pois, trata-se de uma tendência natural.

E quais são as possibilidades?

Há muito o que podemos fazer quando aplicamos software e big data juntos. Veja algumas aplicações práticas:

  • Reconhecimento facial
  • Reconhecimento de voz
  • Classificação e reconhecimento de objetos em imagens
  • Tradução de textos
  • Análise de sentimentos em documentos de textos (Útil para fazer mineração de opinião)
  • Classificação automática de documentos
  • O desenvolvimento de carros autônomos
  • Sistemas para previsão de preços
  • Sistemas de recomendação (Como o da Amazon, ou da Netflix)

E muitas outras aplicações interessantes que, no momento em que você ler este artigo, estão sendo criadas por pesquisadores, cientistas de dados e engenheiros de software, a todo o vapor e em algum lugar do mundo – normalmente dando origem a alguma startup.

Porque é interessante se aprofundar no assunto?

Estamos falando de um caminho sem volta. O emprego constante de denominações como cientistas de dados, ou engenheiros de dados já faz parte da nossa realidade. E, nas palavras do autor Mayer-Schonberger, em seu livro Big Data: Como extrair volume, variedade, velocidade e valor da avalanche de informação cotidiana:

“A matemática e a estatística, talvez com uma pitada de programação e ciência de rede, serão tão fundamentais para o ambiente de trabalho moderno quanto o conhecimento dos números foi há um século, e a alfabetização, antes disso. ”

 

É algo que representa bem a necessidade de se aprofundar no assunto e correr atrás de material de estudo. Conseguir um bom nível de qualificação neste campo é o que vai te destacar no mercado a partir de agora.

Para se chegar a este resultado, será preciso entender como aplicar todas as ferramentas e técnicas necessárias. A melhor forma de entender estas ferramentas e de aprender a utilizá-las é estudando e praticando os seus conceitos. Praticar é importante, porque não adianta apenas mergulhar em um mundo de livros e teoria.

Então, eu decidi aprender e praticar

Ainda ao longo de 2016 eu comecei a fazer escola quando comprei um livro sobre Data Science e outro sobre mineração de dados. Estes livros despertaram ainda mais o meu interesse pelo assunto, quanto topei com os fundamentos do Machine Learning (Aprendizado de máquina). Então, no começo de 2017 eu estabeleci uma meta: “Vou adquirir o máximo de conhecimento que puder sobre machine learning e inteligência artificial e aplicar esse conhecimento na criação de algum sistema”. Comprei vários livros e comecei a me planejar e a estudar os conceitos todos os dias. Como estamos falando de um campo vasto, procurei focar meus estudos em áreas específicas; aquelas que têm uma ligação mais estreita com os resultados que eu planejei alcançar. Baseado nisso, restringi meus estudos aos seguintes campos:

  • Processamento de linguagem natural
  • Deep Learning (Aprendizagem profunda com Redes Neurais Artificiais)
  • Machine Learning

A cada livro que eu lia sobres estes assuntos, a cada conceito que eu aprendia, mais fascinado eu ficava com o número de aplicações possíveis para aquilo tudo. Depois de alguns meses de muito estudo, de rabiscos em papel, de testes fracassados e de outros vários bem-sucedidos, eu finalmente consegui alcançar o meu objetivo: Criei uma “assistente virtual” e dei a ela o nome de POLIANA.

POLIANA: Minha nova assistente virtual

Ao desenvolver a POLIANA eu tinha em mente duas maneiras de interagir com ela:

  1. Via Facebook Messenger
  2. Via aplicativo Android, utilizando comandos de voz.

Na criação desta assistente virtual eu apliquei os seguintes conceitos, como resultado do conhecimento adquirido durante os estudos nas áreas citadas no tópico anterior:

  • Processamento de linguagem natural
  • Visão computacional com aplicação de redes neurais
  • Análise de sentimentos (classificação de polaridade em textos)

Para gerar um modelo que pudesse classificar imagens com a melhor precisão que estivesse ao meu alcance, treinei um algoritmo baseado em rede neural, usando cerca de 2GB de imagens de várias categorias, na resolução 800×600. Baixei estas imagens no Google. Para treinar a rede neural, utilizei o Tensorflow.

Basta enviar uma imagem pelo Facebook Messenger, que automaticamente a POLIANA faz o reconhecimento. Como você pode notar na imagem acima, acabei conseguindo um nível de precisão aceitável, mas houve testes onde esse número nem chegou a 50%. Isso se deve ao fato de eu ter coletado um volume de dados muito pequeno (2GB) para utilizar no treino da rede neural. Lembre-se do que foi dito no começo deste artigo: aumentando a escala, aumenta a precisão.

A parte de análise de sentimentos se baseia em um algoritmo de classificação, cujo modelo gerei utilizando o framework Scikit-Learn. Para treinar este algoritmo e gerar o modelo eu precisei coletar dezenas de reviews de livros no site da Amazon e rotulei todos os dados coletados para o treino (Aprendizagem Supervisionada).

Mesmo se tratando de uma assistente virtual, tentei implementar um recurso de conversação casual, que pudesse ser contextualizado. Nesta parte de chat eu também utilizei o Tensorflow e uma rede neural para classificação de textos. É possível conferir o resultado disto no vídeo que acompanha este artigo (o vídeo está no final).

A maior parte do projeto foi desenvolvida com uso da linguagem Python; a interface Android foi desenvolvida em Java. De modo a viabilizar a interoperabilidade da POLIANA, decidi que seria melhor criá-la na forma de uma API RestFul. Deste modo eu consegui que ela pudesse funcionar tanto na plataforma do Facebook Messenger quanto via aplicativo Android.

A assistente é capaz de fazer coisas mais básicas (tanto via entrada de texto, como por comandos de voz). Veja:

  1. Me manter atualizado quanto às notícias do dia quando eu digo: “Me conte algo novo”
  2. Me trazer respostas à pesquisas como: “Fale-me sobre a Revolução Industrial”, “O que é Fissão Nuclear”, “Quem foi Galileu?”, “O que você sabe sobre Torres de resfriamento?”, e o que mais a sua imaginação desejar perguntar a ela.
  3. Traduzir frases do tipo: “Como eu falo EU QUERO PASSEAR NO SHOPPING, em inglês? ”
  4. Ela também é capaz de fazer contagens. Por exemplo, quando eu digo “Conte de um até vinte”. :-p.
  5. Como já foi comentado acima, a POLIANA também é capaz de fazer análise de sentimento durante as interações. Sempre que eu digo algo ela tenta identificar a polaridade presente na frase. Se eu falo: “Fui ao shopping ontem e entrei no cinema; o filme até que estava bom, mas a dublagem deixou muito a desejar. Além disso, a pipoca estava muito salgada”, ela consegue entender a polaridade negativa da frase e muda a cor da interface:

 

No vídeo abaixo é possível ter uma ideia melhor do que ela é capaz de fazer:

Para a saída de voz, utilizei a API da IBM (IBM Watsom).

A ideia de criar a POLIANA foi motivada apenas pela necessidade de praticar o conhecimento adquirido durante os meus estudos e eu pretendo torna-la melhor com o tempo e conforme eu for aprendendo mais sobre Machine Learning. Eu poderia ter criado outra coisa, mas achei que uma assistente virtual pudesse reunir melhor todos os conceitos que eu venho estudando.

Você também está estudando sobre esse assunto e quer trocar uma ideia? Comenta aí. 🙂

Like

Veja também