Cum sa construiesti un algoritm similar cu TikTok

In ultimele cateva saptamani, pe buzele tuturor s-au auzit doua silabe ce reverbereaza din ce in ce mai puternic in mintile noastre: Tic-Toc. Ca ar fi vorba de timpul ramas in Europa sau de aplicatia de “social media”, nu cred ca mai facem diferenta. 

Am vazut cu totii efectele unei astfel de retele, Iar acum ca stim cat de puternic poate fi un algoritm de recomandari, hai sa vedem si cum construim ceva similar (cu scop pur educational desigur, nu vrem sa destabilizam guvernele altor tari)

Aplicatia TikTok are multe componente: video-urile, chat-ul, libraria proprie, editor etc. Pe noi ce ne intereseaza este exact magia din spate: algoritmul de recomandari. Cum stie TikTok exact ce video sa iti arate cand dai scroll? Cum ia aceasta decizie? Ce factori influenteaza aceasta decizie si cum poate alege din milioane de video-uri exact pe cele care se potrivesc?

Algoritmii de recomandare nu sunt insa ceva nou: ne-am obisnuit deja cu ei pe alte platforme similare: Youtube, Expedia, Facebook, Spotify. 

Construirea unui algoritm de recomandare implică mai multe componente, printre care:

  1. Colectarea de date
  2. Interpretarea datelor ca vectori
  3. Antrenarea algoritmului de recomandare
  4. Optimizare continua

Inainte de toate, trebuie sa ii dam algoritmului ce-i al algoritmului: un obiectiv. Care sunt masuratorile dupa care isi va ghida recomandarile? Care e obiectivul primar: sa ma tina cat mai mult in aplicatie? Sa cumpar cat mai mult? Sa descopar cat mai multe informatii noi? Un cumul din toate 3?

O lista de cateva optiuni de obiective bazat pe platformele existente:

  • Obiectiv: Maximizarea reactiilor utilizatorilor (like-uri, share-uri etc.)

Exemplu: pentru o platformă de partajare a videoclipurilor precum TikTok, scopul este de a menține utilizatorii să vizioneze, să aprecieze, să distribuie și să comenteze videoclipurile.

Cum masuram asta: 

  • Rata de clic (CTR): Urmărește cât de des utilizatorii fac clic pe recomandări.
  • Durata de vizionare: Măsoară cât timp utilizatorii consumă conținut recomandat.
  • Like/Partajări/Comentarii: indică interacțiunea utilizatorului și satisfacția față de recomandări.
  • Rata de ignorare: ajută la identificarea recomandărilor irelevante sau de calitate scăzută (mai mic este mai bine).
  • Obiectiv: Creștem retenția (cat de mult stau/revin pe platforma) utilizatorilor

Exemplu: pentru un serviciu de streaming precum Netflix, sistemul ar trebui să se asigure că utilizatorii se întorc frecvent la platformă.

Cum masuram asta:

  • Numar de vizite recurente: Urmărește cât de des utilizatorii revin pe platformă după ce au consumat recomandări.
  • Durata sesiunii: Măsoară cât timp utilizatorii rămân implicați în timpul fiecărei vizite.
  • Rata de retenție: procentul de utilizatori care continuă să interacționeze cu platforma de-a lungul timpului.
  • Obiectiv: Creștem rata de conversie (de cate ori cineva cumpara/face clic pe un element)

Exemplu: O platformă de comerț electronic (cum ar fi Amazon) dorește să recomande produse pe care utilizatorii au șanse mai mari să le cumpere.

Cum masuram asta:

  • Rata de achiziție: procentul de articole recomandate pe care utilizatorii le achiziționează.
  • Rata de adăugare în coș: urmărește câte recomandări adaugă utilizatorii în coșul de cumpărături.
  • Rata de abonament: Măsoară cât de des utilizatorii se abonează sau fac upgrade pe baza recomandărilor.
  • Obiectiv: Încurajam descoperirea de continut nou

Exemplu: o aplicație de streaming de muzică (cum ar fi Spotify) dorește ca utilizatorii să exploreze noi genuri și artiști, în timp ce se bucură de cele familiare.

