Pull to refresh

Что на самом деле проверяет Тест Тьюринга

Reading time8 min
Views23K
Некоторое время назад я предложил сыграть в Тест Тьюринга с моим ботом Мишей. Кто попробовал, тот знает, что игрок-робот определяется элементарно. Кто не пробовал, может прочитать об этом в первом же комментарии под той статьей.

Теперь настал момент устроить разбор полетов, рассказать об устройстве бота и сделать выводы.



Правила игры


Правила игры были перечислены в предыдущей статье, повторю здесь, чтобы вам и мне не бегать по ссылкам.

  1. Каждый подключившийся к боту участник может взять на себя роль игрока, отвечающего на вопросы, или судьи, эти вопросы задающего.
  2. Если участник решил быть судьей, то бот случайным образом подбирает ему игрока – либо среди людей-игроков, либо подключает робота. То есть в игре отвечающий всегда один, и судья задает вопросы только ему.
  3. Если участник решил быть игроком, то бот аналогично ищет ему в пару участника-судью.
  4. Игра поделена на туры по 5 вопросов. По окончанию каждого тура судья принимает решение, с кем он общается, с человеком или с машиной — на этом игра заканчивается. Если он не может определиться, то может начать следующий тур или сдаться, прекратив игру.
  5. Робот играет роль маленького мальчика Миши пяти лет. Чтобы судье не облегчать задачу, человеку-игроку рекомендуется тоже отвечать от имени Миши.


С момента запуска до момента написания статьи было сыграно 256 игр (немного странно, но факт).

Из них закончились с явным результатом, то есть обе стороны сыграли до конца очередного тура (больше одного тура никто не играл) и судья принял решение — 115 игр

  • решение «робот» — 74
  • решение «человек»- 41

Ошибочных решений было 26, из них:

  • решение «робот» (на самом деле человек) — 15
  • решение «человек» (на самом деле робот) — 11

Как видите, чаще человека принимали за робота, чем робота за человека.

В итоге робот правильно определялся в (74-15)/115 = 51% игр, а робота приняли за человека в 11/115 = 9.5% игр, то есть можно уверенно сказать, что Миша-бот тест не прошел.


Для сравнения, на конкурсе в 2012 году в 29% из 150 бесед судьи приняли бота-одессита Женю Густмана за человека, а в 2014-ом — 33% судей по результатам 300 бесед.

Что под капотом


Бот написан на Python и по большому счету состоит из трех модулей:

  • собственно бот с движком игры
  • диспетчер роботов
  • робот

Основной алгоритм игры содержится в классе Game, который хранит id участников и реализует простую машину состояний:

  • Начало игры
  • Ждём вопроса от судьи
  • Ждём ответа от игрока
  • Ждём решения от судьи
  • Игра закончена


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

Когда бот получает ответ от робота, он передает ее не сразу, а с задержкой времени — это не сразу появилось, я ее добавил по замечанию galqiwi, спасибо.

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

Далее, есть две очереди ожидания — судей, ожидающих игроков, и игроков, ожидающих судей. Когда участник начинает новую игру, просматривается соответствующая очередь, есть ли ему партнёр. Если нет, то сам участник ставится в очередь.

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

И, наконец, модуль робота. Но прежде, чем рассказать о внутренностях робота, расскажу о базе вопросов и ответов, с которой он работает.

Сначала я набил такой текстовый файл:

T: Миша
T: Меня зовут Миша
Q: Как тебя зовут?
Q: Как тебя звать?
Q: Как вас зовут?
Q: Как твое имя?
Q: Ты кто?

T: Конечно
Q: Ты настоящий мальчик?

T: Я мальчик
T: Конечно
Q: Ты человек?
Q: Ты настоящий человек?
Q: Ты живой человек?

T: Я мальчик
T: Нет, конечно
Q: Ты компьютер?
Q: Ты машина?

… ну и так далее. Затем отдельной утилиткой считал их в базу данных — таблица вопросов, таблица ответов, связь между ними многие-ко-многим. Плюс табличка использованных слов с линками на вопросы. Причем слова сохранялись не в оригинальной форме, а в нормальной и с синонимами. Нормальная форма слова определялась по pymorphy2 от kmike, а синонимы к ней искались из словаря YARN, предварительно сконвертированного из XML в SQLite — словарь занял всего 22 мегабайта, а сколько удовольствия…

Метод поиска синонимов к нормальной форме слова:

    def normalSynonyms(self,orig):
        r = self.morph.parse(orig)
        res = []
        for parse in r:
            word = parse.normal_form
            syns = self.yarn.synonyms(word)
            for g in syns:
                words = self.yarn.words(syns[g])
                res = res + words
        return res

Теперь собственно робот. Вообще от робота требуется реализация лишь одного метода

getAnswer(self, text)

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

Поиск нужного ответа мой робот делает в два этапа:

  1. Проверяет, известен ли ему вопрос. Если известен, то выбирает один из подходящих ответов.
  2. Иначе разбивает вопрос на токены-слова, также находит им синонимы в нормальной форме, отбирает среди известных вопросов те, в которых есть найденные слова, и уже из найденных вопросов выбирает наиболее вероятные по количеству совпадений. И выдает подходящий ответ.


Как видите, робот не умеет «думать» над ответом, всё, что он может ответить — это одна из заготовок, подходящая или неподходящая для очередного вопроса. Вы скажете, что это фигня, а я скажу — читайте классиков.

"Словарь Вильяма Шекспира, по подсчёту исследователей, составляет 12000 слов. Словарь негра из людоедского племени «Мумбо-Юмбо» составляет 300 слов. Эллочка Щукина легко и свободно обходилась тридцатью."

