Меня всегда удивляло, как приложение Akinator могло угадать персонажа, задав сразу несколько вопросов. Поэтому я задаюсь вопросом, какой алгоритм или метод позволяют это сделать? Есть ли имя для этого класса алгоритмов и где я могу узнать больше о них?
Какой алгоритм стоит за игрой Akinator?
Ответ 1
Да, есть имя для этого класса алгоритмов - он называется алгоритмы классификации в поле машинное обучение. Деревья принятия решений являются одним из примеров алгоритма классификации.
В этой проблеме классификации функции алгоритма являются ответами на вопрос.
Решение вопроса о том, какой вопрос следует задать, может быть выполнено различными способами - например, путем максимизации прогнозируемого (или среднего) entropy из следующего вопроса.
Ответ 2
Эта игра иногда известна как 20 вопросов. На SO есть некоторые вопросы о SO, например:
Ответ 3
Основные характеристики алгоритма:
- Self-просвещение
- Ошибки-снисходительность
- Интеллектуальная система следующего вопроса выбирает
Модель игрового алгоритма Akinator называется "Экспертная система, основанная на нечеткой логике".
И это НЕ деревья принятия решений, потому что у него нет ошибок - снисходительность.
Я писал один раз на С#, вы можете найти его по ссылке: https://github.com/ukushu/AkinatorEngine
Ответ 4
Я думаю, что это похоже на экспертную систему с структурой B-Tree.
Ответ 5
Я не знаю, какой именно алгоритм использует Akinator, но здесь я поместил в open-source алгоритм, который обеспечивает тот же эффект: https://github.com/srogatch/ProbQA.
Обычно мы используем куб из N(Questions)
умноженные на N(Answer Options)
умноженные на N(Targets)
, см. Https://github.com/srogatch/ProbQA/blob/master/ProbQA/PqaCore/CpuEngine.decl.h.
Мы обучаем куб, применяя байесовскую формулу с предположением независимости, см. Https://github.com/srogatch/ProbQA/blob/master/ProbQA/PqaCore/CEEvalQsSubtaskConsider.cpp
Поскольку код сильно оптимизирован для AVX2 и многопоточности, его может быть сложно прочитать. Может быть проще прочитать код CUDA для того же: https://github.com/srogatch/ProbQA/blob/master/ProbQA/PqaCore/CudaEngineGpu.cu
Применение этого алгоритма также доступно в качестве веб-сайта, чтобы рекомендовать игру.