Film- / Sorozatajánló algoritmus

 ( resist | 2019. szeptember 20., péntek - 10:33 )

Sziasztok!

Van egy gagyi és öreg sorozatos hobbioldalam (PHP), ahol a felhasználók jelölgetik, hogy miket néznek. Semmi extra. Volt rajta egy sorozat ajánló aloldal, de olyan szánalmas eredményeket dobott ki (mindenkinek ugyanaz a kommersz eredmény), hogy inkább levettem pár éve. Most kicsit elgondolkodtatott, hogy hogyan is lehetne egy ilyet megfogni egyszerűen.

Az egyszerű alatt azt értem, hogy nincs bigdata, user életének elemzése, user network, MI, durva logolás stb. Néhány jól megválasztott súllyal szeretnék operálni, ami lehetőleg valós időben tudjon lefutni a szerver megfektetése nélkül. Ami van: ~10k magyar user, IMDb rate, követés szám, user által követett sorozatok, azok kategóriái, lehet akár egy minimal belső értékelési rendszer, sorozatjunkie értékelés stb.

https://github.com/stojg/recommend Cosine algoritmus volt korábban, de nem igazán ismerem a hátterét, és nem is tudtam hangolni.

Láttok erre esélyt, vagy hagyjam? Nem a tömegek kiszolgálása a célom, csak érdekelne egy megoldás a saját magam szórakoztatására. (A programozás csak hobbi nekem, nem vagyok fejlesztő.)

Köszönöm!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

http://www.myepisodes.com/frontpage/ ezt használom évek óta, legfontosabb funkciója nekem, hogy jelzi az új részeket.

:)
Na, én egy ilyesmi saját rendszerhez/adatbázishoz próbálnék értelmes ajánló algoritmust készíteni.

es ebben hol van ajanlo?

Mennyire felületesek/részletesek az egy-egy filmhez/sorozathoz megadott kategóriák? A TV Time nekem jó ajánlásokat szokott dobni, náluk így működik:
"Your TV Time Scores (the percentages) are automatically computed based on your individual activity in the app. Components that impact your score include:

  • The shows you add
  • The shows you include in your favorites section
  • The premiere year of the shows you add
  • The genres of the shows you add
  • The networks of the shows you add
  • The languages of the shows you add
  • The shows you mark as ‘bad recommendation’

Your personal info (age and gender) also factor into the equation, but only if you choose to share it with us.

Each show that you add, favorite, or thumbs-down represents how much you seem to like (or dislike) that show.

  • Add a show? You like it. (+1)
  • Favorite a show? You love it. (+2)
  • Thumbs down a show? You don’t like it. (-1)
  • Ignore a show? That’s a 0.

We use all of this information to predict what your score would be for similar shows to find your best match."

A felsorolt szempontok szerintem elég távol állnak a bigdatatól és a többi elkerülni kívánt megoldásoktól. :)

Igen, ilyesmikre gondoltam én is, köszönöm a linket.

Ismert:

  • Követett sorozatok, és megnézett epizódok
  • Ezek adatai (kategóriái, színészei, IMdb rate, személyes belső rate [egyyszernézős, többszörnézős, életesorozata, besefejezte], év stb). Ezek közül néhányat költséges reverz megtudni, pl adott színész sorozatait megtalálni pusztán az adatbázisból
  • Felhasználóhoz van egy tömb: category1 = hány darab követés, category2 = ...
  • Személyes adatokat semennyit sem tudok
  • TV csatornákat ignorálnám, bár ismert

A kategóriák nem vészesen felületesek, de azért sok évados sorozatoknál félremegy. Pl Gilmore Girls: Dráma Vígjáték Romantikus; Black Mirror: Dráma Sci-fi Thriller. Szóval mindenkinek kijön, hogy nagyon szereti a drámát.

Szvsz téged nem az érdekel, hogy valaki szereti-e a drámát, aki komolyabban sorozatozik, az nyilván szereti.
Alapvetően van három nagy műfaj: dráma, comedy, dramedy
Téged az érdekel, hogy aki a drámát szereti (például túlnyomó részben azt nézi), az milyen stílusú drámákat szeret. Scifi, thriller, posztapokaliptikus, antológia stb. Ugyanezt érvényesítve a comedyre és a kettő közös metszetére is. A stíluspreferenciái alapján pedig a minőségi, jól értékelt sorozatokat/filmeket bedobnád neki, a profilját pedig finomhangolná az, hogy érdekli, nem érdekli, leszarja.
Ha az őt érdeklő stílusban dobsz ajánlást, ami ráadásul kritikailag sikeres is, akkor nagyon mellé nem lehet fogni. Az általa követett/megtekintett sorozatok "évjáratát" is figyelembe venném, főleg azért, mert ha valaki újabb sorozatokat néz, akkor lehet hogy annyira nem vevő a régebbiekre, amik inkább epizodikus formulát követtek.
Ha belefér esetleg egy lightos "bigdata", akkor létre lehetne hozni amolyan ízlésbuborékokat, amikbe valaki az általa kedvelt stílusok, műfajok alapján bekerülne, és azt mindenki alakítaná, aki ezeknek a buborékoknak megfelel és "tagja", így akár még fel is használhatnád az egyesek által kedvelt, értékelt, kedvencek közé sorolt sorozatokat mások ajánlásaihoz is, akik közel állnak hozzá érdeklődésben.

Köszi, jó gondolatok

A Netflix is csinálja a user preferencia-alapú adatbázis építést (ez alapján pl. filmajánlást tesz a nézőnek (egyébként úgy tudom, hogy ezt pont magyarok programozták le nekik). Lényegesen egyszerűsítettek egyébként a rendszeren, a régi, csillagozásos pontozást felváltotta a tetszik/nem tetszik-eldöntendő kérdés, szerintem hatékonyabb is lehet.

--
"Nem akkor van baj amikor nincs baj, hanem amikor van!"
Népi bölcsesség

Igazából nem szeretnék több adatot tárolni a felhasználóról, mint ami muszáj.

Spotify ajánlóját ismerem/használom, de az is nyilván bigdata. De ott pl napi szinten adaptálódik hozzám. Ebből élnek, hogy ismernek. Netflix is a kisebb kínálatot próbálja ellensúlyozni gondolom azzal, hogy a felhasználónak soha ne legyen hiányérzete, mert inkább ő mondja meg, hogy mit akar nézni.

Amúgy a Netflix azonosítókat is benne vannak az adatbázisomban, lehet innen kéne közelíteni :)

Attól függ mi a cél: ha filmajánló kell, akkor szerintem a sok adat csak hátráltat (marhára szubjektív kinek mikor mi tetszik, mihez van kedve), a preferencia kevesebb adatból is profilozható.

--
"Nem akkor van baj amikor nincs baj, hanem amikor van!"
Népi bölcsesség

Ez lehet

miert nem hasznalod az imdb altal ajanlottakat? ok mar megirtak az algoritmust :)

Nincs API hozzá rendes. De amúgy igen, elég jók, csak kicsit túl nagy és sokszínű az adatbázisuk hozzá :)

Ha tényleg csak valami basic kell, amit értesz és tudsz vele mit kezdeni, akkor a kNN (k-nearest neighbors) algoritmus lehet a barátod.
https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm

Van egy megvalósítás youtube-on ami talán segít:

https://www.youtube.com/watch?v=N8Fabn1om2k
https://www.youtube.com/watch?v=Lo89NLmSgl0
https://www.youtube.com/watch?v=aMtckmWAzDg

Köszi, megnézem!