Contesto: sono un programmatore con qualche esperienza (quasi dimenticata) nelle statistiche dei corsi uni. Di recente mi sono imbattuto in http://akinator.com e ho trascorso un po 'di tempo a cercare di farlo fallire. E chi non lo era? :)
Ho deciso di scoprire come potrebbe funzionare. Dopo aver cercato su Google e letto post di blog correlati e aggiunto alcune delle mie (limitate) conoscenze nel mix risultante, mi viene in mente il seguente modello (sono sicuro che userò la notazione sbagliata, per favore non uccidermi per quello):
Ci sono soggetti (S) e domande (Q). Lo scopo del predittore è selezionare il soggetto S che ha la maggiore probabilità a posteriori di essere il soggetto a cui l'utente sta pensando, date le domande e le risposte raccolte finora.
Lascia che il gioco G sia un insieme di domande e risposte fornite: .
Quindi il predittore sta cercando .
Prima per i soggetti ( ) potrebbe essere solo il numero di volte che il soggetto è stato indovinato diviso per il numero totale di giochi.
Partendo dal presupposto che tutte le risposte sono indipendenti, potremmo calcolare la probabilità del soggetto S dato il gioco G in questo modo:
Potremmo calcolare la se teniamo traccia di quali domande e risposte sono state fornite quando gli utenti hanno pensato a un determinato argomento:
Ora, definisce una distribuzione di probabilità sui soggetti e quando dobbiamo selezionare la domanda successiva dobbiamo selezionare quella per cui il cambiamento atteso nell'entropia di questa distribuzione è massimo:
Ho provato a implementarlo e funziona. Ma, ovviamente, quando il numero di soggetti aumenta, le prestazioni diminuiscono a causa della necessità di ricalcolare la dopo ogni spostamento e calcolare la distribuzione aggiornata P ( S | G ∨ { q j , a } ) per la selezione della domanda .
Sospetto di aver semplicemente scelto il modello sbagliato, essendo vincolato dai limiti della mia conoscenza. O, forse, c'è un errore in matematica. Per favore, mi illumini: cosa dovrei farmi familiarizzare o come cambiare il predittore in modo che possa affrontare milioni di argomenti e migliaia di domande?