Sistemas de recomendação — um guia completo para modelos de aprendizado de máquina
Aproveitando os dados para ajudar os usuários a descobrir novos conteúdos
Sistemas de recomendação: por que e como?
Os sistemas de recomendação são algoritmos que fornecem sugestões personalizadas de itens mais relevantes para cada usuário. Com o crescimento maciço de conteúdos online disponíveis, os usuários foram inundados com opções. Portanto, é crucial que as plataformas web ofereçam recomendações de itens para cada usuário, a fim de aumentar a satisfação e o engajamento do usuário.
A lista a seguir mostra exemplos de plataformas web conhecidas com um grande número de conteúdos disponíveis , que precisam de sistemas de recomendação eficientes para manter os usuários interessados.
- Youtube . A cada minuto as pessoas carregam 500 horas de vídeos , ou seja, levaria 82 anos para um usuário assistir a todos os vídeos carregados apenas na última hora.
- Spotify . Os usuários podem ouvir mais de 80 milhões de faixas de músicas e podcasts .
- Amazônia . Os usuários podem comprar mais de 350 milhões de produtos diferentes .
Feedback explícito versus feedback implícito
Em sistemas de recomendação, modelos de aprendizado de máquina são usados para prever a classificação rᵤᵢ de um usuário u em um item i . No momento da inferência, recomendamos a cada usuário u os itens l com maior classificação prevista rᵤ ᵢ .
Portanto, precisamos coletar feedback do usuário, para que possamos ter uma verdade básica para treinar e avaliar nossos modelos. Uma distinção importante deve ser feita aqui entre feedback explícito e feedback implícito .
O feedback explícito é uma classificação dada explicitamente pelo usuário para expressar sua satisfação com um item. Exemplos são: número de estrelas em uma escala de 1 a 5 após a compra de um produto, polegar para cima/para baixo após assistir a um vídeo etc. Esse feedback fornece informações detalhadas sobre o quanto um usuário gostou de um item, mas é difícil coletam , pois a maioria dos usuários normalmente não escreve comentários ou dá classificações explícitas para cada item que compram.
O feedback implícito , por outro lado, assume que as interações do usuário com o item são uma indicação de preferências. Exemplos são: histórico de compras/navegação de um usuário, lista de músicas tocadas por um usuário, etc. Esse feedback é extremamente abundante , mas ao mesmo tempo é menos detalhado e mais ruidoso (por exemplo, alguém pode comprar um produto como presente para alguém). No entanto, esse ruído torna-se insignificante quando comparado ao tamanho dos dados disponíveis desse tipo, e a maioria dos Sistemas de Recomendação modernos tende a confiar no feedback implícito .
Depois de coletar feedbacks explícitos ou implícitos, podemos criar a matriz de avaliação de item de usuário rᵤᵢ . Para feedback explícito, cada entrada em rᵤᵢ é um valor numérico — por exemplo, rᵤᵢ = “estrelas dadas por u ao filme i ” — ou “?” se o usuário u não avaliou o item i . Para feedback implícito, os valores em rᵤᵢ são valores booleanos que representam presença ou falta de interação — por exemplo, rᵤᵢ = “o usuário assistiu ao filme i ?”. Observe que a matriz rᵤᵢé muito esparso, pois os usuários interagem com poucos itens entre todos os conteúdos disponíveis, e revisam ainda menos itens!
Abordagens de Filtragem Baseada em Conteúdo vs. Colaborativa
O sistema de recomendação pode ser classificado de acordo com o tipo de informação usada para prever as preferências do usuário como Filtragem Baseada em Conteúdo ou Filtragem Colaborativa.
Abordagem Baseada em Conteúdo
Métodos baseados em conteúdo descrevem usuários e itens por seus metadados conhecidos . Cada item i é representado por um conjunto de tags relevantes—por exemplo, filmes da plataforma IMDb podem ser rotulados como “ação”, “comédia”, etc. Cada usuário u é representado por um perfil de usuário, que pode ser criado a partir de informações conhecidas do usuário— por exemplo, sexo e idade — ou da atividade passada do usuário.
Para treinar um modelo de Machine Learning com essa abordagem, podemos usar um modelo k-NN . Por exemplo, se soubermos que o usuário u comprou um item i , podemos recomendar a u os itens disponíveis com características mais semelhantes a i .
A vantagem dessa abordagem é que os metadados dos itens são conhecidos com antecedência, portanto, também podemos aplicá-los a cenários Cold-Start em que um novo item ou usuário é adicionado à plataforma e não temos interações usuário-item para treinar nosso modelo . As desvantagens são que não usamos o conjunto completo de interações usuário-item conhecidas (cada usuário é tratado independentemente) e precisamos saber as informações de metadados para cada item e usuário.
Abordagem de Filtragem Colaborativa
Os métodos de filtragem colaborativa não usam metadados de itens ou usuários, mas tentam aproveitar os feedbacks ou o histórico de atividades de todos os usuários para prever a classificação de um usuário em um determinado item, inferindo interdependências entre usuários e itens das atividades observadas.
Para treinar um modelo de aprendizado de máquina com essa abordagem, normalmente tentamos agrupar ou fatorizar a matriz de classificação rᵤᵢ para fazer previsões sobre os pares não observados ( u,i ), ou seja, onde rᵤᵢ = “?”. A seguir neste artigo apresentamos o algoritmo Matrix Factorization , que é o método mais popular desta classe.
A vantagem dessa abordagem é que todo o conjunto de interações usuário-item (ou seja, a matriz rᵤᵢ ) é usado, o que normalmente permite obter maior precisão do que usar modelos baseados em conteúdo. A desvantagem dessa abordagem é que ela requer algumas interações do usuário antes que o modelo possa ser ajustado.
Abordagens Híbridas
Por fim, também existem métodos híbridos que tentam usar tanto os metadados conhecidos quanto o conjunto de interações observadas entre usuário e item. Esta abordagem combina as vantagens dos métodos de Filtragem Baseada em Conteúdo e Filtragem Colaborativa, e permite obter os melhores resultados. Mais adiante neste artigo apresentamos o LightFM , que é o algoritmo mais popular dessa classe de métodos.
Filtragem Colaborativa: Fatoração de Matrizes
Os algoritmos de fatoração de matrizes são provavelmente os métodos de filtragem colaborativa mais populares e eficazes para sistemas de recomendação. A fatoração de matrizes é um modelo de fator latente assumindo que para cada usuário u e item i existem representações vetoriais latentes pᵤ, qᵢ ∈ R ᶠ st rᵤᵢ podem ser expressas de forma única — ou seja, “fatorizadas” — em termos de pᵤ e qᵢ . A biblioteca Python Surprise fornece excelentes implementações desses métodos.
Fatoração de matrizes para feedback explícito
A ideia mais simples é modelar as interações usuário-item por meio de um modelo linear . Para aprender os valores de pᵤ e qᵢ , podemos minimizar uma perda MSE regularizada sobre o conjunto K de pares ( u , i ) para o qual rᵤᵢ é conhecido. O algoritmo assim obtido é chamado de fatoração de matriz probabilística (PMF) .
A função de perda pode ser minimizada de duas maneiras diferentes. A primeira abordagem é usar o gradiente descendente estocástico (SGD) . O SGD é fácil de implementar, mas pode ter alguns problemas porque tanto pᵤ quanto qᵢ são desconhecidos e, portanto, a função de perda não é convexa. Para resolver esse problema, podemos alternativamente fixar o valor pᵤ e qᵢ e obter um problema de regressão linear convexa que pode ser facilmente resolvido com mínimos quadrados ordinários (OLS) . Este segundo método é conhecido como mínimos quadrados alternados (ALS) e permite paralelização e aceleração significativas.
O algoritmo PMF foi posteriormente generalizado pelo algoritmo de decomposição de valor singular (SVD) , que introduziu termos de viés no modelo. Mais especificamente, bᵤ e bᵢ medem os desvios de avaliação observados do usuário u e do item i , respectivamente, enquanto μ é a classificação média geral. Esses termos geralmente explicam a maioria das classificações observadas rᵤᵢ , pois alguns itens recebem amplamente classificações melhores/piores e alguns usuários são consistentemente mais/menos generosos com suas classificações.
Fatoração de matrizes para feedback implícito
O método SVD pode ser adaptado para conjuntos de dados de feedback implícito . A idéia é olhar para o feedback implícito como uma medida indireta de confiança . Vamos supor que o feedback implícito tᵤᵢ mede a porcentagem do filme i que o usuário assistiu — por exemplo , tᵤᵢ = 0 significa que você nunca assistiu i , tᵤᵢ = 0,1 significa que ele assistiu apenas 10% dele, tᵤᵢ = 2 significa que ele assistiu isso duas vezes. Intuitivamente, é mais provável que um usuário se interesse por um filme que assistiu duas vezes do que por um filme que nunca assistiu. Definimos, portanto, um matriz de confiança cᵤᵢ e uma matriz de classificação rᵤᵢ como segue.
Então, podemos modelar o rᵤᵢ observado usando o mesmo modelo linear usado para SVD, mas com uma função de perda ligeiramente diferente. Primeiro, calculamos a perda sobre todos os pares ( u , i ) — ao contrário do caso explícito, se o usuário u nunca interagiu com i , temos rᵤᵢ = 0 em vez de rᵤᵢ = “?” . Em segundo lugar, ponderamos cada termo de perda pela confiança cᵤᵢ que você gosta de i.
Por fim, o algoritmo SVD++ pode ser usado quando temos acesso a feedbacks explícitos e implícitos. Isso pode ser muito útil, porque normalmente os usuários interagem com muitos itens (= feedabck implícito), mas classificam apenas um pequeno subconjunto deles (= feedback explícito). Vamos denotar, para cada usuário u , o conjunto N(u) de itens com os quais u interagiu. Então, assumimos que uma interação implícita com um item j está associada a um novo vetor latente zⱼ ∈ R ᶠ . O algoritmo SVD++ modifica o modelo linear de SVD incluindo na representação do usuário uma soma ponderada desses fatores latentes zⱼ.
Abordagem Híbrida: LightFM
Os métodos de filtragem colaborativa baseados na fatoração de matriz geralmente produzem resultados excelentes, mas em cenários de inicialização a frio – onde poucos ou nenhum dado de interação está disponível para novos itens e usuários – eles não podem fazer boas previsões porque faltam dados para estimar os fatores latentes. As abordagens híbridas resolvem esse problema aproveitando itens conhecidos ou metadados do usuário para melhorar o modelo de fatoração de matriz. A biblioteca Python LightFM implementa um dos algoritmos híbridos mais populares.
No LightFM, assumimos que para cada usuário u coletamos um conjunto de anotações de tags Aᵁ(u) — por exemplo , “male” , “age < 30” , … — e, da mesma forma, cada item i possui um conjunto de anotações Aᴵ(i) — por exemplo , “preço > 100 $” , “livro” , … Em seguida, modelamos cada tag de usuário por um fator latente xᵁₐ ∈ R ᶠ e por um termo de viés bᵁₐ ∈ R , e assumimos que a representação vetorial do usuário pᵤ e seu viés associado bᵤ pode ser expresso simplesmente como a soma desses termos xᵁₐe bᵁₐ , respectivamente. Adotamos a mesma abordagem para tags de itens, usando fatores latentes xᴵₐ ∈ Rᶠ e termos de viés bᴵₐ ∈ R. Depois de definirmos pᵤ, qᵢ, bᵤ, bᵢ usando essas fórmulas, podemos usar o mesmo modelo linear de SVD para descrever a relação entre estes termos e rᵤᵢ .
Observe que há três casos interessantes dessa abordagem híbrida do LightFM.
- Arranque a frio. Se tivermos um novo item i com tags conhecidas Aᴵ(i) , podemos usar os vetores latentes xᴵₐ (obtidos ajustando nosso modelo nos dados anteriores) para calcular sua incorporação qᵢ e, portanto, estimar para qualquer usuário u sua classificação rᵤᵢ .
- Nenhuma etiqueta disponível. Se não tivermos nenhum metadado conhecido para itens ou usuários, a única anotação que podemos usar é uma função indicadora, ou seja, uma anotação diferente a para cada usuário e cada item. Em seguida, as matrizes de recursos de usuário e item são matrizes de identidade e o LightFM se reduz a um método clássico de filtragem colaborativa, como SVD.
- Baseado em conteúdo vs. Híbrido. Se usássemos apenas tags de usuário ou item sem anotações de indicadores, o LightFM seria quase um modelo baseado em conteúdo. Então, na prática, para alavancar as interações usuário-item, também adicionamos às tags conhecidas uma anotação de indicador diferente de cada usuário e item.
- Os sistemas de recomendação utilizam algoritmos de aprendizado de máquina para ajudar os usuários inundados com opções na descoberta de conteúdos relevantes.
- Feedback explícito versus feedback implícito : o primeiro é mais fácil de alavancar, mas o segundo é muito mais abundante.
- Os modelos baseados em conteúdo funcionam bem em cenários de inicialização a frio, mas exigem conhecer os metadados do usuário e do item .
- Os modelos de filtragem colaborativa geralmente usam fatoração de matriz: PMF, SVD, SVD para feedback implícito, SVD++.
- Os modelos híbridos aproveitam o melhor da filtragem colaborativa e baseada em conteúdo. LightFM é um ótimo exemplo dessa abordagem.
- Wikipédia, Sistema de Recomendação .
- “Surpresa”, documentação do pacote Python .
- (S. Funk 2006), Netflix Update: Try This at Home.
- (R. Salakhutdinov 2007), Fatoração de matrizes probabilísticas.
- ( Y. Hu 2008), Filtragem colaborativa para conjuntos de dados de feedback implícito .
- (Y. Koren 2009), Técnicas de fatoração de matrizes para sistemas de recomendação .
- (Y. Koren 2008) A factorização encontra a vizinhança: um modelo multifacetado de filtragem colaborativa.
- ( M. Kula 2015), Incorporações de metadados para recomendações de inicialização a frio de itens e usuários .