Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sistemas de Recomendação com Google Dataproc

Sistemas de Recomendação com Google Dataproc

Esta palestra introduz o tema Sistemas de Recomendação e depois explora uma possível arquitetura e implementação utilizando ferramentas da Google Cloud Platform, com ênfase no Dataproc, a oferta Apache Spark do Google.

Daniela Petruzalek

December 09, 2017
Tweet

More Decks by Daniela Petruzalek

Other Decks in Technology

Transcript

  1. O fenômeno da cauda longa Amazon: 36,7% (2008) $1,9 bi

    USD Amazon: 63,3%(2008) $3,4 bi USD Mais de 100 mil livros vendidos
  2. Arquitetura de um Sistema de Recomendação Resultados de Algoritmos API

    de Recomendação Algoritmos de Recomendação Fonte de Documentos Dados de Consumo
  3. Scheduler Arquitetura de um Sistema de Recomendação Resultados de Algoritmos

    API de Recomendação Algoritmos de Recomendação Fonte de Documentos Dados de Consumo
  4. Apache Spark • Framework para processar Big Data • Processamento

    em memória (RDDs) • Baseado em grafos de execução • É possível programar um processo distribuido da mesma forma que um processo local
  5. = +

  6. Algoritmo: Filtragem Colaborativa • Processo: • Identificar usuários similares •

    Recomendar itens que usuários similares gostam Filmes Usuários User x Item Matrix | Utility Matrix | Rating Matrix
  7. Passo 2: Criar o Modelo de Dados -- create_db.sql CREATE

    DATABASE TEST; -- create_movies.sql CREATE TABLE MOVIES( id varchar(255), title varchar(255), genre varchar(255), PRIMARY KEY (id)); -- create_ratings.sql CREATE TABLE RATINGS( userId varchar(255), movieId varchar(255), rating float, PRIMARY KEY (userId, movieId), FOREIGN KEY (movieId) REFERENCES MOVIES(id)); -- create_recommendations.sql CREATE TABLE RECOMMENDATIONS( userId varchar(255), movieId varchar(255), prediction float, PRIMARY KEY (userId, movieId), FOREIGN KEY (userId,movieId) REFERENCES RATINGS(userId,movieId));
  8. Passo 3: Subir Arquivos Para a Cloud $ gcloud config

    set project recsys-187600 $ gsutil mb gs://recsys-tutorial $ gsutil cp *.sql gs://recsys-tutorial $ gsutil cp movies.csv ratings.csv gs://recsys-tutorial
  9. Passo 6: Algoritmo # engine.py # Configurações do job conf

    = SparkConf().setAppName('Movie Recommender') \ .set('spark.driver.memory', '6G') \ .set('spark.executor.memory', '4G') \ .set('spark.python.worker.memory', '4G') sc = SparkContext(conf=conf) sqlContext = SQLContext(sc) # Acesso ao Cloud SQL jdbcDriver = 'com.mysql.jdbc.Driver’ jdbcUrl = 'jdbc:mysql://%s:3306/%s?user=%s&password=%s' % ( CLOUDSQL_INSTANCE_IP, CLOUDSQL_DB_NAME, CLOUDSQL_USER, CLOUDSQL_PWD)
  10. Passo 6: Algoritmo # Load via JDBC dfRates = sqlContext.read.format('jdbc')

    \ .option('useSSL', False) \ .option("url", jdbcUrl) \ .option("dbtable", TABLE_RATINGS) \ .option("driver", 'com.mysql.jdbc.Driver') \ .load() # BugFix ratesRDD = dfRates.rdd cleanRDD = ratesRDD.filter(lambda row : row[0] != "userId") # Treino do modelo com ALS model = ALS.train( cleanRDD.rdd.map(lambda r: (int(r[0]), int(r[1]), r[2])).cache(), rank=rank, seed=seed, iterations=iterations, lambda_=regularization_parameter)
  11. Passo 6: Algoritmo # Gera 10 recomendações para cada usuário

    predictions = model.recommendProductsForUsers(10) \ .flatMap(lambda pair: pair[1]) \ .map(lambda rating: (rating.user, rating.product, rating.rating)) schema = StructType([ StructField("userId", StringType(), True), StructField("movieId", StringType(), True), StructField("prediction", FloatType(), True)]) dfToSave = sqlContext.createDataFrame(predictions, schema) # Salva no Cloud SQL dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')
  12. Conclusões • Sistema de recomendações simples de implementar • A

    infraestrutura da GCP abstrai muito a complexidade da arquitetura de Big Data • Faltam algumas features para ser production ready: • Suporte a outros algoritmos (ensemble) • Scheduler • Testes A/B • Ingestão de dados reais • API para consumo