Gå til innhold

CD-anbefalings program / skript


Anbefalte innlegg

(Denne tråden er ment å behandle den TEKNISKE delen, for brukerspørsmål, gå hit. )

 

Hepp, godtfolk!

 

Jeg og Torbjørn driver for tiden og utvikler et program / skript som tar sikte på å anbefale CD'er til folk, basert på hva dem allerede har av kjøpt musikk

 

I den forbindelse velger jeg (under tvil, og med sterke reserveringer) å være optimistisk, da skjelettet til databasen (PostgreSQL 7.4.1), samt datastrukturen, så godt som (~40%) er oppe og kjører nu.

 

Vi snakker da om at å legge inn 100 CD'er for 100 brukere (i datastrukturen, 10000 CD'er), samt finne de 10 mest kjøpte (og annet) tar 22 sekunder uten noen form for optimisering.

 

Å legge inn i databasen tar noe lenger tid (*host*), da bulk-overføring og annen optimisering ikke har blitt foretatt enda.

 

Fremover kommer jeg til å drive med optimisering, testing, innlegging av muligheter for debugging / tracing / logging, o.a.

Endret av DrDoogie
Lenke til kommentar
Videoannonse
Annonse

Poster en kort oppdatering for eventuelle som lurer på hvordan det går.

 