Cum masuram asta:

  • Varietate de conținut: evaluează cât de variate sunt articolele recomandate în ceea ce privește categoriile, genurile sau creatorii.
  • Noutate: Măsoară câte recomandări introduc utilizatorii la articole noi sau nevăzute anterior.
  • Rata de explorare: procentul de recomandări care sugerează conținut necunoscut.
  • Obiectiv: Susținem creatorii de conținut

Exemplu: o platformă precum YouTube poate acorda prioritate promovării unor creatori mai noi sau mai puțin populari pentru a echilibra expunerea.

Cum masuram asta:

  • Corectitudinea expunerii: se asigură că recomandările nu sunt prea părtinitoare față de anumiți creatori sau articole populare.
  • Balanța de reprezentare: urmărește vizibilitatea diferiților creatori, categorii sau grupuri.
  • Implicare pentru noii creatori: măsoară cât de bine recomandările îi ajută pe creatorii noi sau mai puțin cunoscuți să câștige acțiune.
  • Obiectiv: Cat mai mult timp petrecut pe platformă

Exemplu: un agregator de știri precum Flipboard poate avea ca scop maximizarea timpului pe care utilizatorii îl petrec citind articole sau derulând fluxuri.

Cum masuram asta:

  • Durata sesiunii: Măsoară timpul total petrecut de utilizatori pe platformă pe sesiune.
  • Timp de vizionare: urmărește timpul petrecut interacționând cu un anumit conținut recomandat.
  • Afișări de anunțuri: măsoară numărul de anunțuri difuzate din cauza interacțiunii prelungite.
  • Obiectiv: Personalizare

Exemplu: o aplicație de fitness (cum ar fi MyFitnessPal) adaptează recomandările de antrenament sau mese pe baza obiectivelor și obiceiurilor utilizatorilor.

Cum masuram asta:

  • Scoruri de feedback: Urmărește evaluările utilizatorilor sau feedback-ul cu privire la relevanța recomandărilor.
  • Rata de implicare: măsoară acțiunile utilizatorilor (de exemplu, clicuri, aprecieri) asupra conținutului personalizat.
  • Rata de abandon: monitorizează cât de bine recomandările personalizate reduc uzura utilizatorilor.
  • Obiectiv: Adaptare în timp real

Exemplu: o platformă de învățare online precum Coursera sugerează cursuri sau exerciții bazate pe performanța și interesele unui student în timpul unei sesiuni.

Cum masuram asta:

  • Timpul de răspuns: Măsoară cât de repede se actualizează recomandările pe baza interacțiunilor utilizatorului.
  • Implicare pentru acțiuni recente: urmărește interacțiunile utilizatorilor cu recomandări adaptate comportamentului recent.
  • Performanță la pornire la rece: evaluează eficacitatea cu utilizatori noi sau conținut.
  • Obiectiv: Sa vindem cat mai multe produse (upsell sau cross-sell)

Exemplu: o platformă de rezervare a călătoriilor (cum ar fi Expedia) recomandă hoteluri, închirieri de mașini sau experiențe după rezervarea unui zbor.

Cum masuram asta:

  • Venituri pe recomandare: Urmăriți valoarea monetară generată de recomandări.
  • Rata de conversie pentru produse înrudite: măsoară cât de des cumpără utilizatorii suplimente sau articole conexe.
  • Rata de clic (CTR) pentru vânzări încrucișate: urmărește frecvența cu care utilizatorii dau clic pe recomandările de vânzări încrucișate.

Ca sa mearga cat mai bine procesul, hai sa facem noi acum un rival al TikTok. Sa-i spunem BrainGone, cu obiective identice cu cele ale TikTok: anume maximizarea reactiilor utilizatorilor.

Ii dam si un tagline fain: “Intra pe BrainGone sa scapi de stres” iar platforma promite numai video-uri cu pisoi, catei si cazaturi amuzante (cum era internetul odinioara).

Pasul urmator: Colectarea și prelucrarea datelor. Datele se află în centrul oricărui algoritm de recomandare. Vei avea nevoie de:

