Sistemas de recomendação — um guia completo para modelos de aprendizado de máquina

Nov 25 2022
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.

Aproveitando os dados para ajudar os usuários a descobrir novos conteúdos

Foto de Javier Allegue Barros no Unsplash

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.

O YouTube recomenda vídeos aos usuários, para ajudá-los a descobrir e assistir conteúdos relevantes para eles em meio a um grande número de conteúdos disponíveis. (imagem do autor)

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.

  1. 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.
  2. Spotify . Os usuários podem ouvir mais de 80 milhões de faixas de músicas e podcasts .
  3. 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 .

Feedback explícito vs. implícito para sistemas de recomendação. (imagem do autor)

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 .

Matriz de avaliação de item de usuário para feedback explícito e conjuntos de dados de feedback implícito. (imagem do autor)

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.

Abordagens de Filtragem Baseada em Conteúdo versus Filtragem Colaborativa para sistemas de recomendação. (Imagem do autor)

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) .

Fatoração de matrizes probabilísticas: modelo para rᵤᵢ e função perda.

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.

Algoritmo SVD, uma generalização da fatoração de matrizes probabilísticas.

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.

Matriz de confiança e matriz de classificação para feedback implícito.

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.

Função de perda para SVD para feedback implícito.

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ⱼ.

SVD++ para feedback misto (explícito + implícito)

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ᵤᵢ .

LightFM: os embeddings e bias do usuário/item são a soma dos vetores latentes associados a cada usuário/item.

Observe que há três casos interessantes dessa abordagem híbrida do LightFM.

  1. 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ᵤᵢ .
  2. 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.
  3. 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 .