Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sistemes de recomanació

Introducció

Què és un sistema de recomanació?

Farem servir com a exemple conductor el problema de predir les valoracions de pel·lícules.

Imaginem que tens una plataforma de streaming i que els teus usuaris puntuen les pel·lícules d’1 a 5 estrelles.
En un sistema típic de recomanació tenim:

  • Un conjunt d’usuaris (per exemple: Alice, Bob, Carol i Dave, numerats de 1 a 4).
  • Un conjunt d’ítems (en aquest cas, pel·lícules: Love at Last, Romance Forever, Cute Puppies of Love, Nonstop Car Chases, Sword vs. Karate).
  • Les puntuacions que cada usuari dona (o no dona) a cadascuna de les pel·lícules.

Per simplicitat, suposem que les valoracions poden anar de 0 a 5 estrelles (0 = “gens interessant”).
Quan un usuari encara no ha puntuat una pel·lícula, ho representarem amb un “?”.

Exemple:

MovieAlice (1)Bob (2)Carol (3)Dave (4)
Love at last5500
Romance forever5??0
Cute puppies of love?40?
Nonstop car chases0054
Swords vs. karate005?
  • Alice puntua Love at Last amb 5 estrelles i Romance Forever amb 5, però no ha vist Cute Puppies of Love (per tant, “?”).
  • Bob dona 5 estrelles a Romance Forever, 4 a Cute Puppies of Love, i 0 a dues altres pel·lícules.
  • Carol posa 0 estrelles a dues, però li encanten Nonstop Car Chases i Sword vs. Karate.
  • Dave té un altre patró de puntuacions.

Notació