Datele de utilizator: Date demografice, preferințe, istoric de interacțiuni.

Date de conținut: categorie, hashtag, detaliile creatorului, durata videoclipului, subtitrările, tendințele audio.

Date de interacțiune: Aprecieri, comentarii, distribuiri, durata de vizionare, sărituri, reluări.

Date contextuale: Ora din zi, dispozitivul utilizatorului, locația, durata sesiunii.

Acum, intrebarea cea mai pertinenta este: “Si de unde fac rost de datele astea? Nu am utilizatori inca.”

Realitatea este ca algoritmii de recomandari si-au facut aparitia mai intai in cadrul aplicatiilor deja existente si cu baze serioase de utilizatori si de date. 

La inceput, cand numarul de utilizatori este foarte mic si continutul nu este suficient, o idee care poate ajuta este crearea in avans a unei librarii de continut si parteneriate cu creatori de continut care si-ar muta videourile cu pisici si catei de pe alte platforme pe BrainGone, gata sa fie postate/distribuite la lansarea oficiala. 

Acum incepe si partea complicata din algoritmul nostru de recomandare: transformarea informatiei in reprezentare vectoriala.

Ce este o reprezentare vectoriala totusi?

Reprezentarea vectorială este o metodă specială care transformă cuvinte, propoziții, imaginile și alte date în numere, mai specific, in vectori. 

Aceste numere indica ce înseamnă datele și cum se leagă între ele. 

Exemplu: cuvantul “pisica”, intr-o reprezentarea vectoriala, ar arata ceva de genul asta:

[0.5;1.2;3.5].

betty white math

Probabil v-am pierdut putin. Cum am ajuns de la pisica la niste numere random? 

Cuvantul “pisica” insa reprezinta ceva si are anumite atribute. Cateva din aceste atribute: “familie lexicala”, “nivel de activitate”, “Inteles pozitiv/negativ”, “grad de utilizare”, “formal/informal” etc.

Daca ar fi sa atribuim un scor, pe o scara de la 0 la 5, pentru 3 dintre aceste atribute, situatia ar arata cam asa:

Cuvantul “pisica”:

Grad de utilizare: 0.5/5

Inteles pozitiv/negativ: 1.2/5

formal/informal: 3.5/5

Deci, intr-o reprezentare vectoriala, pisica = [0.5;1.2;3.5]. 

Daca mergem si mai departe si consideram aceste atribute ca fiind niste axe pentru in spatiu 2D sau 3D, am putea reprezenta pozitia cuvantului “pisica” in acel spatiul 2D/3D.

AD 4nXeWotYiOz2D7n0sn5zMRNO7sfWfb4jWS5Yh0PdJNx6wmRh6oaDFWTFOlk 65RqeTYopgJkysTPUx5Kv5oSAzXgGQkEI C83oZYfSo D5nCwYC3qap 5A1WgBC 1 UAj BRkyf49fA?key=dBElkQKsUBMeZktdAGPbIr

Acum, ce se va intampla cand reprezentam vectorial cuvinte precum “caine”, “jucarie”, “boabe”, “pisoi”, “pisicuta”? Fiind similare ca utilizare si masurate folosind aceleasi atribute, cuvintele astea vor fi spatial pozitionate langa sau in jurul cuvantului “pisica”.

Acum, in functie de complexitatea cuvintelor, putem creste numarul de atribute. Reperezentarea 3D este doar o simplificare ca sa fie usor de inteles pentru mintea noastra, dar putem avem 10, 100 sau chiar 1000 de atribute diferite care sa determine pozitia relativa a unui cuvant fata de alte cuvinte similare.

Ok, si cum alegem atributele dupa care sa reprezentam vectorial cuvintele sau datele colectate de la utilizator? 

Modelele de învățare automată (Machine Learning) (e.g., Word2Vec, GloVe) identifică automat aceste atribute analizând datele disponibile. Ele învață relațiile dintre cuvinte sau comportamente în funcție de contextul in care apar, fără ca noi să definim explicit trăsăturile.

