Kontext: Ich bin ein Programmierer mit etwas (halb vergessener) Erfahrung in der Statistik von Uni-Kursen. Kürzlich bin ich auf http://akinator.com gestoßen und habe einige Zeit damit verbracht, es zum Scheitern zu bringen. Und wer war das nicht? :)
Ich habe beschlossen, herauszufinden, wie es funktionieren könnte. Nachdem ich verwandte Blog-Beiträge gegoogelt und gelesen und einige meiner (begrenzten) Kenntnisse in die resultierende Mischung eingefügt habe, habe ich das folgende Modell (ich bin mir sicher, dass ich die falsche Schreibweise verwenden werde, bitte töte mich nicht dafür):
Es gibt Themen (S) und Fragen (Q). Ziel des Prädiktors ist es, das Subjekt S auszuwählen, bei dem die größte Wahrscheinlichkeit besteht, dass es das Subjekt ist, über das der Benutzer nachdenkt, angesichts der bisher gesammelten Fragen und Antworten.
Lassen Sie Spiel G eine Reihe von Fragen und Antworten sein: .
Dann sucht der Prädiktor nach .
Prior für Probanden ( ) kann nur die Anzahl der erratenen Probanden dividiert durch die Gesamtanzahl der Spiele sein.
Unter der Annahme, dass alle Antworten unabhängig sind, könnten wir die Wahrscheinlichkeit von Subjekt S bei gegebenem Spiel G wie folgt berechnen:
Wir könnten das berechnen , wenn wir nachverfolgen, welche Fragen und Antworten gegeben wurden, wenn die verwendeten zwar von gegebenem Thema:
Nun definiert eine Wahrscheinlichkeitsverteilung über Subjekte und wenn wir die nächste Frage auswählen müssen, müssen wir die auswählen, für die die erwartete Änderung der Entropie dieser Verteilung maximal ist:
Ich habe versucht, dies umzusetzen und es funktioniert. Mit zunehmender Anzahl von Probanden nimmt die Leistung jedoch offensichtlich ab, da das nach jeder Bewegung neu berechnet und die aktualisierte Verteilung P ( S | G ∨ { q j , a } ) für die Fragenauswahl berechnet werden muss .
Ich habe den Verdacht, dass ich einfach das falsche Modell gewählt habe, da ich an die Grenzen meines Wissens gebunden bin. Oder vielleicht liegt ein Fehler in der Mathematik vor. Bitte klären Sie mich auf: Womit sollte ich mich vertraut machen oder wie ich den Prädiktor so ändern kann, dass er Millionen von Themen und Tausende von Fragen bewältigen kann?
quelle
Antworten:
Dieses Spiel sieht aus wie 20 Fragen auf http://20q.net , die dem Ersteller zufolge auf einem neuronalen Netzwerk basieren. Hier ist ein Weg, ein solches Netzwerk zu strukturieren, ähnlich dem neuronalen Netzwerk, das in den Concept-Beschreibungsvektoren und im 20-Fragen-Spiel beschrieben ist .
Du hättest
0/1
dieno/yes
Antwort darstellt. Anfangs eingestellt auf0.5
Eingabeeinheiten für beantwortete Fragen werden auf 0 oder 1 gesetzt, und es wird davon ausgegangen, dass das neuronale Netz so trainiert wurde, dass Ausgabeeinheiten Ausgabewerte nahe 1 für Fragen ausgeben, bei denen eine Antwort mit "Ja" für eine Reihe vorhandener Antworten vorliegt.
In jeder Phase würden Sie die Frage auswählen, die
NN
am wenigsten sicher ist, dh, die entsprechende Ausgabeeinheit ist in der Nähe0.5
, die Frage stellen und die entsprechende Eingabeeinheit auf die Antwort setzen. Im letzten Schritt wählen Sie eine Ausgabeeinheit aus der Liste "Letzte Frage" mit dem Wert, der dem am nächsten kommt1
.Jedes Spiel mit 20 Fragen enthält 20 Datenpunkte, mit denen Sie die
NN
Gewichte mit Backpropagation aktualisieren können. Das heißt, Sie aktualisieren die Gewichte, um sicherzustellen, dass die Ausgaben des aktuellen neuronalen Netzwerks mit der richtigen Antwort übereinstimmen, wenn alle zuvor gestellten Fragen beantwortet wurden.quelle
Ich denke nicht, dass es sich wirklich um ein Klassifizierungsproblem handelt. 20 Fragen werden oft als Kompressionsproblem charakterisiert . Dies passt eigentlich besser zum letzten Teil Ihrer Frage, in dem Sie über Entropie sprechen.
Siehe Kapitel 5.7 ( Google books ) von
Cover, TM und Joy, AT (2006) Elemente der Informationstheorie
und auch Huffman-Codierung . Dieses Papier, das ich auf arXiv gefunden habe, könnte ebenfalls von Interesse sein.
Gill, JT und Wu, W. (2010) "Zwanzig Frage-Spiele enden immer mit Ja" http://arxiv.org/abs/1002.4907
Nehmen Sie der Einfachheit halber Ja / Nein-Fragen an (wohingegen akinator.com erlaubt, vielleicht erlaubt, weiß es nicht). Angenommen, jedes mögliche Thema (was akinator.com weiß) kann eindeutig durch eine Folge von Ja / Nein-Fragen und Antworten identifiziert werden - im Wesentlichen ein binärer Vektor.
Die gestellten Fragen (und ihre Antworten) definieren eine rekursive Unterteilung des Subjektraums. Diese Aufteilung entspricht ebenfalls einer Baumstruktur. Die inneren Eckpunkte des Baumes entsprechen Fragen, und die Blätter entsprechen Themen. Die Tiefe der Blätter entspricht genau der Anzahl der Fragen, die zur eindeutigen Identifizierung des Themas erforderlich sind. Sie können (trivial) jedes bekannte Thema identifizieren, indem Sie jede mögliche Frage stellen. Das ist nicht interessant, weil es möglicherweise Hunderte von Fragen gibt.
Der Zusammenhang mit der Huffman-Codierung besteht darin, dass sie (unter einem bestimmten Wahrscheinlichkeitsmodell) eine optimale Möglichkeit bietet, den Baum so zu konstruieren, dass die durchschnittliche Tiefe (fast) minimal ist. Mit anderen Worten, Sie erfahren, wie Sie die Reihenfolge der Fragen (Erstellen eines Baums) so gestalten, dass die Anzahl der Fragen, die Sie stellen müssen, im Durchschnitt gering ist. Es verwendet einen gierigen Ansatz.
Natürlich gibt es bei akinator.com noch mehr als das, aber die Grundidee ist, dass Sie sich das Problem in Form eines Baums vorstellen und versuchen können, die durchschnittliche Tiefe seiner Blätter zu minimieren.
quelle