Per generalitzar:

  • Direm que hi ha nu usuaris.
    En el nostre exemple, nu=4.

  • Direm que hi ha nm pel·lícules (o ítems en general).
    En el nostre exemple, nm=5.

  • Definim una variable r(i,j):

    r(i,j)={1si l’usuari j ha puntuat la pel·lícula i0si l’usuari j no l’ha puntuada

    Exemple:

    • Alice (usuari 1) ha puntuat la pel·lícula 1 → r(1,1)=1.
    • Però no ha puntuat la pel·lícula 3 → r(3,1)=0.
  • Definim y(i,j) com la puntuació donada per l’usuari j a la pel·lícula i.
    Exemple: si l’usuari 2 dona un 4 a la pel·lícula 3, llavors y(3,2)=4.

Aquesta distinció és important: no tots els usuaris puntuen totes les pel·lícules. Saber quines puntuacions existeixen i quines no, és clau pel sistema.

Quin és l’objectiu?

Donat que hi ha moltes caselles buides (pel·lícules no puntuades), un sistema de recomanació ha d’intentar predir quina puntuació posaria un usuari a una pel·lícula que encara no ha vist.

A partir d’aquestes prediccions podem suggerir als usuaris les pel·lícules (o productes, restaurants, articles…) que és més probable que valorin amb 5 estrelles.

Assumpció inicial

Per començar a desenvolupar un algoritme, farem una suposició especial:
suposarem que tenim característiques addicionals de les pel·lícules, com ara si són de gènere romàntic o d’acció.

Amb aquesta informació extra podrem començar a construir un primer algoritme.
Més endavant, veurem què passa si no disposem d’aquestes característiques i haurem de fer que el sistema aprengui igualment.

Recomanació basada en característiques

Vegem com podem desenvolupar un sistema de recomanació si disposem de característiques dels ítems (per exemple, de les pel·lícules).

Exemple amb característiques

Partim del mateix conjunt de dades amb 4 usuaris que han valorat algunes de les 5 pel·lícules.
Ara, a més, suposem que disposem de característiques de cada pel·lícula. Per exemple, definim:

  • X₁: grau en què la pel·lícula és romàntica.
  • X₂: grau en què la pel·lícula és d’acció.
MovieAlice (1)Bob (2)Carol (3)Dave (4)X₁ (romance)X₂ (action)
Love at last55000.90
Romance forever5??01.00.01
Cute puppies of love?40?0.990
Nonstop car chases00540.11.0
Swords vs. karate005?00.9

Exemples:

  • Love at Last: molt romàntica (X₁=0.9), gens d’acció (X₂=0).
  • Nonstop Car Chases: una mica romàntica (X₁=0.1), molt d’acció (X₂=1.0).
  • Cute Puppies of Love: gairebé totalment romàntica (X₁=0.99), gens d’acció (X₂=0).

Ja havíem definit:

  • nu=4: nombre d’usuaris.
  • nm=5: nombre de pel·lícules.

Ara afegim:

  • n=2: nombre de característiques de cada pel·lícula (X₁ i X₂).

Predicció per a un usuari

Per l’usuari 1 (Alice), volem predir la seva valoració d’una pel·lícula i.
Definim:

ˆy(1)(i)=w(1)X(i)+b(1)

Això és molt semblant a una regressió lineal.

Exemple: si prenem

  • w(1)=[5,0]
  • b(1)=0,

llavors per a la pel·lícula 3 (Cute Puppies of Love) amb X(3)=[0.99,0]:

ˆy(1)(3)=50.99+00=4.95

Aquest resultat és raonable: Alice valora molt positivament les pel·lícules romàntiques i poc les d’acció.

Per això, per a cada usuari j, tindrem un conjunt propi de paràmetres w(j) i b(j).

Model general

Per tant, la predicció de la valoració de l’usuari j sobre la pel·lícula i és:

ˆy(j)(i)=w(j)X(i)+b(j)

on:

  • X(i) és el vector de característiques de la pel·lícula i.
  • w(j),b(j) són els paràmetres específics de l’usuari j.

Així, és com si entrenéssim una regressió lineal diferent per a cada usuari.

Funció de cost per a un usuari

Definim la notació:

  • r(i,j)=1 si l’usuari j ha valorat la pel·lícula i, i 0 altrament.
  • y(i,j): valoració real que l’usuari j ha donat a la pel·lícula i.
  • m(j): nombre de pel·lícules valorades per l’usuari j.

La funció de cost (per un usuari j) és:

J(w(j),b(j))=12m(j)i:r(i,j)=1(w(j)X(i)+b(j)y(i,j))2+λ2m(j)nk=1(w(j)k)2

On:

  • El primer terme és l’error quadràtic mig.
  • El segon terme és la regularització (per evitar sobreajustament).

Nota: de vegades s’elimina el factor 1m(j) perquè no altera la solució òptima.

Funció de cost global

Per entrenar tots els usuaris alhora, fem la suma de la funció de cost per a cada usuari:

J(w(1),b(1),,w(nu),b(nu))=nuj=1J(w(j),b(j))

Aleshores, mitjançant descens de gradient (o un altre mètode d’optimització), podem aprendre tots els paràmetres w(j),b(j).
Això ens permet fer bones prediccions per a tots els usuaris.

Resum i reflexió

  • Aquest enfocament és com tenir una regressió lineal per a cada usuari.
  • Les característiques de les pel·lícules (X₁ = romanç, X₂ = acció) són claus per predir les valoracions.
  • Però… d’on surten aquestes característiques?
    • Si les tenim (com en aquest exemple), podem aplicar directament l’algorisme.
    • Però sovint no disposem de característiques prèvies tan clares.

En aquest cas, necessitarem una altra estratègia: aprenentatge automàtic per descobrir característiques latents.
Això ens permetrà construir recomanacions fins i tot sense conèixer de manera explícita les propietats de les pel·lícules.

Filtrat Col·laboratiu

Hem vist que, si tenim característiques per a cada pel·lícula, com per exemple x1 i x2, que indiquen quant és de romàntica una pel·lícula i quant és d’acció, podem fer servir una regressió lineal per predir les valoracions dels usuaris.

Però, què passa si no tenim aquestes característiques prèvies x1,x2?
El que veurem ara és com es poden aprendre automàticament aquestes característiques a partir de les dades.

Paràmetres dels usuaris

Imaginem que disposem de paràmetres w i b per a quatre usuaris. Per exemple:

  • Usuari 1: w(1)=(5,0),b(1)=0
  • Usuari 2: w(2)=(5,0),b(2)=0
  • Usuari 3: w(3)=(0,5),b(3)=0
  • Usuari 4: w(4)=(0,5),b(4)=0

Per simplicitat, suposem que tots els b(j)=0.

La predicció de la valoració de l’usuari j sobre la pel·lícula i és:

ˆyi,j=w(j)x(i)+b(j)w(j)x(i)

Aprendre les característiques d’una pel·lícula

Suposem que Alice i Bob van valorar la pel·lícula 1 amb un 5, mentre que els altres dos usuaris li van donar un 0.

Aleshores necessitem que:

  • w(1)x(1)5
  • w(2)x(1)5
  • w(3)x(1)0
  • w(4)x(1)0

Una possible solució és escollir x(1)=(1,0).
Així, la pel·lícula 1 es podria interpretar com plenament romàntica i gens d’acció.

De la mateixa manera, podem inferir x(2) per a la pel·lícula 2, x(3) per a la 3, etc.

Al filtrat col·laboratiu, podem esbrinar els vectors de característiques a partir dels vectors de paràmetres. Això, gràcies a tenir els paràmetres per a quatre usuaris. En una aplicació típica de regressió lineal, amb només un usuari, no hi hauria prou informació.

Funció de cost per aprendre x

La idea és definir una funció de cost que mesuri la diferència entre les prediccions i les valoracions reals.

Per una pel·lícula i, si tenim w(j) i b(j) i volem aprendre x(i) definim:

J(x(i))=12j:ri,j=1(w(j)x(i)+b(j)yi,j)2+λ2nk=1(x(i)k)2

On:

  • ri,j=1 indica que l’usuari j ha valorat la pel·lícula i.
  • yi,j és la valoració real.
  • El segon terme és la regularització.

Si minimitzem J(x(i)), obtenim unes característiques per a la pel·lícula i que expliquen bé les valoracions dels usuaris.

Per a totes les pel·lícules (nm), la funció de cost global és:

J(X)=nmi=1J(x(i))

Afegint w i b a l’aprenentatge

Fins ara hem assumit que w(j) i b(j) eren coneguts.
Però en realitat, també cal aprendre’ls juntament amb les característiques x(i).

Aleshores, la funció de cost conjunta és:

J(W,b,X)=12(i,j):ri,j=1(w(j)x(i)+b(j)yi,j)2+λ2(jw(j)2+ix(i)2)

Optimització amb descens de gradient

Per minimitzar aquesta funció de cost, podem aplicar descens de gradient sobre tots els paràmetres:

  • Actualitzar w(j)
  • Actualitzar b(j)
  • Actualitzar x(i)

A diferència de la regressió lineal clàssica (on només teníem w,b), aquí també optimitzem x.

Intuïció del Filtrat Col·laboratiu

Aquest mètode rep el nom de filtrat col·laboratiu perquè:

  • Diversos usuaris han valorat les mateixes pel·lícules.
  • Això permet deduir característiques implícites de les pel·lícules.
  • Amb aquestes característiques, podem predir com valorarà un nou usuari una pel·lícula que encara no ha vist.

En resum:

  • En molts algoritmes de ML les característiques han de ser donades externament.
  • Aquí, les característiques s’aprenen automàticament a partir de les dades dels usuaris.

Fins ara hem treballat amb valoracions de 15 estrelles.
Però un cas molt freqüent és tenir etiquetes binàries, com ara m’agrada/no m’agrada o clic/no clic.

Etiquetes binàries

Moltes aplicacions importants dels sistemes de recomanació o dels algorismes de filtratge col·lectiu treballen amb etiquetes binàries.
En comptes que un usuari doni una puntuació d’1 a 5 estrelles, simplement indica si li agrada o no un ítem.

A continuació veurem com generalitzar l’algorisme que hem estudiat a aquest nou escenari.
El procés és anàleg al pas de la regressió lineal a la regressió logística: de predir valors numèrics a predir una etiqueta binària.

Exemple amb etiquetes binàries

En un conjunt de dades de filtratge col·lectiu amb etiquetes binàries:

  • Una etiqueta 1 indica que l’usuari ha interactuat o li ha agradat un element.
    Exemples:

    • L’Alice veu una pel·lícula fins al final.
    • L’usuari marca “M’agrada” o “Favorit” a una aplicació.
  • Una etiqueta 0 indica que l’usuari no ha interactuat o no li ha agradat l’element.
    Exemples:

    • L’Alice comença una pel·lícula però deixa de veure-la al cap de pocs minuts.
    • Després de veure una recomanació, no prem “M’agrada”.
  • Un ? indica que l’usuari encara no ha vist l’element i, per tant, no pot decidir si li agrada o no.

La pregunta és: com podem adaptar l’algorisme de filtratge col·lectiu a aquest tipus de dades?

La idea és predir quina és la probabilitat que un usuari (Alice, Bob, Carol, Dave, etc.) acabi agradant-li un ítem que encara no ha valorat. Això ens permet decidir quins ítems recomanar.

Diferents interpretacions de les etiquetes

Segons el context, les etiquetes binàries poden tenir diferents significats:

  1. Comerç electrònic

    • 1: l’usuari compra l’article després de veure’l.
    • 0: l’usuari no el compra.
    • ?: l’usuari ni tan sols l’ha vist.
  2. Xarxes socials

    • 1: l’usuari marca “M’agrada” o “Favorit”.
    • 0: l’usuari veu el contingut però no interactua.
    • ?: el contingut encara no s’ha mostrat.
  3. Temps d’interacció

    • 1: l’usuari dedica, per exemple, més de 30 segons a l’ítem.
    • 0: el veu però menys de 30 segons.
    • ?: no ha estat exposat a l’ítem.
  4. Publicitat en línia

    • 1: l’usuari fa clic a l’anunci.
    • 0: l’usuari veu l’anunci però no hi fa clic.
    • ?: l’anunci encara no s’ha mostrat.

En resum:

  • 1 → l’usuari ha interactuat amb l’ítem (clic, compra, temps mínim, “m’agrada”).
  • 0 → l’usuari l’ha vist però no ha interactuat.
  • ? → l’usuari encara no ha vist l’ítem.

Del model lineal al model logístic

Anteriorment, el nostre model de filtratge col·lectiu es podia escriure així:

ˆyij=wjxi+bj

on:

  • xi són les característiques de l’usuari,
  • wj i bj descriuen l’ítem,
  • ˆyij és la predicció de la “valoració” de l’usuari i sobre l’ítem j.

Això funciona bé per prediccions numèriques, però amb etiquetes binàries necessitem un model probabilístic.
Fem servir la funció logística:

g(z)=11+ez

De manera que ara prediem:

P(yij=1xi,wj,bj)=g(wjxi+bj)

Això és exactament el mateix pas que vam fer de la regressió lineal a la regressió logística.

Funció de cost per etiquetes binàries

Amb regressió lineal, fèiem servir l’error quadràtic mitjà.
Ara, amb etiquetes binàries, necessitem la funció de pèrdua de regressió logística (o binary cross-entropy):

Per un únic exemple:

L(f(x),y)=ylog(f(x))(1y)log(1f(x))

on f(x)=g(wjxi+bj).

En el cas de filtratge col·lectiu, hem de sumar la pèrdua sobre totes les parelles (i,j) per les quals tenim una observació (rij=1):

J(w,b,x)=(i,j):rij=1[yijlog(g(wjxi+bj))(1yij)log(1g(wjxi+bj))]

Conclusions

  • El model de filtratge col·lectiu amb etiquetes binàries és una extensió natural del cas lineal.
  • Canviem la predicció lineal per una probabilitat amb la funció logística.
  • Canviem la funció de cost quadràtica per la binary cross-entropy.
  • Això ens permet aplicar recomanadors a escenaris on les interaccions són binàries (clic, compra, “m’agrada”, temps d’interacció, etc.).

Així, podem adaptar l’algorisme original a un ventall molt més ampli d’aplicacions.

Normalització de la mitjana

Ja vam veure que, en regressió lineal, la normalització de les dades pot ajudar l’algorisme a entrenar-se més ràpidament.

En el cas dels sistemes de recomanació, les valoracions sovint tenen rangs concrets (per exemple, de 0 a 5 estrelles). En aquests contextos, aplicar normalització de la mitjana (mean normalization) no només accelera l’aprenentatge, sinó que també millora la qualitat de les prediccions.

El problema amb un usuari nou

Imaginem un conjunt de dades amb diversos usuaris i pel·lícules. Suposem que afegim un cinquè usuari, l’Eva, que encara no ha valorat cap pel·lícula.

Si entrenem un sistema de filtratge col·laboratiu amb regularització, per a l’Eva obtindríem els paràmetres següents:

  • w(5)=[0,0]
  • b(5)=0

Com que no hi ha valoracions seves, aquests paràmetres no afecten el terme d’error quadràtic de la funció de cost. Per tant, l’algorisme tendeix a portar w(5) cap a zero.

Això significa que les prediccions serien:

ˆy(5,i)=w(5)x(i)+b(5)=0

És a dir, l’algorisme prediu que l’Eva posarà 0 estrelles a totes les pel·lícules. Òbviament, això no és gaire útil.

Què és la normalització de la mitjana?

La idea és centrar les valoracions al voltant de la seva mitjana.
Concretament:

  1. Es calcula la mitjana μi de cada pel·lícula i (tenint en compte només els usuaris que l’han valorat).

    • Si una pel·lícula té valoracions 5,5,0,0, la seva mitjana és μ=2.5.
    • Si una altra té 4,0, la mitjana és μ=2.0.
  2. Es construeix una nova matriu de valoracions Y amb les valoracions originals restant aquestes mitjanes:

    • Si un usuari va posar un 5 i la mitjana era 2.5, guardem 2.5.
    • Si un usuari va posar un 0 i la mitjana era 2.25, guardem -2.25.
  3. La nova matriu Y té valors positius i negatius, representant desviacions respecte la mitjana.

  4. L’algorisme aprèn sobre Y.
    La predicció per un usuari j i pel·lícula i és:

    ˆy(j,i)=w(j)x(i)+b(j)

    Però com que havíem restat μi, a la predicció final cal tornar a afegir-la:

    ˆy(j,i)=ˆy(j,i)+μi

Per exemple, si l’Eva (usuària nova) té:

  • w(5)=[0,0]
  • b(5)=0

Llavors, per a la pel·lícula 1 amb mitjana μ1=2.5:

ˆy(5,1)=0+2.5=2.5

Això és molt més raonable que predir 0 estrelles per a totes les pel·lícules.
En general, per a un usuari nou, les primeres prediccions seran simplement la mitjana de cada pel·lícula —un punt de partida molt més coherent.

Altres variants de normalització

  • Normalitzar per files (usuaris):
    Bona estratègia quan apareixen nous usuaris sense gaires valoracions.

  • Normalitzar per columnes (pel·lícules):
    Podria ser útil si hi ha pel·lícules noves sense valoracions.
    Tot i això, en aquest cas, normalment no mostrem massa aviat pel·lícules sense informació. Per això, la normalització per usuaris acostuma a ser més rellevant.

Beneficis

  1. Prediccions inicials més raonables per a usuaris amb poques o cap valoració.
  2. Millor comportament del sistema de recomanació, ja que evita prediccions trivials (com totes a zero).
  3. L’optimització numèrica és més ràpida, perquè les dades estan centrades.

En resum: la normalització de la mitjana és un detall de implementació senzill, però que fa que els sistemes de recomanació funcionin molt millor en la pràctica.

Trobant ítems similars

Imagina que entres en una botiga en línia i mires un producte concret, per exemple, un llibre. Sovint, la web et mostra missatges com:
“Aquí tens altres llibres semblants a aquest” o bé, si estàs mirant una pel·lícula: “Aquí tens altres pel·lícules semblants a aquesta”.

Com ho fan aquestes webs per mostrar-te productes relacionats?
El truc és l’algorisme de collaborative filtering, que permet trobar ítems semblants d’una manera elegant i eficient.

Com funciona?

En el collaborative filtering, cada element (una pel·lícula, un llibre, etc.) aprèn un conjunt de característiques x(i).
Per exemple, en una explicació simplificada podríem imaginar que una característica indica si la pel·lícula és més aviat romàntica o d’acció.

A la pràctica, però, quan l’algorisme aprèn automàticament aquestes característiques, els valors x1,x2,x3, són difícils d’interpretar individualment. Pot ser complicat dir: “aquest component correspon a acció” i “aquest altre a cinema estranger”.

Tot i això, el conjunt de característiques sí que conté informació rellevant sobre el que defineix un ítem.

Mesurant la semblança

Donades les característiques d’un ítem x(i), podem buscar-ne d’altres similars.
Per exemple, si volem trobar pel·lícules semblants a la i, podem comparar-la amb qualsevol altra pel·lícula k calculant la distància quadrada entre vectors de característiques:

nl=1(x(k)lx(i)l)2

Això és simplement la distància euclidiana al quadrat entre x(k) i x(i).

Si en comptes de quedar-nos amb l’ítem més proper, seleccionem els 5 o 10 més propers, obtenim una llista de productes relacionats amb x(i).

Així, en un lloc web, podem recomanar productes semblants a aquell que l’usuari està consultant.

Limitacions del collaborative filtering

Malgrat ser molt potent, aquest mètode té algunes debilitats importants:

  1. El problema del cold start

    Quan apareix un nou ítem al catàleg (per exemple, una pel·lícula acabada de llançar), pocs usuaris l’han valorat.
    Com el classifiquem si gairebé no té puntuacions?

    De manera similar, si arriba un nou usuari que només ha valorat un o dos ítems, és difícil saber què recomanar-li.

    Hi ha tècniques com la normalització per la mitjana, que milloren una mica aquest problema, però no l’acaben de resoldre.
    Per això, trobar bones recomanacions en situacions de cold start segueix sent un repte.

  2. Dificultat per aprofitar informació addicional

    El collaborative filtering només fa servir la matriu d’usuaris i ítems, però sovint tenim informació molt útil addicional:

    • Per a una pel·lícula: gènere, actors, pressupost, productora, etc.
    • Per a un usuari: edat, gènere, ubicació, preferències declarades, dispositiu o navegador des d’on accedeix.

    Aquestes dades poden estar sorprenentment correlacionades amb les preferències d’un usuari.
    Per exemple, està comprovat que usuaris de navegadors diferents (Chrome, Firefox, Safari, Edge) tendeixen a tenir comportaments de consum diferents.

    Tanmateix, el collaborative filtering no incorpora aquesta informació de manera natural.

Cap als sistemes híbrids

En resum, el collaborative filtering és una tècnica molt potent per recomanacions, però no perfecta.
El següent pas és explorar els algorismes de filtratge basat en contingut (content-based filtering), que poden utilitzar tota aquesta informació addicional i resoldre moltes de les limitacions anteriors.
De fet, els sistemes més avançats utilitzats avui en dia en aplicacions comercials combinen tots dos enfocaments.

Filtrat basat en contingut

Començarem a desenvolupar un segon tipus de sistema de recomanació: el filtrat basat en contingut.

Per començar, comparem i contrastem l’enfocament de filtrat col·laboratiu, que hem vist fins ara, amb aquest nou enfocament de filtrat basat en contingut.

  1. Filtrat col·laboratiu

    En el filtrat col·laboratiu, l’algorisme recomana ítems a un usuari a partir de les valoracions d’altres usuaris que tenen gustos similars.
    En altres paraules, disposem d’un conjunt d’usuaris que han donat puntuacions a alguns ítems, i l’algorisme aprofita aquesta informació per recomanar nous ítems.

  2. Filtrat basat en contingut

    El filtrat basat en contingut segueix un enfocament diferent:

    • Recomana ítems a un usuari a partir de les característiques (features) tant dels usuaris com dels ítems.
    • Necessitem, doncs, conèixer atributs dels usuaris i atributs dels ítems, i l’algorisme farà servir aquesta informació per trobar bones correspondències.

    En notació, igual que en el filtrat col·laboratiu:

    • Fem servir ri,j per indicar si l’usuari j ha valorat l’ítem i.
    • Fem servir yi,j per representar la valoració donada per l’usuari j a l’ítem i, si existeix.

    La diferència és que ara aprofitarem features dels usuaris i dels ítems per fer millors recomanacions que amb el filtrat col·laboratiu pur.

Característiques d’usuaris

En el cas de recomanacions de pel·lícules, alguns exemples de característiques (features) de l’usuari podrien ser:

  • Edat
  • Gènere (codificat amb one-hot: home, dona, desconegut)
  • País (one-hot amb ~200 categories possibles)
  • Historial de visionats: dels 1000 films més populars, quins ha vist?
  • Valoracions mitjanes per gènere:
    • mitjana de puntuacions en pel·lícules romàntiques,
    • mitjana en acció,
    • etc.

Aquest últim cas és interessant perquè les característiques depenen de les pròpies valoracions de l’usuari, cosa que és perfectament vàlida.

Amb això podem construir un vector de característiques:

x(j)u

on j identifica l’usuari.

Característiques d’ítems (pel·lícules)

De manera similar, podem definir features per a cada pel·lícula:

  • Any d’estrena
  • Gènere(s)
  • Crítiques professionals (codificades en variables)
  • Valoració mitjana rebuda (general, per país, per franja d’edat, etc.)

Amb això podem construir un vector de característiques:

x(i)m

on i identifica la pel·lícula.

Vectors de recomanació

El nostre objectiu és decidir si la pel·lícula i serà una bona recomanació per a l’usuari j.

Tot i que xu i xm poden tenir dimensions molt diferents (per exemple, 1500 característiques per usuari i només 50 per pel·lícula), necessitem transformar-los en vectors de la mateixa dimensió per poder comparar-los.

Definim:

  • v(j)u: vector que representa les preferències de l’usuari j.
  • v(i)m: vector que representa les característiques de la pel·lícula i.

La predicció de la valoració de l’usuari j sobre la pel·lícula i es farà mitjançant el producte escalar:

ˆyi,jv(j)uv(i)m

Suposem que els vectors tenen 3 dimensions:

  • v(j)u=(4.9,,0.1,,2.5) → preferències de l’usuari: molt alt interès per romàntic, baix interès per acció, interès moderat per comèdia.
  • v(i)m=(4.5,,0.2,,0.7) → característiques de la pel·lícula: molt romàntica, poc d’acció, una mica de comèdia.

El producte escalar v(j)uv(i)m donarà una mesura de com bé encaixa aquesta pel·lícula amb els gustos d’aquest usuari.

Procediment

El procediment és:

  1. Construir vectors de característiques xu,xm.
  2. Aprendre a transformar-los en vectors vu,vm de dimensió comuna.
  3. Calcular el producte escalar vuvm per predir l’afinitat.

A continuació veurem com es poden calcular aquests vectors vu i vm.

Filtrat de contingut amb xarxes neuronals

Una bona manera de desenvolupar un algoritme de filtrat basat en contingut és utilitzar deep learning.
Aquest enfocament és el que fan servir avui molts dels sistemes comercials més avançats en recomanació de contingut.

Recordem l’esquema:

  • A partir d’un vector de característiques d’un usuari (edat, gènere, país, etc.) volem calcular el vector vu.
  • A partir d’un vector de característiques d’una pel·lícula (any d’estrena, actors, gènere, etc.) volem calcular el vector vm.

Per fer-ho utilitzarem xarxes neuronals:

  • La xarxa d’usuari rep com entrada xu (edat, gènere, país, …) i, a través d’unes quantes capes denses, produeix un vector vu.
  • La xarxa de pel·lícula rep com entrada xm (característiques de la pel·lícula) i produeix un vector vm.

En l’exemple vist, la sortida de la xarxa és un vector de 32 components, és a dir, vu i vm són llistes de 32 nombres cadascun.

Predicció de la valoració

La predicció de la valoració d’un usuari j sobre una pel·lícula i es fa amb el producte escalar:

ˆy(i,j)=v(j)uv(i)m

  • Si les valoracions són de 15 estrelles, aquest valor és la predicció.
  • Si en canvi tenim etiquetes binàries (per exemple: “agrada / no agrada”), podem aplicar una sigmoide:

ˆy(i,j)=σ(v(j)uv(i)m)

així obtenim la probabilitat que y(i,j)=1.

Una sola xarxa combinada

Encara que conceptualment tenim dues xarxes separades (usuari i pel·lícula), és útil dibuixar-les juntes:

  • Part superior: la xarxa de l’usuari (entrada xu, sortida vu).
  • Part inferior: la xarxa de la pel·lícula (entrada xm, sortida vm).
  • Al final, es fa el producte escalar vuvm per obtenir la predicció.

Funció de cost

Per entrenar les dues xarxes alhora, definim una funció de cost semblant a la de collaborative filtering:

J=(i,j)D(v(j)uv(i)my(i,j))2

on D és el conjunt de parelles usuari–pel·lícula amb valoració coneguda.

  • Tots els paràmetres de les dues xarxes s’entrenen junts amb descens de gradient (o altres optimitzadors).
  • També hi podem afegir termes de regularització per evitar pesos massa grans.

Trobant ítems similars

Un cop entrenat el model:

  • El vector v(i)m descriu una pel·lícula i.
  • Per trobar pel·lícules similars, busquem altres pel·lícules k amb vectors propers en distància euclidiana:

v(i)mv(k)m2petit

Això juga el mateix paper que a collaborative filtering, quan comparàvem característiques.
A més, aquests càlculs de similitud es poden precomputar (per exemple, durant la nit) i guardar les 10 o 20 pel·lícules més semblants a cada pel·lícula.

Consideracions finals

  • Benefici: les xarxes neuronals es poden combinar fàcilment per crear arquitectures més potents. Aquí hem unit dues xarxes en un sol sistema.
  • Limitació: amb catàlegs molt grans (milers de pel·lícules o més), aquest model pot resultar costós computacionalment. Per això, es tracten tècniques per fer-lo escalable a catàlegs enormes.
  • En implementacions reals, gran part del treball rau a dissenyar bones característiques d’entrada (feature engineering). És una de les claus per aconseguir recomanacions útils i competitives en entorns comercials.

Escalabilitat dels recomanadors

En els sistemes de recomanació actuals sovint cal seleccionar un petit conjunt d’ítems per recomanar, d’entre un catàleg que pot contenir milers, milions o fins i tot desenes de milions d’opcions.
La pregunta clau és: com fer això de manera eficient computacionalment?

El repte computacional

Imaginem una xarxa neuronal que fem servir per predir la puntuació que un usuari donaria a un ítem.
Un servei de vídeo en línia pot tenir milers de pel·lícules; una plataforma de publicitat, milions d’anuncis; un servei de música, desenes de milions de cançons; i una botiga en línia, milions de productes.

Quan un usuari entra a la web, disposem del seu vector de característiques Xu.
Però si haguéssim de passar tots els milions d’ítems per la xarxa neuronal per calcular el producte intern amb Xu, el cost seria prohibitiu: fer inferència milions de vegades per cada visita és inviable.

Estratègia en dos passos

Per resoldre aquest problema, molts sistemes a gran escala utilitzen dos passos:

  1. Recuperació (retrieval): generar una llista inicial d’ítems candidats plausibles.
  2. Classificació (ranking): ordenar aquests candidats segons el model i escollir els millors.

Pas 1: Recuperació

L’objectiu és obtenir una llista prou àmplia i variada d’ítems que puguin ser interessants per a l’usuari.
És acceptable que aquesta llista contingui molts ítems que l’usuari realment no voldrà.

Exemple d’estratègies de recuperació:

  • Per cada una de les últimes 10 pel·lícules vistes, afegir les 10 pel·lícules més similars (calculades amb vectors de característiques Vim i Vkm).
  • Afegir les 10 pel·lícules més populars de cadascun dels tres gèneres preferits de l’usuari (per exemple, romàntic, comèdia i drama històric).
  • Afegir les 20 pel·lícules més vistes al país de l’usuari.

Això es pot fer ràpidament si les similituds entre pel·lícules estan precomputades i accessibles en una taula de consulta.
El resultat és una llista de centenars de candidats, amb bona cobertura i diversitat.

Finalment, es poden eliminar duplicats i ítems que l’usuari ja ha consumit.

Pas 2: Classificació

Ara treballem amb uns centenars de candidats.
Per cada parella (usuari, ítem):

  1. Passem Xu (vector de l’usuari) i Xm (vector de l’ítem) pel model.
  2. Calculem la predicció ˆyum, que pot ser la puntuació estimada o la probabilitat que l’usuari li doni una valoració positiva.

Això ens permet ordenar els ítems segons la seva rellevància prevista.

Optimització

Si hem precomputat els vectors Vm de tots els ítems, només cal calcular Vu una sola vegada per a l’usuari actual.
Llavors fem el producte intern:

s(u,m)=VuVm

per als ítems recuperats.
Això és molt més ràpid que fer inferència completa sobre milions d’opcions.

Nombre d’ítems a recuperar

Un punt crític és decidir quants ítems recuperar al pas de recuperació:

  • Recuperar més ítems → més probabilitat d’incloure bones opcions, però més lent en el pas de classificació.
  • Recuperar menys ítems → més ràpid, però risc de deixar-se opcions molt rellevants.

La decisió òptima es pren amb experiments offline, comparant si recuperar 100, 500 o 1000 ítems millora realment les recomanacions finals.

Avantatges de l’enfocament

  • Rapidesa: la recuperació filtra els ítems clarament irrellevants.
  • Precisió: la classificació aplica el model només als candidats, amb una predicció més acurada.

Així, els sistemes comercials actuals aconsegueixen un bon equilibri entre eficiència i qualitat.

Consideracions ètiques

Tot i la seva importància econòmica, els sistemes de recomanació també poden generar impactes negatius (desinformació, bombolles de contingut, biaixos).
Per això és fonamental construir-los amb responsabilitat, tenint en compte:

  • El benefici de l’usuari.
  • El benestar social en general.
  • L’alineació amb valors ètics, més enllà de l’interès empresarial.

En resum: els sistemes de recomanació a gran escala funcionen amb una estratègia de dos passos -recuperació i classificació- que els permet ser alhora ràpids i precisos, fins i tot amb catàlegs de desenes de milions d’ítems.

Oportunitats i riscos

Els sistemes de recomanació han estat molt profitosos per a moltes empreses. Tanmateix, alguns usos han tingut conseqüències negatives per a persones i per a la societat en general.

Quan fem servir sistemes de recomanació —o qualsevol altre algoritme d’aprenentatge automàtic— és important que l’objectiu no sigui només generar benefici econòmic, sinó contribuir a millorar el benestar de les persones i de la societat.

En aquest text veurem alguns casos problemàtics dels sistemes de recomanació i algunes estratègies per reduir els danys potencials i incrementar els beneficis.

Maneres de configurar un sistema de recomanació

Un sistema de recomanació es pot configurar de moltes formes.

Quan treballem amb etiquetes binàries, la variable y pot significar:

  • Si un usuari ha interactuat amb un ítem (per exemple, un clic).
  • Si l’usuari ha expressat explícitament que li agrada un element.

A partir d’aquí, cal prendre decisions: quin objectiu té el sistema de recomanació i què recomanem exactament.

Alguns exemples habituals:

  • Recomanar a un usuari les pel·lícules que probablement valorarà amb 5 estrelles.
  • Recomanar productes que és més probable que compri.
  • Decidir quins anuncis mostrar, ja sigui els que tenen més probabilitat de clic o bé aquells en què l’anunciant ha fet una aposta més alta per clic (model de subhasta).

Aquestes decisions tenen implicacions importants.

Maximitzar beneficis vs. servir a l’usuari

Moltes empreses no mostren als usuaris els productes més rellevants, sinó aquells que els generen més marge de benefici.

Per exemple: si un producte és més rendible perquè l’empresa el pot aconseguir barat i vendre car, aquest producte apareixerà més amunt a les recomanacions.

Des del punt de vista de l’empresa això sembla raonable. Però des del punt de vista de l’usuari, seria preferible transparència:

  • L’empresa em mostra allò que realment m’interessa?
  • O m’està mostrant allò que li genera més benefici?

Recomanacions basades en temps d’ús

En webs de vídeo o xarxes socials, un objectiu comú és maximitzar el temps de permanència de l’usuari.

Com més temps hi passis, més anuncis et poden mostrar. Això fa que molts sistemes de recomanació estiguin optimitzats per engagement (interacció, temps d’ús), no necessàriament pel teu benestar.

Els primers casos (mostrar pel·lícules agradables, productes útils) semblen innocus. Però els enfocaments basats en temps d’ús poden derivar en problemes greus.

Exemple: la publicitat

La indústria de la publicitat pot ser tant un amplificador del bé com del mal.

Exemple positiu: el turisme

Un bon negoci de viatges ofereix experiències excel·lents als usuaris. Això el fa més rendible, pot invertir més en publicitat i, per tant, atrau més usuaris. Es crea un cercle virtuós:

Més qualitat;;més clients satisfets;;més beneficis;;més inversió en publicitat;;més clients

Exemple negatiu: els crèdits ràpids (payday loans)

Aquest sector acostuma a cobrar interessos altíssims a persones amb pocs recursos.
Un negoci especialment eficient en explotar els clients pot obtenir més beneficis, pagar més per publicitat i atreure encara més víctimes.
Això crea un cercle viciós que amplifica els negocis més nocius.

Altres casos problemàtics

S’ha informat àmpliament que maximitzar l’engagement (temps de visualització, interacció) ha conduït algunes plataformes a amplificar conspiracions, odi i toxicitat.

Aquest contingut és molt atractiu i reté l’usuari, però pot tenir un efecte negatiu tant en individus com en la societat.

Una possible millora (tot i que imperfecta) és filtrar continguts problemàtics: discurs d’odi, fraus, estafes, contingut violent. Però definir què exactament s’ha de filtrar és sorprenentment difícil i controvertit.

La importància de la transparència

Molts usuaris pensen que les apps i webs els recomanen allò que més els agradarà.
La realitat és que sovint el criteri principal és maximitzar el benefici de l’empresa.

Per això és important fomentar la transparència: explicar als usuaris amb quins criteris es decideixen les recomanacions. Això pot augmentar la confiança i reduir el risc de danys.

Reflexió final

Els sistemes de recomanació són una tecnologia molt poderosa i rendible.
Però també poden tenir efectes problemàtics.

Quan dissenyem aquests sistemes, hem de pensar no només en els beneficis, sinó també en els possibles danys.
És essencial convidar perspectives diverses, debatre i dissenyar sistemes que facin més bé que mal.

En definitiva:

  • Només construïm tecnologies que creiem que milloren la societat.
  • La responsabilitat és col·lectiva: tots els que treballem en IA hem de procurar que el nostre treball faci que les persones estiguin millor.