Cu cat mai multe date, cu atat mai bine pot face legatura aceste modele intre ele. Asta e si principiul care sta la baza ChatGPT, Gemini AI si alte modele. Sigur, complexitatea a crescut si ce am explicat mai sus este o supra-simplificare a cum functioneaza de fapt, dar avand aceste date de baza, acum stim mai bine cum apar legaturile intre elemente similar.

Cateva tehnologii pe care le poti folosi sa transformi o baza de date standard intr-un vectoriala: 

Prelucrare text – vector: Word2Vec, GloVe, FastText, Transformers (BERT, GPT, etc.)

Prelucrare seturi de date structurate – vectori: Scikit-learn (Python), TensorFlow / PyTorch, XGBoost.

Prelucrare imagini – vectori: ResNet, VGG, Inception, OpenCV, CLIP (OpenAI).

Prelucrare audio – vectori: Librosa (Python), Mel Spectrograms, OpenL3, Wav2Vec.

Dupa ce am transformat datele noastre in vectori, vectorii trebuie stocati undeva. Cateva solutii de stocare a vectorilor: Pinecone, Weaviate, Milvus.

O platforma precum TikTok (sau BrainGone, la care am inceput deja sa lucram in acest articol :)) transforma in vectori informatii despre video-urile din feed (continutul practic), informatii despre utilizator si profilul lor (inclusiv video-urile la care a dat like), informatii despre dispozitiv, tara de origine, orasul si multe altele de care cel mai probabil nu vom afla niciodata.

Si am ajuns deja la pasul 3: Antrenarea unui algoritm de recomandare bazat pe datele acum reprezentate vectorial.

Acest algoritm poate avea 4 abordari de recomandare diferite:

1. Recomandare bazată pe comportamentul utilizatorului (Collaborative Filtering)

Această metodă se concentrează pe învățarea din interacțiunile anterioare ale utilizatorului:

  • Dacă dai like, share, sau comentezi la un video dintr-o anumită categorie, algoritmul reține aceste acțiuni.
  • Ulterior, îți recomandă conținut nou similar, bazându-se pe toate videoclipurile cu care ai interacționat.
  • Funcționează bine în cazul utilizatorilor cu un istoric bogat de interacțiuni, dar poate suferi de problema utilizatorului nou (cold start).
  • E.g: Dacă persoanei A îi place și comentează videoclipurile 1, 2, 3, 4 și 5, iar persoana B îi place și comentează videoclipurile 1, 2 și 3, va avea tendința de a aprecia videoclipurile 4 și 5.

2. Recomandare bazată pe conținut (Content-Based Filtering)

Aceasta analizează caracteristicile conținutului individual și îl clasifică în categorii:

  • Conținutul este plasat în categorii sau spații vectoriale bazate pe trăsături extrase (text, imagini, sunet etc.).
  • La primul contact, utilizatorului i se pot solicita preferințe explicite (e.g., categoriile care îl interesează).
  • Sistemul recomandă apoi conținut similar cu cel din categoriile selectate.
  • Poate recomanda conținut chiar și fără date istorice despre utilizator.
  • E.g: Videoclipul trecut: durata – 30 de secunde; hashtag-uri — #coaster #rollercoaster #themepark #disneyworld. Videoclip recomandat: durata – 28 de secunde; hashtag-uri — #rollercoaters #ride #florida #universalstudios. Videoclipul trecut are atribute video similare cu videoclipul recomandat.

3. Deep Learning (Abordare avansată)

Aceasta implică utilizarea rețelelor neuronale pentru a învăța relații complexe și modele de comportament:

  • Rețele neuronale convoluționale (CNN): Pot fi folosite pentru analiza detaliată a conținutului vizual (e.g., extragerea tematicii unui video).
  • Rețele neuronale recurente (RNN): Modelează comportamentul utilizatorului ca o secvență de interacțiuni, capturând relații între acțiuni.
  • Transformers (e.g., BERT, GPT): Acestea interpretează interacțiunile utilizatorilor în mod contextual, fiind excelente pentru modelarea secvențială pe termen lung (de exemplu, ce ar vrea un utilizator să vadă după un anumit video).
  • Poate învăța din interacțiuni complexe și diverse (click-uri, like-uri, durata de vizionare).

