Processamento Paralelo e Iterativo para Recomendações de Aprendizado de Máquina com Spark

/, Big Data, Big Data Analytics, noticias-tecnologia, Tendências Big Data/Processamento Paralelo e Iterativo para Recomendações de Aprendizado de Máquina com Spark

Processamento Paralelo e Iterativo para Recomendações de Aprendizado de Máquina com Spark

O texto a seguir é uma tradução livre de um tutorial da MapR que achei muito interessante.
Espero que também ache 🙂

Sistemas
de recomendação ajudam a estreitar suas escolhas para aquelas que
melhor atendem às suas necessidades, estando entre os mais populares
aplicativos de processamento de Big Data. Neste post vamos discutir a
construção de um modelo de recomendação de classificação de
filmes, semelhante a estes dois artigos: Um Olhar Interno aos
Componentes de um Mecanismo de Recomendação e Sistema de
Recomendação com Mahout
e Elasticsearch, mas desta vez usando um algoritmo iterativo e
processamento paralelo com Apache Spark MLlib.
Neste
post vamos abordar:
  1. Uma
    diferença fundamental entre
    Spark e
    MapReduce,
    que faz o Spark muito
    mais rápido
    para
    algoritmos
    iterativos.
  2. Filtragem
    colaborativa para recomendações com Spark.
  3. Carregando
    e explorando amostras de dados definidos com Spark.
  4. Usando
    o algoritmo Spark MLib (Alternância de Quadrados Mínimos) para
    fazer recomendações de filmes.
  5. Testando
    os resultados das recomendações.
Uma
diferença fundamental entre
Spark
e
MapReduce

O
Spark é
especialmente
útil para
o
processamento paralelo
de
dados
distribuídos
com
algoritmos
iterativos.
Conforme
discutido no
Guia
de
5 minutos para
compreender
o significado do
Apache
Spark,
o
Spark
tenta
manter
os dados
na
memória,
ao passo que o
MapReduce envolve mais
leitura
e escrita
de
disco.
Como
mostrado
na
imagem abaixo,
para
cada
MapReduce
Job,
os
dados são lidos
de
um arquivo
HDFS
para
um
mapeador,
escrito
para
e de um
SequenceFile
e
depois
gravados
em um arquivo
de
um
Redutor.
Quando
uma
cadeia
de
múltiplas
tarefas é necessária,
o Spark pode
executar
muito
mais rapidamente,
mantendo os
dados na memória.
Para
o registro,

benefícios em
gravar
no disco,
sendo
este mais
tolerante
a falhas
do
que a
memória.

Leitura
de Partições de Dados RDDS
através
RAM
ao
invés do
Disco

Os
dados distribuídos resilientes do Spark,
RDDS,
são
um conjunto de
elementos
particionados
entre
os
nós
de um cluster
que
podem
ser
operados
em
paralelo.
RDDS
pode
ser criado
a
partir de arquivos
HDFS
e
pode
ser
armazenado em cache,
permitindo reutilização
em
operações
paralelas.
O
diagrama abaixo mostra uma aplicação Spark rodando em um exemplo
cluster do Hadoop. A tarefa aplica-se a sua unidade de trabalho para
os elementos RDD em sua partição e gera uma nova partição, uma
vez que algoritmos iterativos aplicam operações repetidamente aos
dados, se beneficiando do RDDS em memória, armazenando em cache
através de iterações.
Filtragem
Colaborativa com Spark
Algoritmos
de filtragem colaborativa recomendam itens (esta é a parte de
filtragem) com base em informações de preferência de muitos
usuários (esta é a parte em colaboração). A abordagem de
filtragem colaborativa baseia-se na semelhança; a ideia básica é
que as pessoas que gostavam de itens semelhantes no passado, vão
gostar de itens semelhantes no futuro. No exemplo abaixo, Ted gosta
dos filmes A, B, e C. Carol gosta dos filmes B e C. Bob gosta do
filme B. Para recomendar um filme a Bob, calculamos que os usuários
que gostavam de B também gostaram de C, então C é uma possível
recomendação para Bob. Naturalmente, este é um pequeno exemplo. Em
situações reais, teríamos muito mais dados para trabalhar.
O
Spark MLlib implementa um algoritmo de filtragem colaborativa chamado
Alternância de Quadrados Mínimos (ALS, sigla em inglês).
O
ALS aproxima a matriz escassa de classificação de itens de usuário
de dimensão K como o produto de duas matrizes densas, User e Item,
matrizes fatoriais de tamanho U x K e I x K (veja a imagem abaixo).
As matrizes de fator (ou fatoriais) também são chamadas de modelos
de recursos latentes. Elas representam características escondidas
que o algoritmo tenta descobrir. Uma matriz tenta descrever as
características latentes ou ocultas de cada usuário e outra tenta
descrever as propriedades latentes de cada filme.