Deep Learning para Sistemas de Recomendação (Parte 1) — Introdução
Introdução a Sistemas de Recomendação e Deep-RecSys
Esse é o primeiro artigo de uma série que iremos abordar Sistemas de Recomendação (RecSys) com Deep Learning (DL). O objetivo dessa série é demonstrar as motivações, arquiteturas e alguns códigos de Deep-RecSys que estão sendo utilizados para recomendar conteúdo. Nessa série espero abordar o tema desde a introdução até como colocar uma solução em produção (end-to-end).
Como esse é o primeiro artigo da série, o foco desse artigo é introduzir o tema de RecSys e as principais motivações que fazem Deep Learning ser uma ótima ferramenta para recomendações de conteúdo. Os principais tópicos desse artigo são:
- Introdução a RecSys
- RecSys como um problema de Machine Learning
Filtragem Baseada em Conteúdo (Content-Based)
Filtragem Colaborativa (Collaborative Filter)
Sistemas Híbridos (Hybrid)
Cold-Start - Por que usar Deep Learning para Recomendação ?
Caso você esteja esperando ver código e arquiteturas, vai ter que esperar os próximos artigos dessa série.
Introdução a RecSys
Um Sistema de Recomendação (RecSys) tem como principal objetivo filtrar o conteúdo que é entregue ao usuário, tentar prever a “nota” ou “preferência” que o usuário daria a um conteúdo para então realizar recomendação baseada nessa preferência. Dessa forma, a experiência de consumo dentro da plataforma se torna mais otimizada e interessante.
O RecSys pode ser utilizado para recomendar conteúdo em diferentes domínios, como livros, música, filme, varejo, notícias etc… Embora existam particularidades específicas em cada domínio, dois personagens são fundamentais, os usuários do sistema e os conteúdos oferecidos pela plataforma. Dessa forma a base do RecSys é:
O conteúdo oferecido deve ser filtrado com o objetivo de gerar uma lista personalidada e relevante para cada usuário
Os exemplos são diversos: a Amazon recomenda livros (ou qual coisa do marketplace), a Netflix faz recomendação de Filmes, o Mendeley recomenda artigos ciêntíficos, a Globo.com recomenda notícias e o Spotify as músicas.
Os benefícios de um RecSys para à plataforma podem ser variados, como: melhorar a experiência do usuário dentro da plataforma; manter o usuário por mais tempo logado; aumentar as vendas dos produtos oferecidos ou, simplesmente, todas elas ao mesmo tempo. É tudo uma questão financeira no final das contas.
RecSys como um problema de Machine Learning
Um RecSys pode ser tratado como um problema de Machine Learning, ou seja,
o sistema deve aprender o padrão de consumo de conteúdo do usuário com experiências passadas e prever o que o usuário gostaria de consumir no futuro.
Embora a definição seja simples, existem diversas formas de tratar esse problema dentro da área de ML. De forma geral, podemos dividir os diferentes métodos/algoritmos em diferentes categorias de abordagens:
Filtragem Baseada em Conteúdo (Content-Based)
Gera as recomendações com base na similaridade do conteúdo já consumido pelo usuário. Ou seja, utiliza os conteúdos que o usuário já consumiu na plataforma (leu, comprou, assistiu, ouviu, clicou..) para gerar um perfil, então o sistema busca conteúdos semelhantes que ainda não foram vistos pelo usuário e recomenda em seguida.
A principal vantagem dessa categoria é que não requerer muito feedback do usuário para começar a recomendar algo “útil”.
Se o primeiro filme assistido na NetFlix foi “Star Wars”, o sistema já pode recomendar todo o universo de filmes, séries, animações.. ou qualquer filme de “navinha” sem que seja necessário um histórico muito grande de interações.
Ao meu ver existem duas principais desvantágens ao utilizar a recomendação baseada em conteúdo:
- O sistema coloca o usuário em uma “bolha de preferência”, onde tudo que é recomendado é semelhante ao que já foi consumiu. Essa bolha de preferência a longo prazo pode levar ao desinteresse do usuário nas recomendações, pois, gera pouca diversidade no conteúdo apresentado. Outro ponto é que dependendo do contexto pode ser prejudicial ao negócio também, pois não apresenta produtos novos ao usuário e o perfil pode mudar mais lentamente que a própria preferência do usuário.
- Este problema tem mais a ver com a modelagem da solução. Filtragem baseada em conteúdo é realizada ao filtrar conteúdo similar, agora tente definir o que é similaridade de conteúdo.
O que é um filme similar a outro? é a sinópse do filme, os atores, a categoria ou gênero? ou talvez seja as imagens do cartaz, o vídeo em si… E com relação a livro, o que seria um livro similar a outro ? o resumo, o título, as catergorias ou assuntos abordados ? e música ? podemos dizer que é só o gênero ou talvez as notas musicais ou letras ?
Cada contexto tem suas particularidades e diversidades com relação as features que podem ser utilizadas, como dados categóricos, texto livre, numéricos, imagens, áudio ... A questão é que se a função de similaridade entre um Conteúdo A
e um Conteúdo B
não tiver bem definida, irá resultar em recomendações bastante homogêneas, repetitivas ou mesmo nada semelhantes.
Filtragem Colaborativa (Collaborative Filter)
Por outro lado, a abordagem da Filtragem Colaborativa ignora as características do conteúdo e foca na interação entre o Usuário X Conteúdo. Parte do princípio que o sistema não precisa saber as características do conteúdo, mas sim quais conteúdos o usuário consumiu para identificar quais outros usuários tiveram o mesmo comportamento de consumo. Dessa forma é possível “trocar” recomendações entre usuários semelhantes ao processar o coletivo.
São recomendações muito semelhantes a “Os usuários que assistiram Star Wars também assistiram Senhor dos Anéis”. Essa abordagem resolve os dois problemas anteriores, tira o usuário da bolha de preferência e não necessita da definição de similaridade de conteúdo já que as características são ignoradas.
A atenção especial desse método é com relação à modelagem da “força de interação” do Usuário x Conteúdo para representar o
“quanto o usuário gostou do conteúdo” .
Na prática, esse valor pode ser a nota dada pelo próprio usuário ao conteúdo, a quantidade de vezes que ele acessou o conteúdo, quanto tempo ele ficou interagindo… ou qualquer outra métrica que passe essa ideia de preferência. Iremos falar mais sobre como modelar essa relação em outras postagens, no momento pensei como um score
mesmo.
A forma mais comum de resolver o problema da filtragem colaborativa com ML é tentar inferir os valores faltantes em uma matriz de interação, onde a entrada (i,j)
descreve a “força de interação” ou score
que o usuário deu ao conteúdo.
Se o sistema conseguir ‘prever’ esses valores é possível gerar recomendação ao selecionar os que tem maior score
e que o usuário ainda não interagiu. Algoritmos de Fatoração de Matrizes (ALS, SVD..) são os mais utilizados para ‘prever’ esses valores em abordagens clássicas, mas não são os únicos.
Métodos de filtragem colaborativa também têm desvantagens. Uma das principais é a própria escala da solução, visto que processar uma matriz (coletivo) de todos os usuários com todos os conteúdos é um desafio computacional. Pense no catálogo da Netflix e a quantidade de usuários, ou mesmo na quantidade de usuários da Globo.com e na quantidade de notícias disponíveis.
Um detalhe que prejudica ainda mais é que essa matriz é extremamente esparsa, tem muitos mais valores faltando do que preenchidos, geralmente menos de 3% da matriz é de fato preenchida.
Outra desvantagem dessa abordagem é a necessidade de uma quantidade considerável de registros e feedback dos usuários para começar a gerar recomendação. Ou seja, até um usuário novo começar a ter recomendações do que consumir, ele tem que interagir com muito mais itens do que a filtragem baseada em conteúdo, o que é um problema para plataformas com pouco ou nenhum histórico dos usuários.
Sistemas Híbridos (Hybrid)
Como o próprio nome já diz, os sistemas híbridos são os que têm características ou combinam as abordagens de Filtragem Colaborativa e Baseado em Conteúdo. De forma geral, os resultados são melhores que os dois separadamente, isso fica evidente quando comparamos os pontos fortes e fracos de cada categoria.
Existem várias abordagens para deixar o sistema híbrido. A mais simples é unificar as recomendações geradas por sistemas separados em uma única lista.
Outras abordagens mais complexas adicionam a capacidade e informação do conteúdo na filtragem colaborativa, ou vice-versa. São de fato algoritmos híbridos e trazem resultados melhores.
Cold-Start
Essa categoria busca otimizar a recomendação para usuários novos na plataforma.
O que recomendar quando eu não tenho informações sobre o usuário?
Todos os RecSys terão usuários novos, com nenhuma ou pouca informação pessoal e de histórico de consumo. Um usuário chamado de Cold-Start é justamente esse usuário dentro da plataforma, e dependendo do domínio a quantidade de usuários cold-start é maior e mais importante.
Por exemplo, recomendação de notícias tem um alto índice de usuários cold-start, geralmente ninguém faz login na plataforma e cada sessão acaba sendo um usuário diferente, já na Amazon ou Netflix o usuário precisa estar logado para comprar e consumir conteúdo.
A forma mais simples de recomendar para cold-start é criar listas genéricas, como:
- Conteúdos mais acessados nas últimas 24hs
- Recomendação geolocalizada quando é possível saber a localização do usuário
- Listas de recomendação diversificada (a melhor de cada categoria)
- etc..
Por que usar Deep Learning para Recomendação ?
A resposta dessa pergunta deve ficar mais clara ao longo da série, mas vamos adiantar alguns pontos..
Assim como visão computacional e processamento de linguagem natural foram radicalmente impactadas por DL, atualmente estamos vivenciando o mesmo na área de Sistemas de Recomendação.
Não é só a quantidade de papers acadêmicos que estão crescendo e avançando o estado-da-arte nos últimos 4 anos. Empresas grandes estão migrando os sistemas clássicos de recomendação para abordagens com DL.
A apresentação ao lado é do Diretor da área de Recomendação da NetFlix, reforça os principais problemas nas recomendações atuais e as possíveis soluções dentro da área de Deep Learning. Também apresenta diversas arquiteturas de DL que podem ser utilizadas para RecSys.
A Globo.com recentemente lançou o CHAMELEON, uma Meta-Arquitetura Deep Learning focada em recomendação de notícias que está sendo utilizada em diversos portais da empresa. Um dos autores comenta as dificuldades em fazer recomendação em tempo real e as particularidades do domínio de notícias. O código está disponível no GitHub.
Guilherme co-fundador da Caelum e Alura apresentou os desafios em fazer recomendação de cursos na plataforma da Alura. Após vários testes utilizando métodos clássicos de recomendação sem obter bons resultados, foi testada e implantada uma arquitetura de DL com Recorrência (RNN) que apresentou resultados bem melhores. O que faz muito sentido no domínio aplicado, dado o caráter dinâmico das preferências e a relação de ordem entre os cursos.
A Google já está nessa onda há muito tempo, diversos portais da empresa já utilizam recomendações realizadas por arquiteturas de Deep Learning, como o YouTube (https://ai.google/research/pubs/pub45530) e o Google Play (https://arxiv.org/abs/1606.07792).
Principais pontos que tornam Deep Learning uma ótima alternativa para RecSys
Antes de entrar nos méritos da área, sugiro a leitura do artigo abaixo que introduz o que é Deep Lerning e algumas características importantes que iremos utilizar aqui.
Existem algumas características das arquiteturas de Deep Learning que fazem com que ela esteja na crista da onda do RecSys e esteja trazendo avanços no estado-da-arte. Os principais pontos são:
- Grande quantidade de dados. Técnicas de Filtragem Colaborativa são limitadas pelo tamanho da matriz de interação que também são extremamente esparsas. DL trabalha muito bem com grandes volumes de dados, consegue reduzir dimensionalidade sem perder a representatividade da informação original. Redes Convolucionais e Autoencoders são bastante utilizados nesse sentido.
- Dados Heterogêneos e Extrator de Features. A depender do domínio, os dados que representam o conteúdo podem variar bastante, sendo dados categóricos, numéricos, texto, imagem, áudio.. etc. Conseguir representar todas essas informações de forma unificada traz um grande impacto na similaridade do conteúdo.
DL consegue processar e extrair padrões facilmente em diferentes domínios através da criação de Embeddings, em que é possível criar uma representação vetorial de qualquer que seja o tipo do dado, isso facilita a representação semântica e o cálculo de similaridade. - Comportamento dinâmico. A depender do domínio, o comportamento de preferência é muito dinâmico ou de curto prazo. Algoritmos clássicos tem dificuldades em extrair padrões quando esse comportamento muda muito rápido ou não está presente no histórico. Arquiteturas de DL como Redes Recorrentes trabalham muito bem com essa dinâmica e principalmente com o comportamento sequencial no consumo do conteúdo.
- Melhor representação da relação de Usuário X Conteúdo. A força de interação entre esses dois atores é a base da filtragem colaborativa, métodos clássicos acabam modelando essa interação de forma linear (ex Fatoração de Matrizes..), o que limita a generalização. Redes Neurais são conhecidas pela representação não-linear da informação e podem representar melhor essa interação.
Conclusão
Esse é um artigo introdutório da área de RecSys e Deep Learling, o primeiro da série que iremos abordar do básico até como fazer o deploy de uma solução de Deep-RecSys.
Foi possível observar que essa é uma área em crescimento, tanto academicamente quanto de negócios, diversas empresas estão migrando suas soluções já implantadas para soluções utilizando Deep Learning devido aos melhores resultados. Muitos dos problemas encontrados nas técnicas clássicas de RecSys são solucionados ou melhor modelados através das arquiteturas de DL, principalmente pela flexibilidade em criar arquiteturas específicas e as características gerais da área.
RecSys é mais uma área que Deep Learning está avançando no estado-da-arte e entregando resultados surpreendentes em produção. Espero que você leitor me acompanhe nessa série de artigos sobre o tema.
Referências
Outras referências interessantes