4. Modele hibride

Aceasta combină metodele de mai sus pentru a oferi recomandări mai precise și personalizate:

  • Recomandare bazată pe comportament + Recomandare bazată pe conținut: Utilizează interacțiunile utilizatorului și caracteristicile conținutului pentru a face predicții mai informate.
  • Deep Learning integrat cu metode tradiționale: Combinația permite capturarea atât a relațiilor explicite (preferințe declarate), cât și a celor implicite (comportament observat, prin interactiuni in aplicatie).
  • Modelele hibride pot aborda provocările precum problema utilizatorului nou sau a conținutului nou, maximizând diversitatea și relevanța recomandărilor.

Bun, acum stim ce continut se potriveste unui anumit utilizator, dar nu stim in ce ordine vrem sa il aratam.

După ce un set de potențiale recomandări este generat (prin filtrare colaborativă, bazată pe conținut sau alte metode), ranking-ul decide ordinea în care acestea sunt afișate.

Ranking-ul evalueaza probabilitatea ca utilizatorul să interacționeze cu fiecare recomandare si ii da un scor. 

Cateva criterii pe care continutul poate primi un scor:

  1. Relevanță: Calculul probabilității ca utilizatorul să dea click, să vizioneze sau să interacționeze cu un element.
  2. Optimizare bazat pe obiectivele platformei (aici reapare pasul 1)
    • Timp total de vizionare.
    • Numarul de interactiuni.
    • Calitatea interacțiunii (e.g., comentarii mai valoroase decât like-uri).
    • etc.
  3. Advertising/Non-advertising: De exemplu, conținutul sponsorizat sau al creatorilor noi primeste un scor mai mare.

Am inteles cum si ce date sa colectam de la utilizatori, cum sa le transformam intr-o reprezentare vectoriala, cum putem folosi reprezentarea vectoriala ca sa recomandam continut specific si apoi cum decidem ce continut sa aratam si in ce ordine.

Ultimul pas: Optimizare continua. 

Agloritmul nostru de recomandare nu este static: mereu apare continut nou, comportamentul si preferintele utilizatorilor se schimba. Partea buna este ca acum putem folosi datele pe care le colectam si sa impingem algoritmul de recomandare sa se schimbe in functie de criteriile pe care le-am setat deja. Daca observam ca numarul de interactiuni ale unui utilizator cu video-uri cu pisici a inceput sa scada, ii aratam continut nou din categorii similare cu cele pe care le-am descoperit sau ne-au fost indicate initial de utilizator pana cand observam ca interactiunile cresc din nou.

Si oficial avem agloritmul de recomandare al aplicatiei noastre fictive, BrainGone 🙂 Cand intri prima oara pe BrainGone, te intrebam daca preferi pisici sau catei, ce rase si daca preferi continut amuzant sau dragalas. Noi in spate, am transformat in reprezentare vectoriala sute de mii de video-uri cu catei si pisicute in functie de aceste atribute (si alte cateva sute pe care nu ti le comunicam ;).

Incepem sa iti aratam video-uri cu pisici siameze care se sperie prin casa de soareci pentru cateva ore, iar cand vedem ca iti scade numarul de interactiuni si timpul petrecut pe fiecare video, incepem sa iti aratam pisici siameze care miauna dupa proprietarii lor. Daca nici asta nu iti creste la loc gradul de interactivitatea cu BrainGone, incercam cu alt tip de pisici, cu alte situatii si poate schimbam registrul de la amuzant la dragalas. Obiectivul BrainGone este sa petreci cat mai mult timp pe aplicatia noastra ca, undeva in mijlocul experientei tale, sa iti aratam o reclama la o casa de adoptii de pisicute de langa tine (pentru care suntem platiti 0.02$ per afisare).

Vrei sa inveti mai multe despre cum ai putea implementa tehnic un algoritm de recomandari si ce alte unelte poti folosi sa faci asta mai usor? Stai aproape de Noi Venim din Viitor ca sa afli partea a doua.