Contexto: Sou um programador com alguma experiência (meio esquecida) em estatística de cursos da uni. Recentemente me deparei com http://akinator.com e passei algum tempo tentando fazê-lo falhar. E quem não era? :)
Eu decidi descobrir como isso poderia funcionar. Depois de pesquisar no Google e ler postagens de blog relacionadas e adicionar um pouco do meu conhecimento (limitado) ao mix resultante, crio o seguinte modelo (tenho certeza de que usarei a notação errada, por favor, não me mate por isso):
Existem assuntos (s) e perguntas (Q). O objetivo do preditor é selecionar o assunto S que tem a maior probabilidade posterior de ser o assunto em que o usuário está pensando, com perguntas e respostas coletadas até o momento.
Seja o jogo G um conjunto de perguntas e respostas dadas: .
Então o preditor está procurando por .
Anterior para sujeitos ( ), poderia ser apenas o número de vezes que o sujeito foi adivinhado, dividido pelo número total de jogos.
Assumindo que todas as respostas são independentes, poderíamos calcular a probabilidade do sujeito S, dado o jogo G da seguinte forma:
Poderíamos calcular o se mantivermos o controle de quais perguntas e respostas foram dadas quando os usados têm o assunto em questão:
Now, defines a probability distribution over subjects and when we need to select the next question we have to select the one for which the expected change in the entropy of this distribution is maximal:
I've tried to implement this and it works. But, obviously, as the number of subjects goes up, performance degrades due to the need to recalculate the after each move and calculate updated distribution for question selection.
I suspect that I simply have chosen the wrong model, being constrained by the limits of my knowledge. Or, maybe, there is an error in the math. Please enlighten me: what should I make myself familiar with, or how to change the predictor so that it could cope with millions of subjects and thousands of questions?