Показать сообщение отдельно
  #22  
Старый 13.03.2013, 15:58
Аватар для VPolevoj
VPolevoj VPolevoj вне форума
эрудит
 
Регистрация: 02.09.2009
Адрес: Санкт-Петербург
Сообщения: 1,185
По умолчанию

Alexander, в программе акинатор, да и в моей программе Незнайка, интересен не процесс отгадывания путем последовательных вопросов, а процесс обучения программы - ситуация, когда загаданного слова программа не знает, и ей нужно это новое для неё слово запомнить и привязать к этому новому слову все имеющиеся у неё в базе вопросы.

Как мы при этом ведем отбор: дихотомически - делением на два, или используя нечеткие ответы (пять или больше вариантов) - это не важно, хотя, разумеется, пять вариантов ответов круче, чем два! Но принципиально это ситуацию не меняет.

Есть массив слов - понятий, и есть свойства этих предметов - слов и понятий, которые программа узнает от нас путем ответов на вопросы.

Фактически у нас получаются два вектора: с одной стороны слова, с другой - вопросы и ответы на них. И каждое слово - понятие - по-разному вписывается в матрицу вопросов-ответов. И, понятное дело, что вроде бы программе нужно при внесении в свою память нового слова-понятия попросить человека соотнести это новое слово СО ВСЕМИ УЖЕ ИМЕЮЩИМИСЯ в её базе вопросами, что, сам понимаешь, довольно затруднительно (вряд ли кто на такое согласится добровольно, разве что программе пойти на хитрость, и время от времени задавать людям вопросы, на которые у неё самой нет четких ответов - и таким образом насобирать необходимую для себя статистику).

Далее, как ты совершенно правильно пишешь, встает вопрос с упорядочиванием вопросов по их значимости с точки зрения эффективности отбора. Есть вопросы, которые будучи заданы, резко и четко разделяют весь массив понятий примерно на две равные части (пример: Это живое?) - а это и есть самый эффективный алгоритм поиска нужного значения: 17 последовательно заданных вопросов разделяют 131000 значений, 18 вопросов - 262000, 19 - 524000, а 20 вопросов охватывают более миллиона самостоятельных понятий (столько у нас - у человечества - просто нет).

Но для этого нужно чтобы каждый следующий вопрос разделял бы оставшееся подмножество терминов на примерно равные части - что не всегда возможно. По ходу мы вынуждены задавать уточняющие вопросы, или даже возможны зацикливания и прочие алгоритмические глупости (которые пока не разрешены, насколько мне известно, в подобных - самообучающихся системах).

И зря Alex говорит, что подобные алгоритмы не имеют отношения к работе нашего мозга - имеют, и самое непосредственное. Например, наше зрение занято примерно тем же, чем занимаются наши программы - акинатор и Незнайка - задают последовательные вопросы и получают последовательные ответы для того чтобы распознать все попадающие в поле зрения объекты и описать всю сцену целиком - на это у нашего мозга затрачивается примерно 1/30 секунды.

Я в своей программе помимо окончательного ответа, сделал еще и вывод промежуточных ответов - поскольку она делалась как игрушка для детей, а дети не любят когда их долго-долго о чем-то спрашивают, а потом выдают правильный ответ - и выигрывают у них, а они любят когда они сами чаще выигрывают - когда противник чаще ошибается и выставляет себя дураком по отношению к ним самим. То есть, моя задача была сложнее - мне нужно помимо матрицы вопросов-ответов выдавать еще и промежуточные (часто заведомо неправильные) ответы, как некоторую стадию приближения к правильному, поскольку от вопроса к вопросу круг возможных вариантов ответов постоянно сужается. Чтобы игрок - ребенок - находился бы постоянно в состоянии радостного ожидания, а не сухой констатации факта, что программа умнее его (это как бы и без того подразумевается и ожидается).

Мой Незнайка на каждом этапе игры как бы дает свой окончательный вариант ответа - он оказывается неправильным, тогда он задает следующий - уточняющий вопрос - и на основе ответа на него делает новое предположение, и так далее.

Но правильная система, способная к настоящему самообучению, на мой взгляд, должна вести себя по-другому. Она должна понимать, что при внесении в её память нового слова-понятия, на самом деле в её матрице формируется целый блок "белых пятен", и её обучение не должно заканчиваться определением вопросов и ответов лишь для этого нового слова - а требуется протестировать все появившиеся "белые пятна" на предмет их реальности - существуют ли для них слова-понятия или нет, а если существуют, то какие вопросы-ответы им соответствуют (не подойдут ли для их выявления уже имеющиеся у неё в памяти вопросы-ответы, или нужны новые вопросы), и так далее. Но в таком случае для машины нужен будет специальный человек, который бы постоянно отвечал на её бесконечные вопросы.

Поиграть с самообучающейся программой интересно, на мой взгляд, именно с самого начала, когда видно как постепенно наполняется её база знаний, как у неё складывается структура понятий, как быстро истощается фантазия загадывателей и т.д. Но заниматься рутинной работой по обучению этой программы не интересно (на мой взгляд) - вот почему я попытался перевести этот процесс в рамки игры, причем, для детей, для которых это и без того интересно.
Ответить с цитированием