Por que eu devo ler este artigo:Cada vez mais os cenários de recomendação de conteúdo são explorados por portais de conteúdo e e-commerce, possibilitando a identificação automática das preferências dos usuários com o objetivo de sugerir novos itens ou conteúdos de seu interesse. Neste artigo, apresentaremos uma introdução a esse assunto utilizando a API de machine learning da Apache (Apache Mahout) e um sistema de processamento distribuído (Hadoop) para construir um recomendador de vídeos inteligente e escalável.

Com uma grande quantidade de informações e uma extensa variedade de produtos e serviços, cada vez mais nos deparamos com dificuldades para escolher entre as alternativas apresentadas. Frente a este cenário, geralmente confiamos nas recomendações que são passadas por outras pessoas e tomamos como base sua satisfação em relação àquilo que estão nos recomendando. Essas recomendações acontecem de muitas formas, normalmente através de jornais, revistas, revisores de filmes e livros, entre outros.

O objetivo de um sistema de recomendação é melhorar a capacidade do processo de indicação, muito comum na relação social entre seres humanos. Nesses sistemas, os usuários fornecem as recomendações como entrada e o sistema as direciona para os indivíduos potencialmente interessados; como acontece no Netflix, quando classificamos um filme indicando o número de estrelas. Um dos grandes desafios desse tipo de sistema é realizar o casamento correto entre as pessoas que estão recomendando e as pessoas que estão recebendo a recomendação. Esse relacionamento é conhecido como relacionamento de interesse. Entre as principais técnicas para recomendação de conteúdo, podemos destacar a filtragem demográfica e a filtragem colaborativa.

A filtragem demográfica utiliza a descrição de um indivíduo para aprender o relacionamento entre um item em particular e o tipo de indivíduo que poderia se interessar por ele. Nessa abordagem, os dados pessoais do usuário são requisitados através de formulários e combinados com o seu perfil de consumo, permitindo estabelecer um relacionamento de interesse para cada tipo de indivíduo. Já na filtragem colaborativa, esse relacionamento é determinado através do comportamento comum de diferentes usuários, ou seja, a filtragem colaborativa considera que existe um perfil de consumo comum entre as pessoas que gostam das mesmas coisas. Essa abordagem é vantajosa porque não precisa coletar mais informações sobre o usuário, além das informações sobre o seu comportamento de consumo no próprio portal.

É muito comum um usuário gostar de diversos itens do mesmo portal, e ao mapear todos esses interesses, geramos um grande volume de dados. Isso acontece porque os portais oferecem uma grande quantidade de produtos, e cada produto visitado precisa gerar um log de acesso. Lidar com esse volume de dados nos leva a um cenário de Big Data, quando muitas vezes temos a necessidade de realizar processamento paralelo e distribuído. Isso se torna ainda mais importante quando aplicamos algoritmos de machine learning, que normalmente são caros do ponto de vista computacional. Felizmente, para isso, podemos contar com a ajuda do Apache Mahout e do Hadoop.

O Apache Mahout é uma biblioteca de machine learning de código aberto cujos principais objetivos são: processar recomendações, classificações e agrupamentos. Mantido pela Apache Software Foundation, o Mahout nasceu em 2008 como um subprojeto do Apache Lucene, outra ferramenta de código aberto destinada a problemas de busca e recuperação de informações. Em 2010 o Apache Mahout se tornou um projeto de software independente, que visa escalabilidade e eficiência. Por isso compatibilizou seus algoritmos com o Hadoop.

O Hadoop, por sua vez, é uma ferramenta de código aberto que implementa o paradigma Map-Reduce, introduzido pelo Google e criado para realizar processamento paralelo e distribuído. Assim, o Hadoop é capaz de processar grandes conjuntos de dados dividindo uma tarefa em pequenas partes e processando essas partes em máquinas distintas.

Este artigo mostra como utilizar o Apache Mahout e o Hadoop para construir um recomendador de vídeos inteligente e escalável. Em nosso experimento utilizaremos a base de dados aberta MovieLens, que é provida por um grupo de estudo especialista em recomendação de conteúdo da Universidade de Minnesota.

Apache Mahout

Como visto anteriormente, o Mahout é uma biblioteca de machine learning mantida pela Apache Software Foundation cujo objetivo é facilitar o uso de algoritmos de aprendizado de máquina quando utilizados em sistemas de processamento distribuído. Quando falamos em machine learning ou aprendizado de máquina, em português, estamos nos referindo a um conjunto de técnicas que permitem a uma máquina melhorar suas análises a partir de resultados obtidos anteriormente. Essas técnicas são muito exploradas pela mineração de dados e usam principalmente métodos estatísticos e probabilísticos, bem como reconhecimento de padrões e outras ferramentas matemáticas. Embora não seja uma área de estudo nova, está em pleno crescimento, tanto que grandes corporações, como Amazon, Facebook e Google, utilizam algoritmos desse tipo em muitas de suas aplicações.

Esses algoritmos são implementados em diversos tipos de aplicações, como: jogos, sistemas de detecção de fraudes, análise da bolsa de valores, forecast de preço, entre outros. Eles também são muito comuns em sistemas de recomendação, como os da Amazon e Netflix, que sugerem produtos aos usuários com base em compras/visualizações anteriores.

O aprendizado de máquina permite solucionar problemas a partir de duas abordagens: o aprendizado supervisionado e o aprendizado não supervisionado.

Aprendizado supervisionado

O aprendizado supervisionado consiste em aprender uma função a partir de um conjunto de dados de treinamento, previamente rotulados. Após o treinamento, a máquina se torna apta a classificar um novo dado com base nas regras aprendidas durante o treino.

Muitos problemas podem ser solucionados a partir do aprendizado supervisionado, tais como: classificar mensagens de e-mail como spam, rotular páginas da web de acordo com o gênero, reconhecimento de imagens, etc. Para solucionar esses problemas podemos utilizar diversos algoritmos, por exemplo: Redes Neurais Artificiais, Máquinas de Vetor de Suporte (SVM) e classificadores Bayesianos.

Aprendizado não supervisionado

No aprendizado não supervisionado não existe uma fase inicial de treinamento, pois seu propósito é indicar o significado dos dados. Essa técnica normalmente é utilizada para segmentar os dados e formar grupos lógicos, possibilitando identificar novas tendências e comportamentos.

Os algoritmos de aprendizado não supervisionado geralmente são utilizados para mapear padrões de consumo, bem como efetuar recomendações. Entre os principais algoritmos de aprendizado não supervisionado, podemos destacar: algoritmos de agrupamento e filtragem colaborativa.

Recursos do Apache Mahout

Os algoritmos oferecidos pelo Mahout se dividem em quatro grupos: filtragem colaborativa, algoritmos de classificação, algoritmos de agrupamento e algoritmos de redução de dimensionalidade. Todos eles podem ser utilizados via API e a maior parte deles também pode ser utilizada via linha de comando, através de shell interativo.

Hadoop

Como vimos anteriormente, o Hadoop é uma ferramenta de Map-Reduce que permite realizar processamento paralelo e distribuído. Ele é formado por dois componentes principais: o Hadoop Distributed File System (HDFS), que armazena e manipula os dados que serão processados pelas máquinas que compõem o cluster; e o Map-Reduce, que gerencia todo o processamento realizado pelo cluster de máquinas. A Figura 1 ilustra esses dois componentes.

Componentes do Hadoop

Figura 1. Componentes do Hadoop.

Hadoop Distributed File System (HDFS)

Quer ler esse conteúdo completo? Tenha acesso completo