Classificatore Akinator.com e Naive Bayes


12

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: .{q1,a1},{q2,a2}...{qn,an}

Quindi il predittore sta cercando .P(S|G)=P(G|S)P(S)P(G)

Prima per i soggetti ( ) potrebbe essere solo il numero di volte che il soggetto è stato indovinato diviso per il numero totale di giochi.P(S)

Partendo dal presupposto che tutte le risposte sono indipendenti, potremmo calcolare la probabilità del soggetto S dato il gioco G in questo modo:

P(G|S)=i=1..nP({qi,ai}|S)

Potremmo calcolare la se teniamo traccia di quali domande e risposte sono state fornite quando gli utenti hanno pensato a un determinato argomento:P({qi,ai}|S)

P(q,a|S)=answer a was given to question q in the game when S was the subjectnumber of times q was asked in the games involving S

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:P(S|G)

argmaxj(H[P(S|G)]a=yes,no,maybe...H[P(S|G{qj,a})]

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 .P(S|G)P(S|G{qj,a})

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?


4
Dubito che sia un Naive Bayes, piuttosto un albero decisionale esteso ogni volta che non riesce a riconoscere qualcuno.

1
Tale albero decisionale non sarebbe troppo ingombrante da aggiornare? Inoltre, non vedo alcun modo semplice per rendere conto delle risposte erroneamente sbagliate / errori onesti e comunque ottenerlo alla fine con l'albero delle decisioni
ADEpt

5
Sembra una reincarnazione del ventenne indovinello di 20 domande, ora su 20q.net . Ecco una spiegazione popolare su come funziona mentalfloss.com/blogs/archives/13725
Yaroslav Bulatov

5
Mi scusi, ma penso che usare "intelligenza artificiale" e "reti neurali" senza alcun contesto contenga una spiegazione. E non riesco a vedere come si possa usare la rete neurale per questo tipo di cose - quale sarebbe la funzione di output, ad esempio?
AD

Ciao @ADEpt, è passato un po 'di tempo da quando è stata posta la domanda, ma puoi condividere il codice sorgente per l'implementazione che hai avuto lì?
prikha,

Risposte:


10

Questo gioco è simile a 20 domande su http://20q.net , che il creatore riferisce si basa su una rete neurale. Ecco un modo per strutturare tale rete, simile alla rete neurale descritta nei vettori di descrizione dei concetti e nel gioco a 20 domande .

Avresti

  1. Un numero fisso di domande, con alcune domande contrassegnate come domande "finali".
  2. Un'unità di input per domanda, dove 0/1rappresenta la no/yesrisposta. Inizialmente impostato su0.5
  3. Un'unità di output per domanda, sigmoid schiacciata nell'intervallo 0..1
  4. Strato nascosto che collega tutte le unità di input a tutte le unità di output.

Le unità di input per le domande a cui è stata data risposta sono impostate su 0 o 1 e si presume che la rete neurale sia stata addestrata per rendere le unità di output con valori di output vicini a 1 per le domande a cui è stata data la risposta "Sì" a una serie di risposte esistenti.

Ad ogni fase sceglieresti la domanda che NNè la meno sicura, ovvero, l'unità di uscita corrispondente è vicina 0.5, fai la domanda e imposti la corrispondente unità di input sulla risposta. Nell'ultima fase si seleziona un'unità di output dall'elenco "domanda finale" con il valore più vicino a 1.

Ogni gioco di 20 domande fornisce 20 punti dati che è possibile utilizzare per aggiornare NNi pesi con la retro-propagazione, vale a dire che si aggiornano i pesi per fare in modo che gli output della rete neurale corrente corrispondano alla vera risposta data tutte le domande precedenti poste.


7

Non credo sia davvero un problema di classificazione. 20 domande sono spesso caratterizzate come un problema di compressione . Questo in realtà corrisponde meglio con l'ultima parte della tua domanda in cui parli di entropia.

Vedi capitolo 5.7 ( Google books ) di

Cover, TM and Joy, AT (2006) Elements of Information Theory

e anche la codifica di Huffman . Anche questo documento che ho trovato su arXiv potrebbe essere interessante.

Gill, JT e Wu, W. (2010) "I venti giochi di domande finiscono sempre con Sì" http://arxiv.org/abs/1002.4907

Per semplicità, prendi domande sì / no (mentre akinator.com lo consente forse, non lo so). Supponiamo che ogni possibile argomento (cosa sa akinator.com) possa essere identificato in modo univoco da una sequenza di domande e risposte sì / no, essenzialmente un vettore binario.

Le domande che vengono poste (e le loro risposte) definiscono una suddivisione ricorsiva dello spazio dei soggetti. Questo partizionamento corrisponde anche a una struttura ad albero. I vertici interni dell'albero corrispondono alle domande e le foglie corrispondono ai soggetti. La profondità delle foglie è esattamente il numero di domande richieste per identificare in modo univoco l'argomento. Puoi (banalmente) identificare ogni argomento noto ponendo ogni possibile domanda. Non è interessante perché ci sono potenzialmente centinaia di domande.

La connessione con la codifica Huffman è che fornisce un modo ottimale (secondo un certo modello probabilistico) per costruire l'albero in modo che la profondità media sia (quasi) minima. In altre parole, ti spiega come organizzare la sequenza di domande (costruisci un albero) in modo che il numero di domande che devi porre sia mediamente piccolo. Usa un approccio avido.

Ovviamente c'è di più in akinator.com di questo, ma l'idea di base è che puoi pensare al problema in termini di un albero e cercare di minimizzare la profondità media delle sue foglie.


È un buon inizio, ma penso che ci sia qualcosa di più nel problema. Ad esempio: come ottengono le risposte alle domande? Presumibilmente usano le risposte fornite dai giocatori precedenti (un problema di apprendimento di rinforzo), nel qual caso affrontiamo il compromesso di scegliere una domanda che (a) risolve il problema per il giocatore attuale e (b) fornisce informazioni per i giocatori futuri.
Simon Byrne,

A prima vista, la capacità di tracciare un'analogia tra 20 domande e la codifica di Huffman dipende dalla capacità di porre "domande sulla distanza". Cioè, invece di "Il tuo personaggio è mai stato nello spazio?" stiamo ponendo domande "coperte" come "È mai stato nello spazio, o è un maschio, o è calvo, o è stato in un film, o ... (100500 altre opzioni)?" Ho ragione? In tal caso, dovrei probabilmente modificare la mia domanda per chiarire che sono interessato alla varietà "chiedi uno per uno"
ADEpt

i0

@vqv: Re: "Non penso che sia davvero un problema di classificazione. 20 domande sono spesso caratterizzate da un problema di compressione." L'inferenza statistica e la compressione delle informazioni non sono direttamente correlate / lo stesso problema?
Yang,

@Yang Ti riferisci all'argomento di Jorma Rissannen? Inferenza statistica e compressione delle informazioni fanno entrambi uso di modelli probabilistici per descrivere l'incertezza, tuttavia le loro prospettive e quelle se i ricercatori in quelle aree sono generalmente molto diversi. Ciò che intendo dire sopra è che 20 domande possono essere formulate in modo più naturale come un problema di compressione (in particolare, codice sorgente) piuttosto che un problema di classificazione. ... continua sotto
vqv
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.