Bối cảnh: Tôi là một lập trình viên với một số kinh nghiệm (bị lãng quên một nửa) trong thống kê từ các khóa học của uni. Gần đây tôi tình cờ tìm thấy http://akinator.com và dành thời gian cố gắng để làm cho nó thất bại. Và ai đã không? :)
Tôi đã quyết định tìm hiểu làm thế nào nó có thể hoạt động. Sau khi googling và đọc các bài đăng trên blog có liên quan và thêm một số kiến thức (hạn chế) của tôi vào kết quả, tôi đưa ra mô hình sau (Tôi chắc chắn rằng tôi sẽ sử dụng ký hiệu sai, xin đừng giết tôi vì điều đó):
Có môn (S) và câu hỏi (Q). Mục tiêu của người dự đoán là chọn đối tượng S có xác suất phân cấp lớn nhất là chủ đề mà người dùng đang nghĩ đến, đưa ra các câu hỏi và câu trả lời được thu thập cho đến nay.
Đặt trò chơi G là một tập hợp các câu hỏi và câu trả lời được đưa ra: .
Sau đó, người dự đoán đang tìm kiếm .
Ưu tiên cho các đối tượng ( ) có thể chỉ là số lần chủ đề đã được đoán chia cho tổng số trò chơi.
Giả định rằng tất cả các câu trả lời là độc lập, chúng tôi có thể tính toán khả năng chủ đề S đưa ra trò chơi G như vậy:
Chúng ta có thể tính nếu chúng ta theo dõi những câu hỏi và câu trả lời nào được đưa ra khi sử dụng có mặc dù chủ đề đã cho:
Bây giờ, xác định phân phối xác suất cho các đối tượng và khi chúng ta cần chọn câu hỏi tiếp theo, chúng ta phải chọn câu hỏi mà sự thay đổi dự kiến trong entropy của phân phối này là tối đa:
Tôi đã cố gắng thực hiện điều này và nó hoạt động. Nhưng, rõ ràng, khi số lượng đối tượng tăng lên, hiệu suất giảm do nhu cầu tính toán lại sau mỗi lần di chuyển và tính toán phân phối cập nhật cho lựa chọn câu hỏi.
Tôi nghi ngờ rằng tôi chỉ đơn giản là đã chọn sai mô hình, bị hạn chế bởi giới hạn kiến thức của tôi. Hoặc, có thể, có một lỗi trong toán học. Xin hãy soi sáng cho tôi: tôi nên làm quen với điều gì, hoặc làm thế nào để thay đổi người dự đoán để nó có thể đối phó với hàng triệu đối tượng và hàng ngàn câu hỏi?