Правда, классики не упомянули, обладала ли Эллочка Щукина интеллектом, пусть даже искусственным. Наверное, и сами не были уверены.

Выбор персонажа


Как видите, простота алгоритма робота не позволяет ему поддерживать сложные диалоги, поэтому встал вопрос, какого человека, точнее персонажа, сможет имитировать робот.

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

Было соблазнительно выбрать Людоедку Эллочку — а что, минимум словарного и фразеологического запаса, любой заготовленный ответ годится практически на любой вопрос. Но это было не интересно, хотелось усложнить задачу.

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

Однако, выбрав для робота роль ребенка, я понимал, что следствием этого выбора будет необходимость, чтобы все игроки-люди так же играли роль маленького мальчика. Практика показала, что мало кто это всерьез воспринял, отвечали как хотели, только что телефонами не обменивались.

Железо


Осталось показать тот суперкомпьютер, на котором живет Миша-бот:


Это Raspberry Pi 3. На хвосте к нему висит SSD, прицеплен на всякий случай, если понадобится активная работа с базами данных, но в самом роботе не используется.

Собственно, это всё о роботе Мише.

Размышления о Тесте Тьюринга


За почти семьдесят лет с момента написания статьи Тесту Тьюринга нашли определение, что это бихевиористский подход, сравнительный анализ на основе поведения — поведение человека сравнивается с поведением машины. Оно, конечно, так, однако я хочу обратить внимание на другие аспекты, на которые Алан Тьюринг, похоже, не обратил внимания.

Итак, то, что мы называем Тестом Тьюринга, было описано Тьюрингом в статье "Может ли машина мыслить?" (первая публикация называлась «Computing Machinery and Intelligence»)  и названо автором «игрой в имитацию». Если исходить лишь из её названия, можно было полагать, что игроки действительно должны имитировать поведение друг друга — человек притворяется машиной, а машина человеком. Но по замыслу Тьюринга в игре лишь машина должна подражать человеку.

Цитата:
"Можно  было бы  заметить, что  при «игре в имитацию»  не исключена возможность того,  что простое подражание поведению  человека не окажется для машины наилучшей стратегией.  Такой случай возможен, но я не думаю, чтобы он привел  нас к чему-нибудь существенно новому. Во всяком случае никто  не пытался исследовать теорию нашей игры в этом направлении, и  мы будем считать, что наилучшая стратегия для машины состоит в том, чтобы давать  ответы, которые в соответствующей обстановке дал бы человек."

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


Цитата:
"Если  бы человек попытался  притвориться машиной, то,  очевидно, вид у него был бы  весьма жалкий. Он сразу выдал бы  себя медлительностью и неточностью при  подсчетах."

Замечу, что Тьюринг не говорит, что человек не должен имитировать машину. Хотя человек может, если хочет, имитировать машину, другого человека или инопланетянина, вообще заниматься чем угодно, даже игнорировать вопросы или задавать встречные, но цель игры — получить ответ на вопрос «может ли [данная] машина мыслить?», поэтому человек здесь лишь помогает задающему вопросы в достижении цели, а не препятствует ему.

Из ответов бота:
"2018-10-23 13:01:53,385 186 Player2Judge Стал бы человек вести себя как машина, чтобы обмануть другого человека?"

Подытожу — два игрока, машина и человек:

  • машина имитирует человека как можно лучше — это ее основная цель в игре
  • человек ведет себя естественно

Лучшее качество машины


Разобравшись с правилами, следующим шагом предположим, что мы хотим построить мыслящую машину. Как она должна работать, точнее, как она должна проявлять свои мысленные способности?

Мы можем воспользоваться представлениями о мыслящей машине из кинофантастики. Подходит ли Джарвис из «Железного человека» под это определение? R2-D2 или C-3PO из «Звездных войн»? Дэвид из «A.I.»? Долорес Абернати из «Мира Дикого Запада»? Афина из «Земли будущего»? ВАЛЛ-И из одноименного мультфильма? Вроде про каждого из них интуитивно можно сказать, что это мыслящие машины, потому что они ведут себя осмысленно, и не похоже, что они действуют по какой-то относительно простой программе.

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

Очевидно, сразу отпадут роботы R2-D2 и ВАЛЛ-И, как не умеющие разговаривать на человеческом языке, и их я предлагаю далее не рассматривать.

Также очевидно, что в претендентах на победу окажутся машины, специально сконструированные для такой имитации — из нашего списка это Долорес и Афина. Причем если Долорес (я имею в виду её в статусе «девы в беде» в начале первого сезона) сама считает себя человеком, то Афина, напротив, вполне чётко понимает, что она робот, но может исполнить, при необходимости, имитацию на достаточно высоком уровне.

Что же касается Джарвиса, C-3PO и Дэвида, то они тоже осознают, что они машины, и не имеют ни склонности, ни способности скрывать это от людей. Задающему вопросы не придется подлавливать их на каких-то каверзных вопросах, они и сами во всем признаются.

И вот к чему мы пришли. Оказалось, что Тест Тьюринга пройдет машина, которая:

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

То есть Тест Тьюринга проверяет способность машины не к мышлению, а ко лжи —  к сознательной или к самообману. Печалька.

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

Цитата:
"… нас интересует не то, будут ли все цифровые вычислительные машины хорошо играть в имитацию, и не то, будут ли хорошо играть в эту игру те вычислительные машины, которыми мы располагаем в настоящее время; вопрос заключается в том, существуют ли воображаемые вычислительные машины, которые могли бы играть хорошо."
Tags:
Hubs:
+16
Comments221

Articles