De Maurits van der Goes, absolvent intern | 16 februarie 2017
Aceasta prezentare a fost sustinuta de Maurits van der Goes la GraphConnect Europe in aprilie 2016. Iata o trecere in revista a ceea ce a acoperit:
- De ce avem nevoie de echipe virtuale?
- Cum sa dezvolti un motor de recomandare a graficului
- Cum sa depasiti provocarile de filtrare pentru a dezvolta algoritmi de grafic eficienti
- Bazele – si beneficiile – filtrarii colaborative
Despre ce vom vorbi astazi despre cum sa folosim filtrarea colaborativa pentru a oferi recomandari eficiente:
In ultimele cateva luni am lucrat la crearea unui sistem de recomandari grafice pentru compania Part-Up, pentru a ajuta oamenii sa construiasca cele mai bune echipe virtuale posibile.
De ce avem nevoie de echipe virtuale?
Ce este Part-Up si de ce avem nevoie de un sistem de recomandare?
Luati in considerare spatiile de birou de acum aproximativ 100 de ani, care constau in insule de oameni de la birourile individuale, cu putina comunicare. Acest lucru nu mai functioneaza astazi, atat din motive economice, cat si personale. Ne indepartam de structurile ierarhice ale companiei spre structuri plane, ne concentram specializarea intr-un domeniu si cooperam cu alte organizatii.
Muncitorii nu vor sa fie nevoiti sa se prezinte la ora noua si bine, si poate nici nu vor sa vina deloc la birou si sa lucreze de acasa sau in vacanta. Acest lucru permite companiilor sa tina pasul cu o concurenta globala intensa, sporind viteza si flexibilitatea.
Pentru a functiona in cadrul acestor noi modele economice si organizationale, aveti nevoie de o noua platforma – si de acolo vine Part-Up. Imaginati-va ca nu aveti o functie sau un departament fix si puteti face orice doriti de oriunde doriti. Part-Up ofera piata pentru a gasi si forma orice echipa de care ai nevoie.
Am fondat compania acum un an si jumatate si am lansat platforma in august. In prezent, exista o serie de echipe publice la care se poate alatura oricine, dar incepeti mai intai prin sprijinirea echipei, apoi devenind colaborator si apoi devenind partener. Puteti compara acest lucru cu GitHub, care are un model similar. Si in timp ce oricine poate incepe cu echipe publice, puteti crea, de asemenea, o echipa privata pentru propria organizatie, contra unei taxe mici.
Dupa ce te afli intr-o echipa, poti vedea celelalte activitati si colegi asociati cu aceasta. Nu exista un lider de echipa; toata lumea este egala si voi colaborati si va organizati.
Dar aici apare o provocare. Daca exista peste 400 de echipe publice disponibile, care ar trebui sa alegeti? Netflix a facut o analiza care a aratat daca aveti un numar mare de optiuni de film, oamenii vor verifica doar un total de 10 pana la 20 de titluri de film – dar doar trei in detaliu. Si persoana nu gaseste un film in selectia pe care doreste sa o urmareasca, va renunta si nu se va mai intoarce niciodata.
Deci nu dorim ca utilizatorii nostri sa fie nevoiti sa caute prin sute de echipe; dorim sa servim oamenilor o echipa care sa se potriveasca perfect intereselor, ambitiilor si dispozitiilor lor. Acesta este motivul pentru care am inceput sa dezvoltam un motor de recomandare.
Cum sa dezvolti un motor de recomandare a graficului
Arhitectura sistemului
Mai jos este arhitectura noastra actuala de sistem:
Site-ul nostru ruleaza pe Meteor care functioneaza cu MongoDB si am ales sa folosim o structura de baza de date hibrida, astfel incat MongoDB are tot continutul site-ului, dar nu recomandari. Dupa cum stim cu totii, Neo4j face o treaba grozava de mers pe cai de interogare, ceea ce face mult mai repede decat MongoDB.
Din acest motiv, recomandarile sunt calculate in Neo4j si stocate in MongoDB. Cand solicit o recomandare prin API, se bazeaza pe JCypher pentru a lucra cu Neo4j si pentru a prelua un ID. Aceasta imagine este apoi colorata cu informatii de la MongoDB.
Cream recomandarile cu GraphAware, care are un cadru de recomandare cu adevarat frumos, care va permite sa specificati si sa personalizati algoritmi de grafic fara a fi necesar sa construiti un cadru intreg. Echipa GraphAware a fost cu adevarat de sustinere si imi place foarte mult produsul lor. Ultima piesa a arhitecturii noastre de sistem este Importatorul Java, pe care am folosit-o pentru a introduce toate datele noastre vechi in Neo4j.
Modelul de date
Mai jos este modelul de date logice pe care il utilizam in Neo4j:
Am renuntat la toate proprietatile de exemplu, dar avem un utilizator care poate pastra punctele forte la fel ca un profil. Un utilizator este activ intr-o echipa si o parte a unei retele, toate fiind situate intr-un oras situat intr-o tara.
Asa arata reteaua mea in Neo4j:
Sunt destul de activ in o multime de echipe (noduri roz), care sunt conectate la retele (noduri galbene). Stim deja ca este usor sa parcurgi aceste trasee in Neo4j pentru a primi recomandari pentru echipe noi. Mai jos este configurarea pe care o folosim in GraphAware. Am adaugat o serie de module:
In continuare, vom verifica cu lista neagra pentru a vedea daca exista recomandari pentru echipe pe care sunteti deja. Publicam aceste produse, ceea ce inseamna ca modificam putin rezultatele in procesorul post.
Mai jos este codul Cypher pentru lista neagra:
MATCH (u: User) – [r: ACTIVE_IN] -> (t: Echipa) WHERE id (u) = {id} AND r.role> 1.0 RETURN t as blacklist
Iata cateva dintre filtrele pe care le-am adaugat:
MATCH (u: User), (t: Echipa) WHERE id (u) = {id} SI t.privacy_type = 2 SI NU (u) – [: ACTIVE_IN {rol: 1.0} -> (t) RETURN t ca lista neagra MATCH (u: User) (n: Network) <- [: PART_OF] – (t: Team) WHERE id (u) = {id} AND n.privacy_type = 3 AND NOT (u) – [: MEMBER_OF] -> (n) RETURNA T ca lista neagra
Depasirea provocarilor de filtrare pentru a dezvolta cei mai buni algoritmi
Apoi vom intra in proiectarea algoritmilor nostri. Mai jos sunt principalele provocari de filtrare pe care trebuie sa le pregatim pentru a depasi:
- Spatiu de date: Deoarece nu stim prea multe despre utilizatorii nostri, nu stim ce echipe sa recomandam. Acest lucru este valabil mai ales cu un „inceput rece”, motiv pentru care site-urile de intalnire, de exemplu, pun o serie de intrebari atunci cand creati un profil
- Oaie cenusie: puteti avea utilizatori diferiti de oricare dintre ceilalti utilizatori, ceea ce face ca recomandarile sa devina o provocare.
- Scalabilitate: Aceasta este importanta nu numai pentru infrastructura, ci si pentru algoritmi.
- Atacuri de silingi: nu doriti ca activitatea falsa a altor utilizatori sa va afecteze algoritmul. Luati in considerare activitatea frauduloasa de pe Amazon in care oamenii au falsificat evaluarile pentru a face produsul lor fraudulos mai interesant pentru altii.
- Sinonimie: Acest lucru indica faptul ca un computer nu poate intelege ca codificarea si programarea sunt acelasi lucru.
Bazele – si beneficiile – filtrarii colaborative
Sa exploram cum s-au dezvoltat pentru prima data acesti algoritmi. Prima iteratie de acum aproximativ opt ani a avut ca rezultat supraincarcarea prin posta electronica. Pentru a aborda acest aspect, au decis sa compare activitatea din documentele lor cu alte activitati ale altor oameni, sa traga niste profiluri si poate chiar sa ofere o recomandare bazata pe faptul ca lucrurile care imi plac sunt similare cu ceea ce le place alti utilizatori. Acest lucru a dus la filtrarea in colaborare, ceea ce folosesc eu.
Mai jos este un exemplu simplu de filtrare colaborativa:
In stanga diagramei este un utilizator care este activ in trei echipe. In fiecare dintre aceste trei echipe exista alti trei utilizatori activi, care sunt activi in patru echipe suplimentare. Daca parcurgem toate caile posibile doar pentru una dintre acele echipe – sa spunem echipa numarul trei – si continuam sa mergem la echipele din extrema dreapta, ajungem la 12 trasee posibile. Facem acest lucru pentru fiecare echipa si apoi venim cu o serie de clasamente.
filme porno in baie
www filme porno
film porno incest
filme porno online subtitrat
filme porno nxnx
filme porno gratis pussy
porno in limba romina
porno mama si fiica
filme porno cu sara jay
porno..com
porno chaturbate
porno taboo by primal
porno cu alina
napi porno
film porno cu grase
filme porno gratis cu mature
filne porno gratis
porno latina
porno cu tiganci
cele mai bune filme porno
Deoarece nu folosim nicio proprietate, este foarte usor sa scrieti interogarea Cypher:
Mai intai verificam ID-urile utilizatorilor care sunt activi intr-o echipa, care apar ca parametri pentru ca sunt folositi de GraphAware. GraphAware automatizeaza procesul, ruleaza interogarea si stocheaza rezultatele in Neo4j.
Acest cod poate fi modificat in functie de faptul daca utilizatorii au sau nu text comun, un oras comun sau alte asemanari. Sau daca o echipa este prea mare si nu adauga niciun membru suplimentar, va omite acea echipa din rezultatele recomandarilor. Putem efectua acelasi proces de cautare pentru retele.
Dar a merge 12 cai de fiecare data cand am vrut sa oferim o recomandare a fost destul de greu. Avem nevoie de o solutie mai buna, pe care am gasit-o cu filtrarea colaborativa bazata pe elemente:
Deoarece nu am vrut sa ne defectam utilizatorii solicitand in mod constant feedback, am folosit factori precum comentariile, contributiile si numarul de vizualizari platite pentru a obtine un rating intre unu si cinci, ceea ce vedeti mai sus. Dar daca vrem sa prezicem cat de mult ii va dori un utilizator echipei sale daca inca nu exista nicio activitate? Pentru a rezolva acest lucru, folosim asemanarea cosinusului ajustat:
Pentru aceasta, comparam evaluarile pe care utilizatorii le-au oferit doua echipe. De exemplu, utilizatorul din dreapta sus a evaluat prima echipa 3.7 si a treia echipa 2.6.
In continuare vom normaliza echipele gasind scorul mediu al tuturor utilizatorilor de pe echipe, apoi puteti calcula asemanari intre zero si unul. Pe baza rezultatului 0.87321, stiu ca prima echipa si a treia echipa sunt destul de asemanatoare.
Acum sa rulam algoritmul pentru a doua echipa si a treia echipa:
In continuare, combinam aceste informatii folosind o suma ponderata, asemanarea dintre acele echipe si evaluarile pe care un utilizator le ofera de fapt echipelor pentru a oferi o buna predictie a scorului de participare al acestuia:
Pe baza acestor informatii, scorul de participare al acestui utilizator este de 3,6. Daca faceti acest lucru pentru toate echipele din baza de date, puteti recomanda echipele cu cele mai mari 10 note. Veti observa, de asemenea, ca in acest model nu mai avem nevoie de partea dreapta – cei doi alti utilizatori. Deci, este cu adevarat o abordare bazata pe model, unde creezi mai intai modelul cu asemanari, apoi ai o abordare online in care folosesti acel model si incerci sa prezici foarte rapid aceste recomandari.
Mai jos este cum se creeaza o asemanare cu un arbore Neo4j si proceduri:
Aceasta va calcula acele asemanari pe care trebuie sa le actualizati din cand in cand, daca exista modificari de comportament.
In continuare, folosesc filtrarea colaborativa bazata pe elemente pentru a rula o formula care creeaza ratingul de mai sus de 3.6:
I-am intrebat pe utilizatorii nostri daca le-au placut recomandarile pe care le-am oferit si au facut acest lucru. Poate un pic prea mult, pentru ca au gasit, de asemenea, ca recomandarile aleatorii sunt potrivite cu profilurile lor. De asemenea, este important sa aratati intotdeauna contextul; daca anuntati utilizatorii ca furnizati o recomandare, ei vor incepe sa aiba mai multa incredere in dvs.
Part-Up nu crede doar in transparenta; o practicam de asemenea. Am postat totul pe Github: site-ul nostru web, API, instrumentul importator si motorul de recomandare.
Filtrare colaborativa: o necesitate, nu un lux
In concluzie, este necesara o filtrare colaborativa. Nu doriti sa oferiti utilizatorilor dvs. 450 de echipe; vrei sa le servesti doar una – si oamenii se asteapta cu adevarat la asta astazi.
Trebuie sa fie independent de domeniu, ceea ce inseamna ca trebuie sa gasesti o modalitate inteligenta de a compara alti utilizatori in loc sa te uiti doar la text. Ar trebui sa fie usor si personalizabil. GraphAware si Neo4j, impreuna cu o serie de alte instrumente open source ofera posibilitatea de a va dezvolta propriul sistem de recomandari.
Infrastructura si algoritmii trebuie sa fie scalabili si asigurati-va ca sistemul este un hibrid de MongoDB si Neo4j si ca aveti mai multi algoritmi adiacenti pentru a va asigura ca puteti oferi recomandari fiecarui tip de utilizator din baza de date. De asemenea, asigurati-va ca vizitati Part-Up; este un site web si o piata excelenta care vor schimba modul de lucru.
Despre autor
Maurits van der Goes, absolvent intern
Maurits van der Goes este un stagiar absolvent la Part-Up, o platforma online care ofera o modalitate pentru ca oamenii sa creeze si sa gestioneze echipe virtuale. Maurits lucreaza, de asemenea, la finalizarea studiilor sale la Universitatea de tehnologie Delft si este stagiar digital la RTL.