Har gått igjennom hele freedb sin database (som har har 1.3 Millioner cd'er) for første gang nå, og har forkastet 35% av innholdet med enkel case-insensitive sammenligning av entries + noe "drit i entries som har feil".

Står da igjen med over 830K cd'er, som kan være greit nok.

 

Disse cd'ene har da blitt lagt inn i en database (PostgreSQL), hvor jeg i første rekke (versjon 0.1 av programmet) vil begrense meg til enkel sammenligning med brukernes cd'er.

 

Spørring (enkel) mot databasen har blitt kjapt testet, og det ser foreløpig brukbart ut.

 

For å oppsummere, så er jeg da ferdig med de 90% av arbeidet som tar 90% av tiden, og går over til de 10% av arbeidet som også tar 90% - med å knytte ting isammen, teste og debugge.

 

Vi er i rute, med andre ord.

Endret av DrDoogie
Lenke til kommentar
  • 2 uker senere...

Hva om folk synes halvparten av de de har kjøpt er noe dritt? For en stund siden var det en site som het Movie Critic, der man kunne gi forskjellige filmer karakter, og så sammenliknet den med karakterene andre hadde gitt, og anbefalte filmer utfra det. Den ble svært nøyaktig etter hvert, og jeg kjøpte aldri filmer uten å ha sjekket hvordan de slo ut der først. Desverre la de plutselig ned.

 

Uansett, om dette skal ha noen særlig nytte, tror jeg det må måles utfra hvor godt folk liker musikken, ikke om de har kjøpt platen.

Lenke til kommentar
Hva om folk synes halvparten av de de har kjøpt er noe dritt?

...

Uansett, om dette skal ha noen særlig nytte, tror jeg det må måles utfra hvor godt folk liker musikken, ikke om de har kjøpt platen.

 

Poster litt uforståelig kaudervelsk (er overtrøtt nå, etter å ha endelig begynt å spore opp en bøgg):

drdoogie@skrotnisse:/usr/local/apache2/cgi-bin/cddb> cat /temp/perl/cd_recommend/triggers/trigger_create_user_table | sed -e 's/\t/        /'
--AFTER
create or replace function create_table_on_insert_user () returns trigger as '
declare
       a_var varchar (200);
begin
       --creates the user\'s table of cds
       a_var := ''create table "''
       || new.username
       || ''" ( cd varchar unique not null, ''
       || '' cd_vote smallint default null, ''
       || '' artistcd_vote smallint default null, ''
       || '' primary key (cd)'';
       execute a_var;
return new;
end;

' language 'plpgsql';

create trigger after_insert_into_users after insert on users for each row execute procedure create_table_on_insert_user ();

 

Dette er da brukerens tabell over hvilke cd'er han har.

Som dere ser (eller ikke ser, whatever. *trøtt nå*), så er det der to felter for "vote", hvor man kan rankere et album relativt til samlingen sin, og relativt til cd'ene av samme artist som man har.

 

Eksempelvis ville jeg ha stemt (fra 1-7, tenker jeg) på cden Substrata av Biosphere med stemmene 5, 6.

 

Altså at jeg ville sagt at plata Substrata fortjente stemmen 5 sett i forhold til kvaliteten vurdert opp mot samlinga mi, og 6 vurdert opp mot de andre cd'ene jeg har av Biosphere (som i mitt tilfelle er Patashnik, Cirque, og Microgravity).

 

Sove nå.

Endret av DrDoogie
Lenke til kommentar

Liten oppdatering:

 

Det er et par problemer med Apache, og dette skriptet blir derfor noe forsinket.

 

Problemene ser foreløpig ut til å bestå av følgende:

  • Apache forker hver bruker sin session (eller noe), og har man da 10 MiB med data, blir ytelsen ræva. Multitråding må implementeres (tror jeg).
  • Graphen blir lastet ved hver bruker sin session, istedenfor å deles mellom alle brukerne. Dette må fikses slik at data deles mellom alle sessionene

Jobber med saken, er det noen som har tips, så er det bare å komme med dem.

Lenke til kommentar
Altså at jeg ville sagt at plata Substrata fortjente stemmen 5 sett i forhold til kvaliteten vurdert opp mot samlinga mi, og 6 vurdert opp mot de andre cd'ene jeg har av Biosphere (som i mitt tilfelle er Patashnik, Cirque, og Microgravity).

Det høres redundant ut. Hvorfor ikke bare gi alle platene en karakter, som sier hvor godt du liker den? Om du liker en gruppe veldig godt, vil alle få relativt høy karakter, men med plass til litt nyanser.

 

Et viktig poeng Movie Critic hadde fått med seg, var at vi har mange nyanser av bra, men hvis det er dårligere, grupperer vi gjerne bare i f.eks. ok, middelmådig, dritt og sinnsykt dritt. De hadde en skala fra 1 - 13, der bra så vidt jeg husker var 5.

 

Ser man på IMDB, ligger f.eks. omtrent alle karakterer mellom 6 og 8, er de lavere, er filmene som regel veldig dårlige, og er de bedre, er de vanligvis veldig bra. Det gjelder altså å forsøke å få brukeren til å bruke en større del av skalaen, ved å gi hint om hvilken karakter de forskjellige meningene bør få.

Endret av tvangsgreie
Lenke til kommentar

Det høres redundant ut. Hvorfor ikke bare gi alle platene en karakter, som sier hvor godt du liker den? Om du liker en gruppe veldig godt, vil alle få relativt høy karakter, men med plass til litt nyanser.

 

Det kan jeg være enig i.

 

Foreløpig ser jeg det da for meg slik at det med stemming i forhold til gruppe kan være mest aktuellt for avanserte brukere. Og at jeg da deler brukerne opp i flere grupper, hvor eksempelvis de "avanserte" får tilgang til litt mer funksjonalitet med betingelsen av at dem kommer med mer feedback (avstemming).

 

Et viktig poeng Movie Critic hadde fått med seg, var at vi har mange nyanser av bra, men hvis det er dårligere, grupperer vi gjerne bare i f.eks. ok, middelmådig, dritt og sinnsykt dritt. De hadde en skala fra 1 - 13, der bra så vidt jeg husker var 5.

...

Det gjelder altså å forsøke å få brukeren til å bruke en større del av skalaen, ved å gi hint om hvilken karakter de forskjellige meningene bør få.

 

Det høres interessant ut. Kan du si mer om dette, altså psykologien i valg av alternativer i en tallskala?

 

Amazon bruker eksempelvis 1-5, men det synes jeg blir for lite. Mener selv 1-7 (eller 0-6, alt ettersom) kan være greit. Blir det for mange valg (1-13 er for mange, etter mitt syn), kan folk "blingse litt", og få problemer med å vurdere om dem skal gi 8 eller 9 på en plate.

 

Ser man på IMDB, ligger f.eks. omtrent alle karakterer mellom 6 og 8, er de lavere, er filmene som regel veldig dårlige, og er de bedre, er de vanligvis veldig bra.

 

Jeg vet ikke hva IMDB er, har du en link?

 

Ellers ønsker jeg tilbakemeldinger på dette.

Lenke til kommentar

Jeg klipper og limer litt fra PM:

 

Slik jeg ser det hadde det vært uvurdelig å inkludert to parametere til skivene; ett for "terningkast" og ett for "grad av viktighet"  På den måten vil man kunne både kunne skille ut de skivene som er knallbra fra de som er middelmådige, og gitt det en kontekst med hvor essensielle de er/var (viktig for kred-horer).   

 

Eksempelvis:  David Sylvian - Secrets of the Beehive er en klar sekser på terningen - den er utrolig bra. Samtidig er den ikke akkurat grensesprengende for sin sjanger selv om det udiskutabelt er hans viktigste skive.   

 

Pop Group - Y er litt annerledes i det at den ikke fortjener mer enn en femmer, samtidig som den (slik jeg ser det) er temmelig essensiell for sin tid.   

 

Dette bør kunne reflekteres gjennom to skalaer, på en eller annen måte.

 

Om man bør følge terningkast 1-6, IMDB sitt 1-10-system eller noe helt annet er jeg usikker på. Det vil være naturlig å anta at noen utgivelser blir stemt på kun et fåtall ganger, mens andre vil stemmes frem av flere. Forskjellige karaktersystemer passer til forskjellige databaser, men jeg tror kanskje at jeg ville foretrukket noe i nærheten av 1-6-rangering. Dette av den enkle årsak at det forenkler prosessen noe i forhold til mer avanserte varianter (skal jeg tenke egoistisk hadde 1-5 passet best med tanke på hvordan rating-system i mitt musikkbibliotek er lagt opp..)

 

Musikkbladet MOJO kjører dette regimet:

 

***** - An out-and-out MOJO classic

**** - Splendid! The best of its kind

*** - Stands out from the crowd. Well worth checking out

** - A good, solid effort, but breaking no new ground

* - Disappointing. For purists and collectors only

( ) - A Titanic letdown. Best avoided

 

Det samme systemet brukes også av Q og flere andre. Et greit system, ulempen er at det ikke tillater særlig store nyanser mellom skiver. Fordelen med dette er at man slipper å mokle veldig mye med å sette skiver opp mot hverandre, man plasserer de heller i en stor kategori (så kan man jo jobbe panegyrisk for de senere).

Lenke til kommentar
Det høres interessant ut. Kan du si mer om dette, altså psykologien i valg av alternativer i en tallskala?

Egentlig ikke, det er bare noe jeg har irritert meg litt over, siden det gjør at det aldri blir mulig å få fram nyanser, med mindre man bruker veldig lang skala.

 

1-13 var akkurat passe. Selve poengene ble ikke vist til brukeren, bare en skala med nivåer som virkelig dårlig, dårlig, ok, bra, veldig bra, perfekt, og så var det et par mellomting mellom hver av de navngitte nivåene, slik at det var plass til litt ekstra nyanser. Man har også gjerne en oppfatning av at en plate f.eks. er litt bedre enn en plate, men litt dårligere enn en annen, og hvis man viser en av platene for hvert av nivåene som har blitt brukt før, er det ikke noe problem å gjøre nytte av en skala med høy oppløsning.

 

IMDB er International Movie Database, og har den kryptiske adressen www.imdb.com. At noen ikke har hørt om den overrasker meg like mye hver gang. Jeg ser eller kjøper aldri en film uten å se hvordan den ligger ann der først, men jeg må riktignok justere litt for genre.Drama/romance skal ha veldig høy score for at jeg skal gidde å se den, mens jeg er nokså altetende når det gjelder scifi.

Endret av tvangsgreie
Lenke til kommentar

Hm. Ok...

 

Det kan nok argumenteres for å la skalaen for "generell kvalitet" på plata gå fra og med 1 til og med 10 (1-10), til forskjell fra 1-7.

Med mindre det er vektige argumenter mot det, blir det implementert.

 

Når det gjelder skalaen for "spesifikk kvalitet", altså målt opp mot noe spesifikt (i mitt eksempel, andre utgaver av samme artist), lurer jeg her på hva som er best. Bare ganske enkelt 1-10?

Lenke til kommentar

Jeg synes du skal glemme tallene, og i stedet finne ut hvilke mentale "graderinger" folk gjør av platene sine. Hvor nøyaktig må den være for at man kan si at en plate er omtrent like god som en annen, men litt bedre enn en annen, uten å egentlig heller ville plassere den "mellom" de to andre. Tallene kan du sette på etterpå utfra hvordan det passer med programmet. Kanskje vil det f.eks. være lettere å gjøre beregningene dersom du lar skalaen gå fra 1 - 100, men bare bruker noen få av tallene mellom (elendig = 1, dårlig = 25, middelmådig = 40, f.eks.) i skjemaet brukeren ser. Dessuten vil det da være veldig lett å øke oppløsningen på graderingen seinere, det er bare å legge til flere alternativer i skjemaet mellom de eksisterende. Evt. kan det være en "ekspert"-modus.

Lenke til kommentar
hvis ikke tallene synes, er det et fett hvordan skalaen ser ut. kan bruke desmialtall mellom 1 og 2 for den sags skyld hvis man vil.

Joa. Everyone's got an opinion, ser det ut til.

 

I mangel av opplysninger om hvordan folk rent psykologisk forholder seg til forskjellige tallskalaer, tror jeg da jeg like greit bare kjører på min mening, altså 1-7.

 

EOD.

Lenke til kommentar
Liten oppdatering:

 

Det er et par problemer med Apache, og dette skriptet blir derfor noe forsinket.

 

Problemene ser foreløpig ut til å bestå av følgende:


  •  
     
  • Apache forker hver bruker sin session (eller noe), og har man da 10 MiB med data, blir ytelsen ræva. Multitråding må implementeres (tror jeg).
     
     
  • Graphen blir lastet ved hver bruker sin session, istedenfor å deles mellom alle brukerne. Dette må fikses slik at data deles mellom alle sessionene
     
     

Jobber med saken, er det noen som har tips, så er det bare å komme med dem.

Apache bruker thread pooling, noe som er den mest skalerbare og effektive måten å utføre slike oppgaver på. Den graf-saken du snakker om vet jeg ikke noe om, men en eller annen form for caching av grafer som matcher et visst dataset hadde kanskje vært en ide.

 

Edit: Forresten så bruker imdb.com og flere andre steder som selger filmer, cd'er & lignende åndsverk slike ekspertsystem som dette. Det er ikke umulig at du kunne klart å selge løsningen din videre når den en gang blir ferdig.

Endret av Oracel
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...