Популярно об ИИ
Давайте, так сказать, низвергать классиков…
Сегодняшний материал мы начнем с похвал многообразному (многообрАзному либо многоОбразному) русскому языку. На самом деле именно он, вернее, люди, которые на нем разговаривают, может повлиять на некоторые сегменты развития искусственного интеллекта.
Начнем с того, что все основные наработки в области компьютерной семантики (фактического осмысления слов и понятий) делались англоязычными гражданами, то есть вспоминаем тот же тест Тьюринга, китайскую комнату и т.д. Да, достигли многого, но все это базируется на английском языке, а у нас даже ментально совершенно разные подходы. Возможно, как многие утверждают, английский является более простым по сравнению с русским, он имеет отрафинированную систему построения предложений, ударение практически во всех словах ставится на первый слог… И, кстати, последний момент был первой тревожной ласточкой с состоянием технологий. Ведь он один из первых принципиально обозначил проблему семантики с алгоритмами TTS (Text-To-Speech — "текст в речь") для русского языка. Машине трудно разобраться, в каких случаях нужно читать "стОит", а в каких — "стоИт" — написание одинаково. И никто ничего с этим сделать так и не смог. Дальше — больше. Конечно, ваш покорный слуга, как и многие, заинтересовался проблематикой и стал искать наработки все тех же зарубежных ученых в области семантики. По существу, у них этот раздел отсутствует, вернее, приспособлен (или поверхностно базируется) на английском языке, и многие взаправду думают, что машина может понимать. Но есть очень много тонкостей и граней, которые англоговорящему неподвластны.
В прошлом материале была описана небольшая программка, которая могла "ассоциативно-образно мыслить", то есть в ее рамках были загружены математические модели букв, а на карточках в видеокамеру показывались различные фигуры. Она определяла, на что (какую букву) каждая фигура похожа больше всего, после чего могла ее запоминать в своей базе как новую информацию. От человека только требуется написать название этой фигуры, и компьютер его запоминает. В принципе, человек мыслит подобно. Сегодня мы рассмотрим один интересный пример…
Мы сели под ели и ели
Допустим, наша супернавороченная машина с семантическим мышлением современного уровня встретит такое предложение. Интересно, как она его станет расшифровывать? Даже если в ее базе будет храниться множество словарей. На самом деле в современной ситуации она ничего не поймет. Будем экспериментировать. Для примера возьмем программу, описанную в прошлом выпуске серии, и, допустим, в ее базе есть слово "Ель" (больше всего она похожа на букву "А"). Для начала разобьем само предложение…
Мы (непонятно) сели (непонятно) под (непонятно) ели (ель) и (непонятно) ели (ель).
Для расшифровки понадобится более структурный, вернее, объектноориентированный, подход, чем мы и займемся. За проблемную часть возьмем слово "ели", потому как это и глагол, и существительное, с одинаковым написанием и ударением, но различным смыслом. Кстати, в этом предложении он не единственный такой. Есть еще и "сели" (можно подумать, что это "сель", т.е. грязевой поток, во множественном числе). Такая же ситуация, написание и ударение одни и те же, а смыслы совершенно разные. Впрочем, еще раз повторимся, что мы описываем саму суть ситуации, поэтому сосредоточимся только на одном из совпадений — слове "ели". За базовый класс возьмем Объект, потому как все окружающее нас в природе является объектами. Пишем код (на всякий случай предупредим, что эксперимент чисто мысленный):
class Объект
{
public:
x, y, z;
высота, ширина, длина;
Под();
Над();
Спереди();
Позади();
…
};
//создаем классы-потомки
…
class Человек : public Объект
{
Стали();
Сели();
Легли();
//Ели — свойство (или функция) класса Человек
Ели();
…
};
…
class Деревья : public Объект
{
Ствол();
Ветки();
Листва();
…
};
…
//Ели — экземпляр класса Деревья
Деревья Ели;
//Мы — экземпляр класса Человек
Человек Мы;
Как видите, в рамках кода наше предложение начинает приобретать нормальную математическую форму, причем союз "и" можно рассматривать либо как математический знак "+", либо как логическую операцию "И". В данном случае используем математический вариант, и то он несовершенен, поскольку нужно перебирать множество вариантов для того, чтобы выражение было логически верным. Среди них наиболее очевидными будут:
Предложение = Мы.Сели(Ели.Под()) + Ели;
В этом случае лучше даже использовать логическое "И", потому как два существительных можно рассматривать как подлежащие, а поскольку между ними нет запятой, предложение можно условно считать не совсем верным. Берем другой вариант…
Предложение = Мы.Сели(Ели.Под()) + Мы.Ели();
То есть сама проблема состоит именно в качественной логической привязке. Человек же без труда поймет данное предложение и даже не будет задумываться о совпадениях в словах, их написаниях и ударениях. Проще всего связывать подлежащие и сказуемые, но даже на этом уровне посмотрите, сколько нужно кода для расшифровки обычного высказывания.
Опровержение "китайской комнаты"
Надеемся, что вы поняли, почему именно русский язык может либо поставить на "машинной семантике" жирный крест, либо существенно продвинуть ИИ. Кстати, этот пример ваш покорный слуга очень часто приводит как полное опровержение классического примера с китайской комнатой и выводов, которые сделали из него ученые впоследствии. Давайте освежим этот мысленный эксперимент Джона Сирла в памяти (а те, кто о нем не слышал, узнают, о чем идет речь).
Представьте себе человека, закрытого в комнате. Он понимает только английский язык. На столе лежат стопки бумаг, часть из которых пуста, а другая заполнена документами с непонятными записями на китайском. Также имеется справочная книга-руководство на английском, которая может помочь в расшифровке. И вот через специальное отверстие в комнату поступают сообщения на китайском с определенными руководствами к действию — например, сделать новую запись, найти определенный документ либо символ или переместить стопку из одного места в другое. Соответственно, сам человек — это процессор, стопки бумаги — память, книга — программа. Это внутри. А внешне все выглядит как посылка запросов/команд и получение ответов/результатов на китайском. И если вы спросите саму систему, знает ли она китайский, то получите утвердительный ответ. Утверждалось даже, что такая система может пройти тест Тьюринга (общими словами, это тест, подразумевающий общение человека и компьютера на обычном языке). Но если зададите такой же вопрос англичанину или книге — отрицательный. Но представьте себе ситуацию, когда вместо китайского — русский, а предложение- запрос будет из области "Мы сели под ели и ели". Тест Тьюринга пройден точно не будет. Сирл тогда вывел несколько законов-аксиом о том, что программы имеют синтаксическую сущность, но разум в полноценном его представлении подразумевает семантику или мыслительное содержание, а прав ли он в этом? Давайте подумаем о самом мыслительном содержании.
О мыслительном содержании…
Допустим, не так давно ваш покорный слуга описывал портативную робототехническую платформу от Samsung Techwin, которая устанавливается на пограничных башнях и отслеживает движущиеся цели в радиусе 4 км днем и 2 км ночью. При желании на нее можно установить пулемет:)), но дело не в этом. У данного робота есть свое предназначение, и он "мыслит" только в том диапазоне, который ему необходим. У него есть понятие "target", т.е. "цель", и больше ему ничего не нужно.
Многие жители Африки, к примеру, слабо себе представляют, что такое снег. Они его не видели, да он им и не нужен. Не все знают Римского- Корсакова или элементарную теорию частиц. Каждый живет в своем диапазоне. Вы спросите у мебельного мастера, каким лучше языком и компилятором пользоваться для программирования под Linux? Наверняка перед вами отобразится вариант с китайской комнатой, только внутри нее положили немецко- китайский словарь. Поэтому тут с аксиомами Сирла можно как раз и не согласиться. Любое разумное поведение имеет синтаксическую сущность, и не важно, как и в каком виде это хранится, например, в человеческом мозге. Мы оперируем данными с рецепторов и собственной памятью, плюс к этому у нас развита речь, благодаря чему мы можем описывать предметы словами, обмениваться информацией. То есть само понятие "семантика" в научных исследованиях тех лет представлено неверно. Скажете, ваш покорный слуга с ума сошел? Абсолютно нет. Допустим, вам дают какое-либо указание. Вы воспринимаете это слово, после чего мозг его ассоциирует с каким-либо действием на уровне своих внутренних взаимодействий, после чего дает команды на исполнение. Вы пишете в программе команду (произносите ее в микрофон), после этого она переводится в машинный код и исполняется. Так в чем разница? Компьютер не понимает? Все он прекрасно понимает.
Подытожим
Поэтому, закругляя этот выпуск, остановимся на том, что:
1. Структурный подход к ИИ и нейрокомпьютерные технологии в самой своей сути выглядят неоднозначно — о них мы поговорим в следующий раз. 2. Сегодня на русском языке ни один компьютер в мире не пройдет теста Тьюринга, а ведь новости о его прохождении зарубежными программами появляются с постоянной периодичностью. Получается, что полноценно теста Тьюринга еще никто и не прошел? Прошел, потому что… см. следующий пункт.
3. Разделение Джона Сирла на синтаксическую сущность и семантику неправомерно. Все имеет синтаксическую сущность, вопрос только с правильным переводом с одной системы на другую и в сопоставлении диапазонов мышления этих систем.
P.S.: Очень много читателей просят рассказать подробнее об ИИ в играх. На самом деле этой теме будет посвящено несколько материалов в параллельной серии "Разработка компьютерных игр".
Кристофер, christopher@tut.by
Сегодняшний материал мы начнем с похвал многообразному (многообрАзному либо многоОбразному) русскому языку. На самом деле именно он, вернее, люди, которые на нем разговаривают, может повлиять на некоторые сегменты развития искусственного интеллекта.
Начнем с того, что все основные наработки в области компьютерной семантики (фактического осмысления слов и понятий) делались англоязычными гражданами, то есть вспоминаем тот же тест Тьюринга, китайскую комнату и т.д. Да, достигли многого, но все это базируется на английском языке, а у нас даже ментально совершенно разные подходы. Возможно, как многие утверждают, английский является более простым по сравнению с русским, он имеет отрафинированную систему построения предложений, ударение практически во всех словах ставится на первый слог… И, кстати, последний момент был первой тревожной ласточкой с состоянием технологий. Ведь он один из первых принципиально обозначил проблему семантики с алгоритмами TTS (Text-To-Speech — "текст в речь") для русского языка. Машине трудно разобраться, в каких случаях нужно читать "стОит", а в каких — "стоИт" — написание одинаково. И никто ничего с этим сделать так и не смог. Дальше — больше. Конечно, ваш покорный слуга, как и многие, заинтересовался проблематикой и стал искать наработки все тех же зарубежных ученых в области семантики. По существу, у них этот раздел отсутствует, вернее, приспособлен (или поверхностно базируется) на английском языке, и многие взаправду думают, что машина может понимать. Но есть очень много тонкостей и граней, которые англоговорящему неподвластны.
В прошлом материале была описана небольшая программка, которая могла "ассоциативно-образно мыслить", то есть в ее рамках были загружены математические модели букв, а на карточках в видеокамеру показывались различные фигуры. Она определяла, на что (какую букву) каждая фигура похожа больше всего, после чего могла ее запоминать в своей базе как новую информацию. От человека только требуется написать название этой фигуры, и компьютер его запоминает. В принципе, человек мыслит подобно. Сегодня мы рассмотрим один интересный пример…
Мы сели под ели и ели
Допустим, наша супернавороченная машина с семантическим мышлением современного уровня встретит такое предложение. Интересно, как она его станет расшифровывать? Даже если в ее базе будет храниться множество словарей. На самом деле в современной ситуации она ничего не поймет. Будем экспериментировать. Для примера возьмем программу, описанную в прошлом выпуске серии, и, допустим, в ее базе есть слово "Ель" (больше всего она похожа на букву "А"). Для начала разобьем само предложение…
Мы (непонятно) сели (непонятно) под (непонятно) ели (ель) и (непонятно) ели (ель).
Для расшифровки понадобится более структурный, вернее, объектноориентированный, подход, чем мы и займемся. За проблемную часть возьмем слово "ели", потому как это и глагол, и существительное, с одинаковым написанием и ударением, но различным смыслом. Кстати, в этом предложении он не единственный такой. Есть еще и "сели" (можно подумать, что это "сель", т.е. грязевой поток, во множественном числе). Такая же ситуация, написание и ударение одни и те же, а смыслы совершенно разные. Впрочем, еще раз повторимся, что мы описываем саму суть ситуации, поэтому сосредоточимся только на одном из совпадений — слове "ели". За базовый класс возьмем Объект, потому как все окружающее нас в природе является объектами. Пишем код (на всякий случай предупредим, что эксперимент чисто мысленный):
class Объект
{
public:
x, y, z;
высота, ширина, длина;
Под();
Над();
Спереди();
Позади();
…
};
//создаем классы-потомки
…
class Человек : public Объект
{
Стали();
Сели();
Легли();
//Ели — свойство (или функция) класса Человек
Ели();
…
};
…
class Деревья : public Объект
{
Ствол();
Ветки();
Листва();
…
};
…
//Ели — экземпляр класса Деревья
Деревья Ели;
//Мы — экземпляр класса Человек
Человек Мы;
Как видите, в рамках кода наше предложение начинает приобретать нормальную математическую форму, причем союз "и" можно рассматривать либо как математический знак "+", либо как логическую операцию "И". В данном случае используем математический вариант, и то он несовершенен, поскольку нужно перебирать множество вариантов для того, чтобы выражение было логически верным. Среди них наиболее очевидными будут:
Предложение = Мы.Сели(Ели.Под()) + Ели;
В этом случае лучше даже использовать логическое "И", потому как два существительных можно рассматривать как подлежащие, а поскольку между ними нет запятой, предложение можно условно считать не совсем верным. Берем другой вариант…
Предложение = Мы.Сели(Ели.Под()) + Мы.Ели();
То есть сама проблема состоит именно в качественной логической привязке. Человек же без труда поймет данное предложение и даже не будет задумываться о совпадениях в словах, их написаниях и ударениях. Проще всего связывать подлежащие и сказуемые, но даже на этом уровне посмотрите, сколько нужно кода для расшифровки обычного высказывания.
Опровержение "китайской комнаты"
Надеемся, что вы поняли, почему именно русский язык может либо поставить на "машинной семантике" жирный крест, либо существенно продвинуть ИИ. Кстати, этот пример ваш покорный слуга очень часто приводит как полное опровержение классического примера с китайской комнатой и выводов, которые сделали из него ученые впоследствии. Давайте освежим этот мысленный эксперимент Джона Сирла в памяти (а те, кто о нем не слышал, узнают, о чем идет речь).
Представьте себе человека, закрытого в комнате. Он понимает только английский язык. На столе лежат стопки бумаг, часть из которых пуста, а другая заполнена документами с непонятными записями на китайском. Также имеется справочная книга-руководство на английском, которая может помочь в расшифровке. И вот через специальное отверстие в комнату поступают сообщения на китайском с определенными руководствами к действию — например, сделать новую запись, найти определенный документ либо символ или переместить стопку из одного места в другое. Соответственно, сам человек — это процессор, стопки бумаги — память, книга — программа. Это внутри. А внешне все выглядит как посылка запросов/команд и получение ответов/результатов на китайском. И если вы спросите саму систему, знает ли она китайский, то получите утвердительный ответ. Утверждалось даже, что такая система может пройти тест Тьюринга (общими словами, это тест, подразумевающий общение человека и компьютера на обычном языке). Но если зададите такой же вопрос англичанину или книге — отрицательный. Но представьте себе ситуацию, когда вместо китайского — русский, а предложение- запрос будет из области "Мы сели под ели и ели". Тест Тьюринга пройден точно не будет. Сирл тогда вывел несколько законов-аксиом о том, что программы имеют синтаксическую сущность, но разум в полноценном его представлении подразумевает семантику или мыслительное содержание, а прав ли он в этом? Давайте подумаем о самом мыслительном содержании.
О мыслительном содержании…
Допустим, не так давно ваш покорный слуга описывал портативную робототехническую платформу от Samsung Techwin, которая устанавливается на пограничных башнях и отслеживает движущиеся цели в радиусе 4 км днем и 2 км ночью. При желании на нее можно установить пулемет:)), но дело не в этом. У данного робота есть свое предназначение, и он "мыслит" только в том диапазоне, который ему необходим. У него есть понятие "target", т.е. "цель", и больше ему ничего не нужно.
Многие жители Африки, к примеру, слабо себе представляют, что такое снег. Они его не видели, да он им и не нужен. Не все знают Римского- Корсакова или элементарную теорию частиц. Каждый живет в своем диапазоне. Вы спросите у мебельного мастера, каким лучше языком и компилятором пользоваться для программирования под Linux? Наверняка перед вами отобразится вариант с китайской комнатой, только внутри нее положили немецко- китайский словарь. Поэтому тут с аксиомами Сирла можно как раз и не согласиться. Любое разумное поведение имеет синтаксическую сущность, и не важно, как и в каком виде это хранится, например, в человеческом мозге. Мы оперируем данными с рецепторов и собственной памятью, плюс к этому у нас развита речь, благодаря чему мы можем описывать предметы словами, обмениваться информацией. То есть само понятие "семантика" в научных исследованиях тех лет представлено неверно. Скажете, ваш покорный слуга с ума сошел? Абсолютно нет. Допустим, вам дают какое-либо указание. Вы воспринимаете это слово, после чего мозг его ассоциирует с каким-либо действием на уровне своих внутренних взаимодействий, после чего дает команды на исполнение. Вы пишете в программе команду (произносите ее в микрофон), после этого она переводится в машинный код и исполняется. Так в чем разница? Компьютер не понимает? Все он прекрасно понимает.
Подытожим
Поэтому, закругляя этот выпуск, остановимся на том, что:
1. Структурный подход к ИИ и нейрокомпьютерные технологии в самой своей сути выглядят неоднозначно — о них мы поговорим в следующий раз. 2. Сегодня на русском языке ни один компьютер в мире не пройдет теста Тьюринга, а ведь новости о его прохождении зарубежными программами появляются с постоянной периодичностью. Получается, что полноценно теста Тьюринга еще никто и не прошел? Прошел, потому что… см. следующий пункт.
3. Разделение Джона Сирла на синтаксическую сущность и семантику неправомерно. Все имеет синтаксическую сущность, вопрос только с правильным переводом с одной системы на другую и в сопоставлении диапазонов мышления этих систем.
P.S.: Очень много читателей просят рассказать подробнее об ИИ в играх. На самом деле этой теме будет посвящено несколько материалов в параллельной серии "Разработка компьютерных игр".
Кристофер, christopher@tut.by
Компьютерная газета. Статья была опубликована в номере 46 за 2008 год в рубрике технологии