mardi 15 septembre 2020

How to evaluate a Humanized Music Shuffling Algorithm?

Suppose, we have a list of songs, let's say 100 songs, and we need to shuffle them such that we can get the ordering of songs (playlist) that looks random to humans.

Motivation Example :- https://engineering.atspotify.com/2014/02/28/how-to-shuffle-songs/

        Basically we want more humanized random shuffling algorithm

Now let's say I have an algorithm that does this smart shuffle (according to me), Now I want to evaluate my algorithm. How can I evaluate my algorithm?

Detailed Explanation of Algorithm and evaluation methods I could come up with.

so we need to evaluate how good our pseudo-random (pseudo because my algorithm is not purely random, It form playlist that looks random to human) algorithm is? so for ex:

                    p1 :- m1 m2 m2 m1 m3 m4 m5 m6 m6 
                    p2 :- m1 m2 m3 m4 m2 m5 m6 m1 m2
                    
                    so p1 is bad (should have low score on our evalutaion matrix) because it 
                    does not look random to human
                        and
                    p2 is relatively better 
                    
                    
            

Features on which I think we need to evaluate

  1. Better be uniformly distributed (http://www.randomwalking.com/cms/cmsfiles/mp3_shuffle.pdf):- so if we do not allow repeating then we don't need it means we will have n songs and playlist contain exactly n songs each exactly once but we allow playlist size to be m (>n) then we need to address this average difference between positions of same song in a playlist should be near to n/m;

  2. test for auto-correlation (http://www.randomwalking.com/cms/cmsfiles/mp3_shuffle.pdf) : playlist should not be correlated means if last 50 songs is somehow correlated to first 50 songs then our algorithm not ideal as it is supposed to be random.

  3. Quality estimation (most important) :- How much random (acc. to human) is your algorithm?

Solutions I could come up with:-

  1. uniformly distributed(https://www.eg.bucknell.edu/~xmeng/Course/CS6337/Note/master/node43.html) :- we could use variation of chi-square test

                 x[i] = (  abs(( o[i] - e[i] )) / e[i]] );
    
  2. test for auto-correlation (https://machinelearningmastery.com/gentle-introduction-autocorrelation-partial-autocorrelation/):- we could use auto-correlation and partial auto correlation

  3. Quality estimation :- Till now I don't know how to do it? And I need suggestions mainly on this.

The Best Solution I could come up with is :-
so we will have a list of 100 songs and we will shuffle it with our algorithm and then ask user to judge it on 1-10 scale

Imp :- user will judge on the randomness he/she perceived, not on how much he/she liked the songs in the playlist

ex: list after shuffling with an algorithm - l1

I listened to all 100 songs and after every 10 songs i will rate previous 10 songs on 1-10 scale

let it be :- 5 8 2 6 4 7 8 5 8 9

Then we can take its average and get the overall rating of playlist

So If you guys can help me with ways to do quality estimation that would be very helpful.

If you have more features on which I should try to evaluate algorithm or better ways to do test for correlation and uniform distribution, please tell.




Aucun commentaire:

Enregistrer un commentaire